From 17d8a67dfa495d80675335d22f0e0ecce52f95be Mon Sep 17 00:00:00 2001 From: Bryce Lee Date: Thu, 1 Dec 2022 20:14:57 -0800 Subject: [PATCH] Allow injecting DreamTouchHandlers into DreamOverlayComponent. This changelist enables DreamTouchHandlers to be specified when creating a new DreamOverlayComponent through its Factory. The DreamOverlayService will specify no additional handlers until the complication layer has been separated from the dream overlay. Test: atest DreamOverlayServiceTest Bug: 261781069 Change-Id: I041d45059e443c61ce5eb497319999858e544508 --- .../systemui/dreams/DreamOverlayService.java | 3 ++- .../dreams/dagger/DreamOverlayComponent.java | 21 +++++++++++++------ .../dreams/dagger/DreamOverlayModule.java | 21 +++++++++++++++---- .../dreams/DreamOverlayServiceTest.java | 9 +++++++- 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java index e76d5b30d3e61..ace33caa48238 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java @@ -146,7 +146,8 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ final ViewModelStore viewModelStore = new ViewModelStore(); final Complication.Host host = () -> mExecutor.execute(DreamOverlayService.this::requestExit); - mDreamOverlayComponent = dreamOverlayComponentFactory.create(viewModelStore, host); + + mDreamOverlayComponent = dreamOverlayComponentFactory.create(viewModelStore, host, null); mLifecycleRegistry = mDreamOverlayComponent.getLifecycleRegistry(); mExecutor.execute(() -> setCurrentStateLocked(Lifecycle.State.CREATED)); diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java index f927ba64a92bc..fab4b86979b25 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java @@ -16,8 +16,12 @@ package com.android.systemui.dreams.dagger; +import static com.android.systemui.dreams.dagger.DreamOverlayModule.DREAM_TOUCH_HANDLERS; + import static java.lang.annotation.RetentionPolicy.RUNTIME; +import android.annotation.Nullable; + import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import androidx.lifecycle.ViewModelStore; @@ -26,16 +30,19 @@ import com.android.systemui.dreams.DreamOverlayContainerViewController; import com.android.systemui.dreams.complication.Complication; import com.android.systemui.dreams.complication.dagger.ComplicationModule; import com.android.systemui.dreams.touch.DreamOverlayTouchMonitor; +import com.android.systemui.dreams.touch.DreamTouchHandler; import com.android.systemui.dreams.touch.dagger.DreamTouchModule; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; - -import javax.inject.Scope; - import dagger.BindsInstance; import dagger.Subcomponent; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.util.Set; + +import javax.inject.Named; +import javax.inject.Scope; + /** * Dagger subcomponent for {@link DreamOverlayModule}. */ @@ -50,7 +57,9 @@ public interface DreamOverlayComponent { @Subcomponent.Factory interface Factory { DreamOverlayComponent create(@BindsInstance ViewModelStore store, - @BindsInstance Complication.Host host); + @BindsInstance Complication.Host host, + @BindsInstance @Named(DREAM_TOUCH_HANDLERS) @Nullable + Set dreamTouchHandlers); } /** Scope annotation for singleton items within the {@link DreamOverlayComponent}. */ diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java index ed0e1d97e40af..fc448a34f00a6 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java @@ -16,6 +16,7 @@ package com.android.systemui.dreams.dagger; +import android.annotation.Nullable; import android.content.res.Resources; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -29,19 +30,24 @@ import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dreams.DreamOverlayContainerView; import com.android.systemui.dreams.DreamOverlayStatusBarView; +import com.android.systemui.dreams.touch.DreamTouchHandler; import com.android.systemui.touch.TouchInsetManager; -import java.util.concurrent.Executor; - -import javax.inject.Named; - import dagger.Lazy; import dagger.Module; import dagger.Provides; +import dagger.multibindings.ElementsIntoSet; + +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.Executor; + +import javax.inject.Named; /** Dagger module for {@link DreamOverlayComponent}. */ @Module public abstract class DreamOverlayModule { + public static final String DREAM_TOUCH_HANDLERS = "dream_touch_handlers"; public static final String DREAM_OVERLAY_CONTENT_VIEW = "dream_overlay_content_view"; public static final String MAX_BURN_IN_OFFSET = "max_burn_in_offset"; public static final String BURN_IN_PROTECTION_UPDATE_INTERVAL = @@ -261,4 +267,11 @@ public abstract class DreamOverlayModule { static Lifecycle providesLifecycle(LifecycleOwner lifecycleOwner) { return lifecycleOwner.getLifecycle(); } + + @Provides + @ElementsIntoSet + static Set providesDreamTouchHandlers( + @Named(DREAM_TOUCH_HANDLERS) @Nullable Set touchHandlers) { + return touchHandlers != null ? touchHandlers : new HashSet<>(); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java index ffb8342a56a54..ff2978db5cb09 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java @@ -19,6 +19,7 @@ package com.android.systemui.dreams; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -46,6 +47,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.dreams.dagger.DreamOverlayComponent; +import com.android.systemui.dreams.touch.BouncerSwipeTouchHandler; import com.android.systemui.dreams.touch.DreamOverlayTouchMonitor; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; @@ -110,6 +112,9 @@ public class DreamOverlayServiceTest extends SysuiTestCase { @Mock ViewGroup mDreamOverlayContainerViewParent; + @Mock + BouncerSwipeTouchHandler mBouncerSwipeTouchHandler; + @Mock UiEventLogger mUiEventLogger; @@ -130,8 +135,10 @@ public class DreamOverlayServiceTest extends SysuiTestCase { .thenReturn(mLifecycleRegistry); when(mDreamOverlayComponent.getDreamOverlayTouchMonitor()) .thenReturn(mDreamOverlayTouchMonitor); + // TODO(b/261781069): A touch handler should be passed in from the complication component + // when the complication component is introduced. when(mDreamOverlayComponentFactory - .create(any(), any())) + .create(any(), any(), isNull())) .thenReturn(mDreamOverlayComponent); when(mDreamOverlayContainerViewController.getContainerView()) .thenReturn(mDreamOverlayContainerView);