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

Commit 48f9868e authored by Bryce Lee's avatar Bryce Lee Committed by Android (Google) Code Review
Browse files

Merge "Cleanup keyguard state controller callback." into main

parents 780e4785 38b84be9
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
@@ -80,6 +81,8 @@ import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;
@@ -211,7 +214,15 @@ public class BouncerSwipeTouchHandlerTest extends SysuiTestCase {
                mKosmos.getCommunalSettingsInteractor()
        );

        when(mScrimManager.getCurrentController()).thenReturn(mScrimController);
        doAnswer(new Answer<Void>() {
            @Override
            public Void answer(InvocationOnMock invocation) {
                final ScrimManager.Callback callback = invocation.getArgument(0);
                callback.onScrimControllerChanged(mScrimController);
                return null;
            }
        }).when(mScrimManager).addCallback(any());

        when(mValueAnimatorCreator.create(anyFloat(), anyFloat())).thenReturn(mValueAnimator);
        when(mVelocityTrackerFactory.obtain()).thenReturn(mVelocityTracker);
        when(mFlingAnimationUtils.getMinVelocityPxPerSecond()).thenReturn(Float.MAX_VALUE);
+52 −7
Original line number Diff line number Diff line
@@ -23,7 +23,12 @@ import static com.android.systemui.ambient.touch.TouchSurfaceKt.SURFACE_HUB;

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

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -57,8 +62,14 @@ public class ScrimManagerTest extends SysuiTestCase {
    @Mock
    KeyguardStateController mKeyguardStateController;

    @Mock
    ScrimManager.Callback mCallback;
    ScrimManager.Callback mCallback = spy(new ScrimManager.Callback() {
        @Override
        public void onScrimControllerChanged(ScrimController controller) {
            mCurrentController = controller;
        }
    });

    private ScrimController mCurrentController;

    private final FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());

@@ -74,13 +85,16 @@ public class ScrimManagerTest extends SysuiTestCase {
                ArgumentCaptor.forClass(KeyguardStateController.Callback.class);
        final ScrimManager manager = new ScrimManager(mExecutor, mBouncerScrimController,
                mBouncerlessScrimController, SURFACE_HUB, mKeyguardStateController);
        verify(mKeyguardStateController, never()).addCallback(any());
        manager.addCallback(mCallback);
        mExecutor.runAllReady();
        verify(mKeyguardStateController).addCallback(callbackCaptor.capture());

        assertThat(manager.getCurrentController()).isEqualTo(mBouncerScrimController);
        assertThat(mCurrentController).isEqualTo(mBouncerScrimController);
        when(mKeyguardStateController.canDismissLockScreen()).thenReturn(true);
        callbackCaptor.getValue().onKeyguardShowingChanged();
        mExecutor.runAllReady();
        assertThat(manager.getCurrentController()).isEqualTo(mBouncerlessScrimController);
        assertThat(mCurrentController).isEqualTo(mBouncerlessScrimController);
    }

    @Test
