From 059021bdc263909d311d11e3e79e5415d5f4b879 Mon Sep 17 00:00:00 2001 From: Pavel Grafov Date: Wed, 2 May 2018 13:44:46 +0100 Subject: [PATCH] Lock profiles when lockdown is invoked. Change-Id: I3abfa464255b0fc04a09657b8ca43bcc154621c0 Bug: 76208903 Test: manually invoked lockdown in all combinations. --- .../globalactions/GlobalActionsDialog.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java index ea3f95e61a35d..4b6528882ca4e 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.Dialog; 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 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, 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 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, }; } + 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();