From ea8c5ef2b8bc00575073ddbce42e7986a59af627 Mon Sep 17 00:00:00 2001 From: Chad Brubaker Date: Thu, 15 Mar 2018 16:37:43 -0700 Subject: [PATCH] Hide notifications when in Lockdown mode When the user triggers lockdown the device is put into a secure state, beyond disabling less secure unlock modalities this should also disable notifications so that data is not leaked despite the device being strongly locked. Fixes: 74564088 Test: Entered lockdown, verified notifications are no longer displayed on the lockscreen Change-Id: I4188c36b11a1b0cd496b8032bd246f0413c911c5 --- .../internal/widget/LockPatternUtils.java | 5 +++++ .../NotificationLockscreenUserManager.java | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index bf075bf800f47..fde7e961b843b 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -1455,6 +1455,11 @@ public class LockPatternUtils { return (getStrongAuthForUser(userId) & ~StrongAuthTracker.ALLOWING_FINGERPRINT) == 0; } + public boolean isUserInLockdown(int userId) { + return getStrongAuthForUser(userId) + == StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN; + } + private ICheckCredentialProgressCallback wrapCallback( final CheckCredentialProgressCallback callback) { if (callback == null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManager.java index 47fa1d2167f03..cc584e7e79fec 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManager.java @@ -38,6 +38,7 @@ import android.widget.TextView; import android.widget.Toast; import com.android.internal.statusbar.IStatusBarService; +import com.android.internal.widget.LockPatternUtils; import com.android.systemui.Dependency; import com.android.systemui.Dumpable; import com.android.systemui.OverviewProxyService; @@ -67,6 +68,7 @@ public class NotificationLockscreenUserManager implements Dumpable { Dependency.get(DeviceProvisionedController.class); private final UserManager mUserManager; private final IStatusBarService mBarService; + private final LockPatternUtils mLockPatternUtils; private boolean mShowLockscreenNotifications; private boolean mAllowLockscreenRemoteInput; @@ -155,6 +157,7 @@ public class NotificationLockscreenUserManager implements Dumpable { mCurrentUserId = ActivityManager.getCurrentUser(); mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); + mLockPatternUtils = new LockPatternUtils(mContext); } public void setUpWithPresenter(NotificationPresenter presenter, @@ -258,13 +261,25 @@ public class NotificationLockscreenUserManager implements Dumpable { } } + /** + * Returns true if notifications are temporarily disabled for this user for security reasons, + * regardless of the normal settings for that user. + */ + private boolean shouldTemporarilyHideNotifications(int userId) { + if (userId == UserHandle.USER_ALL) { + userId = mCurrentUserId; + } + return mLockPatternUtils.isUserInLockdown(userId); + } + /** * Returns true if we're on a secure lockscreen and the user wants to hide notification data. * If so, notifications should be hidden. */ public boolean shouldHideNotifications(int userId) { return isLockscreenPublicMode(userId) && !userAllowsNotificationsInPublic(userId) - || (userId != mCurrentUserId && shouldHideNotifications(mCurrentUserId)); + || (userId != mCurrentUserId && shouldHideNotifications(mCurrentUserId)) + || shouldTemporarilyHideNotifications(userId); } /**