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

Commit 6096b1a5 authored by Aaron Liu's avatar Aaron Liu
Browse files

[Keyguard] Fix unlock animation for occluded LS.

When we open shade from dream (which is in an occluded keyguard state)
and open settings. We are prompted to authenticate with the bouncer.
Upon doing so, the app hangs in keyguard even though the user is no
unlocked. In order to fix this, we opt not to defer keyguard done when
keyguard is occluded.

Test: Manual and a unit test
Bug: 228064734
Change-Id: I58aebe033f069dc6bedb3ad3a78da849ed29dc78
parent 91079f44
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -2560,8 +2560,13 @@ public class CentralSurfacesImpl extends CoreStartable implements
                callback.onActivityStarted(ActivityManager.START_CANCELED);
            }
        };
        // Do not deferKeyguard when occluded because, when keyguard is occluded,
        // we do not launch the activity until keyguard is done.
        boolean occluded = mStatusBarKeyguardViewManager.isShowing()
                && mStatusBarKeyguardViewManager.isOccluded();
        boolean deferred = !occluded;
        executeRunnableDismissingKeyguard(runnable, cancelRunnable, dismissShadeDirectly,
                willLaunchResolverActivity, true /* deferred */, animate);
                willLaunchResolverActivity, deferred /* deferred */, animate);
    }

    @Nullable
+19 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.systemui.statusbar.phone;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK;

import static com.google.common.truth.Truth.assertThat;

import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import static junit.framework.TestCase.fail;
@@ -44,6 +46,7 @@ import android.app.WallpaperManager;
import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.devicestate.DeviceStateManager;
import android.hardware.display.AmbientDisplayConfiguration;
@@ -999,6 +1002,22 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
        verify(mStatusBarStateController, never()).setLeaveOpenOnKeyguardHide(true);
    }

    @Test
    public void startActivityDismissingKeyguard_isShowingandIsOccluded() {
        when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
        when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(true);
        mCentralSurfaces.startActivityDismissingKeyguard(
                new Intent(),
                /* onlyProvisioned = */false,
                /* dismissShade = */false);
        verify(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any(Runnable.class));
        ArgumentCaptor<OnDismissAction> onDismissActionCaptor =
                ArgumentCaptor.forClass(OnDismissAction.class);
        verify(mStatusBarKeyguardViewManager)
                .dismissWithAction(onDismissActionCaptor.capture(), any(Runnable.class), eq(true));
        assertThat(onDismissActionCaptor.getValue().onDismiss()).isFalse();
    }

    private void setDeviceState(int state) {
        ArgumentCaptor<DeviceStateManager.DeviceStateCallback> callbackCaptor =
                ArgumentCaptor.forClass(DeviceStateManager.DeviceStateCallback.class);