Temporary fix on isUserVisibleOnDisplay(userId, displayId).

WM will use this API, but the current implementation would break
the behavior on non-passenger displays (like cluster, display, or
virtual displays).

So, this CL is (temporarily) changing the API to always return true
for the current user (and its profiles), regardless of the display;
the long-term solution would require integrating UserManagerService
with DisplayManagerService for displays management.

Also added a UserManagerInternal.isUserVisible(userId) method (which
will be used by WM during Activity transition).

Test: adb shell am start-user --display 42 13 && \
      adb shell cmd user is-user-visible --display 42 0
Bug: 244644281

Change-Id: I5330016e0123e85c0f2ab3fc24a4f683994fdfe8
This commit is contained in:
Felipe Leme
2022-09-02 11:49:17 -07:00
committed by Yuncheol Heo
parent 7a1bfdd0a1
commit 4ab0f4fe43
2 changed files with 18 additions and 0 deletions

View File

@@ -329,6 +329,12 @@ public abstract class UserManagerInternal {
*/
public abstract void unassignUserFromDisplay(@UserIdInt int userId);
/**
* Returns {@code true} if the user is visible (as defined by
* {@link UserManager#isUserVisible()}.
*/
public abstract boolean isUserVisible(@UserIdInt int userId);
/**
* Returns {@code true} if the user is visible (as defined by
* {@link UserManager#isUserVisible()} in the given display.

View File

@@ -1770,6 +1770,13 @@ public class UserManagerService extends IUserManager.Stub {
// TODO(b/239982558): try to merge with isUserVisibleUnchecked() (once both are unit tested)
boolean isUserVisibleOnDisplay(@UserIdInt int userId, int displayId) {
// TODO(b/244644281): temporary workaround to let WM use this API without breaking current
// behavior (otherwise current user / profiles wouldn't be able to launch activities on
// other non-passenger displays, like cluster, display, or virtual displays)
if (isCurrentUserOrRunningProfileOfCurrentUser(userId)) {
return true;
}
if (displayId == Display.DEFAULT_DISPLAY) {
return isCurrentUserOrRunningProfileOfCurrentUser(userId);
}
@@ -6727,6 +6734,11 @@ public class UserManagerService extends IUserManager.Stub {
}
}
@Override
public boolean isUserVisible(int userId) {
return isUserVisibleUnchecked(userId);
}
@Override
public boolean isUserVisible(int userId, int displayId) {
return isUserVisibleOnDisplay(userId, displayId);