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

Reply via email to