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

Commit fc38db5a authored by Wei Sheng Shih's avatar Wei Sheng Shih
Browse files

Revert "Use display awake signal to replace screen-off signal for sleep token."

This reverts commit 357fe2f1.

Reason for revert: stop activities by PW#isInteractive can break wear API (https://developer.android.com/training/wearables/overlays/always-on)

Bug: 208693537
Change-Id: Ib076e417036140bf8f9b10d1c76741a27cddcec0
parent 357fe2f1
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -519,6 +519,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    private boolean mPendingKeyguardOccluded;
    private boolean mKeyguardOccludedChanged;

    private ActivityTaskManagerInternal.SleepTokenAcquirer mScreenOffSleepTokenAcquirer;
    Intent mHomeIntent;
    Intent mCarDockIntent;
    Intent mDeskDockIntent;
@@ -1816,6 +1817,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                new AccessibilityShortcutController(mContext, new Handler(), mCurrentUserId);
        mLogger = new MetricsLogger();

        mScreenOffSleepTokenAcquirer = mActivityTaskManagerInternal
                .createSleepTokenAcquirer("ScreenOff");

        Resources res = mContext.getResources();
        mWakeOnDpadKeyPress =
                res.getBoolean(com.android.internal.R.bool.config_wakeOnDpadKeyPress);
@@ -4481,6 +4485,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        if (DEBUG_WAKEUP) Slog.i(TAG, "Display" + displayId + " turned off...");

        if (displayId == DEFAULT_DISPLAY) {
            updateScreenOffSleepToken(true);
            mRequestedOrSleepingDefaultDisplay = false;
            mDefaultDisplayPolicy.screenTurnedOff();
            synchronized (mLock) {
@@ -4513,6 +4518,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        if (displayId == DEFAULT_DISPLAY) {
            Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenTurningOn",
                    0 /* cookie */);
            updateScreenOffSleepToken(false);
            mDefaultDisplayPolicy.screenTurnedOn(screenOnListener);
            mBootAnimationDismissable = false;

@@ -5033,6 +5039,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    // TODO (multidisplay): Support multiple displays in WindowManagerPolicy.
    private void updateScreenOffSleepToken(boolean acquire) {
        if (acquire) {
            mScreenOffSleepTokenAcquirer.acquire(DEFAULT_DISPLAY);
        } else {
            mScreenOffSleepTokenAcquirer.release(DEFAULT_DISPLAY);
        }
    }

    /** {@inheritDoc} */
    @Override
    public void enableScreenAfterBoot() {
+29 −0
Original line number Diff line number Diff line
@@ -125,6 +125,35 @@ public abstract class ActivityTaskManagerInternal {
        void onKeyguardStateChanged(boolean isShowing);
    }

    /**
     * Sleep tokens cause the activity manager to put the top activity to sleep.
     * They are used by components such as dreams that may hide and block interaction
     * with underlying activities.
     * The Acquirer provides an interface that encapsulates the underlying work, so the user does
     * not need to handle the token by him/herself.
     */
    public interface SleepTokenAcquirer {

        /**
         * Acquires a sleep token.
         * @param displayId The display to apply to.
         */
        void acquire(int displayId);

        /**
         * Releases the sleep token.
         * @param displayId The display to apply to.
         */
        void release(int displayId);
    }

    /**
     * Creates a sleep token acquirer for the specified display with the specified tag.
     *
     * @param tag A string identifying the purpose (eg. "Dream").
     */
    public abstract SleepTokenAcquirer createSleepTokenAcquirer(@NonNull String tag);

    /**
     * Returns home activity for the specified user.
     *
+12 −17
Original line number Diff line number Diff line
@@ -4544,25 +4544,17 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
                reason);
    }

    /**
     * Sleep tokens cause the activity manager to put the top activity to sleep.
     * They are used by components such as dreams that may hide and block interaction
     * with underlying activities.
     */
    final class SleepTokenAcquirer {
    final class SleepTokenAcquirerImpl implements ActivityTaskManagerInternal.SleepTokenAcquirer {
        private final String mTag;
        private final SparseArray<RootWindowContainer.SleepToken> mSleepTokens =
                new SparseArray<>();

        SleepTokenAcquirer(@NonNull String tag) {
        SleepTokenAcquirerImpl(@NonNull String tag) {
            mTag = tag;
        }

        /**
         * Acquires a sleep token.
         * @param displayId The display to apply to.
         */
        void acquire(int displayId) {
        @Override
        public void acquire(int displayId) {
            synchronized (mGlobalLock) {
                if (!mSleepTokens.contains(displayId)) {
                    mSleepTokens.append(displayId,
@@ -4572,11 +4564,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
            }
        }

        /**
         * Releases the sleep token.
         * @param displayId The display to apply to.
         */
        void release(int displayId) {
        @Override
        public void release(int displayId) {
            synchronized (mGlobalLock) {
                final RootWindowContainer.SleepToken token = mSleepTokens.get(displayId);
                if (token != null) {
@@ -5265,6 +5254,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    }

    final class LocalService extends ActivityTaskManagerInternal {
        @Override
        public SleepTokenAcquirer createSleepTokenAcquirer(@NonNull String tag) {
            Objects.requireNonNull(tag);
            return new SleepTokenAcquirerImpl(tag);
        }

        @Override
        public ComponentName getHomeActivityForUser(int userId) {
            synchronized (mGlobalLock) {
+3 −11
Original line number Diff line number Diff line
@@ -662,7 +662,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    /** All tokens used to put activities on this root task to sleep (including mOffToken) */
    final ArrayList<RootWindowContainer.SleepToken> mAllSleepTokens = new ArrayList<>();
    /** The token acquirer to put root tasks on the display to sleep */
    private final ActivityTaskManagerService.SleepTokenAcquirer mOffTokenAcquirer;
    private final ActivityTaskManagerInternal.SleepTokenAcquirer mOffTokenAcquirer;

    private boolean mSleeping;

@@ -5424,14 +5424,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        return mMetricsLogger;
    }

    void acquireScreenOffToken(boolean acquire) {
        if (acquire) {
            mOffTokenAcquirer.acquire(mDisplayId);
        } else {
            mOffTokenAcquirer.release(mDisplayId);
        }
    }

    void onDisplayChanged() {
        mDisplay.getRealSize(mTmpDisplaySize);
        setBounds(0, 0, mTmpDisplaySize.x, mTmpDisplaySize.y);
@@ -5442,9 +5434,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        if (displayId != DEFAULT_DISPLAY) {
            final int displayState = mDisplay.getState();
            if (displayState == Display.STATE_OFF) {
                acquireScreenOffToken(true /* acquire */);
                mOffTokenAcquirer.acquire(mDisplayId);
            } else if (displayState == Display.STATE_ON) {
                acquireScreenOffToken(false /* acquire */);
                mOffTokenAcquirer.release(mDisplayId);
            }
            ProtoLog.v(WM_DEBUG_LAYER_MIRRORING,
                    "Display %d state is now (%d), so update layer mirroring?",
+0 −4
Original line number Diff line number Diff line
@@ -752,10 +752,6 @@ public class DisplayPolicy {

    public void setAwake(boolean awake) {
        mAwake = awake;
        // The screen off token for non-default display is controlled by DisplayContent.
        if (mDisplayContent.isDefaultDisplay) {
            mDisplayContent.acquireScreenOffToken(!awake);
        }
    }

    public boolean isAwake() {
Loading