Merge "Only auto create guests when device is provisioned" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
683ecb0acd
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user