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

Commit 3f4dd252 authored by Lucas Silva's avatar Lucas Silva Committed by Android (Google) Code Review
Browse files

Merge "Dismiss dream on swipe-up gesture" into main

parents ed61fac7 80db6b8b
Loading
Loading
Loading
Loading
+26 −2
Original line number Diff line number Diff line
@@ -16,12 +16,19 @@

package com.android.systemui.ambient.touch.scrim;

import static android.service.dreams.Flags.FLAG_DREAMS_V2;

import static com.android.systemui.ambient.touch.TouchSurfaceKt.SURFACE_DREAM;
import static com.android.systemui.ambient.touch.TouchSurfaceKt.SURFACE_HUB;

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

import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.platform.test.annotations.EnableFlags;

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

@@ -66,7 +73,7 @@ public class ScrimManagerTest extends SysuiTestCase {
        ArgumentCaptor<KeyguardStateController.Callback> callbackCaptor =
                ArgumentCaptor.forClass(KeyguardStateController.Callback.class);
        final ScrimManager manager = new ScrimManager(mExecutor, mBouncerScrimController,
                mBouncerlessScrimController, mKeyguardStateController);
                mBouncerlessScrimController, SURFACE_HUB, mKeyguardStateController);
        verify(mKeyguardStateController).addCallback(callbackCaptor.capture());

        assertThat(manager.getCurrentController()).isEqualTo(mBouncerScrimController);
@@ -82,7 +89,7 @@ public class ScrimManagerTest extends SysuiTestCase {
        ArgumentCaptor<KeyguardStateController.Callback> callbackCaptor =
                ArgumentCaptor.forClass(KeyguardStateController.Callback.class);
        final ScrimManager manager = new ScrimManager(mExecutor, mBouncerScrimController,
                mBouncerlessScrimController, mKeyguardStateController);
                mBouncerlessScrimController, SURFACE_HUB, mKeyguardStateController);
        verify(mKeyguardStateController).addCallback(callbackCaptor.capture());

        manager.addCallback(mCallback);