@@ -90,9 +104,11 @@ public class ScrimManagerTest extends SysuiTestCase {
                ArgumentCaptor.forClass(KeyguardStateController.Callback.class);
        final ScrimManager manager = new ScrimManager(mExecutor, mBouncerScrimController,
                mBouncerlessScrimController, SURFACE_HUB, mKeyguardStateController);
        verify(mKeyguardStateController).addCallback(callbackCaptor.capture());
        verify(mKeyguardStateController, never()).addCallback(any());

        manager.addCallback(mCallback);
        mExecutor.runAllReady();
        verify(mKeyguardStateController).addCallback(callbackCaptor.capture());
        when(mKeyguardStateController.canDismissLockScreen()).thenReturn(true);
        callbackCaptor.getValue().onKeyguardShowingChanged();
        mExecutor.runAllReady();
@@ -107,12 +123,41 @@ public class ScrimManagerTest extends SysuiTestCase {
                ArgumentCaptor.forClass(KeyguardStateController.Callback.class);
        final ScrimManager manager = new ScrimManager(mExecutor, mBouncerScrimController,
                mBouncerlessScrimController, SURFACE_DREAM, mKeyguardStateController);
        verify(mKeyguardStateController, never()).addCallback(any());

        manager.addCallback(mCallback);
        mExecutor.runAllReady();
        verify(mKeyguardStateController).addCallback(callbackCaptor.capture());

        assertThat(manager.getCurrentController()).isEqualTo(mBouncerlessScrimController);
        assertThat(mCurrentController).isEqualTo(mBouncerlessScrimController);
        when(mKeyguardStateController.canDismissLockScreen()).thenReturn(true);
        callbackCaptor.getValue().onKeyguardShowingChanged();
        mExecutor.runAllReady();
        assertThat(manager.getCurrentController()).isEqualTo(mBouncerlessScrimController);
        assertThat(mCurrentController).isEqualTo(mBouncerlessScrimController);
    }

    @Test
    public void testKeyguardStateCallbackRegistration() {
        final ScrimManager manager = new ScrimManager(mExecutor, mBouncerScrimController,
                mBouncerlessScrimController, SURFACE_DREAM, mKeyguardStateController);
        ArgumentCaptor<KeyguardStateController.Callback> callbackCaptor =
                ArgumentCaptor.forClass(KeyguardStateController.Callback.class);
        final ScrimManager.Callback firstMock = mock(ScrimManager.Callback.class);
        final ScrimManager.Callback secondMock = mock(ScrimManager.Callback.class);

        verify(mKeyguardStateController, never()).addCallback(any());
        manager.addCallback(firstMock);
        mExecutor.runAllReady();
        verify(mKeyguardStateController).addCallback(callbackCaptor.capture());
        clearInvocations(mKeyguardStateController);
        manager.addCallback(secondMock);
        mExecutor.runAllReady();
        verify(mKeyguardStateController, never()).addCallback(any());
        manager.removeCallback(firstMock);
        mExecutor.runAllReady();
        verify(mKeyguardStateController, never()).removeCallback(any());
        manager.removeCallback(secondMock);
        mExecutor.runAllReady();
        verify(mKeyguardStateController).removeCallback(callbackCaptor.getValue());
    }
}
+0 −1
Original line number Diff line number Diff line
@@ -295,7 +295,6 @@ constructor(
            notificationShadeWindowController.setForcePluginOpen(true, this)
        }
        scrimManager.addCallback(scrimManagerCallback)
        currentScrimController = scrimManager.currentController
        isKeyguardScreenRotationAllowed = keyguardStateController.isKeyguardScreenRotationAllowed()

        session.registerCallback {
+16 −12
Original line number Diff line number Diff line
@@ -80,9 +80,6 @@ public class ScrimManager {
        mBouncerScrimController = bouncerScrimController;
        mKeyguardStateController = keyguardStateController;
        mTouchSurface = surface;

        mKeyguardStateController.addCallback(mKeyguardStateCallback);
        updateController();
    }

    private void updateController() {
@@ -105,20 +102,27 @@ public class ScrimManager {
     * Adds a {@link Callback} to receive future changes to the active {@link ScrimController}.
     */
    public void addCallback(Callback callback) {
        mExecutor.execute(() -> mCallbacks.add(callback));
        mExecutor.execute(() -> {
            if (mCallbacks.isEmpty()) {
                mKeyguardStateController.addCallback(mKeyguardStateCallback);
                updateController();
            }
            mCallbacks.add(callback);
            callback.onScrimControllerChanged(mCurrentController);
        });
    }

    /**
     * Removes the {@link Callback} from receiving further updates.
     */
    public void removeCallback(Callback callback) {
        mExecutor.execute(() -> mCallbacks.remove(callback));
    }
        mExecutor.execute(() -> {
            mCallbacks.remove(callback);

    /**
     * Returns the currently get {@link ScrimController}.
     */
    public ScrimController getCurrentController() {
        return mCurrentController;
            if (mCallbacks.isEmpty()) {
                mKeyguardStateController.removeCallback(mKeyguardStateCallback);
                mCurrentController = null;
            }
        });
    }
}