diff options
9 files changed, 97 insertions, 59 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java index 8fdcb0df6900..16b4f99da894 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java @@ -45,7 +45,10 @@ import com.android.systemui.dreams.complication.Complication; import com.android.systemui.dreams.complication.dagger.ComplicationComponent; import com.android.systemui.dreams.dagger.DreamOverlayComponent; import com.android.systemui.dreams.touch.DreamOverlayTouchMonitor; +import com.android.systemui.touch.TouchInsetManager; +import java.util.Arrays; +import java.util.HashSet; import java.util.concurrent.Executor; import javax.inject.Inject; @@ -84,6 +87,9 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ private final ComplicationComponent mComplicationComponent; + private final com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent + mDreamComplicationComponent; + private final DreamOverlayComponent mDreamOverlayComponent; private final DreamOverlayLifecycleOwner mLifecycleOwner; @@ -135,10 +141,13 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ DreamOverlayLifecycleOwner lifecycleOwner, WindowManager windowManager, ComplicationComponent.Factory complicationComponentFactory, + com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent.Factory + dreamComplicationComponentFactory, DreamOverlayComponent.Factory dreamOverlayComponentFactory, DreamOverlayStateController stateController, KeyguardUpdateMonitor keyguardUpdateMonitor, UiEventLogger uiEventLogger, + TouchInsetManager touchInsetManager, @Nullable @Named(LowLightDreamModule.LOW_LIGHT_DREAM_COMPONENT) ComponentName lowLightDreamComponent) { mContext = context; @@ -154,9 +163,14 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ final Complication.Host host = () -> mExecutor.execute(DreamOverlayService.this::requestExit); - mComplicationComponent = complicationComponentFactory.create(); - mDreamOverlayComponent = - dreamOverlayComponentFactory.create(lifecycleOwner, viewModelStore, host, null); + mComplicationComponent = complicationComponentFactory.create(lifecycleOwner, host, + viewModelStore, touchInsetManager); + mDreamComplicationComponent = dreamComplicationComponentFactory.create( + mComplicationComponent.getVisibilityController(), touchInsetManager); + mDreamOverlayComponent = dreamOverlayComponentFactory.create(lifecycleOwner, + mComplicationComponent.getComplicationHostViewController(), touchInsetManager, + new HashSet<>(Arrays.asList( + mDreamComplicationComponent.getHideComplicationTouchHandler()))); mLifecycleOwner = lifecycleOwner; mLifecycleRegistry = mLifecycleOwner.getRegistry(); diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java index 46ce7a90f5a3..3e9b0103470c 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java @@ -30,7 +30,7 @@ import androidx.constraintlayout.widget.Constraints; import com.android.systemui.R; import com.android.systemui.dreams.complication.ComplicationLayoutParams.Position; -import com.android.systemui.dreams.dagger.DreamOverlayComponent; +import com.android.systemui.dreams.complication.dagger.ComplicationModule; import com.android.systemui.statusbar.CrossFadeHelper; import com.android.systemui.touch.TouchInsetManager; @@ -50,7 +50,7 @@ import javax.inject.Named; * their layout parameters and attributes. The management of this set is done by * {@link ComplicationHostViewController}. */ -@DreamOverlayComponent.DreamOverlayScope +@ComplicationModule.ComplicationScope public class ComplicationLayoutEngine implements Complication.VisibilityController { public static final String TAG = "ComplicationLayoutEng"; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationComponent.kt b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationComponent.kt index 89497098f8ae..8d133bd25275 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationComponent.kt +++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationComponent.kt @@ -1,12 +1,29 @@ package com.android.systemui.dreams.complication.dagger +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.ViewModelStore +import com.android.systemui.dreams.complication.Complication +import com.android.systemui.dreams.complication.ComplicationHostViewController +import com.android.systemui.dreams.complication.ComplicationLayoutEngine +import com.android.systemui.touch.TouchInsetManager +import dagger.BindsInstance import dagger.Subcomponent -@Subcomponent +@Subcomponent(modules = [ComplicationModule::class]) +@ComplicationModule.ComplicationScope interface ComplicationComponent { /** Factory for generating [ComplicationComponent]. */ @Subcomponent.Factory interface Factory { - fun create(): ComplicationComponent + fun create( + @BindsInstance lifecycleOwner: LifecycleOwner, + @BindsInstance host: Complication.Host, + @BindsInstance viewModelStore: ViewModelStore, + @BindsInstance touchInsetManager: TouchInsetManager + ): ComplicationComponent } + + fun getComplicationHostViewController(): ComplicationHostViewController + + fun getVisibilityController(): ComplicationLayoutEngine } diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java index 09cc7c51ccf4..797906fbaf8e 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java @@ -24,13 +24,12 @@ import androidx.constraintlayout.widget.ConstraintLayout; import com.android.internal.util.Preconditions; import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; -import com.android.systemui.dreams.dagger.DreamOverlayComponent; - -import javax.inject.Named; import dagger.Module; import dagger.Provides; +import javax.inject.Named; + /** * Module for providing a scoped host view. */ @@ -49,7 +48,7 @@ public abstract class ComplicationHostViewModule { */ @Provides @Named(SCOPED_COMPLICATIONS_LAYOUT) - @DreamOverlayComponent.DreamOverlayScope + @ComplicationModule.ComplicationScope static ConstraintLayout providesComplicationHostView( LayoutInflater layoutInflater) { return Preconditions.checkNotNull((ConstraintLayout) @@ -60,7 +59,6 @@ public abstract class ComplicationHostViewModule { @Provides @Named(COMPLICATION_MARGIN_DEFAULT) - @DreamOverlayComponent.DreamOverlayScope static int providesComplicationPadding(@Main Resources resources) { return resources.getDimensionPixelSize(R.dimen.dream_overlay_complication_margin); } @@ -70,7 +68,6 @@ public abstract class ComplicationHostViewModule { */ @Provides @Named(COMPLICATIONS_FADE_OUT_DURATION) - @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsFadeOutDuration(@Main Resources resources) { return resources.getInteger(R.integer.complicationFadeOutMs); } @@ -80,7 +77,6 @@ public abstract class ComplicationHostViewModule { */ @Provides @Named(COMPLICATIONS_FADE_OUT_DELAY) - @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsFadeOutDelay(@Main Resources resources) { return resources.getInteger(R.integer.complicationFadeOutDelayMs); } @@ -90,7 +86,6 @@ public abstract class ComplicationHostViewModule { */ @Provides @Named(COMPLICATIONS_FADE_IN_DURATION) - @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsFadeInDuration(@Main Resources resources) { return resources.getInteger(R.integer.complicationFadeInMs); } @@ -100,7 +95,6 @@ public abstract class ComplicationHostViewModule { */ @Provides @Named(COMPLICATIONS_RESTORE_TIMEOUT) - @DreamOverlayComponent.DreamOverlayScope static int providesComplicationsRestoreTimeout(@Main Resources resources) { return resources.getInteger(R.integer.complicationRestoreMs); } diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java index 5c2fdf5c9af4..dbf5ab000a8a 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java @@ -24,16 +24,16 @@ import androidx.lifecycle.ViewModelStore; import com.android.systemui.dreams.complication.Complication; import com.android.systemui.dreams.complication.ComplicationCollectionViewModel; import com.android.systemui.dreams.complication.ComplicationLayoutEngine; +import com.android.systemui.touch.TouchInsetManager; + +import dagger.Module; +import dagger.Provides; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import javax.inject.Named; import javax.inject.Scope; - -import dagger.Module; -import dagger.Provides; - /** * Module for housing components related to rendering complications. */ @@ -73,4 +73,13 @@ public interface ComplicationModule { ComplicationLayoutEngine engine) { return engine; } + + /** + * Provides a new touch inset session instance for complication logic. + */ + @Provides + static TouchInsetManager.TouchInsetSession providesTouchInsetSession( + TouchInsetManager manager) { + return manager.createSession(); + } } 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 584829074cf4..0332f888c866 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java @@ -23,14 +23,13 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import android.annotation.Nullable; import androidx.lifecycle.LifecycleOwner; -import androidx.lifecycle.ViewModelStore; 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.complication.ComplicationHostViewController; import com.android.systemui.dreams.touch.DreamOverlayTouchMonitor; import com.android.systemui.dreams.touch.DreamTouchHandler; import com.android.systemui.dreams.touch.dagger.DreamTouchModule; +import com.android.systemui.touch.TouchInsetManager; import dagger.BindsInstance; import dagger.Subcomponent; @@ -48,7 +47,6 @@ import javax.inject.Scope; @Subcomponent(modules = { DreamTouchModule.class, DreamOverlayModule.class, - ComplicationModule.class, }) @DreamOverlayComponent.DreamOverlayScope public interface DreamOverlayComponent { @@ -57,8 +55,8 @@ public interface DreamOverlayComponent { interface Factory { DreamOverlayComponent create( @BindsInstance LifecycleOwner lifecycleOwner, - @BindsInstance ViewModelStore store, - @BindsInstance Complication.Host host, + @BindsInstance ComplicationHostViewController complicationHostViewController, + @BindsInstance TouchInsetManager touchInsetManager, @BindsInstance @Named(DREAM_TOUCH_HANDLERS) @Nullable Set<DreamTouchHandler> dreamTouchHandlers); } 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 4e0f86c8b146..448538193eaf 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java @@ -29,20 +29,15 @@ 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.complication.Complication; -import com.android.systemui.dreams.dreamcomplication.HideComplicationTouchHandler; -import com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent; import com.android.systemui.dreams.touch.DreamTouchHandler; import com.android.systemui.touch.TouchInsetManager; import dagger.Module; import dagger.Provides; import dagger.multibindings.ElementsIntoSet; -import dagger.multibindings.IntoSet; import java.util.HashSet; import java.util.Set; -import java.util.concurrent.Executor; import javax.inject.Named; @@ -109,13 +104,6 @@ public abstract class DreamOverlayModule { /** */ @Provides @DreamOverlayComponent.DreamOverlayScope - public static TouchInsetManager providesTouchInsetManager(@Main Executor executor) { - return new TouchInsetManager(executor); - } - - /** */ - @Provides - @DreamOverlayComponent.DreamOverlayScope public static DreamOverlayStatusBarView providesDreamOverlayStatusBarView( DreamOverlayContainerView view) { return Preconditions.checkNotNull(view.findViewById(R.id.dream_overlay_status_bar), @@ -263,18 +251,4 @@ public abstract class DreamOverlayModule { @Named(DREAM_TOUCH_HANDLERS) @Nullable Set<DreamTouchHandler> touchHandlers) { return touchHandlers != null ? touchHandlers : new HashSet<>(); } - - /** - * Provides {@link HideComplicationTouchHandler} for inclusion in touch handling over the dream. - */ - @Provides - @IntoSet - public static DreamTouchHandler providesHideComplicationTouchHandler( - ComplicationComponent.Factory componentFactory, - Complication.VisibilityController visibilityController, - TouchInsetManager touchInsetManager) { - ComplicationComponent component = - componentFactory.create(visibilityController, touchInsetManager); - return component.getHideComplicationTouchHandler(); - } } diff --git a/packages/SystemUI/src/com/android/systemui/touch/TouchInsetManager.java b/packages/SystemUI/src/com/android/systemui/touch/TouchInsetManager.java index 8450c1e6e9d0..166ac9e737f3 100644 --- a/packages/SystemUI/src/com/android/systemui/touch/TouchInsetManager.java +++ b/packages/SystemUI/src/com/android/systemui/touch/TouchInsetManager.java @@ -24,12 +24,16 @@ import android.view.View; import androidx.concurrent.futures.CallbackToFutureAdapter; +import com.android.systemui.dagger.qualifiers.Main; + import com.google.common.util.concurrent.ListenableFuture; import java.util.HashMap; import java.util.HashSet; import java.util.concurrent.Executor; +import javax.inject.Inject; + /** * {@link TouchInsetManager} handles setting the touchable inset regions for a given View. This * is useful for passing through touch events for all but select areas. @@ -141,7 +145,8 @@ public class TouchInsetManager { * Default constructor. * @param executor An {@link Executor} to marshal all operations on. */ - public TouchInsetManager(Executor executor) { + @Inject + public TouchInsetManager(@Main Executor executor) { mExecutor = executor; } 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 67cf2fcfd1a4..430575c1d0c5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java @@ -19,7 +19,6 @@ 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; @@ -45,9 +44,12 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; +import com.android.systemui.dreams.complication.ComplicationLayoutEngine; import com.android.systemui.dreams.complication.dagger.ComplicationComponent; import com.android.systemui.dreams.dagger.DreamOverlayComponent; +import com.android.systemui.dreams.dreamcomplication.HideComplicationTouchHandler; import com.android.systemui.dreams.touch.DreamOverlayTouchMonitor; +import com.android.systemui.touch.TouchInsetManager; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.utils.leaks.LeakCheckedTest; @@ -94,6 +96,20 @@ public class DreamOverlayServiceTest extends SysuiTestCase { ComplicationComponent mComplicationComponent; @Mock + ComplicationLayoutEngine mComplicationVisibilityController; + + @Mock + com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent.Factory + mDreamComplicationComponentFactory; + + @Mock + com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent + mDreamComplicationComponent; + + @Mock + HideComplicationTouchHandler mHideComplicationTouchHandler; + + @Mock DreamOverlayComponent.Factory mDreamOverlayComponentFactory; @Mock @@ -118,6 +134,9 @@ public class DreamOverlayServiceTest extends SysuiTestCase { ViewGroup mDreamOverlayContainerViewParent; @Mock + TouchInsetManager mTouchInsetManager; + + @Mock UiEventLogger mUiEventLogger; @Captor @@ -136,25 +155,33 @@ public class DreamOverlayServiceTest extends SysuiTestCase { when(mDreamOverlayComponent.getDreamOverlayTouchMonitor()) .thenReturn(mDreamOverlayTouchMonitor); when(mComplicationComponentFactory - .create()) + .create(any(), any(), any(), any())) .thenReturn(mComplicationComponent); - // TODO(b/261781069): A touch handler should be passed in from the complication component - // when the complication component is introduced. + when(mComplicationComponent.getVisibilityController()) + .thenReturn(mComplicationVisibilityController); + when(mDreamComplicationComponent.getHideComplicationTouchHandler()) + .thenReturn(mHideComplicationTouchHandler); + when(mDreamComplicationComponentFactory + .create(any(), any())) + .thenReturn(mDreamComplicationComponent); when(mDreamOverlayComponentFactory - .create(any(), any(), any(), isNull())) + .create(any(), any(), any(), any())) .thenReturn(mDreamOverlayComponent); when(mDreamOverlayContainerViewController.getContainerView()) .thenReturn(mDreamOverlayContainerView); - mService = new DreamOverlayService(mContext, + mService = new DreamOverlayService( + mContext, mMainExecutor, mLifecycleOwner, mWindowManager, mComplicationComponentFactory, + mDreamComplicationComponentFactory, mDreamOverlayComponentFactory, mStateController, mKeyguardUpdateMonitor, mUiEventLogger, + mTouchInsetManager, LOW_LIGHT_COMPONENT); } |