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(
|
if (mContext.getResources().getBoolean(
|
||||||
com.android.internal.R.bool.config_guestUserAutoCreated)) {
|
com.android.internal.R.bool.config_guestUserAutoCreated)) {
|
||||||
// TODO(b/191067027): Move post-boot guest creation to system_server
|
// TODO(b/191067027): Move post-boot guest creation to system_server
|
||||||
mUserSwitcherController.guaranteeGuestPresent();
|
mUserSwitcherController.schedulePostBootGuestCreation();
|
||||||
}
|
}
|
||||||
mBootCompleted = true;
|
mBootCompleted = true;
|
||||||
adjustStatusBarLocked(false, true);
|
adjustStatusBarLocked(false, true);
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import android.app.ActivityManager;
|
|||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.IActivityTaskManager;
|
import android.app.IActivityTaskManager;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -114,6 +115,8 @@ public class UserSwitcherController implements Dumpable {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final GuestResumeSessionReceiver mGuestResumeSessionReceiver;
|
final GuestResumeSessionReceiver mGuestResumeSessionReceiver;
|
||||||
private final KeyguardStateController mKeyguardStateController;
|
private final KeyguardStateController mKeyguardStateController;
|
||||||
|
private final DeviceProvisionedController mDeviceProvisionedController;
|
||||||
|
private final DevicePolicyManager mDevicePolicyManager;
|
||||||
protected final Handler mHandler;
|
protected final Handler mHandler;
|
||||||
private final ActivityStarter mActivityStarter;
|
private final ActivityStarter mActivityStarter;
|
||||||
private final BroadcastDispatcher mBroadcastDispatcher;
|
private final BroadcastDispatcher mBroadcastDispatcher;
|
||||||
@@ -149,6 +152,8 @@ public class UserSwitcherController implements Dumpable {
|
|||||||
UserManager userManager,
|
UserManager userManager,
|
||||||
UserTracker userTracker,
|
UserTracker userTracker,
|
||||||
KeyguardStateController keyguardStateController,
|
KeyguardStateController keyguardStateController,
|
||||||
|
DeviceProvisionedController deviceProvisionedController,
|
||||||
|
DevicePolicyManager devicePolicyManager,
|
||||||
@Main Handler handler,
|
@Main Handler handler,
|
||||||
ActivityStarter activityStarter,
|
ActivityStarter activityStarter,
|
||||||
BroadcastDispatcher broadcastDispatcher,
|
BroadcastDispatcher broadcastDispatcher,
|
||||||
@@ -178,6 +183,8 @@ public class UserSwitcherController implements Dumpable {
|
|||||||
mGuestIsResetting = new AtomicBoolean();
|
mGuestIsResetting = new AtomicBoolean();
|
||||||
mGuestCreationScheduled = new AtomicBoolean();
|
mGuestCreationScheduled = new AtomicBoolean();
|
||||||
mKeyguardStateController = keyguardStateController;
|
mKeyguardStateController = keyguardStateController;
|
||||||
|
mDeviceProvisionedController = deviceProvisionedController;
|
||||||
|
mDevicePolicyManager = devicePolicyManager;
|
||||||
mHandler = handler;
|
mHandler = handler;
|
||||||
mActivityStarter = activityStarter;
|
mActivityStarter = activityStarter;
|
||||||
mUserManager = userManager;
|
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.
|
* If there is no guest on the device, schedule creation of a new guest user in the background.
|
||||||
*/
|
*/
|
||||||
public void guaranteeGuestPresent() {
|
private void guaranteeGuestPresent() {
|
||||||
if (mUserManager.findCurrentGuestUser() == null) {
|
if (isDeviceAllowedToAddGuest() && mUserManager.findCurrentGuestUser() == null) {
|
||||||
scheduleGuestCreation();
|
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
|
private final class ExitGuestDialog extends SystemUIDialog implements
|
||||||
DialogInterface.OnClickListener {
|
DialogInterface.OnClickListener {
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.android.systemui.statusbar.policy
|
package com.android.systemui.statusbar.policy
|
||||||
|
|
||||||
import android.app.IActivityTaskManager
|
import android.app.IActivityTaskManager
|
||||||
|
import android.app.admin.DevicePolicyManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.DialogInterface
|
import android.content.DialogInterface
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -63,6 +64,8 @@ import org.mockito.MockitoAnnotations
|
|||||||
@SmallTest
|
@SmallTest
|
||||||
class UserSwitcherControllerTest : SysuiTestCase() {
|
class UserSwitcherControllerTest : SysuiTestCase() {
|
||||||
@Mock private lateinit var keyguardStateController: KeyguardStateController
|
@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 handler: Handler
|
||||||
@Mock private lateinit var userTracker: UserTracker
|
@Mock private lateinit var userTracker: UserTracker
|
||||||
@Mock private lateinit var userManager: UserManager
|
@Mock private lateinit var userManager: UserManager
|
||||||
@@ -107,6 +110,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
|
|||||||
userManager,
|
userManager,
|
||||||
userTracker,
|
userTracker,
|
||||||
keyguardStateController,
|
keyguardStateController,
|
||||||
|
deviceProvisionedController,
|
||||||
|
devicePolicyManager,
|
||||||
handler,
|
handler,
|
||||||
activityStarter,
|
activityStarter,
|
||||||
broadcastDispatcher,
|
broadcastDispatcher,
|
||||||
|
|||||||
Reference in New Issue
Block a user