Lock profiles when lockdown is invoked.
Change-Id: I3abfa464255b0fc04a09657b8ca43bcc154621c0
Bug: 76208903
Test: manually invoked lockdown in all combinations.
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index ea3f95e..4b65288 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -26,6 +26,7 @@
import android.app.KeyguardManager;
import android.app.WallpaperManager;
import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -699,6 +700,9 @@
UserHandle.USER_ALL);
try {
WindowManagerGlobal.getWindowManagerService().lockNow(null);
+ // Lock profiles (if any) on the background thread.
+ final Handler bgHandler = new Handler(Dependency.get(Dependency.BG_LOOPER));
+ bgHandler.post(() -> lockProfiles());
} catch (RemoteException e) {
Log.e(TAG, "Error while trying to lock device.", e);
}
@@ -716,6 +720,18 @@
};
}
+ private void lockProfiles() {
+ final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ final TrustManager tm = (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE);
+ final int currentUserId = getCurrentUser().id;
+ final int[] profileIds = um.getEnabledProfileIds(currentUserId);
+ for (final int id : profileIds) {
+ if (id != currentUserId) {
+ tm.setDeviceLockedForUser(id, true);
+ }
+ }
+ }
+
private UserInfo getCurrentUser() {
try {
return ActivityManager.getService().getCurrentUser();