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();