am 21b53df7: Merge "Add framework support for multiple dreams." into jb-mr1-dev
* commit '21b53df7c3fc7501c9c9e238eb820a6dcf992650': Add framework support for multiple dreams.
This commit is contained in:
@@ -20056,6 +20056,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";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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} */
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1822,6 +1830,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="
|
||||
|
||||
Reference in New Issue
Block a user