BearND has uploaded a new change for review.

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

Change subject: Add RESTBaseUriFormat list to dev settings
......................................................................

Add RESTBaseUriFormat list to dev settings

The dev settings option for RESTBaseUriFormat has become
very big and complex. This patch adds a ListPreference which lets
users select from the most common options.

The last, "custom", option is still a free form text to allow for flexibility.
It is already populated with the string one had to copy over before.
As before, you still need to replace  the string "host" with the actual
hostname or IP address of the developer machine you have MCS running on.

Change-Id: Ib5c931f9a108a46bedd12302b624b9f8000dd826
---
M 
app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
M app/src/main/java/org/wikipedia/settings/Prefs.java
M app/src/main/res/values/preference_keys.xml
M app/src/main/res/values/preference_values.xml
M app/src/main/res/xml/developer_preferences.xml
5 files changed, 96 insertions(+), 12 deletions(-)


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

diff --git 
a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
 
b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
index b82bd25..c3e90c1 100644
--- 
a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
+++ 
b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
@@ -1,17 +1,18 @@
 package org.wikipedia.settings;
 
-import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceCategory;
-import android.support.v7.preference.PreferenceFragmentCompat;
-import android.support.v7.preference.TwoStatePreference;
-
 import org.wikipedia.R;
 import org.wikipedia.WikipediaApp;
 import org.wikipedia.crash.RemoteLogException;
 import org.wikipedia.useroption.ui.UserOptionRowActivity;
 import org.wikipedia.util.log.L;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceCategory;
+import android.support.v7.preference.PreferenceFragmentCompat;
+import android.support.v7.preference.TwoStatePreference;
 
 import java.util.List;
 
@@ -46,6 +47,7 @@
     public void loadPreferences() {
         loadPreferences(R.xml.developer_preferences);
         setUpRestBaseCheckboxes();
+        setUpRestBaseUriFormat();
         setUpCookies((PreferenceCategory) 
findPreference(R.string.preferences_developer_cookies_key));
         setUpEditTokens((PreferenceCategory) 
findPreference(R.string.preferences_developer_edit_tokens_key));
         setUpCrashButton(findPreference(getCrashButtonKey()));
@@ -78,6 +80,63 @@
         return context.getString(R.string.preference_key_use_restbase);
     }
 
+    private void setUpRestBaseUriFormat() {
+        ListPreference preference = (ListPreference) 
findPreference(getRestBaseUriFormatListKey());
+        
preference.setOnPreferenceChangeListener(setRestBaseUriFormatChangeListener);
+        setRestBaseUriFormatEnabled(preference, preference.getValue());
+    }
+
+    private String getRestBaseUriFormatListKey() {
+        return 
context.getString(R.string.preference_key_restbase_uri_format_list);
+    }
+
+    public String getRestBaseUriFormatKey() {
+        return context.getString(R.string.preference_key_restbase_uri_format);
+    }
+
+    @NonNull private final Preference.OnPreferenceChangeListener 
setRestBaseUriFormatChangeListener
+            = new Preference.OnPreferenceChangeListener() {
+        /**
+         * Called when the RESTBase Uri Format preference has been changed by 
the user. This is
+         * called before the state of the Preference is about to be updated and
+         * before the state is persisted.
+         *
+         * @param preference The changed Preference.
+         * @param newValue   The new value of the Preference.
+         * @return True to update the state of the Preference with the new 
value.
+         */
+        @Override
+        public boolean onPreferenceChange(Preference preference, Object 
newValue) {
+            final String value = (String) newValue;
+            setRestBaseUriFormatEnabled((ListPreference) preference, value);
+            setRestBaseUriFormat(value);
+            return true;
+        }
+    };
+
+    private void setRestBaseUriFormat(String newValue) {
+        Prefs.setRestbaseUriFormat(newValue);
+        getRestBaseUriFormatPreference().callChangeListener(newValue);
+        getRestBaseUriFormatPreference().setDefaultValue(newValue);
+    }
+
+    private void setRestBaseUriFormatEnabled(ListPreference preference, String 
newValue) {
+        setRestBaseUriFormatEnabled(isLastOptionSelected(preference, 
newValue));
+    }
+
+    private boolean isLastOptionSelected(ListPreference preference, String 
newValue) {
+        int index = preference.findIndexOfValue(newValue);
+        return index == preference.getEntries().length - 1;
+    }
+
+    private void setRestBaseUriFormatEnabled(boolean visible) {
+        getRestBaseUriFormatPreference().setVisible(visible);
+    }
+
+    private Preference getRestBaseUriFormatPreference() {
+        return findPreference(getRestBaseUriFormatKey());
+    }
+
     private String getCrashButtonKey() {
         return context.getString(R.string.preferences_developer_crash_key);
     }
