diff --git a/res/values/strings.xml b/res/values/strings.xml index 362e5b76535..fcecb8fff27 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1619,19 +1619,24 @@ Choose wallpaper from - Android Dreams - - Screen savers and other idle diversions + Screen Candy + + Will start upon sleep if connected to power + + Disabled - Selected dream + Selected candy - When to activate + When to activate - After %1$s spent idle + After %1$s spent idle - Never + Never - Try it! + Try it! + + Also start when docked Automatic brightness diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index 6cd2e56307c..b5f072fa2e7 100644 --- a/res/xml/display_settings.xml +++ b/res/xml/display_settings.xml @@ -40,9 +40,9 @@ android:entries="@array/screen_timeout_entries" android:entryValues="@array/screen_timeout_values" /> - - - + + diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index 58871405c6f..d2c227b3f5d 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -39,6 +39,8 @@ import android.util.Log; import android.view.IWindowManager; import android.view.Surface; +import com.android.settings.DreamSettings; + import java.util.ArrayList; public class DisplaySettings extends SettingsPreferenceFragment implements @@ -52,6 +54,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements private static final String KEY_ACCELEROMETER = "accelerometer"; private static final String KEY_FONT_SIZE = "font_size"; private static final String KEY_NOTIFICATION_PULSE = "notification_pulse"; + private static final String KEY_SCREEN_SAVER = "screensaver"; private CheckBoxPreference mAccelerometer; private ListPreference mFontSizePref; @@ -60,6 +63,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements private final Configuration mCurConfig = new Configuration(); private ListPreference mScreenTimeoutPreference; + private Preference mScreenSaverPreference; private ContentObserver mAccelerometerRotationObserver = new ContentObserver(new Handler()) { @Override @@ -78,6 +82,8 @@ public class DisplaySettings extends SettingsPreferenceFragment implements mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER); mAccelerometer.setPersistent(false); + mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER); + mScreenTimeoutPreference = (ListPreference) findPreference(KEY_SCREEN_TIMEOUT); final long currentTimeout = Settings.System.getLong(resolver, SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE); @@ -213,6 +219,14 @@ public class DisplaySettings extends SettingsPreferenceFragment implements private void updateState() { updateAccelerometerRotationCheckbox(); readFontSizePreference(mFontSizePref); + updateScreenSaverSummary(); + } + + private void updateScreenSaverSummary() { + mScreenSaverPreference.setSummary( + DreamSettings.isScreenSaverEnabled(mScreenSaverPreference.getContext()) + ? R.string.screensaver_settings_summary_on + : R.string.screensaver_settings_summary_off); } private void updateAccelerometerRotationCheckbox() { diff --git a/src/com/android/settings/DreamComponentPreference.java b/src/com/android/settings/DreamComponentPreference.java index 662c82fa0b6..b41ab3aa42c 100644 --- a/src/com/android/settings/DreamComponentPreference.java +++ b/src/com/android/settings/DreamComponentPreference.java @@ -16,7 +16,7 @@ package com.android.settings; -import static android.provider.Settings.Secure.DREAM_COMPONENT; +import static android.provider.Settings.Secure.SCREENSAVER_COMPONENT; import android.app.AlertDialog; import android.content.Context; @@ -65,7 +65,7 @@ public class DreamComponentPreference extends Preference { } private void refreshFromSettings() { - String component = Settings.Secure.getString(resolver, DREAM_COMPONENT); + String component = Settings.Secure.getString(resolver, SCREENSAVER_COMPONENT); if (component == null) { component = getContext().getResources().getString( com.android.internal.R.string.config_defaultDreamComponent); @@ -168,7 +168,7 @@ public class DreamComponentPreference extends Preference { setSummary(ri.loadLabel(pm)); //getContext().startActivity(intent); - Settings.Secure.putString(resolver, DREAM_COMPONENT, cn.flattenToString()); + Settings.Secure.putString(resolver, SCREENSAVER_COMPONENT, cn.flattenToString()); } }) .create(); diff --git a/src/com/android/settings/DreamSettings.java b/src/com/android/settings/DreamSettings.java index 7ddab3110de..d59242a5efe 100644 --- a/src/com/android/settings/DreamSettings.java +++ b/src/com/android/settings/DreamSettings.java @@ -16,8 +16,11 @@ package com.android.settings; -import static android.provider.Settings.Secure.DREAM_TIMEOUT; +import static android.provider.Settings.Secure.SCREENSAVER_ENABLED; +import static android.provider.Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK; +import android.app.ActionBar; +import android.app.Activity; import android.app.ActivityManagerNative; import android.app.admin.DevicePolicyManager; import android.content.ContentResolver; @@ -31,98 +34,125 @@ import android.os.ServiceManager; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; +import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.provider.Settings; import android.util.Log; +import android.view.Gravity; import android.view.IWindowManager; +import android.widget.CompoundButton; +import android.widget.Switch; import java.util.ArrayList; -public class DreamSettings extends SettingsPreferenceFragment implements - Preference.OnPreferenceChangeListener { +public class DreamSettings extends SettingsPreferenceFragment { private static final String TAG = "DreamSettings"; - private static final String KEY_DREAM_TIMEOUT = "dream_timeout"; + private static final String KEY_ACTIVATE_ON_DOCK = "activate_on_dock"; - private ListPreference mScreenTimeoutPreference; - private ListPreference mDreamTimeoutPreference; + private CheckBoxPreference mActivateOnDockPreference; + + private Switch mEnableSwitch; + private Enabler mEnabler; @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ContentResolver resolver = getActivity().getContentResolver(); + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); addPreferencesFromResource(R.xml.dream_settings); - mDreamTimeoutPreference = (ListPreference) findPreference(KEY_DREAM_TIMEOUT); - final long currentSaverTimeout = Settings.Secure.getLong(resolver, DREAM_TIMEOUT, - 0); - mDreamTimeoutPreference.setValue(String.valueOf(currentSaverTimeout)); - mDreamTimeoutPreference.setOnPreferenceChangeListener(this); - updateTimeoutPreferenceDescription(resolver, mDreamTimeoutPreference, - R.string.dream_timeout_summary, - R.string.dream_timeout_zero_summary, - currentSaverTimeout); + mActivateOnDockPreference = (CheckBoxPreference) findPreference(KEY_ACTIVATE_ON_DOCK); + + final Activity activity = getActivity(); + + mEnableSwitch = new Switch(activity); + + if (activity instanceof PreferenceActivity) { + PreferenceActivity preferenceActivity = (PreferenceActivity) activity; + if (preferenceActivity.onIsHidingHeaders() || !preferenceActivity.onIsMultiPane()) { + 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.RIGHT)); + activity.getActionBar().setTitle(R.string.screensaver_settings_title); + } + } + + mEnabler = new Enabler(activity, mEnableSwitch); } - private void updateTimeoutPreferenceDescription( - ContentResolver resolver, - ListPreference pref, - int summaryStrings, - long currentTimeout) { - updateTimeoutPreferenceDescription(resolver, pref, summaryStrings, 0, currentTimeout); + public static boolean isScreenSaverEnabled(Context context) { + return 0 != Settings.Secure.getInt( + context.getContentResolver(), SCREENSAVER_ENABLED, 1); } - private void updateTimeoutPreferenceDescription( - ContentResolver resolver, - ListPreference pref, - int summaryStrings, - int zeroString, - long currentTimeout) { - String summary; - if (currentTimeout == 0) { - summary = pref.getContext().getString(zeroString); - } else { - final CharSequence[] entries = pref.getEntries(); - final CharSequence[] values = pref.getEntryValues(); - int best = 0; - for (int i = 0; i < values.length; i++) { - long timeout = Long.valueOf(values[i].toString()); - if (currentTimeout >= timeout) { - best = i; - } - } - summary = pref.getContext().getString(summaryStrings, entries[best]); + + 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); } - pref.setSummary(summary); } @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); super.onResume(); } @Override public void onPause() { + if (mEnabler != null) { + mEnabler.pause(); + } + super.onPause(); } - public boolean onPreferenceChange(Preference preference, Object objValue) { - final String key = preference.getKey(); - if (KEY_DREAM_TIMEOUT.equals(key)) { - int value = Integer.parseInt((String) objValue); - try { - Settings.Secure.putInt(getContentResolver(), - DREAM_TIMEOUT, value); - updateTimeoutPreferenceDescription(getContentResolver(), - mDreamTimeoutPreference, - R.string.dream_timeout_summary, - R.string.dream_timeout_zero_summary, - value); - } catch (NumberFormatException e) { - Log.e(TAG, "could not persist dream timeout setting", e); - } + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + if (preference == mActivateOnDockPreference) { + Settings.Secure.putInt(getContentResolver(), + SCREENSAVER_ACTIVATE_ON_DOCK, + mActivateOnDockPreference.isChecked() ? 1 : 0); } - - return true; + return super.onPreferenceTreeClick(preferenceScreen, preference); } } diff --git a/src/com/android/settings/DreamTesterPreference.java b/src/com/android/settings/DreamTesterPreference.java index 78858b1b4c1..ccd6fc060ec 100644 --- a/src/com/android/settings/DreamTesterPreference.java +++ b/src/com/android/settings/DreamTesterPreference.java @@ -16,7 +16,7 @@ package com.android.settings; -import static android.provider.Settings.Secure.DREAM_COMPONENT; +import static android.provider.Settings.Secure.SCREENSAVER_COMPONENT; import android.app.AlertDialog; import android.content.Context; @@ -60,13 +60,15 @@ public class DreamTesterPreference extends Preference { @Override protected void onClick() { - String component = Settings.Secure.getString(resolver, DREAM_COMPONENT); + 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_NEW_TASK - | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS + .addFlags( + Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS ) .putExtra("android.dreams.TEST", true); getContext().startActivity(intent);