Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 592f2370 authored by Lucas Silva's avatar Lucas Silva
Browse files

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
parent 0499cf71
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -816,6 +816,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"
+6 −1
Original line number Diff line number Diff line
@@ -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() {
+28 −0
Original line number Diff line number Diff line
@@ -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;
@@ -674,6 +676,32 @@ public class NotificationPanelViewControllerTest extends NotificationPanelViewCo
        assertThat(mNotificationPanelViewController.canCollapsePanelOnTouch()).isFalse();
    }

    @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);