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:
committed by
Yuncheol Heo
parent
7a1bfdd0a1
commit
4ab0f4fe43
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user