Merge "Only auto create guests when device is provisioned" into sc-dev

This commit is contained in:
Peter Kalauskas
2021-08-06 18:40:14 +00:00
committed by Android (Google) Code Review
3 changed files with 47 additions and 3 deletions

View File

@@ -2603,7 +2603,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
if (mContext.getResources().getBoolean(
com.android.internal.R.bool.config_guestUserAutoCreated)) {
// TODO(b/191067027): Move post-boot guest creation to system_server
mUserSwitcherController.guaranteeGuestPresent();
mUserSwitcherController.schedulePostBootGuestCreation();
}
mBootCompleted = true;
adjustStatusBarLocked(false, true);

View File

@@ -26,6 +26,7 @@ import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.IActivityTaskManager;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -114,6 +115,8 @@ public class UserSwitcherController implements Dumpable {
@VisibleForTesting
final GuestResumeSessionReceiver mGuestResumeSessionReceiver;
private final KeyguardStateController mKeyguardStateController;
private final DeviceProvisionedController mDeviceProvisionedController;
private final DevicePolicyManager mDevicePolicyManager;
protected final Handler mHandler;
private final ActivityStarter mActivityStarter;
private final BroadcastDispatcher mBroadcastDispatcher;
@@ -149,6 +152,8 @@ public class UserSwitcherController implements Dumpable {
UserManager userManager,
UserTracker userTracker,
KeyguardStateController keyguardStateController,
DeviceProvisionedController deviceProvisionedController,
DevicePolicyManager devicePolicyManager,
@Main Handler handler,
ActivityStarter activityStarter,
BroadcastDispatcher broadcastDispatcher,
@@ -178,6 +183,8 @@ public class UserSwitcherController implements Dumpable {
mGuestIsResetting = new AtomicBoolean();
mGuestCreationScheduled = new AtomicBoolean();
mKeyguardStateController = keyguardStateController;
mDeviceProvisionedController = deviceProvisionedController;
mDevicePolicyManager = devicePolicyManager;
mHandler = handler;
mActivityStarter = activityStarter;
mUserManager = userManager;
@@ -732,11 +739,28 @@ public class UserSwitcherController implements Dumpable {
}
/**
* Guarantee guest is present only if the device is provisioned. Otherwise, create a content
* observer to wait until the device is provisioned, then schedule the guest creation.
*/
public void schedulePostBootGuestCreation() {
if (isDeviceAllowedToAddGuest()) {
guaranteeGuestPresent();
} else {
mDeviceProvisionedController.addCallback(mGuaranteeGuestPresentAfterProvisioned);
}
}
private boolean isDeviceAllowedToAddGuest() {
return mDeviceProvisionedController.isDeviceProvisioned()
&& !mDevicePolicyManager.isDeviceManaged();
}
/**
* If there is no guest on the device, schedule creation of a new guest user in the background.
*/
public void guaranteeGuestPresent() {
if (mUserManager.findCurrentGuestUser() == null) {
private void guaranteeGuestPresent() {
if (isDeviceAllowedToAddGuest() && mUserManager.findCurrentGuestUser() == null) {
scheduleGuestCreation();
}
}
@@ -1056,6 +1080,21 @@ public class UserSwitcherController implements Dumpable {
}
};
private final DeviceProvisionedController.DeviceProvisionedListener
mGuaranteeGuestPresentAfterProvisioned =
new DeviceProvisionedController.DeviceProvisionedListener() {
@Override
public void onDeviceProvisionedChanged() {
if (isDeviceAllowedToAddGuest()) {
mBgExecutor.execute(
() -> mDeviceProvisionedController.removeCallback(
mGuaranteeGuestPresentAfterProvisioned));
guaranteeGuestPresent();
}
}
};
private final class ExitGuestDialog extends SystemUIDialog implements
DialogInterface.OnClickListener {

View File

@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.policy
import android.app.IActivityTaskManager
import android.app.admin.DevicePolicyManager
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
@@ -63,6 +64,8 @@ import org.mockito.MockitoAnnotations
@SmallTest
class UserSwitcherControllerTest : SysuiTestCase() {
@Mock private lateinit var keyguardStateController: KeyguardStateController
@Mock private lateinit var deviceProvisionedController: DeviceProvisionedController
@Mock private lateinit var devicePolicyManager: DevicePolicyManager
@Mock private lateinit var handler: Handler
@Mock private lateinit var userTracker: UserTracker
@Mock private lateinit var userManager: UserManager
@@ -107,6 +110,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
userManager,
userTracker,
keyguardStateController,
deviceProvisionedController,
devicePolicyManager,
handler,
activityStarter,
broadcastDispatcher,