Added callback to enable CarSysUI for showing user switch dialog during
before user switching
Bug: 154958003
Test: atest CarServiceUnitTest:com.android.car.user.CarUserServiceTest
Change-Id: I8480d7b954cc297b77696c12121601dfbb321a40
diff --git a/service/src/com/android/car/user/CarUserService.java b/service/src/com/android/car/user/CarUserService.java
index e708b24..b901ec2 100644
--- a/service/src/com/android/car/user/CarUserService.java
+++ b/service/src/com/android/car/user/CarUserService.java
@@ -178,6 +178,8 @@
private UserMetrics mUserMetrics;
+ private IResultReceiver mUserSwitchUiReceiver;
+
/** Interface for callbaks related to passenger activities. */
public interface PassengerCallback {
/** Called when passenger is started at a certain zone. */
@@ -248,6 +250,7 @@
writer.println("*CarUserService*");
String indent = " ";
handleDumpListeners(writer, indent);
+ writer.printf("User switch UI receiver %s\n", mUserSwitchUiReceiver);
synchronized (mLockUser) {
writer.println("User0Unlocked: " + mUser0Unlocked);
writer.println("BackgroundUsersToRestart: " + mBackgroundUsersToRestart);
@@ -820,6 +823,7 @@
try {
switched = mAm.switchUser(targetUserId);
if (switched) {
+ sendUserSwitchUiCallback(targetUserId);
resultStatus = UserSwitchResult.STATUS_SUCCESSFUL;
mRequestIdForUserSwitchInProcess = resp.requestId;
} else {
@@ -846,6 +850,20 @@
});
}
+ private void sendUserSwitchUiCallback(@UserIdInt int targetUserId) {
+ if (mUserSwitchUiReceiver == null) {
+ Log.w(TAG_USER, "No User switch UI receiver.");
+ return;
+ }
+
+ try {
+ EventLog.writeEvent(EventLogTags.CAR_USER_SVC_SWITCH_USER_UI_REQ, targetUserId);
+ mUserSwitchUiReceiver.send(targetUserId, null);
+ } catch (RemoteException e) {
+ Log.e(TAG_USER, "Error calling user switch UI receiver.", e);
+ }
+ }
+
@Override
public GetUserIdentificationAssociationResponse getUserIdentificationAssociation(int[] types) {
Preconditions.checkArgument(!ArrayUtils.isEmpty(types), "must have at least one type");
@@ -930,6 +948,19 @@
return mHal.isSupported();
}
+ /**
+ * Sets a callback which is invoked before user switch.
+ *
+ * <p>
+ * This method should only be called by the Car System UI. The purpose of this call is to notify
+ * Car System UI to show the user switch UI before the user switch.
+ */
+ @Override
+ public void setUserSwitchUiCallback(@NonNull IResultReceiver receiver) {
+ // TODO(b/154958003): check UID, only carSysUI should be allowed to set it.
+ mUserSwitchUiReceiver = receiver;
+ }
+
// TODO(b/144120654): use helper to generate UsersInfo
private UsersInfo getUsersInfo() {
UserInfo currentUser;