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 } } + }