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

Commit 27c7ed37 authored by Lucas Dupin's avatar Lucas Dupin Committed by android-build-merger
Browse files

Merge "Bouncer visibility fixes" into pi-dev

am: 606440f1

Change-Id: I14ed1a28b0ac56bcdd258cc528f7be30ae2badd8
parents 97bdfc81 606440f1
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -99,10 +99,11 @@ public class SystemUIFactory {
    }

    public KeyguardBouncer createKeyguardBouncer(Context context, ViewMediatorCallback callback,
            LockPatternUtils lockPatternUtils,
            ViewGroup container, DismissCallbackRegistry dismissCallbackRegistry) {
            LockPatternUtils lockPatternUtils,  ViewGroup container,
            DismissCallbackRegistry dismissCallbackRegistry,
            KeyguardBouncer.BouncerExpansionCallback expansionCallback) {
        return new KeyguardBouncer(context, callback, lockPatternUtils, container,
                dismissCallbackRegistry, FalsingManager.getInstance(context));
                dismissCallbackRegistry, FalsingManager.getInstance(context), expansionCallback);
    }

    public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
+34 −6
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@ import com.android.systemui.DejankUtils;
import com.android.systemui.classifier.FalsingManager;
import com.android.systemui.keyguard.DismissCallbackRegistry;

import java.io.PrintWriter;

/**
 * A class which manages the bouncer on the lockscreen.
 */
