Skip to content

Commit 21b53df

Browse files
John SpurlockAndroid (Google) Code Review
authored andcommitted
Merge "Add framework support for multiple dreams." into jb-mr1-dev
2 parents 41d4332 + 1a868b7 commit 21b53df

File tree

9 files changed

+97
-27
lines changed

9 files changed

+97
-27
lines changed

api/current.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20056,6 +20056,7 @@ package android.service.dreams {
2005620056
method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
2005720057
method public void setInteractive(boolean);
2005820058
field public static final java.lang.String SERVICE_INTERFACE = "android.service.dreams.Dream";
20059+
field public static final java.lang.String METADATA_NAME_CONFIG_ACTIVITY = "android.service.dreams.config_activity";
2005920060
}
2006020061

2006120062
}

core/java/android/provider/Settings.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4248,27 +4248,40 @@ public static final String getBluetoothInputDevicePriorityKey(String address) {
42484248
"setup_prepaid_detection_redir_host";
42494249

42504250
/**
4251-
* Whether the screensaver is enabled.
4251+
* Whether screensavers are enabled.
42524252
* @hide
42534253
*/
42544254
public static final String SCREENSAVER_ENABLED = "screensaver_enabled";
42554255

42564256
/**
4257-
* The user's chosen screensaver component.
4257+
* The user's chosen screensaver components.
42584258
*
4259-
* This component will be launched by the PhoneWindowManager after a timeout when not on
4259+
* These will be launched by the PhoneWindowManager after a timeout when not on
42604260
* battery, or upon dock insertion (if SCREENSAVER_ACTIVATE_ON_DOCK is set to 1).
42614261
* @hide
42624262
*/
4263-
public static final String SCREENSAVER_COMPONENT = "screensaver_component";
4263+
public static final String SCREENSAVER_COMPONENTS = "screensaver_components";
42644264

42654265
/**
4266-
* Whether the screensaver should be automatically launched when the device is inserted
4267-
* into a (desk) dock.
4266+
* If screensavers are enabled, whether the screensaver should be automatically launched
4267+
* when the device is inserted into a (desk) dock.
42684268
* @hide
42694269
*/
42704270
public static final String SCREENSAVER_ACTIVATE_ON_DOCK = "screensaver_activate_on_dock";
42714271

4272+
/**
4273+
* If screensavers are enabled, whether the screensaver should be automatically launched
4274+
* when the screen times out when not on battery.
4275+
* @hide
4276+
*/
4277+
public static final String SCREENSAVER_ACTIVATE_ON_SLEEP = "screensaver_activate_on_sleep";
4278+
4279+
/**
4280+
* If screensavers are enabled, the default screensaver component.
4281+
* @hide
4282+
*/
4283+
public static final String SCREENSAVER_DEFAULT_COMPONENT = "screensaver_default_component";
4284+
42724285
/** {@hide} */
42734286
public static final String NETSTATS_ENABLED = "netstats_enabled";
42744287
/** {@hide} */

core/java/android/service/dreams/Dream.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ public class Dream extends Service implements Window.Callback {
5656
public static final String SERVICE_INTERFACE =
5757
"android.service.dreams.Dream";
5858

59+
/** Service meta-data key for declaring an optional configuration activity. */
60+
public static final String METADATA_NAME_CONFIG_ACTIVITY =
61+
"android.service.dreams.config_activity";
62+
5963
private Window mWindow;
6064

6165
private WindowManager mWindowManager;

core/java/android/service/dreams/DreamManagerService.java

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package android.service.dreams;
22

3-
import static android.provider.Settings.Secure.SCREENSAVER_COMPONENT;
4-
3+
import static android.provider.Settings.Secure.SCREENSAVER_COMPONENTS;
4+
import static android.provider.Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT;
55
import java.io.FileDescriptor;
66
import java.io.PrintWriter;
77

@@ -58,7 +58,8 @@ private void checkPermission(String permission) {
5858
// IDreamManager method
5959
@Override
6060
public void dream() {
61-
ComponentName name = getDreamComponent();
61+
ComponentName[] dreams = getDreamComponents();
62+
ComponentName name = dreams != null && dreams.length > 0 ? dreams[0] : null;
6263
if (name != null) {
6364
synchronized (mLock) {
6465
final long ident = Binder.clearCallingIdentity();
@@ -73,21 +74,45 @@ public void dream() {
7374

7475
// IDreamManager method
7576
@Override
76-
public void setDreamComponent(ComponentName name) {
77-
Settings.Secure.putString(mContext.getContentResolver(), SCREENSAVER_COMPONENT, name.flattenToString());
77+
public void setDreamComponents(ComponentName[] componentNames) {
78+
Settings.Secure.putString(mContext.getContentResolver(),
79+
SCREENSAVER_COMPONENTS,
80+
componentsToString(componentNames));
81+
}
82+
83+
private static String componentsToString(ComponentName[] componentNames) {
84+
StringBuilder names = new StringBuilder();
85+
if (componentNames != null) {
86+
for (ComponentName componentName : componentNames) {
87+
if (names.length() > 0)
88+
names.append(',');
89+
names.append(componentName.flattenToString());
90+
}
91+
}
92+
return names.toString();
93+
}
94+
95+
private static ComponentName[] componentsFromString(String names) {
96+
String[] namesArray = names.split(",");
97+
ComponentName[] componentNames = new ComponentName[namesArray.length];
98+
for (int i = 0; i < namesArray.length; i++)
99+
componentNames[i] = ComponentName.unflattenFromString(namesArray[i]);
100+
return componentNames;
78101
}
79102

80103
// IDreamManager method
81104
@Override
82-
public ComponentName getDreamComponent() {
105+
public ComponentName[] getDreamComponents() {
83106
// TODO(dsandler) don't load this every time, watch the value
84-
String component = Settings.Secure.getString(mContext.getContentResolver(), SCREENSAVER_COMPONENT);
85-
if (component != null) {
86-
return ComponentName.unflattenFromString(component);
87-
} else {
88-
// We rely on DatabaseHelper to set a sane default for us when the settings DB is upgraded
89-
return null;
90-
}
107+
String names = Settings.Secure.getString(mContext.getContentResolver(), SCREENSAVER_COMPONENTS);
108+
return componentsFromString(names);
109+
}
110+
111+
// IDreamManager method
112+
@Override
113+
public ComponentName getDefaultDreamComponent() {
114+
String name = Settings.Secure.getString(mContext.getContentResolver(), SCREENSAVER_DEFAULT_COMPONENT);
115+
return name == null ? null : ComponentName.unflattenFromString(name);
91116
}
92117

93118
// IDreamManager method

core/java/android/service/dreams/IDreamManager.aidl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ import android.content.ComponentName;
2424
interface IDreamManager {
2525
void dream();
2626
void awaken();
27-
void setDreamComponent(in ComponentName componentName);
28-
ComponentName getDreamComponent();
27+
void setDreamComponents(in ComponentName[] componentNames);
28+
ComponentName[] getDreamComponents();
29+
ComponentName getDefaultDreamComponent();
2930
void testDream(in ComponentName componentName);
3031
boolean isDreaming();
3132
}

packages/SettingsProvider/res/values/defaults.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@
157157
<bool name="def_screensaver_enabled">true</bool>
158158
<!-- Whether the feature activates when docked (SCREENSAVER_ACTIVATE_ON_DOCK) -->
159159
<bool name="def_screensaver_activate_on_dock">true</bool>
160+
<!-- Whether the feature activates when docked (SCREENSAVER_ACTIVATE_ON_SLEEP) -->
161+
<bool name="def_screensaver_activate_on_sleep">true</bool>
160162
<!-- ComponentName of the default screen saver (Settings.Secure.SCREENSAVER_COMPONENT) -->
161163
<string name="def_screensaver_component">com.google.android.deskclock/com.android.deskclock.Screensaver</string>
162164
</resources>

packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,7 +1131,11 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
11311131
R.bool.def_screensaver_enabled);
11321132
loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
11331133
R.bool.def_screensaver_activate_on_dock);
1134-
loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENT,
1134+
loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
1135+
R.bool.def_screensaver_activate_on_sleep);
1136+
loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
1137+
R.string.def_screensaver_component);
1138+
loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS,
11351139
R.string.def_screensaver_component);
11361140
db.setTransactionSuccessful();
11371141
} finally {
@@ -1746,7 +1750,11 @@ private void loadSecureSettings(SQLiteDatabase db) {
17461750
R.bool.def_screensaver_enabled);
17471751
loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
17481752
R.bool.def_screensaver_activate_on_dock);
1749-
loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENT,
1753+
loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
1754+
R.bool.def_screensaver_activate_on_sleep);
1755+
loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS,
1756+
R.string.def_screensaver_component);
1757+
loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
17501758
R.string.def_screensaver_component);
17511759
} finally {
17521760
if (stmt != null) stmt.close();

services/java/com/android/server/DockObserver.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.android.server;
1818

1919
import static android.provider.Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK;
20+
import static android.provider.Settings.Secure.SCREENSAVER_ENABLED;
2021

2122
import android.content.ContentResolver;
2223
import android.content.Context;
@@ -51,7 +52,8 @@ final class DockObserver extends UEventObserver {
5152
private static final String DOCK_UEVENT_MATCH = "DEVPATH=/devices/virtual/switch/dock";
5253
private static final String DOCK_STATE_PATH = "/sys/class/switch/dock/state";
5354

54-
private static final int DEFAULT_DOCK = 1;
55+
private static final int DEFAULT_SCREENSAVER_ENABLED = 1;
56+
private static final int DEFAULT_SCREENSAVER_ACTIVATED_ON_DOCK = 1;
5557

5658
private static final int MSG_DOCK_STATE_CHANGED = 0;
5759

@@ -214,7 +216,7 @@ private void handleDockStateChange() {
214216
Slog.w(TAG, "Unable to awaken!", e);
215217
}
216218
} else {
217-
if (isScreenSaverActivatedOnDock(mContext)) {
219+
if (isScreenSaverEnabled(mContext) && isScreenSaverActivatedOnDock(mContext)) {
218220
try {
219221
mgr.dream();
220222
} catch (RemoteException e) {
@@ -229,9 +231,14 @@ private void handleDockStateChange() {
229231
}
230232
}
231233

234+
private static boolean isScreenSaverEnabled(Context context) {
235+
return Settings.Secure.getInt(context.getContentResolver(),
236+
SCREENSAVER_ENABLED, DEFAULT_SCREENSAVER_ENABLED) != 0;
237+
}
238+
232239
private static boolean isScreenSaverActivatedOnDock(Context context) {
233240
return Settings.Secure.getInt(context.getContentResolver(),
234-
SCREENSAVER_ACTIVATE_ON_DOCK, DEFAULT_DOCK) != 0;
241+
SCREENSAVER_ACTIVATE_ON_DOCK, DEFAULT_SCREENSAVER_ACTIVATED_ON_DOCK) != 0;
235242
}
236243

237244
private final Handler mHandler = new Handler(Looper.myLooper(), null, true) {

services/java/com/android/server/power/PowerManagerService.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,9 @@ public final class PowerManagerService extends IPowerManager.Stub
227227
// True if dreams are enabled by the user.
228228
private boolean mDreamsEnabledSetting;
229229

230+
// True if dreams should be activated on sleep.
231+
private boolean mDreamsActivateOnSleepSetting;
232+
230233
// The screen off timeout setting value in milliseconds.
231234
private int mScreenOffTimeoutSetting;
232235

@@ -356,6 +359,8 @@ public void systemReady(TwilightService twilight) {
356359
final ContentResolver resolver = mContext.getContentResolver();
357360
resolver.registerContentObserver(Settings.Secure.getUriFor(
358361
Settings.Secure.SCREENSAVER_ENABLED), false, mSettingsObserver);
362+
resolver.registerContentObserver(Settings.Secure.getUriFor(
363+
Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP), false, mSettingsObserver);
359364
resolver.registerContentObserver(Settings.System.getUriFor(
360365
Settings.System.SCREEN_OFF_TIMEOUT), false, mSettingsObserver);
361366
resolver.registerContentObserver(Settings.System.getUriFor(
@@ -387,6 +392,8 @@ private void updateSettingsLocked() {
387392

388393
mDreamsEnabledSetting = (Settings.Secure.getInt(resolver,
389394
Settings.Secure.SCREENSAVER_ENABLED, 0) != 0);
395+
mDreamsActivateOnSleepSetting = (Settings.Secure.getInt(resolver,
396+
Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 0) != 0);
390397
mScreenOffTimeoutSetting = Settings.System.getInt(resolver,
391398
Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT);
392399
mStayOnWhilePluggedInSetting = Settings.System.getInt(resolver,
@@ -1246,7 +1253,8 @@ private void handleSandman() { // runs on handler thread
12461253
* assuming there has been no recent user activity and no wake locks are held.
12471254
*/
12481255
private boolean canDreamLocked() {
1249-
return mIsPowered && mDreamsSupportedConfig && mDreamsEnabledSetting;
1256+
return mIsPowered && mDreamsSupportedConfig
1257+
&& mDreamsEnabledSetting && mDreamsActivateOnSleepSetting;
12501258
}
12511259

12521260
/**
@@ -1822,6 +1830,7 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
18221830
pw.println("Settings and Configuration:");
18231831
pw.println(" mDreamsSupportedConfig=" + mDreamsSupportedConfig);
18241832
pw.println(" mDreamsEnabledSetting=" + mDreamsEnabledSetting);
1833+
pw.println(" mDreamsActivateOnSleepSetting=" + mDreamsActivateOnSleepSetting);
18251834
pw.println(" mScreenOffTimeoutSetting=" + mScreenOffTimeoutSetting);
18261835
pw.println(" mMaximumScreenOffTimeoutFromDeviceAdmin="
18271836
+ mMaximumScreenOffTimeoutFromDeviceAdmin + " (enforced="

0 commit comments

Comments
 (0)