Merge "Check home controls availability on overlay active." into tm-qpr-dev
This commit is contained in:
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
if (available != mControlServicesAvailable) {
|
||||
mControlServicesAvailable = available;
|
||||
updateComplicationAvailability();
|
||||
private final DreamOverlayStateController.Callback mOverlayStateCallback =
|
||||
new DreamOverlayStateController.Callback() {
|
||||
@Override
|
||||
public void onStateChanged() {
|
||||
if (mOverlayActive == mDreamOverlayStateController.isOverlayActive()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mOverlayActive = !mOverlayActive;
|
||||
|
||||
if (mOverlayActive) {
|
||||
updateHomeControlsComplication();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -102,18 +114,29 @@ public class DreamHomeControlsComplication implements Complication {
|
||||
public void start() {
|
||||
mControlsComponent.getControlsListingController().ifPresent(
|
||||
c -> c.addCallback(mControlsCallback));
|
||||
mDreamOverlayStateController.addCallback(mOverlayStateCallback);
|
||||
}
|
||||
|
||||
private void updateComplicationAvailability() {
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user