Loading core/java/android/app/DreamManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -234,4 +234,19 @@ public class DreamManager { throw e.rethrowFromSystemServer(); } } /** * Notifies dream manager of device postured state, which may affect dream enablement. * * @hide */ @FlaggedApi(Flags.FLAG_ALLOW_DREAM_WHEN_POSTURED) @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void setDevicePostured(boolean isPostured) { try { mService.setDevicePostured(isPostured); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } } core/java/android/service/dreams/IDreamManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ interface IDreamManager { void startDreamActivity(in Intent intent); @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE)") oneway void setDreamIsObscured(in boolean isObscured); @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE)") oneway void setDevicePostured(in boolean isPostured); oneway void startDozingOneway(in IBinder token, int screenState, int reason, float screenBrightnessFloat, int screenBrightnessInt, boolean useNormalBrightnessForDoze); Loading services/core/java/com/android/server/dreams/DreamManagerService.java +62 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.Manifest.permission.BIND_DREAM_SERVICE; import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.service.dreams.Flags.allowDreamWhenPostured; import static android.service.dreams.Flags.cleanupDreamSettingsOnUninstall; import static android.service.dreams.Flags.dreamHandlesBeingObscured; Loading Loading @@ -110,12 +111,13 @@ public final class DreamManagerService extends SystemService { /** Constants for the when to activate dreams. */ @Retention(RetentionPolicy.SOURCE) @IntDef({DREAM_ON_DOCK, DREAM_ON_CHARGE, DREAM_ON_DOCK_OR_CHARGE}) @IntDef({DREAM_DISABLED, DREAM_ON_DOCK, DREAM_ON_CHARGE, DREAM_ON_POSTURED}) public @interface WhenToDream {} private static final int DREAM_DISABLED = 0x0; private static final int DREAM_ON_DOCK = 0x1; private static final int DREAM_ON_CHARGE = 0x2; private static final int DREAM_ON_DOCK_OR_CHARGE = 0x3; private static final int DREAM_DISABLED = 0; private static final int DREAM_ON_DOCK = 1 << 0; private static final int DREAM_ON_CHARGE = 1 << 1; private static final int DREAM_ON_POSTURED = 1 << 2; private final Object mLock = new Object(); Loading @@ -137,6 +139,7 @@ public final class DreamManagerService extends SystemService { private final boolean mDreamsEnabledByDefaultConfig; private final boolean mDreamsActivatedOnChargeByDefault; private final boolean mDreamsActivatedOnDockByDefault; private final boolean mDreamsActivatedOnPosturedByDefault; private final boolean mKeepDreamingWhenUnpluggingDefault; private final boolean mDreamsDisabledByAmbientModeSuppressionConfig; Loading @@ -152,6 +155,7 @@ public final class DreamManagerService extends SystemService { @WhenToDream private int mWhenToDream; private boolean mIsDocked; private boolean mIsCharging; private boolean mIsPostured; // A temporary dream component that, when present, takes precedence over user configured dream // component. Loading Loading @@ -270,6 +274,8 @@ public final class DreamManagerService extends SystemService { com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault); mDreamsActivatedOnDockByDefault = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault); mDreamsActivatedOnPosturedByDefault = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsActivatedOnPosturedByDefault); mSettingsObserver = new SettingsObserver(mHandler); mKeepDreamingWhenUnpluggingDefault = mContext.getResources().getBoolean( com.android.internal.R.bool.config_keepDreamingWhenUnplugging); Loading Loading @@ -327,6 +333,9 @@ public final class DreamManagerService extends SystemService { mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK), false, mSettingsObserver, UserHandle.USER_ALL); mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED), false, mSettingsObserver, UserHandle.USER_ALL); mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.SCREENSAVER_ENABLED), false, mSettingsObserver, UserHandle.USER_ALL); Loading Loading @@ -392,6 +401,8 @@ public final class DreamManagerService extends SystemService { pw.println("mDreamsEnabledSetting=" + mDreamsEnabledSetting); pw.println("mDreamsActivatedOnDockByDefault=" + mDreamsActivatedOnDockByDefault); pw.println("mDreamsActivatedOnChargeByDefault=" + mDreamsActivatedOnChargeByDefault); pw.println("mDreamsActivatedOnPosturedByDefault=" + mDreamsActivatedOnPosturedByDefault); pw.println("mIsDocked=" + mIsDocked); pw.println("mIsCharging=" + mIsCharging); pw.println("mWhenToDream=" + mWhenToDream); Loading @@ -409,15 +420,28 @@ public final class DreamManagerService extends SystemService { synchronized (mLock) { final ContentResolver resolver = mContext.getContentResolver(); final int activateWhenCharging = (Settings.Secure.getIntForUser(resolver, mWhenToDream = DREAM_DISABLED; if ((Settings.Secure.getIntForUser(resolver, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, mDreamsActivatedOnChargeByDefault ? 1 : 0, UserHandle.USER_CURRENT) != 0) ? DREAM_ON_CHARGE : DREAM_DISABLED; final int activateWhenDocked = (Settings.Secure.getIntForUser(resolver, UserHandle.USER_CURRENT) != 0)) { mWhenToDream |= DREAM_ON_CHARGE; } if (Settings.Secure.getIntForUser(resolver, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, mDreamsActivatedOnDockByDefault ? 1 : 0, UserHandle.USER_CURRENT) != 0) ? DREAM_ON_DOCK : DREAM_DISABLED; mWhenToDream = activateWhenCharging + activateWhenDocked; UserHandle.USER_CURRENT) != 0) { mWhenToDream |= DREAM_ON_DOCK; } if (Settings.Secure.getIntForUser(resolver, Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, mDreamsActivatedOnPosturedByDefault ? 1 : 0, UserHandle.USER_CURRENT) != 0) { mWhenToDream |= DREAM_ON_POSTURED; } mDreamsEnabledSetting = (Settings.Secure.getIntForUser(resolver, Settings.Secure.SCREENSAVER_ENABLED, Loading Loading @@ -508,6 +532,10 @@ public final class DreamManagerService extends SystemService { return mIsDocked; } if ((mWhenToDream & DREAM_ON_POSTURED) == DREAM_ON_POSTURED) { return mIsPostured; } return false; } } Loading Loading @@ -646,6 +674,14 @@ public final class DreamManagerService extends SystemService { } } private void setDevicePosturedInternal(boolean isPostured) { Slog.d(TAG, "Device postured: " + isPostured); synchronized (mLock) { mIsPostured = isPostured; mHandler.post(() -> mPowerManagerInternal.setDevicePostured(isPostured)); } } /** * If doze is true, returns the doze component for the user. * Otherwise, returns the system dream component, if present. Loading Loading @@ -1294,6 +1330,22 @@ public final class DreamManagerService extends SystemService { } } @Override public void setDevicePostured(boolean isPostured) { if (!allowDreamWhenPostured()) { return; } checkPermission(android.Manifest.permission.WRITE_DREAM_STATE); final long ident = Binder.clearCallingIdentity(); try { setDevicePosturedInternal(isPostured); } finally { Binder.restoreCallingIdentity(ident); } } boolean canLaunchDreamActivity(String dreamPackageName, String packageName, int callingUid) { if (dreamPackageName == null || packageName == null) { Loading Loading
core/java/android/app/DreamManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -234,4 +234,19 @@ public class DreamManager { throw e.rethrowFromSystemServer(); } } /** * Notifies dream manager of device postured state, which may affect dream enablement. * * @hide */ @FlaggedApi(Flags.FLAG_ALLOW_DREAM_WHEN_POSTURED) @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void setDevicePostured(boolean isPostured) { try { mService.setDevicePostured(isPostured); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } }
core/java/android/service/dreams/IDreamManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ interface IDreamManager { void startDreamActivity(in Intent intent); @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE)") oneway void setDreamIsObscured(in boolean isObscured); @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE)") oneway void setDevicePostured(in boolean isPostured); oneway void startDozingOneway(in IBinder token, int screenState, int reason, float screenBrightnessFloat, int screenBrightnessInt, boolean useNormalBrightnessForDoze); Loading
services/core/java/com/android/server/dreams/DreamManagerService.java +62 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.Manifest.permission.BIND_DREAM_SERVICE; import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.service.dreams.Flags.allowDreamWhenPostured; import static android.service.dreams.Flags.cleanupDreamSettingsOnUninstall; import static android.service.dreams.Flags.dreamHandlesBeingObscured; Loading Loading @@ -110,12 +111,13 @@ public final class DreamManagerService extends SystemService { /** Constants for the when to activate dreams. */ @Retention(RetentionPolicy.SOURCE) @IntDef({DREAM_ON_DOCK, DREAM_ON_CHARGE, DREAM_ON_DOCK_OR_CHARGE}) @IntDef({DREAM_DISABLED, DREAM_ON_DOCK, DREAM_ON_CHARGE, DREAM_ON_POSTURED}) public @interface WhenToDream {} private static final int DREAM_DISABLED = 0x0; private static final int DREAM_ON_DOCK = 0x1; private static final int DREAM_ON_CHARGE = 0x2; private static final int DREAM_ON_DOCK_OR_CHARGE = 0x3; private static final int DREAM_DISABLED = 0; private static final int DREAM_ON_DOCK = 1 << 0; private static final int DREAM_ON_CHARGE = 1 << 1; private static final int DREAM_ON_POSTURED = 1 << 2; private final Object mLock = new Object(); Loading @@ -137,6 +139,7 @@ public final class DreamManagerService extends SystemService { private final boolean mDreamsEnabledByDefaultConfig; private final boolean mDreamsActivatedOnChargeByDefault; private final boolean mDreamsActivatedOnDockByDefault; private final boolean mDreamsActivatedOnPosturedByDefault; private final boolean mKeepDreamingWhenUnpluggingDefault; private final boolean mDreamsDisabledByAmbientModeSuppressionConfig; Loading @@ -152,6 +155,7 @@ public final class DreamManagerService extends SystemService { @WhenToDream private int mWhenToDream; private boolean mIsDocked; private boolean mIsCharging; private boolean mIsPostured; // A temporary dream component that, when present, takes precedence over user configured dream // component. Loading Loading @@ -270,6 +274,8 @@ public final class DreamManagerService extends SystemService { com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault); mDreamsActivatedOnDockByDefault = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault); mDreamsActivatedOnPosturedByDefault = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsActivatedOnPosturedByDefault); mSettingsObserver = new SettingsObserver(mHandler); mKeepDreamingWhenUnpluggingDefault = mContext.getResources().getBoolean( com.android.internal.R.bool.config_keepDreamingWhenUnplugging); Loading Loading @@ -327,6 +333,9 @@ public final class DreamManagerService extends SystemService { mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK), false, mSettingsObserver, UserHandle.USER_ALL); mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED), false, mSettingsObserver, UserHandle.USER_ALL); mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.SCREENSAVER_ENABLED), false, mSettingsObserver, UserHandle.USER_ALL); Loading Loading @@ -392,6 +401,8 @@ public final class DreamManagerService extends SystemService { pw.println("mDreamsEnabledSetting=" + mDreamsEnabledSetting); pw.println("mDreamsActivatedOnDockByDefault=" + mDreamsActivatedOnDockByDefault); pw.println("mDreamsActivatedOnChargeByDefault=" + mDreamsActivatedOnChargeByDefault); pw.println("mDreamsActivatedOnPosturedByDefault=" + mDreamsActivatedOnPosturedByDefault); pw.println("mIsDocked=" + mIsDocked); pw.println("mIsCharging=" + mIsCharging); pw.println("mWhenToDream=" + mWhenToDream); Loading @@ -409,15 +420,28 @@ public final class DreamManagerService extends SystemService { synchronized (mLock) { final ContentResolver resolver = mContext.getContentResolver(); final int activateWhenCharging = (Settings.Secure.getIntForUser(resolver, mWhenToDream = DREAM_DISABLED; if ((Settings.Secure.getIntForUser(resolver, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, mDreamsActivatedOnChargeByDefault ? 1 : 0, UserHandle.USER_CURRENT) != 0) ? DREAM_ON_CHARGE : DREAM_DISABLED; final int activateWhenDocked = (Settings.Secure.getIntForUser(resolver, UserHandle.USER_CURRENT) != 0)) { mWhenToDream |= DREAM_ON_CHARGE; } if (Settings.Secure.getIntForUser(resolver, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, mDreamsActivatedOnDockByDefault ? 1 : 0, UserHandle.USER_CURRENT) != 0) ? DREAM_ON_DOCK : DREAM_DISABLED; mWhenToDream = activateWhenCharging + activateWhenDocked; UserHandle.USER_CURRENT) != 0) { mWhenToDream |= DREAM_ON_DOCK; } if (Settings.Secure.getIntForUser(resolver, Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, mDreamsActivatedOnPosturedByDefault ? 1 : 0, UserHandle.USER_CURRENT) != 0) { mWhenToDream |= DREAM_ON_POSTURED; } mDreamsEnabledSetting = (Settings.Secure.getIntForUser(resolver, Settings.Secure.SCREENSAVER_ENABLED, Loading Loading @@ -508,6 +532,10 @@ public final class DreamManagerService extends SystemService { return mIsDocked; } if ((mWhenToDream & DREAM_ON_POSTURED) == DREAM_ON_POSTURED) { return mIsPostured; } return false; } } Loading Loading @@ -646,6 +674,14 @@ public final class DreamManagerService extends SystemService { } } private void setDevicePosturedInternal(boolean isPostured) { Slog.d(TAG, "Device postured: " + isPostured); synchronized (mLock) { mIsPostured = isPostured; mHandler.post(() -> mPowerManagerInternal.setDevicePostured(isPostured)); } } /** * If doze is true, returns the doze component for the user. * Otherwise, returns the system dream component, if present. Loading Loading @@ -1294,6 +1330,22 @@ public final class DreamManagerService extends SystemService { } } @Override public void setDevicePostured(boolean isPostured) { if (!allowDreamWhenPostured()) { return; } checkPermission(android.Manifest.permission.WRITE_DREAM_STATE); final long ident = Binder.clearCallingIdentity(); try { setDevicePosturedInternal(isPostured); } finally { Binder.restoreCallingIdentity(ident); } } boolean canLaunchDreamActivity(String dreamPackageName, String packageName, int callingUid) { if (dreamPackageName == null || packageName == null) { Loading