diff options
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/provider/Settings.java | 25 | ||||
| -rw-r--r-- | core/java/android/service/dreams/Dream.java | 4 | ||||
| -rw-r--r-- | core/java/android/service/dreams/DreamManagerService.java | 51 | ||||
| -rw-r--r-- | core/java/android/service/dreams/IDreamManager.aidl | 5 | ||||
| -rw-r--r-- | packages/SettingsProvider/res/values/defaults.xml | 2 | ||||
| -rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java | 12 | ||||
| -rw-r--r-- | services/java/com/android/server/DockObserver.java | 13 | ||||
| -rw-r--r-- | services/java/com/android/server/power/PowerManagerService.java | 11 |
9 files changed, 97 insertions, 27 deletions
diff --git a/api/current.txt b/api/current.txt index a29cdba..da1ec77 100644 --- a/api/current.txt +++ b/api/current.txt @@ -20052,6 +20052,7 @@ package android.service.dreams { method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams); method public void setInteractive(boolean); field public static final java.lang.String SERVICE_INTERFACE = "android.service.dreams.Dream"; + field public static final java.lang.String METADATA_NAME_CONFIG_ACTIVITY = "android.service.dreams.config_activity"; } } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 28273f0..1f6f0dd 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -4248,27 +4248,40 @@ public final class Settings { "setup_prepaid_detection_redir_host"; /** - * Whether the screensaver is enabled. + * Whether screensavers are enabled. * @hide */ public static final String SCREENSAVER_ENABLED = "screensaver_enabled"; /** - * The user's chosen screensaver component. + * The user's chosen screensaver components. * - * This component will be launched by the PhoneWindowManager after a timeout when not on + * These will be launched by the PhoneWindowManager after a timeout when not on * battery, or upon dock insertion (if SCREENSAVER_ACTIVATE_ON_DOCK is set to 1). * @hide */ - public static final String SCREENSAVER_COMPONENT = "screensaver_component"; + public static final String SCREENSAVER_COMPONENTS = "screensaver_components"; /** - * Whether the screensaver should be automatically launched when the device is inserted - * into a (desk) dock. + * If screensavers are enabled, whether the screensaver should be automatically launched + * when the device is inserted into a (desk) dock. * @hide */ public static final String SCREENSAVER_ACTIVATE_ON_DOCK = "screensaver_activate_on_dock"; + /** + * If screensavers are enabled, whether the screensaver should be automatically launched + * when the screen times out when not on battery. + * @hide + */ + public static final String SCREENSAVER_ACTIVATE_ON_SLEEP = "screensaver_activate_on_sleep"; + + /** + * If screensavers are enabled, the default screensaver component. + * @hide + */ + public static final String SCREENSAVER_DEFAULT_COMPONENT = "screensaver_default_component"; + /** {@hide} */ public static final String NETSTATS_ENABLED = "netstats_enabled"; /** {@hide} */ diff --git a/core/java/android/service/dreams/Dream.java b/core/java/android/service/dreams/Dream.java index 69db97c..ba2ac67 100644 --- a/core/java/android/service/dreams/Dream.java +++ b/core/java/android/service/dreams/Dream.java @@ -56,6 +56,10 @@ public class Dream extends Service implements Window.Callback { public static final String SERVICE_INTERFACE = "android.service.dreams.Dream"; + /** Service meta-data key for declaring an optional configuration activity. */ + public static final String METADATA_NAME_CONFIG_ACTIVITY = + "android.service.dreams.config_activity"; + private Window mWindow; private WindowManager mWindowManager; diff --git a/core/java/android/service/dreams/DreamManagerService.java b/core/java/android/service/dreams/DreamManagerService.java index 5d6b17e..4b0f7c5 100644 --- a/core/java/android/service/dreams/DreamManagerService.java +++ b/core/java/android/service/dreams/DreamManagerService.java @@ -1,7 +1,7 @@ package android.service.dreams; -import static android.provider.Settings.Secure.SCREENSAVER_COMPONENT; - +import static android.provider.Settings.Secure.SCREENSAVER_COMPONENTS; +import static android.provider.Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -58,7 +58,8 @@ public class DreamManagerService // IDreamManager method @Override public void dream() { - ComponentName name = getDreamComponent(); + ComponentName[] dreams = getDreamComponents(); + ComponentName name = dreams != null && dreams.length > 0 ? dreams[0] : null; if (name != null) { synchronized (mLock) { final long ident = Binder.clearCallingIdentity(); @@ -73,21 +74,45 @@ public class DreamManagerService // IDreamManager method @Override - public void setDreamComponent(ComponentName name) { - Settings.Secure.putString(mContext.getContentResolver(), SCREENSAVER_COMPONENT, name.flattenToString()); + public void setDreamComponents(ComponentName[] componentNames) { + Settings.Secure.putString(mContext.getContentResolver(), + SCREENSAVER_COMPONENTS, + componentsToString(componentNames)); + } + + private static String componentsToString(ComponentName[] componentNames) { + StringBuilder names = new StringBuilder(); + if (componentNames != null) { + for (ComponentName componentName : componentNames) { + if (names.length() > 0) + names.append(','); + names.append(componentName.flattenToString()); + } + } + return names.toString(); + } + + private static ComponentName[] componentsFromString(String names) { + String[] namesArray = names.split(","); + ComponentName[] componentNames = new ComponentName[namesArray.length]; + for (int i = 0; i < namesArray.length; i++) + componentNames[i] = ComponentName.unflattenFromString(namesArray[i]); + return componentNames; } // IDreamManager method @Override - public ComponentName getDreamComponent() { + public ComponentName[] getDreamComponents() { // TODO(dsandler) don't load this every time, watch the value - String component = Settings.Secure.getString(mContext.getContentResolver(), SCREENSAVER_COMPONENT); - if (component != null) { - return ComponentName.unflattenFromString(component); - } else { - // We rely on DatabaseHelper to set a sane default for us when the settings DB is upgraded - return null; - } + String names = Settings.Secure.getString(mContext.getContentResolver(), SCREENSAVER_COMPONENTS); + return componentsFromString(names); + } + + // IDreamManager method + @Override + public ComponentName getDefaultDreamComponent() { + String name = Settings.Secure.getString(mContext.getContentResolver(), SCREENSAVER_DEFAULT_COMPONENT); + return name == null ? null : ComponentName.unflattenFromString(name); } // IDreamManager method diff --git a/core/java/android/service/dreams/IDreamManager.aidl b/core/java/android/service/dreams/IDreamManager.aidl index b64dd8f..b6fcdf0 100644 --- a/core/java/android/service/dreams/IDreamManager.aidl +++ b/core/java/android/service/dreams/IDreamManager.aidl @@ -24,8 +24,9 @@ import android.content.ComponentName; interface IDreamManager { void dream(); void awaken(); - void setDreamComponent(in ComponentName componentName); - ComponentName getDreamComponent(); + void setDreamComponents(in ComponentName[] componentNames); + ComponentName[] getDreamComponents(); + ComponentName getDefaultDreamComponent(); void testDream(in ComponentName componentName); boolean isDreaming(); }
\ No newline at end of file diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index a9de51f..9a80090 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -157,6 +157,8 @@ <bool name="def_screensaver_enabled">true</bool> <!-- Whether the feature activates when docked (SCREENSAVER_ACTIVATE_ON_DOCK) --> <bool name="def_screensaver_activate_on_dock">true</bool> + <!-- Whether the feature activates when docked (SCREENSAVER_ACTIVATE_ON_SLEEP) --> + <bool name="def_screensaver_activate_on_sleep">true</bool> <!-- ComponentName of the default screen saver (Settings.Secure.SCREENSAVER_COMPONENT) --> <string name="def_screensaver_component">com.google.android.deskclock/com.android.deskclock.Screensaver</string> </resources> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index 1481eb2..db81786 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -1131,7 +1131,11 @@ public class DatabaseHelper extends SQLiteOpenHelper { R.bool.def_screensaver_enabled); loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, R.bool.def_screensaver_activate_on_dock); - loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENT, + loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, + R.bool.def_screensaver_activate_on_sleep); + loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT, + R.string.def_screensaver_component); + loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS, R.string.def_screensaver_component); db.setTransactionSuccessful(); } finally { @@ -1746,7 +1750,11 @@ public class DatabaseHelper extends SQLiteOpenHelper { R.bool.def_screensaver_enabled); loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, R.bool.def_screensaver_activate_on_dock); - loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENT, + loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, + R.bool.def_screensaver_activate_on_sleep); + loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS, + R.string.def_screensaver_component); + loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT, R.string.def_screensaver_component); } finally { if (stmt != null) stmt.close(); diff --git a/services/java/com/android/server/DockObserver.java b/services/java/com/android/server/DockObserver.java index ef09b01..2bed957 100644 --- a/services/java/com/android/server/DockObserver.java +++ b/services/java/com/android/server/DockObserver.java @@ -17,6 +17,7 @@ package com.android.server; import static android.provider.Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK; +import static android.provider.Settings.Secure.SCREENSAVER_ENABLED; import android.content.ContentResolver; import android.content.Context; @@ -51,7 +52,8 @@ final class DockObserver extends UEventObserver { private static final String DOCK_UEVENT_MATCH = "DEVPATH=/devices/virtual/switch/dock"; private static final String DOCK_STATE_PATH = "/sys/class/switch/dock/state"; - private static final int DEFAULT_DOCK = 1; + private static final int DEFAULT_SCREENSAVER_ENABLED = 1; + private static final int DEFAULT_SCREENSAVER_ACTIVATED_ON_DOCK = 1; private static final int MSG_DOCK_STATE_CHANGED = 0; @@ -214,7 +216,7 @@ final class DockObserver extends UEventObserver { Slog.w(TAG, "Unable to awaken!", e); } } else { - if (isScreenSaverActivatedOnDock(mContext)) { + if (isScreenSaverEnabled(mContext) && isScreenSaverActivatedOnDock(mContext)) { try { mgr.dream(); } catch (RemoteException e) { @@ -229,9 +231,14 @@ final class DockObserver extends UEventObserver { } } + private static boolean isScreenSaverEnabled(Context context) { + return Settings.Secure.getInt(context.getContentResolver(), + SCREENSAVER_ENABLED, DEFAULT_SCREENSAVER_ENABLED) != 0; + } + private static boolean isScreenSaverActivatedOnDock(Context context) { return Settings.Secure.getInt(context.getContentResolver(), - SCREENSAVER_ACTIVATE_ON_DOCK, DEFAULT_DOCK) != 0; + SCREENSAVER_ACTIVATE_ON_DOCK, DEFAULT_SCREENSAVER_ACTIVATED_ON_DOCK) != 0; } private final Handler mHandler = new Handler(Looper.myLooper(), null, true) { diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java index 1ba1022..018e1d9 100644 --- a/services/java/com/android/server/power/PowerManagerService.java +++ b/services/java/com/android/server/power/PowerManagerService.java @@ -227,6 +227,9 @@ public final class PowerManagerService extends IPowerManager.Stub // True if dreams are enabled by the user. private boolean mDreamsEnabledSetting; + // True if dreams should be activated on sleep. + private boolean mDreamsActivateOnSleepSetting; + // The screen off timeout setting value in milliseconds. private int mScreenOffTimeoutSetting; @@ -356,6 +359,8 @@ public final class PowerManagerService extends IPowerManager.Stub final ContentResolver resolver = mContext.getContentResolver(); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.SCREENSAVER_ENABLED), false, mSettingsObserver); + resolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP), false, mSettingsObserver); resolver.registerContentObserver(Settings.System.getUriFor( Settings.System.SCREEN_OFF_TIMEOUT), false, mSettingsObserver); resolver.registerContentObserver(Settings.System.getUriFor( @@ -387,6 +392,8 @@ public final class PowerManagerService extends IPowerManager.Stub mDreamsEnabledSetting = (Settings.Secure.getInt(resolver, Settings.Secure.SCREENSAVER_ENABLED, 0) != 0); + mDreamsActivateOnSleepSetting = (Settings.Secure.getInt(resolver, + Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 0) != 0); mScreenOffTimeoutSetting = Settings.System.getInt(resolver, Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT); mStayOnWhilePluggedInSetting = Settings.System.getInt(resolver, @@ -1246,7 +1253,8 @@ public final class PowerManagerService extends IPowerManager.Stub * assuming there has been no recent user activity and no wake locks are held. */ private boolean canDreamLocked() { - return mIsPowered && mDreamsSupportedConfig && mDreamsEnabledSetting; + return mIsPowered && mDreamsSupportedConfig + && mDreamsEnabledSetting && mDreamsActivateOnSleepSetting; } /** @@ -1821,6 +1829,7 @@ public final class PowerManagerService extends IPowerManager.Stub pw.println("Settings and Configuration:"); pw.println(" mDreamsSupportedConfig=" + mDreamsSupportedConfig); pw.println(" mDreamsEnabledSetting=" + mDreamsEnabledSetting); + pw.println(" mDreamsActivateOnSleepSetting=" + mDreamsActivateOnSleepSetting); pw.println(" mScreenOffTimeoutSetting=" + mScreenOffTimeoutSetting); pw.println(" mMaximumScreenOffTimeoutFromDeviceAdmin=" + mMaximumScreenOffTimeoutFromDeviceAdmin + " (enforced=" |
