From d541b6fd1c2c93df83dcc169a300202c677bb8cd Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Tue, 31 Jul 2012 08:24:27 -0400 Subject: [PATCH] Re-enable dreams: Settings Re-arrange settings and captions for dreams. Activation on sleep and activation on dock now independent. Sleep activation defaults to off, dock activation defaults to on (replacing dock mode). Also use dream manager service for testing dream preference, and properly disable preferences if both dream activations are disabled. Change-Id: I76f5ba115c7678826a09077dd393acc55c2bca26 Bug: 6921930 --- res/values/strings.xml | 17 +- res/xml/dream_settings.xml | 41 ++--- src/com/android/settings/DisplaySettings.java | 9 +- src/com/android/settings/DreamSettings.java | 146 ++++++++---------- .../settings/DreamTesterPreference.java | 59 ++----- 5 files changed, 115 insertions(+), 157 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 881b0438c35..d67b9407c1d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1687,13 +1687,17 @@ Choose wallpaper from - Screen Candy - - Will start upon sleep if connected to power + Dream + + When docked or asleep and charging + + When asleep and charging + + When docked Disabled - Selected candy + Selected dream When to activate @@ -1702,9 +1706,12 @@ Never Try it! + + Start on sleep - Also start when docked + Start when docked Automatic brightness diff --git a/res/xml/dream_settings.xml b/res/xml/dream_settings.xml index 6569bc730b3..a13032f1df4 100644 --- a/res/xml/dream_settings.xml +++ b/res/xml/dream_settings.xml @@ -15,25 +15,28 @@ --> - - - - + xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" + android:title="@string/screensaver_settings_title" > + android:key="activate_on_sleep" + android:persistent="false" + android:title="@string/screensaver_activate_on_sleep_title" /> - + + + + + + + \ No newline at end of file diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index fc162e2506e..c71f886ff61 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -232,10 +232,13 @@ public class DisplaySettings extends SettingsPreferenceFragment implements } private void updateScreenSaverSummary() { + boolean activatedOnSleep = DreamSettings.isScreenSaverActivatedOnSleep(getActivity()); + boolean activatedOnDock = DreamSettings.isScreenSaverActivatedOnDock(getActivity()); mScreenSaverPreference.setSummary( - DreamSettings.isScreenSaverEnabled(mScreenSaverPreference.getContext()) - ? R.string.screensaver_settings_summary_on - : R.string.screensaver_settings_summary_off); + activatedOnSleep && activatedOnDock ? R.string.screensaver_settings_summary_both : + activatedOnSleep ? R.string.screensaver_settings_summary_sleep : + activatedOnDock ? R.string.screensaver_settings_summary_dock : + R.string.screensaver_settings_summary_off); } private void updateAccelerometerRotationCheckbox() { diff --git a/src/com/android/settings/DreamSettings.java b/src/com/android/settings/DreamSettings.java index 1b1854aa098..80b6a840c14 100644 --- a/src/com/android/settings/DreamSettings.java +++ b/src/com/android/settings/DreamSettings.java @@ -48,12 +48,19 @@ import java.util.ArrayList; public class DreamSettings extends SettingsPreferenceFragment { private static final String TAG = "DreamSettings"; + private static final String KEY_ACTIVATE_ON_SLEEP = "activate_on_sleep"; private static final String KEY_ACTIVATE_ON_DOCK = "activate_on_dock"; + private static final String KEY_COMPONENT = "screensaver_component"; + private static final String KEY_TEST = "test"; - private CheckBoxPreference mActivateOnDockPreference; + private static final int DEFAULT_SLEEP = 0; + private static final int DEFAULT_DOCK = 1; - private Switch mEnableSwitch; - private Enabler mEnabler; + private ActivationSetting mActivateOnSleep; + private ActivationSetting mActivateOnDock; + + private Preference mComponentPref; + private Preference mTestPref; @Override public void onActivityCreated(Bundle savedInstanceState) { @@ -61,99 +68,76 @@ public class DreamSettings extends SettingsPreferenceFragment { addPreferencesFromResource(R.xml.dream_settings); - mActivateOnDockPreference = (CheckBoxPreference) findPreference(KEY_ACTIVATE_ON_DOCK); + mComponentPref = findPreference(KEY_COMPONENT); + mTestPref = findPreference(KEY_TEST); - final Activity activity = getActivity(); - - mEnableSwitch = new Switch(activity); - - if (activity instanceof PreferenceActivity) { - PreferenceActivity preferenceActivity = (PreferenceActivity) activity; - // note: we do not check onIsHidingHeaders() or onIsMultiPane() because there's no - // switch in the left-hand pane to control this; we need to show the ON/OFF in our - // fragment every time - final int padding = activity.getResources().getDimensionPixelSize( - R.dimen.action_bar_switch_padding); - mEnableSwitch.setPadding(0, 0, padding, 0); - activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, - ActionBar.DISPLAY_SHOW_CUSTOM); - activity.getActionBar().setCustomView(mEnableSwitch, new ActionBar.LayoutParams( - ActionBar.LayoutParams.WRAP_CONTENT, - ActionBar.LayoutParams.WRAP_CONTENT, - Gravity.CENTER_VERTICAL | Gravity.END)); - activity.getActionBar().setTitle(R.string.screensaver_settings_title); - } - - mEnabler = new Enabler(activity, mEnableSwitch); + mActivateOnSleep = new ActivationSetting(getActivity(), + SCREENSAVER_ENABLED, DEFAULT_SLEEP, + (CheckBoxPreference) findPreference(KEY_ACTIVATE_ON_SLEEP)); + mActivateOnDock = new ActivationSetting(getActivity(), + SCREENSAVER_ACTIVATE_ON_DOCK, DEFAULT_DOCK, + (CheckBoxPreference) findPreference(KEY_ACTIVATE_ON_DOCK)); } - public static boolean isScreenSaverEnabled(Context context) { + public static boolean isScreenSaverActivatedOnSleep(Context context) { return 0 != Settings.Secure.getInt( - context.getContentResolver(), SCREENSAVER_ENABLED, 1); + context.getContentResolver(), SCREENSAVER_ENABLED, DEFAULT_SLEEP); } - public static void setScreenSaverEnabled(Context context, boolean enabled) { - Settings.Secure.putInt( - context.getContentResolver(), SCREENSAVER_ENABLED, enabled ? 1 : 0); - } - - public static class Enabler implements CompoundButton.OnCheckedChangeListener { - private final Context mContext; - private Switch mSwitch; - - public Enabler(Context context, Switch switch_) { - mContext = context; - setSwitch(switch_); - } - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - setScreenSaverEnabled(mContext, isChecked); - } - public void setSwitch(Switch switch_) { - if (mSwitch == switch_) return; - if (mSwitch != null) mSwitch.setOnCheckedChangeListener(null); - mSwitch = switch_; - mSwitch.setOnCheckedChangeListener(this); - - final boolean enabled = isScreenSaverEnabled(mContext); - mSwitch.setChecked(enabled); - } - public void pause() { - mSwitch.setOnCheckedChangeListener(null); - } - public void resume() { - mSwitch.setOnCheckedChangeListener(this); - } + public static boolean isScreenSaverActivatedOnDock(Context context) { + return 0 != Settings.Secure.getInt( + context.getContentResolver(), SCREENSAVER_ACTIVATE_ON_DOCK, DEFAULT_DOCK); } @Override public void onResume() { - if (mEnabler != null) { - mEnabler.resume(); - } - - final boolean currentActivateOnDock = 0 != Settings.Secure.getInt(getContentResolver(), - SCREENSAVER_ACTIVATE_ON_DOCK, 1); - mActivateOnDockPreference.setChecked(currentActivateOnDock); + mActivateOnSleep.onResume(); + mActivateOnDock.onResume(); + refreshDependents(); super.onResume(); } - @Override - public void onPause() { - if (mEnabler != null) { - mEnabler.pause(); - } - - super.onPause(); - } - @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { - if (preference == mActivateOnDockPreference) { - Settings.Secure.putInt(getContentResolver(), - SCREENSAVER_ACTIVATE_ON_DOCK, - mActivateOnDockPreference.isChecked() ? 1 : 0); - } + mActivateOnSleep.onClick(preference); + mActivateOnDock.onClick(preference); + refreshDependents(); return super.onPreferenceTreeClick(preferenceScreen, preference); } + + private void refreshDependents() { + boolean enabled = mActivateOnSleep.isSelected() || mActivateOnDock.isSelected(); + mComponentPref.setEnabled(enabled); + mTestPref.setEnabled(enabled); + } + + private static class ActivationSetting { + private final Context mContext; + private final String mName; + private final int mDefaultValue; + private final CheckBoxPreference mPref; + + ActivationSetting(Context context, String name, int defaultValue, CheckBoxPreference pref) { + mContext = context; + mName = name; + mDefaultValue = defaultValue; + mPref = pref; + } + public boolean isSelected() { + return mPref.isChecked(); + } + void onClick(Preference preference) { + if (preference == mPref) { + Settings.Secure.putInt(mContext.getContentResolver(), + mName, + mPref.isChecked() ? 1 : 0); + } + } + void onResume() { + boolean currentActivated = 0 != Settings.Secure.getInt(mContext.getContentResolver(), + mName, mDefaultValue); + mPref.setChecked(currentActivated); + } + } + } diff --git a/src/com/android/settings/DreamTesterPreference.java b/src/com/android/settings/DreamTesterPreference.java index 87a142cfc8e..fa1d7088945 100644 --- a/src/com/android/settings/DreamTesterPreference.java +++ b/src/com/android/settings/DreamTesterPreference.java @@ -16,72 +16,33 @@ package com.android.settings; -import static android.provider.Settings.Secure.SCREENSAVER_COMPONENT; - -import android.app.AlertDialog; -import android.content.Context; import android.content.ComponentName; -import android.content.ContentResolver; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.content.res.Resources; +import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; import android.preference.Preference; -import android.provider.Settings; import android.service.dreams.IDreamManager; import android.util.AttributeSet; import android.util.Log; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.BaseAdapter; -import android.widget.ImageView; -import android.widget.ListAdapter; -import android.widget.TextView; - -import java.util.ArrayList; -import java.util.List; public class DreamTesterPreference extends Preference { private static final String TAG = "DreamTesterPreference"; - - private final PackageManager pm; - private final ContentResolver resolver; public DreamTesterPreference(Context context, AttributeSet attrs) { super(context, attrs); - pm = getContext().getPackageManager(); - resolver = getContext().getContentResolver(); } @Override protected void onClick() { - String component = Settings.Secure.getString(resolver, SCREENSAVER_COMPONENT); - Log.v(TAG, "component=" + component); - if (component != null) { - ComponentName cn = ComponentName.unflattenFromString(component); - Log.v(TAG, "cn=" + cn); -// Intent intent = new Intent(Intent.ACTION_MAIN) -// .setComponent(cn) -// .addFlags( -// Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS -// ) -// .putExtra("android.dreams.TEST", true); -// getContext().startService(intent); - IDreamManager dm = IDreamManager.Stub.asInterface( - ServiceManager.getService("dreams")); - try { - dm.testDream(cn); - } catch (RemoteException ex) { - // too bad, so sad, oh mom, oh dad - } + IDreamManager dm = IDreamManager.Stub.asInterface(ServiceManager.getService("dreams")); + try { + ComponentName cn = dm.getDreamComponent(); + Log.v(TAG, "DreamComponent cn=" + cn); + dm.testDream(cn); + } catch (RemoteException ex) { + Log.w(TAG, "error testing dream", ex); + // too bad, so sad, oh mom, oh dad } } + }