diff --git a/app/src/main/java/org/wikipedia/settings/Prefs.java 
b/app/src/main/java/org/wikipedia/settings/Prefs.java
index 054d86c..efe60d9 100644
--- a/app/src/main/java/org/wikipedia/settings/Prefs.java
+++ b/app/src/main/java/org/wikipedia/settings/Prefs.java
@@ -341,6 +341,11 @@
     }
 
     @NonNull
+    public static void setRestbaseUriFormat(String newValue) {
+        setString(R.string.preference_key_restbase_uri_format, newValue);
+    }
+
+    @NonNull
     public static Uri getMediaWikiBaseUri() {
         return 
Uri.parse(StringUtil.defaultIfBlank(getString(R.string.preference_key_mediawiki_base_uri,
 null),
                 Constants.WIKIPEDIA_URL));
diff --git a/app/src/main/res/values/preference_keys.xml 
b/app/src/main/res/values/preference_keys.xml
index dda1631..80f6b6c 100644
--- a/app/src/main/res/values/preference_keys.xml
+++ b/app/src/main/res/values/preference_keys.xml
@@ -23,6 +23,7 @@
     <string 
name="preference_key_use_restbase_manual">useRestbase_setManually</string>
     <string name="preference_key_restbase_ticket">restbaseTicket</string>
     <string name="preference_key_request_successes">requestSuccesses</string>
+    <string 
name="preference_key_restbase_uri_format_list">RESTBaseUriFormatList</string>
     <string 
name="preference_key_restbase_uri_format">RESTBaseUriFormat</string>
     <string name="preference_key_mediawiki_base_uri">mediaWikiBaseUri</string>
     <string 
name="preference_key_mediawiki_base_uri_supports_lang_code">mediaWikiBaseUriSupportsLangCode</string>
diff --git a/app/src/main/res/values/preference_values.xml 
b/app/src/main/res/values/preference_values.xml
index d52d2ec..1472783 100644
--- a/app/src/main/res/values/preference_values.xml
+++ b/app/src/main/res/values/preference_values.xml
@@ -6,4 +6,16 @@
         <item>HEADERS</item>
         <item>BODY</item>
     </string-array>
+    <string-array name="preference_names_restbase_uri_format_list">
+        <item>Production cluster</item>
+        <item>Beta cluster</item>
+        <item>Labs machine (appservice.wmflabs.org)</item>
+        <item>Custom (e.g. for local dev box)</item>
+    </string-array>
+    <string-array name="preference_values_restbase_uri_format_list">
+        <item>%1$s://%2$s.wikipedia.org/api/rest_v1/</item>
+        <item>%1$s://%2$s.wikipedia.beta.wmflabs.org/api/rest_v1/</item>
+        <item>http://appservice.wmflabs.org/%2$s.wikipedia.org/v1/</item>
+        <item>http://host:6927/%2$s.wikipedia.org/v1/</item>
+    </string-array>
 </resources>
\ 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 482c61c..c884f70 100644
--- a/app/src/main/res/xml/developer_preferences.xml
+++ b/app/src/main/res/xml/developer_preferences.xml
@@ -26,15 +26,22 @@
             android:key="@string/preference_key_request_successes"
             android:title="@string/preference_key_request_successes" />
 
+        <ListPreference
+            android:key="@string/preference_key_restbase_uri_format_list"
+            android:title="@string/preference_key_restbase_uri_format_list"
+            android:entries="@array/preference_names_restbase_uri_format_list"
+            
android:entryValues="@array/preference_values_restbase_uri_format_list"
+            android:defaultValue="%1$s://%2$s.wikipedia.org/api/rest_v1/"
+            android:summary="%s" />
+
         <org.wikipedia.settings.EditTextAutoSummarizePreference
             style="@style/DataStringPreference"
             android:key="@string/preference_key_restbase_uri_format"
             android:title="@string/preference_key_restbase_uri_format"
-            android:dialogMessage="Prod: %1$s://%2$s.wikipedia.org/api/rest_v1/
-            \nBeta: https://%2$s.wikipedia.beta.wmflabs.org/api/rest_v1/
-            \nLabs: http://appservice.wmflabs.org/%2$s.wikipedia.org/v1/
-            \nDev: http://host:6927/%2$s.wikipedia.org/v1/
-            \n%1$s &#10139; http or https; %2$s &#10139; WP sub domain; scroll 
down for input field" />
+            android:dialogMessage="For local dev box use: 
http://host:6927/%2$s.wikipedia.org/v1/
+            \n%1$s &#10139; http or https
+            \n%2$s &#10139; WP sub domain
+            \nPlease replace 'host' with your machine's hostname or IP 
address" />
 
         <org.wikipedia.settings.EditTextAutoSummarizePreference
             style="@style/DataStringPreference"

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib5c931f9a108a46bedd12302b624b9f8000dd826
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: BearND <bsitzm...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to