Use new DevicePolicyManager#logoutUser() methods

This replaces the series of steps (that were easy to get wrong)
required to properly logout and switch users.

Fixes: 215583276
Test: manual
Change-Id: I2d8c34f184a72fdea71dcf549d1a31133a5155ec
This commit is contained in:
Matt Pietal
2022-03-15 14:35:00 -04:00
parent 717f0992f1
commit c01499bd24
4 changed files with 2 additions and 39 deletions

View File

@@ -4354,23 +4354,6 @@ public class ActivityManager {
}
}
/**
* Logs out current current foreground user by switching to the system user and stopping the
* user being switched from.
* @hide
*/
public static void logoutCurrentUser() {
int currentUser = ActivityManager.getCurrentUser();
if (currentUser != UserHandle.USER_SYSTEM) {
try {
getService().switchUser(UserHandle.USER_SYSTEM);
getService().stopUser(currentUser, /* force= */ false, null);
} catch (RemoteException e) {
e.rethrowFromSystemServer();
}
}
}
/**
* Stops the given {@code userId}.
*

View File

@@ -1067,13 +1067,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
// Add a little delay before executing, to give the dialog a chance to go away before
// switching user
mHandler.postDelayed(() -> {
try {
int currentUserId = getCurrentUser().id;
mIActivityManager.switchUser(UserHandle.USER_SYSTEM);
mIActivityManager.stopUser(currentUserId, true /*force*/, null);
} catch (RemoteException re) {
Log.e(TAG, "Couldn't logout user " + re);
}
mDevicePolicyManager.logoutUser();
}, mDialogPressDelay);
}
}

View File

@@ -575,13 +575,7 @@ public class KeyguardIndicationController {
return;
}
int currentUserId = KeyguardUpdateMonitor.getCurrentUser();
try {
mIActivityManager.switchUser(UserHandle.USER_SYSTEM);
mIActivityManager.stopUser(currentUserId, true /* force */,
null);
} catch (RemoteException re) {
Log.e(TAG, "Failed to logout user", re);
}
mDevicePolicyManager.logoutUser();
})
.build(),
false);

View File

@@ -447,14 +447,6 @@ public class UserSwitcherController implements Dumpable {
mResumeUserOnGuestLogout = resume;
}
public void logoutCurrentUser() {
int currentUser = mUserTracker.getUserId();
if (currentUser != UserHandle.USER_SYSTEM) {
pauseRefreshUsers();
ActivityManager.logoutCurrentUser();
}
}
/**
* Returns whether the current user is a system user.
*/