Complication Dagger Component introduction.

This changelist introduces a dagger component dedicated to
complications. This component will house complication-specific
entities as complications are separated from the dream overlay.
A factory for the component is provided to DreamOverlayService
for constructing complication dependencies in the near term.
Eventually, DreamOverlayService will be able to accept
complication components specified elsewhere to interact with
complications in other surfaces.

Test: atest DreamOverlayServiceTest
Bug: 261781069
Change-Id: I581f480a402afc2dbc1d052fd07ec152e9c0ea7b
This commit is contained in:
Bryce Lee
2022-12-08 21:20:01 -08:00
parent 17d8a67dfa
commit 879f1bf42c
4 changed files with 30 additions and 4 deletions

View File

@@ -40,6 +40,7 @@ import com.android.systemui.controls.dagger.ControlsModule;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.demomode.dagger.DemoModeModule;
import com.android.systemui.doze.dagger.DozeComponent;
import com.android.systemui.dreams.complication.dagger.ComplicationComponent;
import com.android.systemui.dreams.dagger.DreamModule;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
@@ -163,6 +164,7 @@ import dagger.Provides;
},
subcomponents = {
CentralSurfacesComponent.class,
ComplicationComponent.class,
NavigationBarComponent.class,
NotificationRowComponent.class,
DozeComponent.class,

View File

@@ -41,6 +41,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.dagger.qualifiers.Main;
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;
@@ -80,6 +81,8 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
// True if the service has been destroyed.
private boolean mDestroyed = false;
private final ComplicationComponent mComplicationComponent;
private final DreamOverlayComponent mDreamOverlayComponent;
private final LifecycleRegistry mLifecycleRegistry;
@@ -128,6 +131,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
Context context,
@Main Executor executor,
WindowManager windowManager,
ComplicationComponent.Factory complicationComponentFactory,
DreamOverlayComponent.Factory dreamOverlayComponentFactory,
DreamOverlayStateController stateController,
KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -147,6 +151,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
final Complication.Host host =
() -> mExecutor.execute(DreamOverlayService.this::requestExit);
mComplicationComponent = complicationComponentFactory.create();
mDreamOverlayComponent = dreamOverlayComponentFactory.create(viewModelStore, host, null);
mLifecycleRegistry = mDreamOverlayComponent.getLifecycleRegistry();

View File

@@ -0,0 +1,12 @@
package com.android.systemui.dreams.complication.dagger
import dagger.Subcomponent
@Subcomponent
interface ComplicationComponent {
/** Factory for generating [ComplicationComponent]. */
@Subcomponent.Factory
interface Factory {
fun create(): ComplicationComponent
}
}

View File

@@ -46,8 +46,8 @@ 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.dagger.ComplicationComponent;
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;
@@ -88,6 +88,12 @@ public class DreamOverlayServiceTest extends SysuiTestCase {
@Mock
WindowManagerImpl mWindowManager;
@Mock
ComplicationComponent.Factory mComplicationComponentFactory;
@Mock
ComplicationComponent mComplicationComponent;
@Mock
DreamOverlayComponent.Factory mDreamOverlayComponentFactory;
@@ -112,9 +118,6 @@ public class DreamOverlayServiceTest extends SysuiTestCase {
@Mock
ViewGroup mDreamOverlayContainerViewParent;
@Mock
BouncerSwipeTouchHandler mBouncerSwipeTouchHandler;
@Mock
UiEventLogger mUiEventLogger;
@@ -135,6 +138,9 @@ public class DreamOverlayServiceTest extends SysuiTestCase {
.thenReturn(mLifecycleRegistry);
when(mDreamOverlayComponent.getDreamOverlayTouchMonitor())
.thenReturn(mDreamOverlayTouchMonitor);
when(mComplicationComponentFactory
.create())
.thenReturn(mComplicationComponent);
// TODO(b/261781069): A touch handler should be passed in from the complication component
// when the complication component is introduced.
when(mDreamOverlayComponentFactory
@@ -144,6 +150,7 @@ public class DreamOverlayServiceTest extends SysuiTestCase {
.thenReturn(mDreamOverlayContainerView);
mService = new DreamOverlayService(mContext, mMainExecutor, mWindowManager,
mComplicationComponentFactory,
mDreamOverlayComponentFactory,
mStateController,
mKeyguardUpdateMonitor,