Dbrant has uploaded a new change for review.
https://gerrit.wikimedia.org/r/277175
Change subject: Start using Support Preference library, and use
SwitchPreference.
......................................................................
Start using Support Preference library, and use SwitchPreference.
This transitions our Settings (and Developer settings) screen to use the
Support Preference (v14) library, so that the appearance of the settings
is consistent across APIs. No functional changes expected, in that sense.
This also now uses SwitchPreference instead of CheckboxPreference, which
looks a lot more Materialy!
Change-Id: I89ecdd4ced3df959380b3147cf67775a0b434bb4
---
M app/build.gradle
M app/src/main/java/org/wikipedia/activity/PlatformSingleFragmentActivity.java
M app/src/main/java/org/wikipedia/settings/BasePreferenceLoader.java
D app/src/main/java/org/wikipedia/settings/CheckBoxPreferenceMultiLine.java
M app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java
M
app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
M app/src/main/java/org/wikipedia/settings/EditTextAutoSummarizePreference.java
M app/src/main/java/org/wikipedia/settings/PreferenceLoaderFragment.java
M app/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java
M app/src/main/java/org/wikipedia/settings/SettingsFragment.java
M app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.java
M app/src/main/res/values/styles.xml
M app/src/main/res/xml/developer_preferences.xml
M app/src/main/res/xml/preferences.xml
14 files changed, 76 insertions(+), 97 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/75/277175/1
diff --git a/app/build.gradle b/app/build.gradle
index f574c7b..f4ff1b4 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -172,6 +172,7 @@
compile "com.android.support:recyclerview-v7:$supportVersion"
compile "com.android.support:percent:$supportVersion"
compile "com.android.support:palette-v7:$supportVersion"
+ compile "com.android.support:preference-v14:$supportVersion"
compile 'com.facebook.fresco:fresco:0.8.1'
compile 'com.google.code.gson:gson:2.5'
compile "com.squareup.okhttp:okhttp-urlconnection:$okHttpVersion"
diff --git
a/app/src/main/java/org/wikipedia/activity/PlatformSingleFragmentActivity.java
b/app/src/main/java/org/wikipedia/activity/PlatformSingleFragmentActivity.java
index 6d48b7b..7a5ff84 100644
---
a/app/src/main/java/org/wikipedia/activity/PlatformSingleFragmentActivity.java
+++
b/app/src/main/java/org/wikipedia/activity/PlatformSingleFragmentActivity.java
@@ -1,18 +1,18 @@
package org.wikipedia.activity;
-import android.app.Fragment;
+import android.support.v4.app.Fragment;
/** Boilerplate for a {@link android.support.v4.app.FragmentActivity}
containing a single stack of
* platform {@link Fragment}s. */
public abstract class PlatformSingleFragmentActivity<T extends Fragment>
extends BaseSingleFragmentActivity<T> {
@Override
protected void addFragment(Fragment fragment) {
- getFragmentManager().beginTransaction().add(getContainerId(),
fragment).commit();
+ getSupportFragmentManager().beginTransaction().add(getContainerId(),
fragment).commit();
}
@Override
protected T getFragment() {
//noinspection unchecked
- return (T) getFragmentManager().findFragmentById(getContainerId());
+ return (T)
getSupportFragmentManager().findFragmentById(getContainerId());
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/wikipedia/settings/BasePreferenceLoader.java
b/app/src/main/java/org/wikipedia/settings/BasePreferenceLoader.java
index 4f2af18..5d5024c 100644
--- a/app/src/main/java/org/wikipedia/settings/BasePreferenceLoader.java
+++ b/app/src/main/java/org/wikipedia/settings/BasePreferenceLoader.java
@@ -1,16 +1,16 @@
package org.wikipedia.settings;
import android.app.Activity;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.annotation.XmlRes;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceFragmentCompat;
/*package*/ abstract class BasePreferenceLoader implements PreferenceLoader {
- @NonNull private final PreferenceFragment preferenceHost;
+ @NonNull private final PreferenceFragmentCompat preferenceHost;
- /*package*/ BasePreferenceLoader(@NonNull PreferenceFragment fragment) {
+ /*package*/ BasePreferenceLoader(@NonNull PreferenceFragmentCompat
fragment) {
preferenceHost = fragment;
}
diff --git
a/app/src/main/java/org/wikipedia/settings/CheckBoxPreferenceMultiLine.java
b/app/src/main/java/org/wikipedia/settings/CheckBoxPreferenceMultiLine.java
deleted file mode 100644
index f144192..0000000
--- a/app/src/main/java/org/wikipedia/settings/CheckBoxPreferenceMultiLine.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.wikipedia.settings;
-
-import android.content.Context;
-import android.preference.CheckBoxPreference;
-import android.support.annotation.NonNull;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.TextView;
-
-public class CheckBoxPreferenceMultiLine extends CheckBoxPreference {
-
- public CheckBoxPreferenceMultiLine(Context ctx, AttributeSet attrs, int
defStyle) {
- super(ctx, attrs, defStyle);
- }
-
- public CheckBoxPreferenceMultiLine(Context ctx, AttributeSet attrs) {
- super(ctx, attrs);
- }
-
- public CheckBoxPreferenceMultiLine(Context ctx) {
- super(ctx);
- }
-
- @Override
- protected void onBindView(@NonNull View view) {
- super.onBindView(view);
- TextView textView = (TextView) view.findViewById(android.R.id.title);
- if (textView != null) {
- textView.setSingleLine(false);
- }
- }
-}
diff --git
a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java
b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java
index 5df3cd5..be2b51e 100644
--- a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java
+++ b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java
@@ -1,5 +1,7 @@
package org.wikipedia.settings;
+import android.os.Bundle;
+
public class DeveloperSettingsFragment extends PreferenceLoaderFragment {
public static DeveloperSettingsFragment newInstance() {
return new DeveloperSettingsFragment();
@@ -10,4 +12,8 @@
PreferenceLoader preferenceLoader = new
DeveloperSettingsPreferenceLoader(this);
preferenceLoader.loadPreferences();
}
+
+ @Override
+ public void onCreatePreferences(Bundle bundle, String s) {
+ }
}
\ No newline at end of file
diff --git
a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
index 686be06..b82bd25 100644
---
a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
+++
b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java
@@ -1,11 +1,11 @@
package org.wikipedia.settings;
import android.content.Context;
-import android.preference.CheckBoxPreference;
-import android.preference.Preference;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceFragment;
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;
@@ -37,7 +37,7 @@
};
/*package*/
- DeveloperSettingsPreferenceLoader(@NonNull PreferenceFragment fragment) {
+ DeveloperSettingsPreferenceLoader(@NonNull PreferenceFragmentCompat
fragment) {
super(fragment);
this.context = fragment.getActivity();
}
@@ -54,7 +54,7 @@
}
private void setUpRestBaseCheckboxes() {
- CheckBoxPreference manualPreference = (CheckBoxPreference)
findPreference(getManualKey());
+ TwoStatePreference manualPreference = (TwoStatePreference)
findPreference(getManualKey());
manualPreference.setOnPreferenceChangeListener(setRestBaseManuallyChangeListener);
setUseRestBasePreference(manualPreference.isChecked());
}
@@ -65,13 +65,13 @@
private void setUseRestBasePreference(boolean manualMode) {
RbSwitch.INSTANCE.update();
- CheckBoxPreference useRestBasePref = getUseRestBasePreference();
+ TwoStatePreference useRestBasePref = getUseRestBasePreference();
useRestBasePref.setEnabled(manualMode);
useRestBasePref.setChecked(RbSwitch.INSTANCE.isRestBaseEnabled());
}
- private CheckBoxPreference getUseRestBasePreference() {
- return (CheckBoxPreference) findPreference(getUseRestBaseKey());
+ private TwoStatePreference getUseRestBasePreference() {
+ return (TwoStatePreference) findPreference(getUseRestBaseKey());
}
private String getUseRestBaseKey() {
@@ -148,7 +148,7 @@
private EditTextAutoSummarizePreference newDataStringPref(String key,
String title) {
EditTextAutoSummarizePreference pref = new
EditTextAutoSummarizePreference(context, null,
- android.R.attr.editTextPreferenceStyle);
+ R.attr.editTextAutoSummarizePreferenceStyle);
pref.setKey(key);
pref.setTitle(title);
return pref;
diff --git
a/app/src/main/java/org/wikipedia/settings/EditTextAutoSummarizePreference.java
b/app/src/main/java/org/wikipedia/settings/EditTextAutoSummarizePreference.java
index 2fffd75..fbcc29b 100644
---
a/app/src/main/java/org/wikipedia/settings/EditTextAutoSummarizePreference.java
+++
b/app/src/main/java/org/wikipedia/settings/EditTextAutoSummarizePreference.java
@@ -4,18 +4,13 @@
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
-import android.preference.EditTextPreference;
+import android.support.v7.preference.EditTextPreference;
import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
import org.wikipedia.R;
public class EditTextAutoSummarizePreference extends EditTextPreference {
- // A custom style attribute is not possible because
- // @android:style/Preference.DialogPreference.EditTextPreference is not
exposed. Use the super
- // style attribute instead and put the onus on the client.
- protected static final int DEFAULT_STYLE_ATTR =
android.R.attr.editTextPreferenceStyle;
+ protected static final int DEFAULT_STYLE_ATTR =
R.attr.editTextAutoSummarizePreferenceStyle;
private static final int[] DEFAULT_STYLEABLE =
R.styleable.EditTextAutoSummarizePreference;
private static final int DEFAULT_STYLE =
R.style.EditTextAutoSummarizePreference;
private static final boolean DEFAULT_AUTO_SUMMARIZE = true;
@@ -52,10 +47,9 @@
}
@Override
- protected View onCreateView(ViewGroup parent) {
- View view = super.onCreateView(parent);
+ public void onAttached() {
+ super.onAttached();
updateAutoSummary();
- return view;
}
@Override
diff --git
a/app/src/main/java/org/wikipedia/settings/PreferenceLoaderFragment.java
b/app/src/main/java/org/wikipedia/settings/PreferenceLoaderFragment.java
index 5635c83..53a7936 100644
--- a/app/src/main/java/org/wikipedia/settings/PreferenceLoaderFragment.java
+++ b/app/src/main/java/org/wikipedia/settings/PreferenceLoaderFragment.java
@@ -1,9 +1,9 @@
package org.wikipedia.settings;
import android.os.Bundle;
-import android.preference.PreferenceFragment;
+import android.support.v7.preference.PreferenceFragmentCompat;
-/*package*/ abstract class PreferenceLoaderFragment extends PreferenceFragment
+/*package*/ abstract class PreferenceLoaderFragment extends
PreferenceFragmentCompat
implements PreferenceLoader {
@Override
public void onCreate(Bundle savedInstanceState) {
diff --git a/app/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java
b/app/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java
index f5b686f..d38fe09 100644
--- a/app/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java
+++ b/app/src/main/java/org/wikipedia/settings/PreferenceMultiLine.java
@@ -2,11 +2,10 @@
import android.content.ActivityNotFoundException;
import android.content.Context;
-import android.preference.Preference;
import android.support.annotation.NonNull;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceViewHolder;
import android.util.AttributeSet;
-import android.view.View;
-import android.widget.TextView;
import android.widget.Toast;
import org.wikipedia.R;
@@ -26,12 +25,8 @@
}
@Override
- protected void onBindView(@NonNull View view) {
- super.onBindView(view);
- TextView textView = (TextView) view.findViewById(android.R.id.title);
- if (textView != null) {
- textView.setSingleLine(false);
- }
+ public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
+ super.onBindViewHolder(holder);
// Intercept the click listener for this preference, and if the
preference has an intent,
// launch the intent ourselves, so that we can catch the exception if
the intent fails.
// (but only do this if the preference doesn't already have a click
listener)
diff --git a/app/src/main/java/org/wikipedia/settings/SettingsFragment.java
b/app/src/main/java/org/wikipedia/settings/SettingsFragment.java
index 449b881..96ac030 100644
--- a/app/src/main/java/org/wikipedia/settings/SettingsFragment.java
+++ b/app/src/main/java/org/wikipedia/settings/SettingsFragment.java
@@ -19,6 +19,10 @@
}
@Override
+ public void onCreatePreferences(Bundle bundle, String s) {
+ }
+
+ @Override
public void loadPreferences() {
SettingsPreferenceLoader preferenceLoader = new
SettingsPreferenceLoader(this);
preferenceLoader.loadPreferences();
@@ -27,7 +31,7 @@
@Override
public void onResume() {
super.onResume();
- invalidateOptionsMenu();
+ this.getActivity().supportInvalidateOptionsMenu();
}
@Override
@@ -59,9 +63,5 @@
private void prepareDeveloperSettingsMenuItem(Menu menu) {
menu.findItem(R.id.developer_settings).setVisible(Prefs.isShowDeveloperSettingsEnabled());
- }
-
- private void invalidateOptionsMenu() {
- getFragmentManager().invalidateOptionsMenu();
}
}
diff --git
a/app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.java
b/app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.java
index d1d36c7..359cd08 100644
--- a/app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.java
+++ b/app/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.java
@@ -3,10 +3,10 @@
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceFragmentCompat;
import org.wikipedia.BuildConfig;
import org.wikipedia.R;
@@ -17,7 +17,7 @@
public class SettingsPreferenceLoader extends BasePreferenceLoader {
private final Activity activity;
- /*package*/ SettingsPreferenceLoader(@NonNull PreferenceFragment fragment)
{
+ /*package*/ SettingsPreferenceLoader(@NonNull PreferenceFragmentCompat
fragment) {
super(fragment);
activity = fragment.getActivity();
}
diff --git a/app/src/main/res/values/styles.xml
b/app/src/main/res/values/styles.xml
index 6c84387..94b4132 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -2,6 +2,7 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="AppTheme" parent="Theme.Light">
+ <item name="preferenceTheme">@style/AppPreferenceTheme</item>
<item
name="editTextAutoSummarizePreferenceStyle">@style/EditTextAutoSummarizePreference</item>
<item name="longPreferenceStyle">@style/LongPreference</item>
<item name="intPreferenceStyle">@style/IntPreference</item>
@@ -159,8 +160,19 @@
<!-- Preferences -->
- <style name="EditTextAutoSummarizePreference">
- <!--
parent="@android:style/Preference.DialogPreference.EditTextPreference" is not
exposed. -->
+ <style name="AppPreferenceTheme"
parent="PreferenceThemeOverlay.v14.Material">
+ <item
name="preferenceFragmentCompatStyle">@style/AppPreferenceFragment</item>
+ <item
name="android:listPreferredItemPaddingLeft">@dimen/activity_horizontal_margin</item>
+ <item
name="android:listPreferredItemPaddingStart">@dimen/activity_horizontal_margin</item>
+ <item
name="android:listPreferredItemPaddingRight">@dimen/activity_horizontal_margin</item>
+ <item
name="android:listPreferredItemPaddingEnd">@dimen/activity_horizontal_margin</item>
+ </style>
+
+ <style name="AppPreferenceFragment" parent="PreferenceFragment.Material">
+ <item name="android:divider">@null</item>
+ </style>
+
+ <style name="EditTextAutoSummarizePreference"
parent="Preference.DialogPreference.EditTextPreference.Material">
</style>
<style name="DataStringPreference"
parent="EditTextAutoSummarizePreference">
diff --git a/app/src/main/res/xml/developer_preferences.xml
b/app/src/main/res/xml/developer_preferences.xml
index 8c16e17..e6bdbd8 100644
--- a/app/src/main/res/xml/developer_preferences.xml
+++ b/app/src/main/res/xml/developer_preferences.xml
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+<android.support.v7.preference.PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/preferences_developer_feature_testing_heading">
- <CheckBoxPreference
+ <SwitchPreferenceCompat
android:key="@string/preference_key_feature_search_autocomplete"
android:title="@string/preference_key_feature_search_autocomplete"/>
@@ -11,11 +12,11 @@
<PreferenceCategory
android:title="@string/preferences_developer_restbase_heading">
- <CheckBoxPreference
+ <SwitchPreferenceCompat
android:key="@string/preference_key_use_restbase_manual"
android:title="@string/preference_key_use_restbase_manual" />
- <CheckBoxPreference
+ <SwitchPreferenceCompat
android:key="@string/preference_key_use_restbase"
android:title="@string/preference_key_use_restbase" />
@@ -56,15 +57,15 @@
<PreferenceCategory
android:title="@string/preferences_developer_onboarding_heading">
- <CheckBoxPreference
+ <SwitchPreferenceCompat
android:key="@string/preference_key_toc_tutorial_enabled"
android:title="@string/preference_key_toc_tutorial_enabled" />
- <CheckBoxPreference
+ <SwitchPreferenceCompat
android:key="@string/preference_key_select_text_tutorial_enabled"
android:title="@string/preference_key_select_text_tutorial_enabled" />
- <CheckBoxPreference
+ <SwitchPreferenceCompat
android:key="@string/preference_key_share_tutorial_enabled"
android:title="@string/preference_key_share_tutorial_enabled" />
@@ -137,7 +138,7 @@
android:key="dailyEventTask-lastrun"
android:title="dailyEventTask-lastrun" />
- <org.wikipedia.settings.CheckBoxPreferenceMultiLine
+ <SwitchPreferenceCompat
android:key="@string/preference_key_show_developer_settings"
android:title="@string/preference_key_show_developer_settings" />
@@ -174,4 +175,4 @@
<!-- dynamically added site entries -->
</PreferenceCategory>
-</PreferenceScreen>
+</android.support.v7.preference.PreferenceScreen>
diff --git a/app/src/main/res/xml/preferences.xml
b/app/src/main/res/xml/preferences.xml
index 3d8d3d1..bc4e294 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -1,18 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
- <PreferenceCategory android:title="@string/preferences_general_heading">
+<android.support.v7.preference.PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <PreferenceCategory
+ android:title="@string/preferences_general_heading">
<org.wikipedia.settings.PreferenceMultiLine
android:key="@string/preference_key_language"
android:title="@string/preference_title_language">
</org.wikipedia.settings.PreferenceMultiLine>
- <org.wikipedia.settings.CheckBoxPreferenceMultiLine
+ <SwitchPreferenceCompat
android:key="@string/preference_key_show_images"
android:defaultValue="true"
android:title="@string/preference_title_show_images"
android:summary="@string/preference_summary_show_images"
/>
- <org.wikipedia.settings.CheckBoxPreferenceMultiLine
+ <SwitchPreferenceCompat
android:key="@string/preference_key_show_link_previews"
android:defaultValue="true"
android:title="@string/preference_title_show_link_previews"
@@ -20,13 +22,13 @@
/>
</PreferenceCategory>
<PreferenceCategory
android:title="@string/preferences_privacy_settings_heading">
- <org.wikipedia.settings.CheckBoxPreferenceMultiLine
+ <SwitchPreferenceCompat
android:key="@string/preference_key_eventlogging_opt_in"
android:defaultValue="true"
android:title="@string/preference_title_eventlogging_opt_in"
android:summary="@string/preference_summary_eventlogging_opt_in"
/>
- <org.wikipedia.settings.CheckBoxPreferenceMultiLine
+ <SwitchPreferenceCompat
android:key="@string/preference_key_auto_upload_crash_reports"
android:defaultValue="true"
android:title="@string/preference_title_auto_upload_crash_reports"
@@ -34,7 +36,7 @@
/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/zero_wikipedia_zero_heading">
- <org.wikipedia.settings.CheckBoxPreferenceMultiLine
+ <SwitchPreferenceCompat
android:key="zero_warn_when_leaving"
android:title="@string/zero_warn_when_leaving"
android:defaultValue="true"
@@ -77,4 +79,4 @@
/>
</org.wikipedia.settings.PreferenceMultiLine>
</PreferenceCategory>
-</PreferenceScreen>
\ No newline at end of file
+</android.support.v7.preference.PreferenceScreen>
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/277175
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I89ecdd4ced3df959380b3147cf67775a0b434bb4
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits