Merge "Fix locked profile activity hiding logic" into udc-dev am: 0f74f7d7d2
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21988968
Change-Id: I68fe3368aab3c6979326275260cecaa5a209bb90
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index def2a2f..a54e8e9 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -7025,7 +7025,7 @@
@Override
public void notifyLockedProfile(@UserIdInt int userId) {
- mAtmInternal.notifyLockedProfile(userId, mUserController.getCurrentUserId());
+ mAtmInternal.notifyLockedProfile(userId);
}
@Override
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
index 62b7a4e..4949ebc 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
@@ -472,7 +472,7 @@
public abstract boolean attachApplication(WindowProcessController wpc) throws RemoteException;
/** @see IActivityManager#notifyLockedProfile(int) */
- public abstract void notifyLockedProfile(@UserIdInt int userId, int currentUserId);
+ public abstract void notifyLockedProfile(@UserIdInt int userId);
/** @see IActivityManager#startConfirmDeviceCredentialIntent(Intent, Bundle) */
public abstract void startConfirmDeviceCredentialIntent(Intent intent, Bundle options);
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index c92ca103..b377032 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -241,6 +241,7 @@
import android.window.TaskSnapshot;
import com.android.internal.R;
+import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.IVoiceInteractor;
import com.android.internal.app.ProcessMap;
@@ -2953,6 +2954,7 @@
mKeyguardController.setKeyguardShown(displayContent.getDisplayId(),
keyguardShowing, aodShowing);
});
+ maybeHideLockedProfileActivityLocked();
} finally {
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
Binder.restoreCallingIdentity(ident);
@@ -2966,6 +2968,26 @@
});
}
+ /**
+ * Hides locked profile activity by going to home screen to avoid showing the user two lock
+ * screens in a row.
+ */
+ @GuardedBy("mGlobalLock")
+ private void maybeHideLockedProfileActivityLocked() {
+ if (!mKeyguardController.isKeyguardLocked(DEFAULT_DISPLAY)
+ || mLastResumedActivity == null) {
+ return;
+ }
+ var userInfo = mUserManager.getUserInfo(mLastResumedActivity.mUserId);
+ if (userInfo == null || !userInfo.isManagedProfile()) {
+ return;
+ }
+ if (mAmInternal.shouldConfirmCredentials(mLastResumedActivity.mUserId)) {
+ mInternal.startHomeActivity(
+ mAmInternal.getCurrentUserId(), "maybeHideLockedProfileActivityLocked");
+ }
+ }
+
// The caller MUST NOT hold the global lock.
public void onScreenAwakeChanged(boolean isAwake) {
mH.post(() -> {
@@ -6374,7 +6396,7 @@
}
@Override
- public void notifyLockedProfile(@UserIdInt int userId, int currentUserId) {
+ public void notifyLockedProfile(@UserIdInt int userId) {
try {
if (!AppGlobals.getPackageManager().isUidPrivileged(Binder.getCallingUid())) {
throw new SecurityException("Only privileged app can call notifyLockedProfile");
@@ -6387,10 +6409,7 @@
final long ident = Binder.clearCallingIdentity();
try {
if (mAmInternal.shouldConfirmCredentials(userId)) {
- if (mKeyguardController.isKeyguardLocked(DEFAULT_DISPLAY)) {
- // Showing launcher to avoid user entering credential twice.
- startHomeActivity(currentUserId, "notifyLockedProfile");
- }
+ maybeHideLockedProfileActivityLocked();
mRootWindowContainer.lockAllProfileTasks(userId);
}
} finally {