Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfd7b2de authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Update dream manager to allow dreams while postured" into main

parents 0a9fb1e7 03021f3c
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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();
        }
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -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);
+62 −10
Original line number Diff line number Diff line
@@ -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;

@@ -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();

@@ -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;

@@ -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.
@@ -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);
@@ -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);
@@ -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);
@@ -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,
@@ -508,6 +532,10 @@ public final class DreamManagerService extends SystemService {
                return mIsDocked;
            }

            if ((mWhenToDream & DREAM_ON_POSTURED) == DREAM_ON_POSTURED) {
                return mIsPostured;
            }

            return false;
        }
    }
@@ -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.
@@ -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) {