From 745bad9da1ef2fca2ab7bfeb5ea885a2b50c49c3 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 2 May 2016 10:54:12 -0700 Subject: [PATCH] Chaning the behavior of settings activity. > Making all twoState prefs backed by content provider > Using the stadard intent defined in N for settings > Using SharedPrefsListener instead of LauncherProvider Change-Id: I8272f54aa780bc0436e3d0aa89096a4bd2a9194f --- AndroidManifest.xml | 7 ++- src/com/android/launcher3/Launcher.java | 51 +++++++++++++--------- src/com/android/launcher3/LauncherCallbacks.java | 2 - src/com/android/launcher3/LauncherProvider.java | 11 ----- .../launcher3/LauncherProviderChangeListener.java | 2 - src/com/android/launcher3/SettingsActivity.java | 49 +++++++++++++++------ src/com/android/launcher3/Utilities.java | 4 ++ .../launcher3/testing/LauncherExtension.java | 4 -- 8 files changed, 74 insertions(+), 56 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 9ae311ea3..e7b703cab 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -85,8 +85,11 @@ + android:autoRemoveFromRecents="true"> + + + + diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index a58cddde0..d2d1d02cc 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -43,6 +43,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; import android.content.SharedPreferences; +import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; @@ -374,11 +375,7 @@ public class Launcher extends Activity } } - private Runnable mUpdateOrientationRunnable = new Runnable() { - public void run() { - setOrientation(); - } - }; + private RotationPrefChangeHandler mRotationPrefChangeHandler; @Override protected void onCreate(Bundle savedInstanceState) { @@ -479,6 +476,8 @@ public class Launcher extends Activity // if the user has specifically allowed rotation. if (!mRotationEnabled) { mRotationEnabled = Utilities.isAllowRotationPrefEnabled(getApplicationContext()); + mRotationPrefChangeHandler = new RotationPrefChangeHandler(); + mSharedPrefs.registerOnSharedPreferenceChangeListener(mRotationPrefChangeHandler); } // On large interfaces, or on devices that a user has specifically enabled screen rotation, @@ -498,16 +497,6 @@ public class Launcher extends Activity } @Override - public void onSettingsChanged(String settings, boolean value) { - if (Utilities.ALLOW_ROTATION_PREFERENCE_KEY.equals(settings)) { - mRotationEnabled = value; - if (!waitUntilResume(mUpdateOrientationRunnable, true)) { - mUpdateOrientationRunnable.run(); - } - } - } - - @Override public void onExtractedColorsChanged() { loadExtractedColorsAndColorItems(); } @@ -1997,6 +1986,10 @@ public class Launcher extends Activity LauncherAppState.getInstance().setLauncher(null); } + if (mRotationPrefChangeHandler != null) { + mSharedPrefs.unregisterOnSharedPreferenceChangeListener(mRotationPrefChangeHandler); + } + try { mAppWidgetHost.stopListening(); } catch (NullPointerException ex) { @@ -2744,13 +2737,10 @@ public class Launcher extends Activity * Event handler for a click on the settings button that appears after a long press * on the home screen. */ - protected void onClickSettingsButton(View v) { + private void onClickSettingsButton(View v) { if (LOGD) Log.d(TAG, "onClickSettingsButton"); - if (mLauncherCallbacks != null) { - mLauncherCallbacks.onClickSettingsButton(v); - } else { - startActivity(new Intent(this, SettingsActivity.class)); - } + startActivity(new Intent(Utilities.ACTION_APPLICATION_PREFERENCES) + .setPackage(getPackageName())); } public View.OnTouchListener getHapticFeedbackTouchListener() { @@ -4698,6 +4688,25 @@ public class Launcher extends Activity return Collections.EMPTY_LIST; } } + + private class RotationPrefChangeHandler implements OnSharedPreferenceChangeListener, Runnable { + + @Override + public void onSharedPreferenceChanged( + SharedPreferences sharedPreferences, String key) { + if (Utilities.ALLOW_ROTATION_PREFERENCE_KEY.equals(key)) { + mRotationEnabled = Utilities.isAllowRotationPrefEnabled(getApplicationContext()); + if (!waitUntilResume(this, true)) { + run(); + } + } + } + + @Override + public void run() { + setOrientation(); + } + } } interface DebugIntents { diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java index 34117b6b1..e97163133 100644 --- a/src/com/android/launcher3/LauncherCallbacks.java +++ b/src/com/android/launcher3/LauncherCallbacks.java @@ -77,8 +77,6 @@ public interface LauncherCallbacks { public void onInteractionEnd(); @Deprecated - public void onClickSettingsButton(View v); - @Deprecated public void onWorkspaceLockedChanged(); public boolean providesSearch(); diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index a62d1e72e..53026ac5a 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -280,17 +280,6 @@ public class LauncherProvider extends ContentProvider { case LauncherSettings.Settings.METHOD_SET_BOOLEAN: { final boolean value = extras.getBoolean(LauncherSettings.Settings.EXTRA_VALUE); Utilities.getPrefs(getContext()).edit().putBoolean(arg, value).apply(); - new MainThreadExecutor().execute(new Runnable() { - @Override - public void run() { - synchronized (LISTENER_LOCK) { - if (mListener != null) { - mListener.onSettingsChanged(arg, value); - } - } - - } - }); if (extras.getBoolean(LauncherSettings.Settings.NOTIFY_BACKUP)) { LauncherBackupAgentHelper.dataChanged(getContext()); } diff --git a/src/com/android/launcher3/LauncherProviderChangeListener.java b/src/com/android/launcher3/LauncherProviderChangeListener.java index 2d2da6ec3..524befc58 100644 --- a/src/com/android/launcher3/LauncherProviderChangeListener.java +++ b/src/com/android/launcher3/LauncherProviderChangeListener.java @@ -9,8 +9,6 @@ public interface LauncherProviderChangeListener { public void onLauncherProviderChange(); - public void onSettingsChanged(String settings, boolean value); - public void onExtractedColorsChanged(); public void onAppWidgetHostReset(); diff --git a/src/com/android/launcher3/SettingsActivity.java b/src/com/android/launcher3/SettingsActivity.java index dab71c862..5d9a54684 100644 --- a/src/com/android/launcher3/SettingsActivity.java +++ b/src/com/android/launcher3/SettingsActivity.java @@ -17,11 +17,13 @@ package com.android.launcher3; import android.app.Activity; +import android.os.AsyncTask; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceFragment; -import android.preference.SwitchPreference; +import android.preference.PreferenceScreen; +import android.preference.TwoStatePreference; /** * Settings activity for Launcher. Currently implements the following setting: Allow rotation @@ -47,19 +49,13 @@ public class SettingsActivity extends Activity { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.launcher_preferences); - SwitchPreference pref = (SwitchPreference) findPreference( - Utilities.ALLOW_ROTATION_PREFERENCE_KEY); - pref.setPersistent(false); - - Bundle extras = new Bundle(); - extras.putBoolean(LauncherSettings.Settings.EXTRA_DEFAULT_VALUE, false); - Bundle value = getActivity().getContentResolver().call( - LauncherSettings.Settings.CONTENT_URI, - LauncherSettings.Settings.METHOD_GET_BOOLEAN, - Utilities.ALLOW_ROTATION_PREFERENCE_KEY, extras); - pref.setChecked(value.getBoolean(LauncherSettings.Settings.EXTRA_VALUE)); - - pref.setOnPreferenceChangeListener(this); + PreferenceScreen screen = getPreferenceScreen(); + for (int i = screen.getPreferenceCount() - 1; i >= 0; i--) { + Preference pref = screen.getPreference(i); + if (pref instanceof TwoStatePreference) { + setBooleanPrefUsingContentProvider((TwoStatePreference) pref); + } + } } @Override @@ -72,5 +68,30 @@ public class SettingsActivity extends Activity { preference.getKey(), extras); return true; } + + private void setBooleanPrefUsingContentProvider(final TwoStatePreference pref) { + pref.setPersistent(false); + pref.setEnabled(false); + + new AsyncTask() { + @Override + protected Boolean doInBackground(Void... params) { + Bundle extras = new Bundle(); + extras.putBoolean(LauncherSettings.Settings.EXTRA_DEFAULT_VALUE, false); + Bundle value = getActivity().getContentResolver().call( + LauncherSettings.Settings.CONTENT_URI, + LauncherSettings.Settings.METHOD_GET_BOOLEAN, + pref.getKey(), extras); + return value.getBoolean(LauncherSettings.Settings.EXTRA_VALUE); + } + + @Override + protected void onPostExecute(Boolean aBoolean) { + pref.setChecked(aBoolean); + pref.setEnabled(true); + pref.setOnPreferenceChangeListener(LauncherSettingsFragment.this); + } + }.execute(); + } } } diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index d6d351790..1acbfc12b 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -173,6 +173,10 @@ public final class Utilities { } } + // TODO: Use Intent.ACTION_APPLICATION_PREFERENCES when N SDK is available. + public static final String ACTION_APPLICATION_PREFERENCES + = "android.intent.action.APPLICATION_PREFERENCES"; + public static Bitmap createIconBitmap(Cursor c, int iconIndex, Context context) { byte[] data = c.getBlob(iconIndex); try { diff --git a/src/com/android/launcher3/testing/LauncherExtension.java b/src/com/android/launcher3/testing/LauncherExtension.java index 8b6f5cd1f..c62ce0e57 100644 --- a/src/com/android/launcher3/testing/LauncherExtension.java +++ b/src/com/android/launcher3/testing/LauncherExtension.java @@ -127,10 +127,6 @@ public class LauncherExtension extends Launcher { } @Override - public void onClickSettingsButton(View v) { - } - - @Override public void onWorkspaceLockedChanged() { } -- 2.11.0