diff options
| author | 2024-05-02 13:19:36 -0400 | |
|---|---|---|
| committer | 2024-05-02 15:53:57 -0400 | |
| commit | 592f2370db95a1639cd4ba1736a85d3a8bd4434a (patch) | |
| tree | ff654baba560d4941f393870b02a4cafc2e5c46b | |
| parent | 0499cf71e8c29d7c436f058e980faef21666d657 (diff) | |
Fix shade flicker when launching activity from glanceable hub
The shade collapse animation runs today even when the shade is already
collapsed, which causes it to open. This prevents the shade from trying
to collapse itself if the shade is closed on the lockscreen.
Fixes: 331591373
Test: atest SystemUITests:NotificationPanelViewControllerTest
Flag: ACONFIG com.android.systemui.shade_collapse_activity_launch_fix
DISABLED
Change-Id: I429c2a1d985b5e719321bbb0fbedb1332b2fd5f4
3 files changed, 44 insertions, 1 deletions
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig index b3aa7e15336b..c20b0c7fb480 100644 --- a/packages/SystemUI/aconfig/systemui.aconfig +++ b/packages/SystemUI/aconfig/systemui.aconfig @@ -817,6 +817,16 @@ flag { } flag { + name: "shade_collapse_activity_launch_fix" + namespace: "systemui" + description: "Avoid collapsing the shade on activity launch if it is already collapsed, as this causes a flicker." + bug: "331591373" + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { name: "slice_broadcast_relay_in_background" namespace: "systemui" description: "Move handling of slice broadcast relay broadcasts to background threads" diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 67211b11a32f..adf9a94a0ac4 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -25,6 +25,7 @@ import static com.android.app.animation.Interpolators.EMPHASIZED_DECELERATE; import static com.android.keyguard.KeyguardClockSwitch.LARGE; import static com.android.keyguard.KeyguardClockSwitch.SMALL; import static com.android.systemui.Flags.predictiveBackAnimateShade; +import static com.android.systemui.Flags.shadeCollapseActivityLaunchFix; import static com.android.systemui.Flags.smartspaceRelocateToBottom; import static com.android.systemui.classifier.Classifier.BOUNCER_UNLOCK; import static com.android.systemui.classifier.Classifier.GENERIC; @@ -4091,7 +4092,11 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump @Override public boolean canBeCollapsed() { - return !isFullyCollapsed() && !isTracking() && !isClosing(); + return !isFullyCollapsed() && !isTracking() && !isClosing() + // Don't try to collapse if on keyguard, as the expansion fraction is 1 in this + // case. + && !(shadeCollapseActivityLaunchFix() && mExpandedFraction == 1f + && mBarState == KEYGUARD); } public void instantCollapse() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java index 81e20c17a8ea..6b57f6e06bda 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java @@ -18,6 +18,7 @@ package com.android.systemui.shade; import static com.android.keyguard.KeyguardClockSwitch.LARGE; import static com.android.keyguard.KeyguardClockSwitch.SMALL; +import static com.android.systemui.Flags.FLAG_SHADE_COLLAPSE_ACTIVITY_LAUNCH_FIX; import static com.android.systemui.shade.ShadeExpansionStateManagerKt.STATE_CLOSED; import static com.android.systemui.shade.ShadeExpansionStateManagerKt.STATE_OPEN; import static com.android.systemui.shade.ShadeExpansionStateManagerKt.STATE_OPENING; @@ -47,6 +48,7 @@ import android.animation.ValueAnimator; import android.graphics.Point; import android.os.PowerManager; import android.platform.test.annotations.DisableFlags; +import android.platform.test.annotations.EnableFlags; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.MotionEvent; @@ -675,6 +677,32 @@ public class NotificationPanelViewControllerTest extends NotificationPanelViewCo } @Test + @EnableFlags(FLAG_SHADE_COLLAPSE_ACTIVITY_LAUNCH_FIX) + public void testCanBeCollapsed_expandedInKeyguard() { + mStatusBarStateController.setState(KEYGUARD); + mNotificationPanelViewController.setExpandedFraction(1f); + + assertThat(mNotificationPanelViewController.canBeCollapsed()).isFalse(); + } + + @Test + @EnableFlags(FLAG_SHADE_COLLAPSE_ACTIVITY_LAUNCH_FIX) + public void testCanBeCollapsed_expandedInShade() { + mStatusBarStateController.setState(SHADE); + mNotificationPanelViewController.setExpandedFraction(1f); + assertThat(mNotificationPanelViewController.canBeCollapsed()).isTrue(); + } + + @Test + @DisableFlags(FLAG_SHADE_COLLAPSE_ACTIVITY_LAUNCH_FIX) + public void testCanBeCollapsed_expandedInKeyguard_flagDisabled() { + mStatusBarStateController.setState(KEYGUARD); + mNotificationPanelViewController.setExpandedFraction(1f); + + assertThat(mNotificationPanelViewController.canBeCollapsed()).isTrue(); + } + + @Test public void testSwipeWhileLocked_notifiesKeyguardState() { mStatusBarStateController.setState(KEYGUARD); |