[MediaWiki-commits] [Gerrit] Add ability to read config parameters from a URL - change (apps...wikipedia)
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)
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