Merge "Revert "Use display awake signal to replace screen-off signal for sleep token."" into sc-v2-dev

This commit is contained in:
Wei Sheng Shih
2021-10-18 09:33:12 +00:00
committed by Android (Google) Code Review
7 changed files with 65 additions and 38 deletions

View File

@@ -507,6 +507,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private boolean mPendingKeyguardOccluded;
private boolean mKeyguardOccludedChanged;
private ActivityTaskManagerInternal.SleepTokenAcquirer mScreenOffSleepTokenAcquirer;
Intent mHomeIntent;
Intent mCarDockIntent;
Intent mDeskDockIntent;
@@ -1622,6 +1623,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);
@@ -4381,6 +4385,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) {
@@ -4413,6 +4418,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;
@@ -4927,6 +4933,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() {

View File

@@ -123,6 +123,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.
*

View File

@@ -4533,25 +4533,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,
@@ -4561,11 +4553,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) {
@@ -5242,6 +5231,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) {

View File

@@ -685,7 +685,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;
@@ -5549,14 +5549,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);
@@ -5567,9 +5559,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?",

View File

@@ -778,10 +778,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() {

View File

@@ -80,14 +80,14 @@ class KeyguardController {
private final SparseArray<KeyguardDisplayState> mDisplayStates = new SparseArray<>();
private final ActivityTaskManagerService mService;
private RootWindowContainer mRootWindowContainer;
private final ActivityTaskManagerService.SleepTokenAcquirer mSleepTokenAcquirer;
private final ActivityTaskManagerInternal.SleepTokenAcquirer mSleepTokenAcquirer;
KeyguardController(ActivityTaskManagerService service,
ActivityTaskSupervisor taskSupervisor) {
mService = service;
mTaskSupervisor = taskSupervisor;
mSleepTokenAcquirer = mService.new SleepTokenAcquirer(KEYGUARD_SLEEP_TOKEN_TAG);
mSleepTokenAcquirer = mService.new SleepTokenAcquirerImpl(KEYGUARD_SLEEP_TOKEN_TAG);
}
void setWindowManager(WindowManagerService windowManager) {
@@ -505,10 +505,10 @@ class KeyguardController {
private boolean mRequestDismissKeyguard;
private final ActivityTaskManagerService mService;
private final ActivityTaskManagerService.SleepTokenAcquirer mSleepTokenAcquirer;
private final ActivityTaskManagerInternal.SleepTokenAcquirer mSleepTokenAcquirer;
KeyguardDisplayState(ActivityTaskManagerService service, int displayId,
ActivityTaskManagerService.SleepTokenAcquirer acquirer) {
ActivityTaskManagerInternal.SleepTokenAcquirer acquirer) {
mService = service;
mDisplayId = displayId;
mSleepTokenAcquirer = acquirer;

View File

@@ -226,7 +226,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
private static final String DISPLAY_OFF_SLEEP_TOKEN_TAG = "Display-off";
/** The token acquirer to put root tasks on the displays to sleep */
final ActivityTaskManagerService.SleepTokenAcquirer mDisplayOffTokenAcquirer;
final ActivityTaskManagerInternal.SleepTokenAcquirer mDisplayOffTokenAcquirer;
/**
* The modes which affect which tasks are returned when calling
@@ -472,7 +472,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
mService = service.mAtmService;
mTaskSupervisor = mService.mTaskSupervisor;
mTaskSupervisor.mRootWindowContainer = this;
mDisplayOffTokenAcquirer = mService.new SleepTokenAcquirer(DISPLAY_OFF_SLEEP_TOKEN_TAG);
mDisplayOffTokenAcquirer = mService.new SleepTokenAcquirerImpl(DISPLAY_OFF_SLEEP_TOKEN_TAG);
}
boolean updateFocusedWindowLocked(int mode, boolean updateInputWindows) {