[MediaWiki-commits] [Gerrit] Add ability to read config parameters from a URL - change (apps...wikipedia)

2014-04-11 Thread Brion VIBBER (Code Review)
Brion VIBBER has submitted this change and it was merged.

Change subject: Add ability to read config parameters from a URL
..


Add ability to read config parameters from a URL

- Is refreshed once a day
- Exposed as a JSON Object
- Stored in SharedPreferences

Change-Id: I4fd355fe35b1ad6a0a2146e3811657043a0d0651
---
M wikipedia/res/values/preference_keys.xml
A wikipedia/src/main/java/org/wikipedia/RemoteConfig.java
A wikipedia/src/main/java/org/wikipedia/RemoteConfigRefreshTask.java
M wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
M wikipedia/src/main/java/org/wikipedia/recurring/RecurringTasksExecutor.java
5 files changed, 107 insertions(+), 2 deletions(-)

Approvals:
  Brion VIBBER: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/wikipedia/res/values/preference_keys.xml 
b/wikipedia/res/values/preference_keys.xml
index 4340cdd..2cf734d 100644
--- a/wikipedia/res/values/preference_keys.xml
+++ b/wikipedia/res/values/preference_keys.xml
@@ -7,4 +7,5 @@
 string 
name=preference_edittoken_for_wikiedittoken_for_wiki_%1$s/string
 string 
name=preference_key_zero_interstitialzero_warn_when_leaving/string
 string name=preference_key_zero_devmodezero_dev_option_on/string
+string name=preference_key_remote_configremote_config/string
 /resources
\ No newline at end of file
diff --git a/wikipedia/src/main/java/org/wikipedia/RemoteConfig.java 
b/wikipedia/src/main/java/org/wikipedia/RemoteConfig.java
new file mode 100644
index 000..595deb0
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/RemoteConfig.java
@@ -0,0 +1,40 @@
+package org.wikipedia;
+
+import android.content.*;
+import org.json.*;
+
+/**
+ * Store for config values that are retreived from a server,
+ * and refreshed periodically.
+ */
+public class RemoteConfig {
+
+private final SharedPreferences prefs;
+
+private JSONObject curConfig;
+
+public RemoteConfig(SharedPreferences prefs) {
+this.prefs = prefs;
+}
+
+public void updateConfig(JSONObject newConfig) {
+prefs.edit()
+.putString(WikipediaApp.PREFERENCE_REMOTE_CONFIG, 
newConfig.toString())
+.commit();
+curConfig = newConfig;
+}
+
+public JSONObject getConfig() {
+if (curConfig == null) {
+try {
+// If there's no pref set, just give back the empty JSON Object
+curConfig = new 
JSONObject(prefs.getString(WikipediaApp.PREFERENCE_REMOTE_CONFIG, {}));
+} catch (JSONException e) {
+// This shouldn't be happening, and if it does I'd like a 
crash report
+throw new RuntimeException(e);
+}
+}
+
+return curConfig;
+}
+}
diff --git a/wikipedia/src/main/java/org/wikipedia/RemoteConfigRefreshTask.java 
b/wikipedia/src/main/java/org/wikipedia/RemoteConfigRefreshTask.java
new file mode 100644
index 000..cbce3ba
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/RemoteConfigRefreshTask.java
@@ -0,0 +1,52 @@
+package org.wikipedia;
+
+import android.content.*;
+import android.util.*;
+import com.github.kevinsawicki.http.*;
+import org.json.*;
+import org.wikipedia.concurrency.*;
+import org.wikipedia.recurring.*;
+
+import java.util.*;
+
+public class RemoteConfigRefreshTask extends RecurringTask {
+// Switch over to production when it is available
+private static final java.lang.String REMOTE_CONFIG_URL = 
http://bits.beta.wmflabs.org/static-master/extensions/MobileApp/config/android.json;;
+
+// The 'l' suffix is needed because stupid Java overflows constants 
otherwise
+private static final long RUN_INTERVAL_MILLI = 24L * 60L * 60L * 1000L; // 
Once a day!
+
+public RemoteConfigRefreshTask(Context context) {
+super(context);
+}
+
+@Override
+protected boolean shouldRun(Date lastRun) {
+return System.currentTimeMillis() - lastRun.getTime() = 
RUN_INTERVAL_MILLI;
+}
+
+@Override
+protected void run(Date lastRun) {
+new SaneAsyncTaskBoolean(1) {
+@Override
+public Boolean performTask() throws Throwable {
+WikipediaApp app = (WikipediaApp) 
context.getApplicationContext();
+JSONObject config = new 
JSONObject(HttpRequest.get(REMOTE_CONFIG_URL).body());
+app.getRemoteConfig().updateConfig(config);
+Log.d(Wikipedia, config.toString());
+return true;
+}
+
+@Override
+public void onCatch(Throwable caught) {
+// Don't do anything, but do write out a log statement. We 
don't particularly care.
+Log.d(Wikipedia, caught.toString());
+}
+}.execute();
+}
+
+@Override
+protected String getName() {
+return remote-config-refresher;
+}
+}
diff --git a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java 

