Loading packages/SystemUI/src/com/android/systemui/dreams/complication/DreamHomeControlsComplication.java +36 −13 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.systemui.CoreStartable; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.controls.ControlsServiceInfo; import com.android.systemui.controls.dagger.ControlsComponent; import com.android.systemui.controls.management.ControlsListingController; import com.android.systemui.controls.ui.ControlsActivity; Loading @@ -42,6 +43,8 @@ import com.android.systemui.dreams.complication.dagger.DreamHomeControlsComplica import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.util.ViewController; import java.util.List; import javax.inject.Inject; import javax.inject.Named; Loading Loading @@ -76,16 +79,25 @@ public class DreamHomeControlsComplication implements Complication { private final DreamOverlayStateController mDreamOverlayStateController; private final ControlsComponent mControlsComponent; private boolean mControlServicesAvailable = false; private boolean mOverlayActive = false; // Callback for when the home controls service availability changes. private final ControlsListingController.ControlsListingCallback mControlsCallback = serviceInfos -> { boolean available = !serviceInfos.isEmpty(); services -> updateHomeControlsComplication(); private final DreamOverlayStateController.Callback mOverlayStateCallback = new DreamOverlayStateController.Callback() { @Override public void onStateChanged() { if (mOverlayActive == mDreamOverlayStateController.isOverlayActive()) { return; } mOverlayActive = !mOverlayActive; if (available != mControlServicesAvailable) { mControlServicesAvailable = available; updateComplicationAvailability(); if (mOverlayActive) { updateHomeControlsComplication(); } } }; Loading @@ -102,18 +114,29 @@ public class DreamHomeControlsComplication implements Complication { public void start() { mControlsComponent.getControlsListingController().ifPresent( c -> c.addCallback(mControlsCallback)); mDreamOverlayStateController.addCallback(mOverlayStateCallback); } private void updateHomeControlsComplication() { mControlsComponent.getControlsListingController().ifPresent(c -> { if (isHomeControlsAvailable(c.getCurrentServices())) { mDreamOverlayStateController.addComplication(mComplication); } else { mDreamOverlayStateController.removeComplication(mComplication); } }); } private boolean isHomeControlsAvailable(List<ControlsServiceInfo> controlsServices) { if (controlsServices.isEmpty()) { return false; } private void updateComplicationAvailability() { final boolean hasFavorites = mControlsComponent.getControlsController() .map(c -> !c.getFavorites().isEmpty()) .orElse(false); if (!hasFavorites || !mControlServicesAvailable || mControlsComponent.getVisibility() == UNAVAILABLE) { mDreamOverlayStateController.removeComplication(mComplication); } else { mDreamOverlayStateController.addComplication(mComplication); } final ControlsComponent.Visibility visibility = mControlsComponent.getVisibility(); return hasFavorites && visibility != UNAVAILABLE; } } Loading packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamHomeControlsComplicationTest.java +34 −1 Original line number Diff line number Diff line Loading @@ -90,7 +90,10 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase { private ActivityStarter mActivityStarter; @Mock UiEventLogger mUiEventLogger; private UiEventLogger mUiEventLogger; @Captor private ArgumentCaptor<DreamOverlayStateController.Callback> mStateCallbackCaptor; @Before public void setup() { Loading Loading @@ -164,6 +167,29 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase { verify(mDreamOverlayStateController).addComplication(mComplication); } @Test public void complicationAvailability_checkAvailabilityWhenDreamOverlayBecomesActive() { final DreamHomeControlsComplication.Registrant registrant = new DreamHomeControlsComplication.Registrant(mComplication, mDreamOverlayStateController, mControlsComponent); registrant.start(); setServiceAvailable(true); setHaveFavorites(false); // Complication not available on start. verify(mDreamOverlayStateController, never()).addComplication(mComplication); // Favorite controls added, complication should be available now. setHaveFavorites(true); // Dream overlay becomes active. setDreamOverlayActive(true); // Verify complication is added. verify(mDreamOverlayStateController).addComplication(mComplication); } /** * Ensures clicking home controls chip logs UiEvent. */ Loading Loading @@ -196,10 +222,17 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase { private void setServiceAvailable(boolean value) { final List<ControlsServiceInfo> serviceInfos = mock(List.class); when(mControlsListingController.getCurrentServices()).thenReturn(serviceInfos); when(serviceInfos.isEmpty()).thenReturn(!value); triggerControlsListingCallback(serviceInfos); } private void setDreamOverlayActive(boolean value) { when(mDreamOverlayStateController.isOverlayActive()).thenReturn(value); verify(mDreamOverlayStateController).addCallback(mStateCallbackCaptor.capture()); mStateCallbackCaptor.getValue().onStateChanged(); } private void triggerControlsListingCallback(List<ControlsServiceInfo> serviceInfos) { verify(mControlsListingController).addCallback(mCallbackCaptor.capture()); mCallbackCaptor.getValue().onServicesUpdated(serviceInfos); Loading Loading
packages/SystemUI/src/com/android/systemui/dreams/complication/DreamHomeControlsComplication.java +36 −13 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.systemui.CoreStartable; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.controls.ControlsServiceInfo; import com.android.systemui.controls.dagger.ControlsComponent; import com.android.systemui.controls.management.ControlsListingController; import com.android.systemui.controls.ui.ControlsActivity; Loading @@ -42,6 +43,8 @@ import com.android.systemui.dreams.complication.dagger.DreamHomeControlsComplica import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.util.ViewController; import java.util.List; import javax.inject.Inject; import javax.inject.Named; Loading Loading @@ -76,16 +79,25 @@ public class DreamHomeControlsComplication implements Complication { private final DreamOverlayStateController mDreamOverlayStateController; private final ControlsComponent mControlsComponent; private boolean mControlServicesAvailable = false; private boolean mOverlayActive = false; // Callback for when the home controls service availability changes. private final ControlsListingController.ControlsListingCallback mControlsCallback = serviceInfos -> { boolean available = !serviceInfos.isEmpty(); services -> updateHomeControlsComplication(); private final DreamOverlayStateController.Callback mOverlayStateCallback = new DreamOverlayStateController.Callback() { @Override public void onStateChanged() { if (mOverlayActive == mDreamOverlayStateController.isOverlayActive()) { return; } mOverlayActive = !mOverlayActive; if (available != mControlServicesAvailable) { mControlServicesAvailable = available; updateComplicationAvailability(); if (mOverlayActive) { updateHomeControlsComplication(); } } }; Loading @@ -102,18 +114,29 @@ public class DreamHomeControlsComplication implements Complication { public void start() { mControlsComponent.getControlsListingController().ifPresent( c -> c.addCallback(mControlsCallback)); mDreamOverlayStateController.addCallback(mOverlayStateCallback); } private void updateHomeControlsComplication() { mControlsComponent.getControlsListingController().ifPresent(c -> { if (isHomeControlsAvailable(c.getCurrentServices())) { mDreamOverlayStateController.addComplication(mComplication); } else { mDreamOverlayStateController.removeComplication(mComplication); } }); } private boolean isHomeControlsAvailable(List<ControlsServiceInfo> controlsServices) { if (controlsServices.isEmpty()) { return false; } private void updateComplicationAvailability() { final boolean hasFavorites = mControlsComponent.getControlsController() .map(c -> !c.getFavorites().isEmpty()) .orElse(false); if (!hasFavorites || !mControlServicesAvailable || mControlsComponent.getVisibility() == UNAVAILABLE) { mDreamOverlayStateController.removeComplication(mComplication); } else { mDreamOverlayStateController.addComplication(mComplication); } final ControlsComponent.Visibility visibility = mControlsComponent.getVisibility(); return hasFavorites && visibility != UNAVAILABLE; } } Loading
packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamHomeControlsComplicationTest.java +34 −1 Original line number Diff line number Diff line Loading @@ -90,7 +90,10 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase { private ActivityStarter mActivityStarter; @Mock UiEventLogger mUiEventLogger; private UiEventLogger mUiEventLogger; @Captor private ArgumentCaptor<DreamOverlayStateController.Callback> mStateCallbackCaptor; @Before public void setup() { Loading Loading @@ -164,6 +167,29 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase { verify(mDreamOverlayStateController).addComplication(mComplication); } @Test public void complicationAvailability_checkAvailabilityWhenDreamOverlayBecomesActive() { final DreamHomeControlsComplication.Registrant registrant = new DreamHomeControlsComplication.Registrant(mComplication, mDreamOverlayStateController, mControlsComponent); registrant.start(); setServiceAvailable(true); setHaveFavorites(false); // Complication not available on start. verify(mDreamOverlayStateController, never()).addComplication(mComplication); // Favorite controls added, complication should be available now. setHaveFavorites(true); // Dream overlay becomes active. setDreamOverlayActive(true); // Verify complication is added. verify(mDreamOverlayStateController).addComplication(mComplication); } /** * Ensures clicking home controls chip logs UiEvent. */ Loading Loading @@ -196,10 +222,17 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase { private void setServiceAvailable(boolean value) { final List<ControlsServiceInfo> serviceInfos = mock(List.class); when(mControlsListingController.getCurrentServices()).thenReturn(serviceInfos); when(serviceInfos.isEmpty()).thenReturn(!value); triggerControlsListingCallback(serviceInfos); } private void setDreamOverlayActive(boolean value) { when(mDreamOverlayStateController.isOverlayActive()).thenReturn(value); verify(mDreamOverlayStateController).addCallback(mStateCallbackCaptor.capture()); mStateCallbackCaptor.getValue().onStateChanged(); } private void triggerControlsListingCallback(List<ControlsServiceInfo> serviceInfos) { verify(mControlsListingController).addCallback(mCallbackCaptor.capture()); mCallbackCaptor.getValue().onServicesUpdated(serviceInfos); Loading