@@ -60,6 +62,7 @@ public class KeyguardBouncer {
    private final FalsingManager mFalsingManager;
    private final DismissCallbackRegistry mDismissCallbackRegistry;
    private final Handler mHandler;
    private final BouncerExpansionCallback mExpansionCallback;
    private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
            new KeyguardUpdateMonitorCallback() {
                @Override
@@ -79,7 +82,8 @@ public class KeyguardBouncer {

    public KeyguardBouncer(Context context, ViewMediatorCallback callback,
            LockPatternUtils lockPatternUtils, ViewGroup container,
            DismissCallbackRegistry dismissCallbackRegistry, FalsingManager falsingManager) {
            DismissCallbackRegistry dismissCallbackRegistry, FalsingManager falsingManager,
            BouncerExpansionCallback expansionCallback) {
        mContext = context;
        mCallback = callback;
        mLockPatternUtils = lockPatternUtils;
@@ -87,6 +91,7 @@ public class KeyguardBouncer {
        KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateMonitorCallback);
        mFalsingManager = falsingManager;
        mDismissCallbackRegistry = dismissCallbackRegistry;
        mExpansionCallback = expansionCallback;
        mHandler = new Handler();
    }

@@ -157,7 +162,7 @@ public class KeyguardBouncer {
     * the translation is performed manually by the user, otherwise FalsingManager
     * will never be notified and its internal state will be out of sync.
     */
    public void onFullyShown() {
    private void onFullyShown() {
        mFalsingManager.onBouncerShown();
        if (mKeyguardView == null) {
            Log.wtf(TAG, "onFullyShown when view was null");
@@ -167,11 +172,9 @@ public class KeyguardBouncer {
    }

    /**
     * This method must be called at the end of the bouncer animation when
     * the translation is performed manually by the user, otherwise FalsingManager
     * will never be notified and its internal state will be out of sync.
     * @see #onFullyShown()
     */
    public void onFullyHidden() {
    private void onFullyHidden() {
        if (!mShowingSoon) {
            cancelShowRunnable();
            if (mRoot != null) {
@@ -326,12 +329,21 @@ public class KeyguardBouncer {
     * @see StatusBarKeyguardViewManager#onPanelExpansionChanged
     */
    public void setExpansion(float fraction) {
        float oldExpansion = mExpansion;
        mExpansion = fraction;
        if (mKeyguardView != null && !mIsAnimatingAway) {
            float alpha = MathUtils.map(ALPHA_EXPANSION_THRESHOLD, 1, 1, 0, fraction);
            mKeyguardView.setAlpha(MathUtils.constrain(alpha, 0f, 1f));
            mKeyguardView.setTranslationY(fraction * mKeyguardView.getHeight());
        }

        if (fraction == 0 && oldExpansion != 0) {
            onFullyShown();
            mExpansionCallback.onFullyShown();
        } else if (fraction == 1 && oldExpansion != 0) {
            onFullyHidden();
            mExpansionCallback.onFullyHidden();
        }
    }

    public boolean willDismissWithAction() {
@@ -437,4 +449,20 @@ public class KeyguardBouncer {
        ensureView();
        mKeyguardView.finish(strongAuth, KeyguardUpdateMonitor.getCurrentUser());
    }

    public void dump(PrintWriter pw) {
        pw.println("KeyguardBouncer");
        pw.println("  isShowing(): " + isShowing());
        pw.println("  mStatusBarHeight: " + mStatusBarHeight);
        pw.println("  mExpansion: " + mExpansion);
        pw.println("  mKeyguardView; " + mKeyguardView);
        pw.println("  mShowingSoon: " + mKeyguardView);
        pw.println("  mBouncerPromptReason: " + mBouncerPromptReason);
        pw.println("  mIsAnimatingAway: " + mIsAnimatingAway);
    }

    public interface BouncerExpansionCallback {
        void onFullyShown();
        void onFullyHidden();
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -2763,6 +2763,10 @@ public class StatusBar extends SystemUI implements DemoMode,
            mScrimController.dump(fd, pw, args);
        }

        if (mStatusBarKeyguardViewManager != null) {
            mStatusBarKeyguardViewManager.dump(pw);
        }

        if (DUMPTRUCK) {
            synchronized (mEntryManager.getNotificationData()) {
                mEntryManager.getNotificationData().dump(pw, "  ");
+31 −8
Original line number Diff line number Diff line
@@ -42,7 +42,9 @@ import com.android.systemui.SystemUIFactory;
import com.android.systemui.keyguard.DismissCallbackRegistry;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.phone.KeyguardBouncer.BouncerExpansionCallback;

import java.io.PrintWriter;
import java.util.ArrayList;

/**
@@ -71,6 +73,17 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb

    protected final Context mContext;
    private final StatusBarWindowManager mStatusBarWindowManager;
    private final BouncerExpansionCallback mExpansionCallback = new BouncerExpansionCallback() {
        @Override
        public void onFullyShown() {
            updateStates();
        }

        @Override
        public void onFullyHidden() {
            updateStates();
        }
    };

    protected LockPatternUtils mLockPatternUtils;
    protected ViewMediatorCallback mViewMediatorCallback;
@@ -133,7 +146,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
        mContainer = container;
        mFingerprintUnlockController = fingerprintUnlockController;
        mBouncer = SystemUIFactory.getInstance().createKeyguardBouncer(mContext,
                mViewMediatorCallback, mLockPatternUtils, container, dismissCallbackRegistry);
                mViewMediatorCallback, mLockPatternUtils, container, dismissCallbackRegistry,
                mExpansionCallback);
        mContainer.addOnLayoutChangeListener(this::onContainerLayout);
        mNotificationPanelView = notificationPanelView;
        notificationPanelView.setExpansionListener(this::onPanelExpansionChanged);
@@ -160,8 +174,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
            if (expansion != 1 && tracking && !mBouncer.isShowing()
                    && !mBouncer.isAnimatingAway()) {
                mBouncer.show(false /* resetSecuritySelection */, false /* animated */);
            } else if (expansion == 0 || expansion == 1) {
                updateStates();
            }
        }
    }
@@ -588,11 +600,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
        if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) {
            mStatusBarWindowManager.setBouncerShowing(bouncerShowing);
            mStatusBar.setBouncerShowing(bouncerShowing);
            if (bouncerShowing) {
                mBouncer.onFullyShown();
            } else {
                mBouncer.onFullyHidden();
            }
        }

        KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
@@ -709,6 +716,22 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
        return mBouncer.willDismissWithAction();
    }

    public void dump(PrintWriter pw) {
        pw.println("StatusBarKeyguardViewManager:");
        pw.println("  mShowing: " + mShowing);
        pw.println("  mOccluded: " + mOccluded);
        pw.println("  mRemoteInputActive: " + mRemoteInputActive);
        pw.println("  mDozing: " + mDozing);
        pw.println("  mGoingToSleepVisibleNotOccluded: " + mGoingToSleepVisibleNotOccluded);
        pw.println("  mAfterKeyguardGoneAction: " + mAfterKeyguardGoneAction);
        pw.println("  mAfterKeyguardGoneRunnables: " + mAfterKeyguardGoneRunnables);
        pw.println("  mPendingWakeupAction: " + mPendingWakeupAction);

        if (mBouncer != null) {
            mBouncer.dump(pw);
        }
    }

    private static class DismissWithActionRequest {
        final OnDismissAction dismissAction;
        final Runnable cancelAction;
+25 −17
Original line number Diff line number Diff line
@@ -16,16 +16,11 @@

package com.android.systemui.statusbar.phone;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
@@ -33,7 +28,6 @@ import static org.mockito.Mockito.when;

import android.graphics.Color;
import android.support.test.filters.SmallTest;
import android.test.UiThreadTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.ViewGroup;
@@ -73,6 +67,8 @@ public class KeyguardBouncerTest extends SysuiTestCase {
    private KeyguardHostView mKeyguardHostView;
    @Mock
    private ViewTreeObserver mViewTreeObserver;
    @Mock
    private KeyguardBouncer.BouncerExpansionCallback mExpansionCallback;

    private KeyguardBouncer mBouncer;

@@ -84,7 +80,8 @@ public class KeyguardBouncerTest extends SysuiTestCase {
        when(mKeyguardHostView.getViewTreeObserver()).thenReturn(mViewTreeObserver);
        when(mKeyguardHostView.getHeight()).thenReturn(500);
        mBouncer = new KeyguardBouncer(getContext(), mViewMediatorCallback,
                mLockPatternUtils, container, mDismissCallbackRegistry, mFalsingManager) {
                mLockPatternUtils, container, mDismissCallbackRegistry, mFalsingManager,
                mExpansionCallback) {
            @Override
            protected void inflateView() {
                super.inflateView();
@@ -166,23 +163,26 @@ public class KeyguardBouncerTest extends SysuiTestCase {
    }

    @Test
    public void testOnFullyShown_notifiesFalsingManager() {
    public void testSetExpansion_notifiesFalsingManager() {
        mBouncer.ensureView();
        mBouncer.onFullyShown();
        mBouncer.setExpansion(0.5f);

        mBouncer.setExpansion(1);
        verify(mFalsingManager).onBouncerHidden();
        verify(mExpansionCallback).onFullyHidden();

        mBouncer.setExpansion(0);
        verify(mFalsingManager).onBouncerShown();
        verify(mExpansionCallback).onFullyShown();
    }

    @Test
    public void testOnFullyShown_notifiesKeyguardView() {
    public void testSetExpansion_notifiesKeyguardView() {
        mBouncer.ensureView();
        mBouncer.onFullyShown();
        verify(mKeyguardHostView).onResume();
    }
        mBouncer.setExpansion(0.1f);

    @Test
    public void testOnFullyHidden_notifiesFalsingManager() {
        mBouncer.onFullyHidden();
        verify(mFalsingManager).onBouncerHidden();
        mBouncer.setExpansion(0);
        verify(mKeyguardHostView).onResume();
    }

    @Test
@@ -206,6 +206,14 @@ public class KeyguardBouncerTest extends SysuiTestCase {
        verify(mDismissCallbackRegistry).notifyDismissCancelled();
    }

    @Test
    public void testHide_notShowingAnymore() {
        mBouncer.ensureView();
        mBouncer.show(false /* resetSecuritySelection */);
        mBouncer.hide(false /* destroyViews */);
        Assert.assertFalse("Not showing", mBouncer.isShowing());
    }

    @Test
    public void testShowPromptReason_propagates() {
        mBouncer.ensureView();