Introduce AMS.getLastResumedActivityUserId to fix work profile icon issue
Problem:
Work profile status bar icon feeature is relied on two callbacks
1. onForegroundProfileSwitch (AMS.setResumedActivityLocked)
2. appTransitionStarting (WMS)
We assume callback 1 is always called before 2, but it is not the case.
These two callbacks are triggered by two handlers in two different threads,
and hence race condition happens.
Solution:
Not rely on onForegroundProfileSwitch to update mManagedProfileFocused
flag anymore. Query getLastResumedActivityUserId in appTransitionStarting.
Also, make sure mLastResumedActivity is updated before sending message
to WMS in setResumedActivityLocked.
Test: Start a work app, observe that the work icon is shown.
Test: Start a personal app, observe that work icon is gone.
Test: Dock the work app, tap on it (give it focus), observe that work
icon is shown.
Test: Start a work app, switch user, can see the icon is gone. Switch back,
icon is back.
Bug: 34159089
Change-Id: I2cee141d18e8b7d5607b26dd7a2fd5bc9cd0ebb3
This commit is contained in:
@@ -629,6 +629,11 @@ interface IActivityManager {
|
||||
*/
|
||||
void setDisablePreviewScreenshots(IBinder token, boolean disable);
|
||||
|
||||
/**
|
||||
* Return the user id of last resumed activity.
|
||||
*/
|
||||
int getLastResumedActivityUserId();
|
||||
|
||||
// WARNING: when these transactions are updated, check if they are any callers on the native
|
||||
// side. If so, make sure they are using the correct transaction ids and arguments.
|
||||
// If a transaction which will also be used on the native side is being inserted, add it
|
||||
|
||||
Reference in New Issue
Block a user