[MediaWiki-commits] [Gerrit] Add ability to read config parameters from a URL - change (apps...wikipedia)

2014-04-10 Thread Yuvipanda (Code Review)
Yuvipanda has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/125327

Change subject: Add ability to read config parameters from a URL
..

Add ability to read config parameters from a URL

- Is refreshed once a day
- Exposed as a JSON Object
- Stored in SharedPreferences

Change-Id: I4fd355fe35b1ad6a0a2146e3811657043a0d0651
---
M wikipedia/res/values/preference_keys.xml
A wikipedia/src/main/java/org/wikipedia/RemoteConfig.java
A wikipedia/src/main/java/org/wikipedia/RemoteConfigRefreshTask.java
M wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
M wikipedia/src/main/java/org/wikipedia/recurring/RecurringTasksExecutor.java
5 files changed, 106 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/27/125327/1

diff --git a/wikipedia/res/values/preference_keys.xml 
b/wikipedia/res/values/preference_keys.xml
index 4340cdd..2cf734d 100644
--- a/wikipedia/res/values/preference_keys.xml
+++ b/wikipedia/res/values/preference_keys.xml
@@ -7,4 +7,5 @@
 string 
name=preference_edittoken_for_wikiedittoken_for_wiki_%1$s/string
 string 
name=preference_key_zero_interstitialzero_warn_when_leaving/string
 string name=preference_key_zero_devmodezero_dev_option_on/string
+string name=preference_key_remote_configremote_config/string
 /resources
\ No newline at end of file
diff --git a/wikipedia/src/main/java/org/wikipedia/RemoteConfig.java 
b/wikipedia/src/main/java/org/wikipedia/RemoteConfig.java
new file mode 100644
index 000..595deb0
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/RemoteConfig.java
@@ -0,0 +1,40 @@
+package org.wikipedia;
+
+import android.content.*;
+import org.json.*;
+
+/**
+ * Store for config values that are retreived from a server,
+ * and refreshed periodically.
+ */
+public class RemoteConfig {
+
+private final SharedPreferences prefs;
+
+private JSONObject curConfig;
+
+public RemoteConfig(SharedPreferences prefs) {
+this.prefs = prefs;
+}
+
+public void updateConfig(JSONObject newConfig) {
+prefs.edit()
+.putString(WikipediaApp.PREFERENCE_REMOTE_CONFIG, 
newConfig.toString())
+.commit();
+curConfig = newConfig;
+}
+
+public JSONObject getConfig() {
+if (curConfig == null) {
+try {
+// If there's no pref set, just give back the empty JSON Object
+curConfig = new 
JSONObject(prefs.getString(WikipediaApp.PREFERENCE_REMOTE_CONFIG, {}));
+} catch (JSONException e) {
+// This shouldn't be happening, and if it does I'd like a 
crash report
+throw new RuntimeException(e);
+}
+}
+
+return curConfig;
+}
+}
diff --git a/wikipedia/src/main/java/org/wikipedia/RemoteConfigRefreshTask.java 
b/wikipedia/src/main/java/org/wikipedia/RemoteConfigRefreshTask.java
new file mode 100644
index 000..cbce3ba
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/RemoteConfigRefreshTask.java
@@ -0,0 +1,52 @@
+package org.wikipedia;
+
+import android.content.*;
+import android.util.*;
+import com.github.kevinsawicki.http.*;
+import org.json.*;
+import org.wikipedia.concurrency.*;
+import org.wikipedia.recurring.*;
+
+import java.util.*;
+
+public class RemoteConfigRefreshTask extends RecurringTask {
+// Switch over to production when it is available
+private static final java.lang.String REMOTE_CONFIG_URL = 
http://bits.beta.wmflabs.org/static-master/extensions/MobileApp/config/android.json;;
+
+// The 'l' suffix is needed because stupid Java overflows constants 
otherwise
+private static final long RUN_INTERVAL_MILLI = 24L * 60L * 60L * 1000L; // 
Once a day!
+
+public RemoteConfigRefreshTask(Context context) {
+super(context);
+}
+
+@Override
+protected boolean shouldRun(Date lastRun) {
+return System.currentTimeMillis() - lastRun.getTime() = 
RUN_INTERVAL_MILLI;
+}
+
+@Override
+protected void run(Date lastRun) {
+new SaneAsyncTaskBoolean(1) {
+@Override
+public Boolean performTask() throws Throwable {
+WikipediaApp app = (WikipediaApp) 
context.getApplicationContext();
+JSONObject config = new 
JSONObject(HttpRequest.get(REMOTE_CONFIG_URL).body());
+app.getRemoteConfig().updateConfig(config);
+Log.d(Wikipedia, config.toString());
+return true;
+}
+
+@Override
+public void onCatch(Throwable caught) {
+// Don't do anything, but do write out a log statement. We 
don't particularly care.
+Log.d(Wikipedia, caught.toString());
+}
+}.execute();
+}
+
+@Override
+protected String getName() {
+return remote-config-refresher;
+}
+}
diff --git