@@ -91,4 +98,21 @@ public class ScrimManagerTest extends SysuiTestCase {
        mExecutor.runAllReady();
        verify(mCallback).onScrimControllerChanged(eq(mBouncerlessScrimController));
    }

    @Test
    @EnableFlags(FLAG_DREAMS_V2)
    public void testBouncerlessControllerAlwaysUsedOnDream() {
        when(mKeyguardStateController.canDismissLockScreen()).thenReturn(false);
        ArgumentCaptor<KeyguardStateController.Callback> callbackCaptor =
                ArgumentCaptor.forClass(KeyguardStateController.Callback.class);
        final ScrimManager manager = new ScrimManager(mExecutor, mBouncerScrimController,
                mBouncerlessScrimController, SURFACE_DREAM, mKeyguardStateController);
        verify(mKeyguardStateController).addCallback(callbackCaptor.capture());

        assertThat(manager.getCurrentController()).isEqualTo(mBouncerlessScrimController);
        when(mKeyguardStateController.canDismissLockScreen()).thenReturn(true);
        callbackCaptor.getValue().onKeyguardShowingChanged();
        mExecutor.runAllReady();
        assertThat(manager.getCurrentController()).isEqualTo(mBouncerlessScrimController);
    }
}
+1 −5
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ import com.android.systemui.ambient.touch.TouchHandler
import com.android.systemui.ambient.touch.TouchMonitor
import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent
import com.android.systemui.ambient.touch.scrim.ScrimController
import com.android.systemui.ambient.touch.scrim.ScrimManager
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.communal.data.repository.fakeCommunalSceneRepository
import com.android.systemui.communal.domain.interactor.CommunalInteractor
@@ -98,7 +97,6 @@ import org.mockito.kotlin.any
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.eq
import org.mockito.kotlin.firstValue
import org.mockito.kotlin.mock
import org.mockito.kotlin.spy
import org.mockito.kotlin.verifyNoMoreInteractions
@@ -138,8 +136,6 @@ class DreamOverlayServiceTest(flags: FlagsParameterization?) : SysuiTestCase() {
    private val mTouchInsetManager = mock<TouchInsetManager>()
    private val mUiEventLogger = mock<UiEventLogger>()
    private val mScrimController = mock<ScrimController>()
    private val mScrimManager =
        mock<ScrimManager> { on { currentController }.thenReturn(mScrimController) }
    private val mSystemDialogsCloser = mock<SystemDialogsCloser>()
    private val mDreamOverlayCallbackController = mock<DreamOverlayCallbackController>()

@@ -253,7 +249,7 @@ class DreamOverlayServiceTest(flags: FlagsParameterization?) : SysuiTestCase() {
                mAmbientTouchComponentFactory,
                mStateController,
                mKeyguardUpdateMonitor,
                mScrimManager,
                mScrimController,
                mCommunalInteractor,
                kosmos.communalSettingsInteractor,
                kosmos.sceneInteractor,
+5 −15
Original line number Diff line number Diff line
@@ -16,16 +16,11 @@

package com.android.systemui.ambient.touch.dagger;

import static android.service.dreams.Flags.dreamsV2;

import static com.android.systemui.ambient.touch.TouchSurfaceKt.SURFACE_DREAM;

import android.animation.ValueAnimator;
import android.content.res.Resources;
import android.util.TypedValue;
import android.view.VelocityTracker;

import com.android.systemui.ambient.dagger.AmbientModule;
import com.android.systemui.ambient.touch.BouncerSwipeTouchHandler;
import com.android.systemui.ambient.touch.TouchHandler;
import com.android.systemui.dagger.qualifiers.Main;
@@ -35,9 +30,7 @@ import com.android.wm.shell.animation.FlingAnimationUtils;

import dagger.Module;
import dagger.Provides;
import dagger.multibindings.ElementsIntoSet;

import java.util.Set;
import dagger.multibindings.IntoSet;

import javax.inject.Named;
import javax.inject.Provider;
@@ -72,13 +65,10 @@ public class BouncerSwipeModule {
     * Provides {@link BouncerSwipeTouchHandler} for inclusion in touch handling over the dream.
     */
    @Provides
    @ElementsIntoSet
    public static Set<TouchHandler> providesBouncerSwipeTouchHandler(
            BouncerSwipeTouchHandler touchHandler, @Named(AmbientModule.SURFACE) Integer surface) {
        if (dreamsV2() && surface == SURFACE_DREAM) {
            return Set.of();
        }
        return Set.of(touchHandler);
    @IntoSet
    public static TouchHandler providesBouncerSwipeTouchHandler(
            BouncerSwipeTouchHandler touchHandler) {
        return touchHandler;
    }

    /**
+17 −5
Original line number Diff line number Diff line
@@ -16,9 +16,14 @@

package com.android.systemui.ambient.touch.scrim;

import static android.service.dreams.Flags.dreamsV2;

import static com.android.systemui.ambient.touch.TouchSurfaceKt.SURFACE_DREAM;
import static com.android.systemui.ambient.touch.scrim.dagger.ScrimModule.BOUNCERLESS_SCRIM_CONTROLLER;
import static com.android.systemui.ambient.touch.scrim.dagger.ScrimModule.BOUNCER_SCRIM_CONTROLLER;

import com.android.systemui.ambient.dagger.AmbientModule;
import com.android.systemui.ambient.touch.TouchSurface;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.policy.KeyguardStateController;

@@ -37,6 +42,8 @@ public class ScrimManager {
    private final ScrimController mBouncerlessScrimController;
    private final KeyguardStateController mKeyguardStateController;
    private final Executor mExecutor;
    @TouchSurface
    private final int mTouchSurface;

    private ScrimController mCurrentController;
    private final HashSet<Callback> mCallbacks;
@@ -47,6 +54,7 @@ public class ScrimManager {
    public interface Callback {
        /**
         * Invoked when the controller changes.
         *
         * @param controller The currently active {@link ScrimController}.
         */
        void onScrimControllerChanged(ScrimController controller);
@@ -64,12 +72,14 @@ public class ScrimManager {
    ScrimManager(@Main Executor executor,
            @Named(BOUNCER_SCRIM_CONTROLLER) ScrimController bouncerScrimController,
            @Named(BOUNCERLESS_SCRIM_CONTROLLER) ScrimController bouncerlessScrimController,
            @Named(AmbientModule.SURFACE) int surface,
            KeyguardStateController keyguardStateController) {
        mExecutor = executor;
        mCallbacks = new HashSet<>();
        mBouncerlessScrimController = bouncerlessScrimController;
        mBouncerScrimController = bouncerScrimController;
        mKeyguardStateController = keyguardStateController;
        mTouchSurface = surface;

        mKeyguardStateController.addCallback(mKeyguardStateCallback);
        updateController();
@@ -77,7 +87,10 @@ public class ScrimManager {

    private void updateController() {
        final ScrimController existingController = mCurrentController;
        mCurrentController =  mKeyguardStateController.canDismissLockScreen()
        final boolean alwaysUseBouncerless = mTouchSurface == SURFACE_DREAM && dreamsV2();

        mCurrentController =
                (alwaysUseBouncerless || mKeyguardStateController.canDismissLockScreen())
                        ? mBouncerlessScrimController
                        : mBouncerScrimController;

@@ -104,7 +117,6 @@ public class ScrimManager {

    /**
     * Returns the currently get {@link ScrimController}.
     * @return
     */
    public ScrimController getCurrentController() {
        return mCurrentController;
+6 −5
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.service.dreams.Flags.dreamsV2;

import static com.android.systemui.Flags.glanceableHubAllowKeyguardWhenDreaming;
import static com.android.systemui.ambient.touch.TouchSurfaceKt.SURFACE_DREAM;
import static com.android.systemui.ambient.touch.scrim.dagger.ScrimModule.BOUNCER_SCRIM_CONTROLLER;
import static com.android.systemui.dreams.dagger.DreamModule.DREAM_OVERLAY_WINDOW_TITLE;
import static com.android.systemui.dreams.dagger.DreamModule.DREAM_TOUCH_INSET_MANAGER;
import static com.android.systemui.dreams.dagger.DreamModule.HOME_CONTROL_PANEL_DREAM_COMPONENT;
@@ -58,7 +59,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.ambient.touch.TouchHandler;
import com.android.systemui.ambient.touch.TouchMonitor;
import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent;
import com.android.systemui.ambient.touch.scrim.ScrimManager;
import com.android.systemui.ambient.touch.scrim.ScrimController;
import com.android.systemui.communal.domain.interactor.CommunalInteractor;
import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor;
import com.android.systemui.communal.shared.log.CommunalUiEvent;
@@ -117,7 +118,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
    private DreamOverlayContainerViewController mDreamOverlayContainerViewController;
    private final DreamOverlayCallbackController mDreamOverlayCallbackController;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final ScrimManager mScrimManager;
    private final ScrimController mBouncerScrimController;
    @Nullable
    private final ComponentName mLowLightDreamComponent;
    @Nullable
@@ -400,7 +401,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
            AmbientTouchComponent.Factory ambientTouchComponentFactory,
            DreamOverlayStateController stateController,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            ScrimManager scrimManager,
            @Named(BOUNCER_SCRIM_CONTROLLER) ScrimController bouncerScrimController,
            CommunalInteractor communalInteractor,
            CommunalSettingsInteractor communalSettingsInteractor,
            SceneInteractor sceneInteractor,
@@ -422,7 +423,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
        mExecutor = executor;
        mWindowManager = windowManager;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mScrimManager = scrimManager;
        mBouncerScrimController = bouncerScrimController;
        mLowLightDreamComponent = lowLightDreamComponent;
        mHomeControlPanelDreamComponent = homeControlPanelDreamComponent;
        mKeyguardUpdateMonitor.registerCallback(mKeyguardCallback);
@@ -664,7 +665,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
        // an equal amount.
        if (mDreamOverlayContainerViewController != null
                && mDreamOverlayContainerViewController.isBouncerShowing()) {
            mScrimManager.getCurrentController().expand(
            mBouncerScrimController.expand(
                    new ShadeExpansionChangeEvent(
                            /* fraction= */ 1.f,
                            /* expanded= */ false,