BearND has uploaded a new change for review.

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

Change subject: Switch RB and MW backend servers without restart
......................................................................

Switch RB and MW backend servers without restart

Listen for SharedPreference changes and update the respective EndpointCache to
facilitate a faster switch of backend servers by not requiring the app to 
restart.

Change-Id: Ie806452d03af1dfed0a84d7dc25eba63f9de71b9
---
M app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java
M app/src/main/java/org/wikipedia/server/restbase/RbPageEndpointsCache.java
M app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java
M app/src/main/res/xml/developer_preferences.xml
4 files changed, 46 insertions(+), 4 deletions(-)


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

diff --git 
a/app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java 
b/app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java
index fbb8024..1d8631b 100644
--- a/app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java
+++ b/app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java
@@ -26,6 +26,12 @@
         return cachedWebService;
     }
 
+    public void update() {
+        if (site != null) {
+            cachedWebService = createMwService(site);
+        }
+    }
+
     private MwPageService.MwPageEndpoints createMwService(Site site) {
         return 
RetrofitFactory.newInstance(site).create(MwPageService.MwPageEndpoints.class);
     }
diff --git 
a/app/src/main/java/org/wikipedia/server/restbase/RbPageEndpointsCache.java 
b/app/src/main/java/org/wikipedia/server/restbase/RbPageEndpointsCache.java
index a0596f3..d14601b 100644
--- a/app/src/main/java/org/wikipedia/server/restbase/RbPageEndpointsCache.java
+++ b/app/src/main/java/org/wikipedia/server/restbase/RbPageEndpointsCache.java
@@ -34,6 +34,12 @@
         return cachedWebService;
     }
 
+    public void update() {
+        if (site != null) {
+            cachedWebService = createRbService(site);
+        }
+    }
+
     private RbPageService.RbEndpoints createRbService(Site site) {
         retrofit = RetrofitFactory.newInstance(site,
                 String.format(Locale.ROOT, Prefs.getRestbaseUriFormat(), 
site.scheme(), site.authority()));
diff --git 
a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java 
b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java
index 5df3cd5..c17de26 100644
--- a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java
+++ b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java
@@ -1,13 +1,45 @@
 package org.wikipedia.settings;
 
+import org.wikipedia.R;
+import org.wikipedia.server.mwapi.MwPageEndpointsCache;
+import org.wikipedia.server.restbase.RbPageEndpointsCache;
+
+import android.content.SharedPreferences;
+
 public class DeveloperSettingsFragment extends PreferenceLoaderFragment {
     public static DeveloperSettingsFragment newInstance() {
         return new DeveloperSettingsFragment();
     }
 
+    private final SharedPreferences.OnSharedPreferenceChangeListener 
onChangeListener
+            = new SharedPreferences.OnSharedPreferenceChangeListener() {
+        @Override
+        public void onSharedPreferenceChanged(SharedPreferences 
sharedPreferences, String key) {
+            if 
(getString(R.string.preference_key_restbase_uri_format).equals(key)) {
+                RbPageEndpointsCache.INSTANCE.update();
+            } else if 
(getString(R.string.preference_key_mediawiki_base_uri).equals(key)) {
+                MwPageEndpointsCache.INSTANCE.update();
+            }
+        }
+    };
+
     @Override
     public void loadPreferences() {
         PreferenceLoader preferenceLoader = new 
DeveloperSettingsPreferenceLoader(this);
         preferenceLoader.loadPreferences();
     }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        getPreferenceScreen().getSharedPreferences()
+                .registerOnSharedPreferenceChangeListener(onChangeListener);
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        getPreferenceScreen().getSharedPreferences()
+                .unregisterOnSharedPreferenceChangeListener(onChangeListener);
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/res/xml/developer_preferences.xml 
b/app/src/main/res/xml/developer_preferences.xml
index adee305..7c20c1f 100644
--- a/app/src/main/res/xml/developer_preferences.xml
+++ b/app/src/main/res/xml/developer_preferences.xml
@@ -41,8 +41,7 @@
             \nLabs: http://appservice.wmflabs.org/%2$s/v1/
             \nDev: http://host:6927/%2$s/v1/
             \n%1$s ➛ protocol (https if omitted)
-            \n%2$s ➛ WP host
-            \nNote: change requires restart." />
+            \n%2$s ➛ WP host" />
 
         <!--suppress AndroidUnknownAttribute -->
         <org.wikipedia.settings.EditTextAutoSummarizePreference
@@ -52,8 +51,7 @@
             android:dialogMessage="Prod (default if blank): 
https://wikipedia.org
             \nDev: http://host:8080
             \nBeta cluster (switch app language to Simple English): 
http://wikipedia.beta.wmflabs.org
-            \nAuth manager (disable language code): 
http://authmanager.wmflabs.org
-            \nNote: change requires restart." />
+            \nAuth manager (disable language code): 
http://authmanager.wmflabs.org"; />
 
         <SwitchPreferenceCompat
             
android:key="@string/preference_key_mediawiki_base_uri_supports_lang_code"

-- 
To view, visit https://gerrit.wikimedia.org/r/294257
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie806452d03af1dfed0a84d7dc25eba63f9de71b9
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: BearND <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to