Add flag to disable hiding complications on touch
The existing logic to hide dream overlay complications on touch is
conflicting with transitions to/from the hub.
Bug: 329091030
Test: "adb shell device_config override systemui
com.android.systemui.remove_dream_overlay_hide_on_touch true" and
verified overlays are no longer hidden on touch
Flag: ACONFIG com.android.systemui.remove_dream_overlay_hide_on_touch DISABLED
Change-Id: I1fca6cc533769e6fb32c54297888f48a2aecf210
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index fd2fa07..0dd7b25 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -746,6 +746,16 @@
}
flag {
+ name: "remove_dream_overlay_hide_on_touch"
+ namespace: "systemui"
+ description: "Removes logic to hide the dream overlay on user interaction, as it conflicts with various transitions"
+ bug: "329091030"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "keyboard_docking_indicator"
namespace: "systemui"
description: "Glow bar indicator reveals upon keyboard docking."
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/complication/HideComplicationTouchHandlerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/complication/HideComplicationTouchHandlerTest.java
index 315a24b..a434158 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/complication/HideComplicationTouchHandlerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/complication/HideComplicationTouchHandlerTest.java
@@ -16,6 +16,8 @@
package com.android.systemui.dreams.complication;
+import static com.android.systemui.Flags.FLAG_REMOVE_DREAM_OVERLAY_HIDE_ON_TOUCH;
+
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
@@ -23,6 +25,8 @@
import static org.mockito.Mockito.when;
import android.os.Handler;
+import android.platform.test.annotations.DisableFlags;
+import android.platform.test.annotations.EnableFlags;
import android.view.MotionEvent;
import android.view.View;
@@ -90,6 +94,7 @@
* Ensures no actions are taken when there multiple sessions.
*/
@Test
+ @DisableFlags(FLAG_REMOVE_DREAM_OVERLAY_HIDE_ON_TOUCH)
public void testSessionEndOnMultipleSessions() {
final HideComplicationTouchHandler touchHandler = new HideComplicationTouchHandler(
mVisibilityController,
@@ -122,6 +127,7 @@
* Ensures no actions are taken when the bouncer is showing.
*/
@Test
+ @DisableFlags(FLAG_REMOVE_DREAM_OVERLAY_HIDE_ON_TOUCH)
public void testSessionEndWhenBouncerShowing() {
final HideComplicationTouchHandler touchHandler = new HideComplicationTouchHandler(
mVisibilityController,
@@ -154,6 +160,7 @@
* Ensures no actions are taken when there multiple sessions.
*/
@Test
+ @DisableFlags(FLAG_REMOVE_DREAM_OVERLAY_HIDE_ON_TOUCH)
public void testSessionEndWithTouchInInset() {
final HideComplicationTouchHandler touchHandler = new HideComplicationTouchHandler(
mVisibilityController,
@@ -202,6 +209,7 @@
* Make sure visibility changes are triggered from session events.
*/
@Test
+ @DisableFlags(FLAG_REMOVE_DREAM_OVERLAY_HIDE_ON_TOUCH)
public void testSessionLifecycle() {
final HideComplicationTouchHandler touchHandler = new HideComplicationTouchHandler(
mVisibilityController,
@@ -259,4 +267,34 @@
// Verify session ended.
verify(mSession).pop();
}
+
+ @Test
+ @EnableFlags(FLAG_REMOVE_DREAM_OVERLAY_HIDE_ON_TOUCH)
+ public void testNoActionWhenDisabledByFlag() {
+ final HideComplicationTouchHandler touchHandler = new HideComplicationTouchHandler(
+ mVisibilityController,
+ RESTORE_TIMEOUT,
+ HIDE_DELAY,
+ mTouchInsetManager,
+ mStatusBarKeyguardViewManager,
+ mFakeExecutor,
+ mStateController);
+
+ // Report one session.
+ when(mSession.getActiveSessionCount()).thenReturn(1);
+
+ // Bouncer is showing.
+ when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+
+ // Start session.
+ touchHandler.onSessionStart(mSession);
+
+ // Verify session end.
+ verify(mSession).pop();
+
+ mClock.advanceTime(HIDE_DELAY);
+
+ // Verify no interaction with visibility controller.
+ verify(mVisibilityController, never()).setVisibility(anyInt());
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/HideComplicationTouchHandler.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/HideComplicationTouchHandler.java
index ee48ee5..d525ce3 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/HideComplicationTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/HideComplicationTouchHandler.java
@@ -16,6 +16,7 @@
package com.android.systemui.dreams.complication;
+import static com.android.systemui.Flags.removeDreamOverlayHideOnTouch;
import static com.android.systemui.dreams.complication.dagger.ComplicationModule.COMPLICATIONS_FADE_OUT_DELAY;
import static com.android.systemui.dreams.complication.dagger.ComplicationModule.COMPLICATIONS_RESTORE_TIMEOUT;
@@ -120,7 +121,7 @@
final boolean bouncerShowing = mStatusBarKeyguardViewManager.isBouncerShowing();
// If other sessions are interested in this touch, do not fade out elements.
- if (session.getActiveSessionCount() > 1 || bouncerShowing
+ if (removeDreamOverlayHideOnTouch() || session.getActiveSessionCount() > 1 || bouncerShowing
|| mOverlayStateController.areExitAnimationsRunning()) {
if (DEBUG) {
Log.d(TAG, "not fading. Active session count: " + session.getActiveSessionCount()