summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationComponent.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java26
-rw-r--r--packages/SystemUI/src/com/android/systemui/touch/TouchInsetManager.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java39
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);
}