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.internal.logging.UiEventLogger;
|
||||||
import com.android.systemui.CoreStartable;
|
import com.android.systemui.CoreStartable;
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator;
|
import com.android.systemui.animation.ActivityLaunchAnimator;
|
||||||
|
import com.android.systemui.controls.ControlsServiceInfo;
|
||||||
import com.android.systemui.controls.dagger.ControlsComponent;
|
import com.android.systemui.controls.dagger.ControlsComponent;
|
||||||
import com.android.systemui.controls.management.ControlsListingController;
|
import com.android.systemui.controls.management.ControlsListingController;
|
||||||
import com.android.systemui.controls.ui.ControlsActivity;
|
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.plugins.ActivityStarter;
|
||||||
import com.android.systemui.util.ViewController;
|
import com.android.systemui.util.ViewController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
@@ -76,16 +79,25 @@ public class DreamHomeControlsComplication implements Complication {
|
|||||||
private final DreamOverlayStateController mDreamOverlayStateController;
|
private final DreamOverlayStateController mDreamOverlayStateController;
|
||||||
private final ControlsComponent mControlsComponent;
|
private final ControlsComponent mControlsComponent;
|
||||||
|
|
||||||
private boolean mControlServicesAvailable = false;
|
private boolean mOverlayActive = false;
|
||||||
|
|
||||||
// Callback for when the home controls service availability changes.
|
// Callback for when the home controls service availability changes.
|
||||||
private final ControlsListingController.ControlsListingCallback mControlsCallback =
|
private final ControlsListingController.ControlsListingCallback mControlsCallback =
|
||||||
serviceInfos -> {
|
services -> updateHomeControlsComplication();
|
||||||
boolean available = !serviceInfos.isEmpty();
|
|
||||||
|
|
||||||
if (available != mControlServicesAvailable) {
|
private final DreamOverlayStateController.Callback mOverlayStateCallback =
|
||||||
mControlServicesAvailable = available;
|
new DreamOverlayStateController.Callback() {
|
||||||
updateComplicationAvailability();
|
@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() {
|
public void start() {
|
||||||
mControlsComponent.getControlsListingController().ifPresent(
|
mControlsComponent.getControlsListingController().ifPresent(
|
||||||
c -> c.addCallback(mControlsCallback));
|
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()
|
final boolean hasFavorites = mControlsComponent.getControlsController()
|
||||||
.map(c -> !c.getFavorites().isEmpty())
|
.map(c -> !c.getFavorites().isEmpty())
|
||||||
.orElse(false);
|
.orElse(false);
|
||||||
if (!hasFavorites || !mControlServicesAvailable
|
final ControlsComponent.Visibility visibility = mControlsComponent.getVisibility();
|
||||||
|| mControlsComponent.getVisibility() == UNAVAILABLE) {
|
return hasFavorites && visibility != UNAVAILABLE;
|
||||||
mDreamOverlayStateController.removeComplication(mComplication);
|
|
||||||
} else {
|
|
||||||
mDreamOverlayStateController.addComplication(mComplication);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,10 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase {
|
|||||||
private ActivityStarter mActivityStarter;
|
private ActivityStarter mActivityStarter;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
UiEventLogger mUiEventLogger;
|
private UiEventLogger mUiEventLogger;
|
||||||
|
|
||||||
|
@Captor
|
||||||
|
private ArgumentCaptor<DreamOverlayStateController.Callback> mStateCallbackCaptor;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() {
|
public void setup() {
|
||||||
@@ -164,6 +167,29 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase {
|
|||||||
verify(mDreamOverlayStateController).addComplication(mComplication);
|
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.
|
* Ensures clicking home controls chip logs UiEvent.
|
||||||
*/
|
*/
|
||||||
@@ -196,10 +222,17 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase {
|
|||||||
|
|
||||||
private void setServiceAvailable(boolean value) {
|
private void setServiceAvailable(boolean value) {
|
||||||
final List<ControlsServiceInfo> serviceInfos = mock(List.class);
|
final List<ControlsServiceInfo> serviceInfos = mock(List.class);
|
||||||
|
when(mControlsListingController.getCurrentServices()).thenReturn(serviceInfos);
|
||||||
when(serviceInfos.isEmpty()).thenReturn(!value);
|
when(serviceInfos.isEmpty()).thenReturn(!value);
|
||||||
triggerControlsListingCallback(serviceInfos);
|
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) {
|
private void triggerControlsListingCallback(List<ControlsServiceInfo> serviceInfos) {
|
||||||
verify(mControlsListingController).addCallback(mCallbackCaptor.capture());
|
verify(mControlsListingController).addCallback(mCallbackCaptor.capture());
|
||||||
mCallbackCaptor.getValue().onServicesUpdated(serviceInfos);
|
mCallbackCaptor.getValue().onServicesUpdated(serviceInfos);
|
||||||
|
|||||||
Reference in New Issue
Block a user