Merge changes I581f480a,I041d4505

* changes:
  Complication Dagger Component introduction.
  Allow injecting DreamTouchHandlers into DreamOverlayComponent.
This commit is contained in:
Bryce Lee
2022-12-12 23:37:49 +00:00
committed by Android (Google) Code Review
6 changed files with 68 additions and 12 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,
@@ -146,7 +150,9 @@ 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);
mComplicationComponent = complicationComponentFactory.create();
mDreamOverlayComponent = dreamOverlayComponentFactory.create(viewModelStore, host, null);
mLifecycleRegistry = mDreamOverlayComponent.getLifecycleRegistry();
mExecutor.execute(() -> setCurrentStateLocked(Lifecycle.State.CREATED));

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

@@ -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<DreamTouchHandler> dreamTouchHandlers);
}
/** Scope annotation for singleton items within the {@link DreamOverlayComponent}. */

View File

@@ -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<DreamTouchHandler> providesDreamTouchHandlers(
@Named(DREAM_TOUCH_HANDLERS) @Nullable Set<DreamTouchHandler> touchHandlers) {
return touchHandlers != null ? touchHandlers : new HashSet<>();
}
}

View File

@@ -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;
@@ -45,6 +46,7 @@ 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.DreamOverlayTouchMonitor;
import com.android.systemui.util.concurrency.FakeExecutor;
@@ -86,6 +88,12 @@ public class DreamOverlayServiceTest extends SysuiTestCase {
@Mock
WindowManagerImpl mWindowManager;
@Mock
ComplicationComponent.Factory mComplicationComponentFactory;
@Mock
ComplicationComponent mComplicationComponent;
@Mock
DreamOverlayComponent.Factory mDreamOverlayComponentFactory;
@@ -130,13 +138,19 @@ 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
.create(any(), any()))
.create(any(), any(), isNull()))
.thenReturn(mDreamOverlayComponent);
when(mDreamOverlayContainerViewController.getContainerView())
.thenReturn(mDreamOverlayContainerView);
mService = new DreamOverlayService(mContext, mMainExecutor, mWindowManager,
mComplicationComponentFactory,
mDreamOverlayComponentFactory,
mStateController,
mKeyguardUpdateMonitor,