Create dedicated bugfix flag for vertical swipes.
This changelist introduces a new flag to track vertical swipe
behavior in hub mode as a bugfix.
Test: manual - ensured new flag is still used.
Fixes: 340177049
Flag: com.android.systemui.hubmode_fullscreen_vertical_swipe_fix
Change-Id: I1455077edcf32cae539a82abc1fa82ae26af4875
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index 0d337eb..1d77dd7 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -1233,6 +1233,17 @@
}
flag {
+ name: "hubmode_fullscreen_vertical_swipe_fix"
+ namespace: "systemui"
+ description: "Bug fix that enables fullscreen vertical swiping in hub mode to bring up and down the bouncer and shade"
+ bug: "340177049"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+
+flag {
namespace: "systemui"
name: "remove_update_listener_in_qs_icon_view_impl"
description: "Remove update listeners in QsIconViewImpl class to avoid memory leak."
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt
index 69f1174..b65b471 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt
@@ -160,6 +160,7 @@
import com.android.compose.theme.LocalAndroidColorScheme
import com.android.compose.ui.graphics.painter.rememberDrawablePainter
import com.android.internal.R.dimen.system_app_widget_background_radius
+import com.android.systemui.Flags
import com.android.systemui.Flags.communalTimerFlickerFix
import com.android.systemui.communal.domain.model.CommunalContentModel
import com.android.systemui.communal.shared.model.CommunalContentSize
@@ -269,7 +270,7 @@
}
}
// Nested scroll for full screen swipe to get to shade and bouncer
- .thenIf(!viewModel.isEditMode) {
+ .thenIf(!viewModel.isEditMode && Flags.hubmodeFullscreenVerticalSwipeFix()) {
Modifier.nestedScroll(nestedScrollConnection).pointerInput(viewModel) {
awaitPointerEventScope {
while (true) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerFullscreenSwipeTouchHandlerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerFullscreenSwipeTouchHandlerTest.java
index 4850085..d244482 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerFullscreenSwipeTouchHandlerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerFullscreenSwipeTouchHandlerTest.java
@@ -62,7 +62,7 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-@EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+@EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
@DisableFlags(Flags.FLAG_COMMUNAL_BOUNCER_DO_NOT_MODIFY_PLUGIN_OPEN)
public class BouncerFullscreenSwipeTouchHandlerTest extends SysuiTestCase {
private KosmosJavaAdapter mKosmos;
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java
index 0e98b84..b85e32b 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java
@@ -74,7 +74,7 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-@DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+@DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
public class BouncerSwipeTouchHandlerTest extends SysuiTestCase {
private KosmosJavaAdapter mKosmos;
@Mock
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/ShadeTouchHandlerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/ShadeTouchHandlerTest.kt
index 204d4b0..38ea4497 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/ShadeTouchHandlerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/ShadeTouchHandlerTest.kt
@@ -79,7 +79,7 @@
// Verifies that a swipe down in the gesture region is captured by the shade touch handler.
@Test
- @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testSwipeDown_captured() {
val captured = swipe(Direction.DOWN)
Truth.assertThat(captured).isTrue()
@@ -87,7 +87,7 @@
// Verifies that a swipe in the upward direction is not captured.
@Test
- @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testSwipeUp_notCaptured() {
val captured = swipe(Direction.UP)
@@ -97,7 +97,7 @@
// Verifies that a swipe down forwards captured touches to central surfaces for handling.
@Test
- @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
@EnableFlags(Flags.FLAG_COMMUNAL_HUB)
fun testSwipeDown_communalEnabled_sentToCentralSurfaces() {
kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true)
@@ -110,7 +110,7 @@
// Verifies that a swipe down forwards captured touches to the shade view for handling.
@Test
- @DisableFlags(Flags.FLAG_COMMUNAL_HUB, Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @DisableFlags(Flags.FLAG_COMMUNAL_HUB, Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testSwipeDown_communalDisabled_sentToShadeView() {
swipe(Direction.DOWN)
@@ -121,7 +121,7 @@
// Verifies that a swipe down while dreaming forwards captured touches to the shade view for
// handling.
@Test
- @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testSwipeDown_dreaming_sentToShadeView() {
whenever(mDreamManager.isDreaming).thenReturn(true)
swipe(Direction.DOWN)
@@ -132,7 +132,7 @@
// Verifies that a swipe up is not forwarded to central surfaces.
@Test
- @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
@EnableFlags(Flags.FLAG_COMMUNAL_HUB)
fun testSwipeUp_communalEnabled_touchesNotSent() {
kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true)
@@ -146,7 +146,7 @@
// Verifies that a swipe up is not forwarded to the shade view.
@Test
- @DisableFlags(Flags.FLAG_COMMUNAL_HUB, Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @DisableFlags(Flags.FLAG_COMMUNAL_HUB, Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testSwipeUp_communalDisabled_touchesNotSent() {
swipe(Direction.UP)
@@ -156,7 +156,7 @@
}
@Test
- @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @DisableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testCancelMotionEvent_popsTouchSession() {
swipe(Direction.DOWN)
val event = MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0f, 0f, 0)
@@ -165,7 +165,7 @@
}
@Test
- @EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testFullVerticalSwipe_initiatedWhenAvailable() {
// Indicate touches are available
mTouchHandler.onGlanceableTouchAvailable(true)
@@ -176,7 +176,7 @@
}
@Test
- @EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testFullVerticalSwipe_notInitiatedWhenNotAvailable() {
// Indicate touches aren't available
mTouchHandler.onGlanceableTouchAvailable(false)
@@ -187,7 +187,7 @@
}
@Test
- @EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testFullVerticalSwipe_resetsTouchStateOnUp() {
// Indicate touches are available
mTouchHandler.onGlanceableTouchAvailable(true)
@@ -203,7 +203,7 @@
}
@Test
- @EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE)
+ @EnableFlags(Flags.FLAG_HUBMODE_FULLSCREEN_VERTICAL_SWIPE_FIX)
fun testFullVerticalSwipe_resetsTouchStateOnCancel() {
// Indicate touches are available
mTouchHandler.onGlanceableTouchAvailable(true)
diff --git a/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.kt b/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.kt
index d5790a4..a093f58 100644
--- a/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.kt
+++ b/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.kt
@@ -118,7 +118,8 @@
if (Flags.dreamOverlayBouncerSwipeDirectionFiltering()) {
(abs(distanceY.toDouble()) > abs(distanceX.toDouble()) &&
distanceY > 0) &&
- if (Flags.hubmodeFullscreenVerticalSwipe()) touchAvailable else true
+ if (Flags.hubmodeFullscreenVerticalSwipeFix()) touchAvailable
+ else true
} else {
// If the user scrolling favors a vertical direction, begin capturing
// scrolls.
@@ -175,7 +176,7 @@
}
init {
- if (Flags.hubmodeFullscreenVerticalSwipe()) {
+ if (Flags.hubmodeFullscreenVerticalSwipeFix()) {
scope.launch {
communalViewModel.glanceableTouchAvailable.collect {
onGlanceableTouchAvailable(it)
@@ -218,7 +219,7 @@
val normalRegion =
Rect(0, Math.round(height * (1 - bouncerZoneScreenPercentage)), width, height)
- if (Flags.hubmodeFullscreenVerticalSwipe()) {
+ if (Flags.hubmodeFullscreenVerticalSwipeFix()) {
region.op(bounds, Region.Op.UNION)
exclusionRect?.apply { region.op(this, Region.Op.DIFFERENCE) }
}
@@ -265,7 +266,7 @@
when (motionEvent.action) {
MotionEvent.ACTION_CANCEL,
MotionEvent.ACTION_UP -> {
- if (Flags.hubmodeFullscreenVerticalSwipe() && capture == true) {
+ if (Flags.hubmodeFullscreenVerticalSwipeFix() && capture == true) {
communalViewModel.onResetTouchState()
}
touchSession?.apply { pop() }
diff --git a/packages/SystemUI/src/com/android/systemui/ambient/touch/ShadeTouchHandler.kt b/packages/SystemUI/src/com/android/systemui/ambient/touch/ShadeTouchHandler.kt
index 06b41de..9da9a3a 100644
--- a/packages/SystemUI/src/com/android/systemui/ambient/touch/ShadeTouchHandler.kt
+++ b/packages/SystemUI/src/com/android/systemui/ambient/touch/ShadeTouchHandler.kt
@@ -61,7 +61,7 @@
private var touchAvailable = false
init {
- if (Flags.hubmodeFullscreenVerticalSwipe()) {
+ if (Flags.hubmodeFullscreenVerticalSwipeFix()) {
scope.launch {
communalViewModel.glanceableTouchAvailable.collect {
onGlanceableTouchAvailable(it)
@@ -107,7 +107,8 @@
capture =
abs(distanceY.toDouble()) > abs(distanceX.toDouble()) &&
distanceY < 0 &&
- if (Flags.hubmodeFullscreenVerticalSwipe()) touchAvailable else true
+ if (Flags.hubmodeFullscreenVerticalSwipeFix()) touchAvailable
+ else true
if (capture == true) {
// Send the initial touches over, as the input listener has already
// processed these touches.
@@ -144,7 +145,7 @@
override fun getTouchInitiationRegion(bounds: Rect, region: Region, exclusionRect: Rect?) {
// If fullscreen swipe, use entire space minus exclusion region
- if (Flags.hubmodeFullscreenVerticalSwipe()) {
+ if (Flags.hubmodeFullscreenVerticalSwipeFix()) {
region.op(bounds, Region.Op.UNION)
exclusionRect?.apply { region.op(this, Region.Op.DIFFERENCE) }
diff --git a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
index 05c50fe..15bbef0 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
@@ -293,7 +293,7 @@
)
containerView.systemGestureExclusionRects =
- if (Flags.hubmodeFullscreenVerticalSwipe()) {
+ if (Flags.hubmodeFullscreenVerticalSwipeFix()) {
listOf(
// Disable back gestures on the left side of the screen, to avoid
// conflicting with scene transitions.