summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lucas Silva <lusilva@google.com> 2024-05-02 13:19:36 -0400
committer Lucas Silva <lusilva@google.com> 2024-05-02 15:53:57 -0400
commit592f2370db95a1639cd4ba1736a85d3a8bd4434a (patch)
treeff654baba560d4941f393870b02a4cafc2e5c46b
parent0499cf71e8c29d7c436f058e980faef21666d657 (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
-rw-r--r--packages/SystemUI/aconfig/systemui.aconfig10
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java28
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);