diff options
4 files changed, 25 insertions, 42 deletions
diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java index ee7033e4a437..7527ddbfb394 100644 --- a/services/core/java/com/android/server/am/AppErrors.java +++ b/services/core/java/com/android/server/am/AppErrors.java @@ -65,7 +65,6 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.server.LocalServices; import com.android.server.PackageWatchdog; import com.android.server.pm.UserManagerInternal; -import com.android.server.pm.UserManagerService; import com.android.server.usage.AppStandbyInternal; import com.android.server.wm.WindowProcessController; @@ -1027,7 +1026,8 @@ class AppErrors { isBackground &= (userId != profileId); } int visibleUserId = getVisibleUserId(userId); - boolean isVisibleUser = isVisibleBackgroundUser(visibleUserId); + boolean isVisibleUser = LocalServices.getService(UserManagerInternal.class) + .isVisibleBackgroundFullUser(visibleUserId); boolean showBackground = Settings.Secure.getIntForUser(mContext.getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0, visibleUserId) != 0; if (isBackground && !showBackground && !isVisibleUser) { @@ -1183,26 +1183,6 @@ class AppErrors { } /** - * Checks if the given user is a visible background user, which is a full, background user - * assigned to secondary displays on the devices that have - * {@link UserManager#isVisibleBackgroundUsersEnabled() - * config_multiuserVisibleBackgroundUsers enabled} (for example, passenger users on - * automotive builds, using the display associated with their seats). - * - * @see UserManager#isUserVisible() - */ - private boolean isVisibleBackgroundUser(int userId) { - if (!UserManager.isVisibleBackgroundUsersEnabled()) { - return false; - } - boolean isForeground = mService.mUserController.getCurrentUserId() == userId; - boolean isProfile = UserManagerService.getInstance().isProfile(userId); - boolean isVisible = LocalServices.getService(UserManagerInternal.class) - .isUserVisible(userId); - return isVisible && !isForeground && !isProfile; - } - - /** * Information about a process that is currently marked as bad. */ static final class BadProcessInfo { diff --git a/services/core/java/com/android/server/pm/UserManagerInternal.java b/services/core/java/com/android/server/pm/UserManagerInternal.java index 0e7ce2efc8b8..14b0fc81fdd2 100644 --- a/services/core/java/com/android/server/pm/UserManagerInternal.java +++ b/services/core/java/com/android/server/pm/UserManagerInternal.java @@ -497,6 +497,17 @@ public abstract class UserManagerInternal { public abstract boolean isUserVisible(@UserIdInt int userId, int displayId); /** + * Checks if the given user is a visible background full user, which is a full background user + * assigned to secondary displays on the devices that have + * {@link UserManager#isVisibleBackgroundUsersEnabled() + * config_multiuserVisibleBackgroundUsers enabled} (for example, passenger users on + * automotive builds, using the display associated with their seats). + * + * @see UserManager#isUserVisible() + */ + public abstract boolean isVisibleBackgroundFullUser(@UserIdInt int userId); + + /** * Returns the main display id assigned to the user, or {@code Display.INVALID_DISPLAY} if the * user is not assigned to any main display. * diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index dde9943ccd7b..c902fb26495a 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -7927,6 +7927,17 @@ public class UserManagerService extends IUserManager.Stub { } @Override + public boolean isVisibleBackgroundFullUser(@UserIdInt int userId) { + if (!UserManager.isVisibleBackgroundUsersEnabled()) { + return false; + } + boolean isForeground = userId == getCurrentUserId(); + boolean isProfile = isProfileUnchecked(userId); + boolean isVisible = isUserVisible(userId); + return isVisible && !isForeground && !isProfile; + } + + @Override public int getMainDisplayAssignedToUser(@UserIdInt int userId) { return mUserVisibilityMediator.getMainDisplayAssignedToUser(userId); } diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 1c14c5dbc43a..9f3bbd17bd40 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -7175,25 +7175,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } /** - * Checks if the given user is a visible background user, which is a full, background user - * assigned to secondary displays on the devices that have - * {@link UserManager#isVisibleBackgroundUsersEnabled() - * config_multiuserVisibleBackgroundUsers enabled} (for example, passenger users on - * automotive builds, using the display associated with their seats). - * - * @see UserManager#isUserVisible() - */ - private boolean isVisibleBackgroundUser(int userId) { - if (!UserManager.isVisibleBackgroundUsersEnabled()) { - return false; - } - boolean isForeground = getCurrentUserId() == userId; - boolean isProfile = getUserManager().isProfile(userId); - boolean isVisible = mWindowManager.mUmInternal.isUserVisible(userId); - return isVisible && !isForeground && !isProfile; - } - - /** * In a car environment, {@link ActivityTaskManagerService#mShowDialogs} is always set to * {@code false} from {@link ActivityTaskManagerService#updateShouldShowDialogsLocked} * because its UI mode is {@link Configuration#UI_MODE_TYPE_CAR}. Thus, error dialogs are @@ -7208,7 +7189,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { * @see ActivityTaskManagerService#updateShouldShowDialogsLocked */ private boolean shouldShowDialogsForVisibleBackgroundUserLocked(int userId) { - if (!isVisibleBackgroundUser(userId)) { + if (!mWindowManager.mUmInternal.isVisibleBackgroundFullUser(userId)) { return false; } final int displayId = mWindowManager.mUmInternal.getMainDisplayAssignedToUser(userId); |