Niedzielski has uploaded a new change for review. https://gerrit.wikimedia.org/r/223501
Change subject: Add developer settings to Gingerbread ...................................................................... Add developer settings to Gingerbread - Add developer setting support for Gingerbread devices. - Add single Fragment Activity components and apply pattern to settings and developer settings. - Fix invalidateOptionsMenu() crash bug in API 14 devices in SettingsFragment. - Move ActivityUtil to activity package. - Rename SettingsUI to SettingsPreferenceLoader. Developer settings Gingerbread support added in response to initial patch feedback. Change-Id: Icf9a33bac98c5e39d54553b87634a521b9b833f7 --- M wikipedia/AndroidManifest.xml D wikipedia/res/layout/activity_settings.xml M wikipedia/res/layout/activity_single_fragment.xml R wikipedia/src/main/java/org/wikipedia/activity/ActivityUtil.java A wikipedia/src/main/java/org/wikipedia/activity/BaseSingleFragmentActivity.java A wikipedia/src/main/java/org/wikipedia/activity/CompatSingleFragmentActivity.java A wikipedia/src/main/java/org/wikipedia/activity/PlatformSingleFragmentActivity.java M wikipedia/src/main/java/org/wikipedia/activity/ThemedActionBarActivity.java M wikipedia/src/main/java/org/wikipedia/page/snippet/ShareHandler.java M wikipedia/src/main/java/org/wikipedia/settings/AboutActivity.java A wikipedia/src/main/java/org/wikipedia/settings/BasePreferenceLoader.java M wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsActivity.java A wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsActivityGB.java M wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java A wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java A wikipedia/src/main/java/org/wikipedia/settings/LegacyPreferenceActivity.java A wikipedia/src/main/java/org/wikipedia/settings/PreferenceLoader.java A wikipedia/src/main/java/org/wikipedia/settings/PreferenceLoaderFragment.java M wikipedia/src/main/java/org/wikipedia/settings/SettingsActivity.java M wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java M wikipedia/src/main/java/org/wikipedia/settings/SettingsFragment.java R wikipedia/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.java M wikipedia/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java 23 files changed, 324 insertions(+), 153 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/01/223501/1 diff --git a/wikipedia/AndroidManifest.xml b/wikipedia/AndroidManifest.xml index 3189543..253b5bc 100644 --- a/wikipedia/AndroidManifest.xml +++ b/wikipedia/AndroidManifest.xml @@ -84,6 +84,11 @@ android:configChanges="orientation|keyboardHidden|keyboard|screenSize" android:exported="false" /> + <activity android:name=".settings.DeveloperSettingsActivityGB" + android:label="@string/developer_settings_activity_title" + android:configChanges="orientation|keyboardHidden|keyboard|screenSize" + android:exported="false" + /> <activity android:name=".settings.AboutActivity" android:label="@string/about_activity_title" android:exported="false"> diff --git a/wikipedia/res/layout/activity_settings.xml b/wikipedia/res/layout/activity_settings.xml deleted file mode 100644 index 3df4b3e..0000000 --- a/wikipedia/res/layout/activity_settings.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="?attr/window_background_color" - android:orientation="vertical"> - - <fragment - android:id="@+id/settings_fragment" - android:name="org.wikipedia.settings.SettingsFragment" - android:layout_width="match_parent" - android:layout_height="match_parent" /> -</LinearLayout> diff --git a/wikipedia/res/layout/activity_single_fragment.xml b/wikipedia/res/layout/activity_single_fragment.xml index 6b4891e..0659c5a 100644 --- a/wikipedia/res/layout/activity_single_fragment.xml +++ b/wikipedia/res/layout/activity_single_fragment.xml @@ -5,4 +5,4 @@ android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".activity.ThemedActionBarActivity" /> + tools:context=".activity.BaseSingleFragmentActivity" /> diff --git a/wikipedia/src/main/java/org/wikipedia/util/ActivityUtil.java b/wikipedia/src/main/java/org/wikipedia/activity/ActivityUtil.java similarity index 68% rename from wikipedia/src/main/java/org/wikipedia/util/ActivityUtil.java rename to wikipedia/src/main/java/org/wikipedia/activity/ActivityUtil.java index f0163d2..0e9e7af 100644 --- a/wikipedia/src/main/java/org/wikipedia/util/ActivityUtil.java +++ b/wikipedia/src/main/java/org/wikipedia/activity/ActivityUtil.java @@ -1,4 +1,4 @@ -package org.wikipedia.util; +package org.wikipedia.activity; import android.annotation.TargetApi; import android.app.Activity; @@ -6,6 +6,8 @@ import android.os.Build; import android.view.MenuItem; import android.view.View; + +import org.wikipedia.util.ApiUtil; public final class ActivityUtil { @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) @@ -23,5 +25,15 @@ return activity.findViewById(item.getItemId()); } + public static boolean defaultOnOptionsItemSelected(Activity activity, MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + activity.onBackPressed(); + return true; + default: + return false; + } + } + private ActivityUtil() { } } \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/activity/BaseSingleFragmentActivity.java b/wikipedia/src/main/java/org/wikipedia/activity/BaseSingleFragmentActivity.java new file mode 100644 index 0000000..928d57e --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/activity/BaseSingleFragmentActivity.java @@ -0,0 +1,52 @@ +package org.wikipedia.activity; + +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.support.annotation.LayoutRes; +import android.view.MenuItem; + +import org.wikipedia.R; + +/** Boilerplate for a {@link android.support.v4.app.FragmentActivity} containing a single stack of + * Fragments. */ +public abstract class BaseSingleFragmentActivity<T> extends ThemedActionBarActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayout()); + + if (!isFragmentCreated()) { + addFragment(createFragment()); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return ActivityUtil.defaultOnOptionsItemSelected(this, item) + || super.onOptionsItemSelected(item); + } + + protected abstract void addFragment(T fragment); + + protected abstract T createFragment(); + + /** @return The Fragment added to the stack. */ + protected abstract T getFragment(); + + /** @return The resource layout to inflate which must contain a {@link android.view.ViewGroup} + * whose ID is {@link #getContainerId()}. */ + @LayoutRes + protected int getLayout() { + return R.layout.activity_single_fragment; + } + + /** @return The resource identifier for the Fragment container. */ + @IdRes + protected int getContainerId() { + return R.id.fragment_container; + } + + protected boolean isFragmentCreated() { + return getFragment() != null; + } +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/activity/CompatSingleFragmentActivity.java b/wikipedia/src/main/java/org/wikipedia/activity/CompatSingleFragmentActivity.java new file mode 100644 index 0000000..c86c9fc --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/activity/CompatSingleFragmentActivity.java @@ -0,0 +1,18 @@ +package org.wikipedia.activity; + +import android.support.v4.app.Fragment; + +/** Boilerplate for a {@link android.support.v4.app.FragmentActivity} containing a single stack of + * compatibility {@link Fragment}s. */ +public abstract class CompatSingleFragmentActivity<T extends Fragment> extends BaseSingleFragmentActivity<T> { + @Override + protected void addFragment(Fragment fragment) { + getSupportFragmentManager().beginTransaction().add(getContainerId(), fragment).commit(); + } + + @Override + protected T getFragment() { + //noinspection unchecked + return (T) getSupportFragmentManager().findFragmentById(getContainerId()); + } +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/activity/PlatformSingleFragmentActivity.java b/wikipedia/src/main/java/org/wikipedia/activity/PlatformSingleFragmentActivity.java new file mode 100644 index 0000000..8b3653f --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/activity/PlatformSingleFragmentActivity.java @@ -0,0 +1,21 @@ +package org.wikipedia.activity; + +import android.annotation.TargetApi; +import android.app.Fragment; +import android.os.Build; + +/** Boilerplate for a {@link android.support.v4.app.FragmentActivity} containing a single stack of + * platform {@link Fragment}s. */ +@TargetApi(Build.VERSION_CODES.HONEYCOMB) +public abstract class PlatformSingleFragmentActivity<T extends Fragment> extends BaseSingleFragmentActivity<T> { + @Override + protected void addFragment(Fragment fragment) { + getFragmentManager().beginTransaction().add(getContainerId(), fragment).commit(); + } + + @Override + protected T getFragment() { + //noinspection unchecked + return (T) getFragmentManager().findFragmentById(getContainerId()); + } +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/activity/ThemedActionBarActivity.java b/wikipedia/src/main/java/org/wikipedia/activity/ThemedActionBarActivity.java index 5e7d0ae..891b011 100644 --- a/wikipedia/src/main/java/org/wikipedia/activity/ThemedActionBarActivity.java +++ b/wikipedia/src/main/java/org/wikipedia/activity/ThemedActionBarActivity.java @@ -9,7 +9,6 @@ import android.view.ViewConfiguration; import org.wikipedia.WikipediaApp; -import org.wikipedia.util.ActivityUtil; import java.lang.reflect.Field; diff --git a/wikipedia/src/main/java/org/wikipedia/page/snippet/ShareHandler.java b/wikipedia/src/main/java/org/wikipedia/page/snippet/ShareHandler.java index 36b65de..4d799fa 100755 --- a/wikipedia/src/main/java/org/wikipedia/page/snippet/ShareHandler.java +++ b/wikipedia/src/main/java/org/wikipedia/page/snippet/ShareHandler.java @@ -33,7 +33,7 @@ import org.wikipedia.page.PageProperties; import org.wikipedia.page.PageViewFragmentInternal; import org.wikipedia.tooltip.ToolTipUtil; -import org.wikipedia.util.ActivityUtil; +import org.wikipedia.activity.ActivityUtil; import org.wikipedia.util.ApiUtil; import org.wikipedia.util.ShareUtils; diff --git a/wikipedia/src/main/java/org/wikipedia/settings/AboutActivity.java b/wikipedia/src/main/java/org/wikipedia/settings/AboutActivity.java index 0fe8e2f..d97f242 100644 --- a/wikipedia/src/main/java/org/wikipedia/settings/AboutActivity.java +++ b/wikipedia/src/main/java/org/wikipedia/settings/AboutActivity.java @@ -18,7 +18,6 @@ import org.wikipedia.activity.ThemedActionBarActivity; import org.wikipedia.Utils; import org.wikipedia.WikipediaApp; -import org.wikipedia.util.ApiUtil; public class AboutActivity extends ThemedActionBarActivity { private static final String KEY_SCROLL_X = "KEY_SCROLL_X"; @@ -41,9 +40,7 @@ + getString(R.string.send_feedback) + "</a>")); - if (isDeveloperSettingsSupported()) { - findViewById(R.id.about_logo_image).setOnClickListener(new AboutLogoClickListener(this)); - } + findViewById(R.id.about_logo_image).setOnClickListener(new AboutLogoClickListener(this)); //if there's no Email app, hide the Feedback link. if (!Utils.mailAppExists(this)) { @@ -96,10 +93,6 @@ tv.setMovementMethod(LinkMovementMethod.getInstance()); } } - } - - private boolean isDeveloperSettingsSupported() { - return ApiUtil.hasHoneyComb(); } private static class AboutLogoClickListener implements View.OnClickListener { diff --git a/wikipedia/src/main/java/org/wikipedia/settings/BasePreferenceLoader.java b/wikipedia/src/main/java/org/wikipedia/settings/BasePreferenceLoader.java new file mode 100644 index 0000000..1063e79 --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/settings/BasePreferenceLoader.java @@ -0,0 +1,34 @@ +package org.wikipedia.settings; + +import android.annotation.TargetApi; +import android.os.Build; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceFragment; +import android.support.annotation.NonNull; +import android.support.annotation.XmlRes; + +/*package*/ abstract class BasePreferenceLoader implements PreferenceLoader { + @NonNull private final PreferenceHostCompat preferenceHost; + + /*package*/ BasePreferenceLoader(@NonNull PreferenceActivity activity) { + this(new PreferenceHostCompat(activity)); + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + /*package*/ BasePreferenceLoader(@NonNull PreferenceFragment fragment) { + this(new PreferenceHostCompat(fragment)); + } + + /*package*/ BasePreferenceLoader(@NonNull PreferenceHostCompat preferenceHost) { + this.preferenceHost = preferenceHost; + } + + protected Preference findPreference(CharSequence key) { + return preferenceHost.findPreference(key); + } + + protected void loadPreferences(@XmlRes int id) { + preferenceHost.addPreferencesFromResource(id); + } +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsActivity.java b/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsActivity.java index 5bc8287..42ddd5d 100644 --- a/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsActivity.java +++ b/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsActivity.java @@ -1,75 +1,20 @@ package org.wikipedia.settings; import android.annotation.TargetApi; -import android.app.Activity; -import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.os.Build; -import android.os.Bundle; -import android.support.annotation.IdRes; -import android.support.annotation.LayoutRes; -import android.view.MenuItem; -import org.wikipedia.R; -import org.wikipedia.activity.ThemedActionBarActivity; +import org.wikipedia.activity.PlatformSingleFragmentActivity; @TargetApi(Build.VERSION_CODES.HONEYCOMB) -public class DeveloperSettingsActivity extends ThemedActionBarActivity { +public class DeveloperSettingsActivity extends PlatformSingleFragmentActivity<DeveloperSettingsFragment> { public static Intent newIntent(Context context) { return new Intent(context, DeveloperSettingsActivity.class); } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(getLayout()); - - if (!isFragmentCreated()) { - addFragment(createFragment()); - } - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - return defaultOnOptionsItemSelected(this, item) - || super.onOptionsItemSelected(item); - } - - private static boolean defaultOnOptionsItemSelected(Activity activity, MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - activity.onBackPressed(); - return true; - default: - return false; - } - } - - private void addFragment(Fragment fragment) { - getFragmentManager().beginTransaction().add(getContainerId(), fragment).commit(); - } - - private DeveloperSettingsFragment getFragment() { - //noinspection unchecked - return (DeveloperSettingsFragment) getFragmentManager().findFragmentById(getContainerId()); - } - - private DeveloperSettingsFragment createFragment() { + public DeveloperSettingsFragment createFragment() { return DeveloperSettingsFragment.newInstance(); - } - - private boolean isFragmentCreated() { - return getFragment() != null; - } - - @IdRes - private int getContainerId() { - return R.id.fragment_container; - } - - @LayoutRes - private int getLayout() { - return R.layout.activity_single_fragment; } } \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsActivityGB.java b/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsActivityGB.java new file mode 100644 index 0000000..7f99902 --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsActivityGB.java @@ -0,0 +1,16 @@ +package org.wikipedia.settings; + +import android.content.Context; +import android.content.Intent; + +public class DeveloperSettingsActivityGB extends LegacyPreferenceActivity { + public static Intent newIntent(Context context) { + return new Intent(context, DeveloperSettingsActivityGB.class); + } + + @Override + public void loadPreferences() { + PreferenceLoader preferenceLoader = new DeveloperSettingsPreferenceLoader(this); + preferenceLoader.loadPreferences(); + } +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java b/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java index b3270f5..262b573 100644 --- a/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java +++ b/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsFragment.java @@ -2,24 +2,16 @@ import android.annotation.TargetApi; import android.os.Build; -import android.os.Bundle; -import android.preference.PreferenceFragment; - -import org.wikipedia.R; @TargetApi(Build.VERSION_CODES.HONEYCOMB) -public class DeveloperSettingsFragment extends PreferenceFragment { +public class DeveloperSettingsFragment extends PreferenceLoaderFragment { public static DeveloperSettingsFragment newInstance() { return new DeveloperSettingsFragment(); } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - loadPreferences(); - } - - private void loadPreferences() { - addPreferencesFromResource(R.xml.developer_preferences); + public void loadPreferences() { + PreferenceLoader preferenceLoader = new DeveloperSettingsPreferenceLoader(this); + preferenceLoader.loadPreferences(); } } \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java b/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java new file mode 100644 index 0000000..1bb3e08 --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java @@ -0,0 +1,22 @@ +package org.wikipedia.settings; + +import android.preference.PreferenceActivity; +import android.preference.PreferenceFragment; +import android.support.annotation.NonNull; + +import org.wikipedia.R; + +/*package*/ class DeveloperSettingsPreferenceLoader extends BasePreferenceLoader { + /*package*/ DeveloperSettingsPreferenceLoader(@NonNull PreferenceActivity activity) { + super(activity); + } + + /*package*/ DeveloperSettingsPreferenceLoader(@NonNull PreferenceFragment fragment) { + super(fragment); + } + + @Override + public void loadPreferences() { + loadPreferences(R.xml.developer_preferences); + } +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/settings/LegacyPreferenceActivity.java b/wikipedia/src/main/java/org/wikipedia/settings/LegacyPreferenceActivity.java new file mode 100644 index 0000000..f97007c --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/settings/LegacyPreferenceActivity.java @@ -0,0 +1,24 @@ +package org.wikipedia.settings; + +import android.os.Bundle; +import android.preference.PreferenceActivity; +import android.view.MenuItem; + +import org.wikipedia.WikipediaApp; +import org.wikipedia.activity.ActivityUtil; + +/*package*/ abstract class LegacyPreferenceActivity extends PreferenceActivity + implements PreferenceLoader { + @Override + protected void onCreate(Bundle savedInstanceState) { + setTheme(WikipediaApp.getInstance().getCurrentTheme().getResourceId()); + super.onCreate(savedInstanceState); + loadPreferences(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return ActivityUtil.defaultOnOptionsItemSelected(this, item) + || super.onOptionsItemSelected(item); + } +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/settings/PreferenceLoader.java b/wikipedia/src/main/java/org/wikipedia/settings/PreferenceLoader.java new file mode 100644 index 0000000..abacfbe --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/settings/PreferenceLoader.java @@ -0,0 +1,5 @@ +package org.wikipedia.settings; + +/*package*/ interface PreferenceLoader { + void loadPreferences(); +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/settings/PreferenceLoaderFragment.java b/wikipedia/src/main/java/org/wikipedia/settings/PreferenceLoaderFragment.java new file mode 100644 index 0000000..09f4535 --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/settings/PreferenceLoaderFragment.java @@ -0,0 +1,16 @@ +package org.wikipedia.settings; + +import android.annotation.TargetApi; +import android.os.Build; +import android.os.Bundle; +import android.preference.PreferenceFragment; + +@TargetApi(Build.VERSION_CODES.HONEYCOMB) +/*package*/ abstract class PreferenceLoaderFragment extends PreferenceFragment + implements PreferenceLoader { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + loadPreferences(); + } +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivity.java b/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivity.java index 1c7323d..46072b0 100644 --- a/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivity.java +++ b/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivity.java @@ -1,30 +1,14 @@ package org.wikipedia.settings; -import android.os.Bundle; -import android.view.MenuItem; +import org.wikipedia.activity.PlatformSingleFragmentActivity; -import org.wikipedia.R; -import org.wikipedia.activity.ThemedActionBarActivity; - -public class SettingsActivity extends ThemedActionBarActivity { +public class SettingsActivity extends PlatformSingleFragmentActivity<SettingsFragment> { public static final int ACTIVITY_REQUEST_SHOW_SETTINGS = 1; public static final int ACTIVITY_RESULT_LANGUAGE_CHANGED = 1; public static final int ACTIVITY_RESULT_LOGOUT = 2; - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_settings); - } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - onBackPressed(); - return true; - default: - break; - } - return super.onOptionsItemSelected(item); + public SettingsFragment createFragment() { + return SettingsFragment.newInstance(); } } diff --git a/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java b/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java index c4d225d..09ec86c 100644 --- a/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java +++ b/wikipedia/src/main/java/org/wikipedia/settings/SettingsActivityGB.java @@ -1,11 +1,9 @@ package org.wikipedia.settings; -import android.os.Bundle; -import android.preference.PreferenceActivity; -import android.support.annotation.NonNull; +import android.view.Menu; import android.view.MenuItem; -import org.wikipedia.WikipediaApp; +import org.wikipedia.R; /** * Settings activity that is specifically intended for API 10. @@ -14,24 +12,43 @@ * ActionBarActivity, and uses a PreferenceFragment, all of which are necessary for all the * components to render properly (specifically checkboxes). */ -public class SettingsActivityGB extends PreferenceActivity { - - public void onCreate(Bundle savedInstanceState) { - setTheme(WikipediaApp.getInstance().getCurrentTheme().getResourceId()); - super.onCreate(savedInstanceState); - - PreferenceHostCompat prefHost = new PreferenceHostCompat(this); - SettingsUI ui = new SettingsUI(this, prefHost); - ui.loadPreferences(); +public class SettingsActivityGB extends LegacyPreferenceActivity { + @Override + public void loadPreferences() { + SettingsPreferenceLoader preferenceLoader = new SettingsPreferenceLoader(this); + preferenceLoader.loadPreferences(); } - public boolean onMenuItemSelected(int featureId, @NonNull MenuItem item) { + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.menu_settings, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + super.onPrepareOptionsMenu(menu); + prepareDeveloperSettingsMenuItem(menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case android.R.id.home: - finish(); + case R.id.developer_settings: + launchDeveloperSettingsActivity(); return true; default: - throw new RuntimeException("WAT"); + return super.onOptionsItemSelected(item); } } + + private void launchDeveloperSettingsActivity() { + startActivity(DeveloperSettingsActivityGB.newIntent(this)); + } + + private void prepareDeveloperSettingsMenuItem(Menu menu) { + menu.findItem(R.id.developer_settings).setVisible(Prefs.isShowDeveloperSettingsEnabled()); + } } diff --git a/wikipedia/src/main/java/org/wikipedia/settings/SettingsFragment.java b/wikipedia/src/main/java/org/wikipedia/settings/SettingsFragment.java index 1921e74..1b6ff9e 100644 --- a/wikipedia/src/main/java/org/wikipedia/settings/SettingsFragment.java +++ b/wikipedia/src/main/java/org/wikipedia/settings/SettingsFragment.java @@ -3,23 +3,29 @@ import android.annotation.TargetApi; import android.os.Build; import android.os.Bundle; -import android.preference.PreferenceFragment; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import org.wikipedia.R; +import org.wikipedia.util.ApiUtil; @TargetApi(Build.VERSION_CODES.HONEYCOMB) -public class SettingsFragment extends PreferenceFragment { +public class SettingsFragment extends PreferenceLoaderFragment { + public static SettingsFragment newInstance() { + return new SettingsFragment(); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); + } - PreferenceHostCompat prefHost = new PreferenceHostCompat(this); - SettingsUI ui = new SettingsUI(getActivity(), prefHost); - ui.loadPreferences(); + @Override + public void loadPreferences() { + SettingsPreferenceLoader preferenceLoader = new SettingsPreferenceLoader(this); + preferenceLoader.loadPreferences(); } @Override @@ -59,7 +65,12 @@ menu.findItem(R.id.developer_settings).setVisible(Prefs.isShowDeveloperSettingsEnabled()); } + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private void invalidateOptionsMenu() { - getFragmentManager().invalidateOptionsMenu(); + if (ApiUtil.hasIceCreamSandwich()) { + getFragmentManager().invalidateOptionsMenu(); + } else { + getActivity().invalidateOptionsMenu(); + } } } diff --git a/wikipedia/src/main/java/org/wikipedia/settings/SettingsUI.java b/wikipedia/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.java similarity index 68% rename from wikipedia/src/main/java/org/wikipedia/settings/SettingsUI.java rename to wikipedia/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.java index c8e4019..2eee5fe 100644 --- a/wikipedia/src/main/java/org/wikipedia/settings/SettingsUI.java +++ b/wikipedia/src/main/java/org/wikipedia/settings/SettingsPreferenceLoader.java @@ -1,9 +1,15 @@ package org.wikipedia.settings; +import android.annotation.TargetApi; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; +import android.os.Build; import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceFragment; +import android.support.annotation.NonNull; +import android.support.annotation.StringRes; import android.support.v7.internal.view.ContextThemeWrapper; import org.wikipedia.BuildConfig; @@ -14,22 +20,27 @@ /** * UI code for app settings, shared between PreferenceActivity (GB) and PreferenceFragment (HC+). */ -public class SettingsUI { +public class SettingsPreferenceLoader extends BasePreferenceLoader { private final Activity activity; - private final PreferenceHostCompat prefHost; - public SettingsUI(Activity activity, PreferenceHostCompat prefHost) { + /*package*/ SettingsPreferenceLoader(@NonNull PreferenceActivity activity) { + super(activity); this.activity = activity; - this.prefHost = prefHost; } + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + /*package*/ SettingsPreferenceLoader(@NonNull PreferenceFragment fragment) { + super(fragment); + this.activity = fragment.getActivity(); + } + + @Override public void loadPreferences() { - prefHost.addPreferencesFromResource(R.xml.preferences); + loadPreferences(R.xml.preferences); updateLanguagePrefSummary(); - Preference languagePref = prefHost.findPreference( - activity.getString(R.string.preference_key_language)); + Preference languagePref = findPreference(R.string.preference_key_language); languagePref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { @@ -41,9 +52,9 @@ langPrefDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { - if (!prefHost.findPreference(activity.getString(R.string.preference_key_language)).getSummary() + if (!findPreference(R.string.preference_key_language).getSummary() .equals(WikipediaApp.getInstance().getAppLanguageLocalizedName())) { - prefHost.findPreference(activity.getString(R.string.preference_key_language)).setSummary( + findPreference(R.string.preference_key_language).setSummary( StringUtil.emptyIfNull(WikipediaApp.getInstance().getAppLanguageLocalizedName())); activity.setResult(SettingsActivity.ACTIVITY_RESULT_LANGUAGE_CHANGED); } @@ -54,10 +65,10 @@ } }); - Preference logoutPref = prefHost.findPreference(activity.getString(R.string.preference_key_logout)); + Preference logoutPref = findPreference(R.string.preference_key_logout); if (!WikipediaApp.getInstance().getUserInfoStorage().isLoggedIn()) { logoutPref.setEnabled(false); - logoutPref.setSummary(activity.getString(R.string.preference_summary_notloggedin)); + logoutPref.setSummary(getString(R.string.preference_summary_notloggedin)); } logoutPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override @@ -79,7 +90,7 @@ * See https://code.google.com/p/android/issues/detail?id=57460 */ private void overridePackageName() { - Preference aboutPref = prefHost.findPreference("about"); + Preference aboutPref = findPreference("about"); aboutPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { @@ -92,7 +103,15 @@ } private void updateLanguagePrefSummary() { - Preference languagePref = prefHost.findPreference(activity.getString(R.string.preference_key_language)); + Preference languagePref = findPreference(R.string.preference_key_language); languagePref.setSummary(WikipediaApp.getInstance().getAppLanguageLocalizedName()); } + + private Preference findPreference(@StringRes int id) { + return findPreference(getString(id)); + } + + private String getString(@StringRes int id) { + return activity.getString(id); + } } diff --git a/wikipedia/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java b/wikipedia/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java index 4fb0b8e..ccca676 100644 --- a/wikipedia/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java +++ b/wikipedia/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java @@ -12,7 +12,7 @@ import com.appenguin.onboarding.ToolTipView; import org.wikipedia.R; -import org.wikipedia.util.ActivityUtil; +import org.wikipedia.activity.ActivityUtil; public final class ToolTipUtil { private static final int TOOL_TIP_VIEW_ID = R.id.view_tool_tip_container; -- To view, visit https://gerrit.wikimedia.org/r/223501 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Icf9a33bac98c5e39d54553b87634a521b9b833f7 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Niedzielski <sniedziel...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits