diff options
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); |