Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea8c5ef2 authored by Chad Brubaker's avatar Chad Brubaker
Browse files

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
parent 098547a9
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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) {
+16 −1
Original line number Diff line number Diff line
@@ -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);
    }

    /**