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

Commit 10a57297 authored by Selim Cinek's avatar Selim Cinek
Browse files

Avoid strange animation when dynamic privacy changes

The dynamic privacy state would briefly switch during
unlocking, leading to the view appearing even though
it was already visible.

Fixes: 	138620551
Test: enable dynamic privacy, unlock with face, then unlock by dragging down, observe no weird animation
Change-Id: I3cc0945af0b83ee18cd173545a099af45b442e56
parent 5454a0dd
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.UnlockMethodCache;
import com.android.systemui.statusbar.policy.KeyguardMonitor;

import javax.inject.Inject;
import javax.inject.Singleton;
@@ -38,6 +39,7 @@ public class DynamicPrivacyController implements UnlockMethodCache.OnUnlockMetho
    private final UnlockMethodCache mUnlockMethodCache;
    private final NotificationLockscreenUserManager mLockscreenUserManager;
    private final StatusBarStateController mStateController;
    private final KeyguardMonitor mKeyguardMonitor;
    private ArraySet<Listener> mListeners = new ArraySet<>();

    private boolean mLastDynamicUnlocked;
@@ -46,19 +48,23 @@ public class DynamicPrivacyController implements UnlockMethodCache.OnUnlockMetho

    @Inject
    DynamicPrivacyController(Context context,
            KeyguardMonitor keyguardMonitor,
            NotificationLockscreenUserManager notificationLockscreenUserManager,
            StatusBarStateController stateController) {
        this(notificationLockscreenUserManager, UnlockMethodCache.getInstance(context),
        this(notificationLockscreenUserManager, keyguardMonitor,
                UnlockMethodCache.getInstance(context),
                stateController);
    }

    @VisibleForTesting
    DynamicPrivacyController(NotificationLockscreenUserManager notificationLockscreenUserManager,
            KeyguardMonitor keyguardMonitor,
            UnlockMethodCache unlockMethodCache,
            StatusBarStateController stateController) {
        mLockscreenUserManager = notificationLockscreenUserManager;
        mStateController = stateController;
        mUnlockMethodCache = unlockMethodCache;
        mKeyguardMonitor = keyguardMonitor;
        mUnlockMethodCache.addListener(this);
        mLastDynamicUnlocked = isDynamicallyUnlocked();
    }
@@ -86,7 +92,9 @@ public class DynamicPrivacyController implements UnlockMethodCache.OnUnlockMetho
    }

    public boolean isDynamicallyUnlocked() {
        return mUnlockMethodCache.canSkipBouncer() && isDynamicPrivacyEnabled();
        return (mUnlockMethodCache.canSkipBouncer() || mKeyguardMonitor.isKeyguardGoingAway()
                || mKeyguardMonitor.isKeyguardFadingAway())
                && isDynamicPrivacyEnabled();
    }

    public void addListener(Listener listener) {
+5 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationViewHierarchyManager;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.UnlockMethodCache;
import com.android.systemui.statusbar.policy.KeyguardMonitor;

import org.junit.Assert;
import org.junit.Before;
@@ -53,12 +54,15 @@ public class DynamicPrivacyControllerTest extends SysuiTestCase {
            = mock(NotificationLockscreenUserManager.class);
    private DynamicPrivacyController.Listener mListener
            = mock(DynamicPrivacyController.Listener.class);
    private KeyguardMonitor mKeyguardMonitor = mock(KeyguardMonitor.class);

    @Before
    public void setUp() throws Exception {
        when(mCache.canSkipBouncer()).thenReturn(false);
        when(mKeyguardMonitor.isShowing()).thenReturn(true);
        mDynamicPrivacyController = new DynamicPrivacyController(
                mLockScreenUserManager, mCache, mock(StatusBarStateController.class));
                mLockScreenUserManager, mKeyguardMonitor, mCache,
                mock(StatusBarStateController.class));
        mDynamicPrivacyController.setStatusBarKeyguardViewManager(
                mock(StatusBarKeyguardViewManager.class));
        mDynamicPrivacyController.addListener(mListener);