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

Commit a7c958b3 authored by Patrick Plunkett's avatar Patrick Plunkett Committed by Android (Google) Code Review
Browse files

Merge "Allow activities on secondary displays to dismiss keyguard"

parents 8c07286d 40426e0a
Loading
Loading
Loading
Loading
+27 −20
Original line number Diff line number Diff line
@@ -41,10 +41,8 @@ import android.os.RemoteException;
import android.os.Trace;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;

import com.android.internal.policy.IKeyguardDismissCallback;
import com.android.server.wm.WindowManagerService;

import java.io.PrintWriter;

/**
@@ -236,26 +234,35 @@ class KeyguardController {
        final ActivityRecord lastDismissingKeyguardActivity = mDismissingKeyguardActivity;
        mOccluded = false;
        mDismissingKeyguardActivity = null;
        final ActivityDisplay display = mStackSupervisor.getDefaultDisplay();

        for (int displayNdx = mStackSupervisor.getChildCount() - 1; displayNdx >= 0; displayNdx--) {
            final ActivityDisplay display = mStackSupervisor.getChildAt(displayNdx);
            for (int stackNdx = display.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
                final ActivityStack stack = display.getChildAt(stackNdx);

            // Only the focused stack top activity may control occluded state
            if (mStackSupervisor.isFocusedStack(stack)) {
                // Only the top activity of the focused stack on the default display may control
                // occluded state.
                if (display.mDisplayId == DEFAULT_DISPLAY
                        && mStackSupervisor.isFocusedStack(stack)) {

                // A dismissing activity occludes Keyguard in the insecure case for legacy reasons.
                    // A dismissing activity occludes Keyguard in the insecure case for legacy
                    // reasons.
                    final ActivityRecord topDismissing = stack.getTopDismissingKeyguardActivity();
                mOccluded = stack.topActivityOccludesKeyguard()
                    mOccluded =
                            stack.topActivityOccludesKeyguard()
                                    || (topDismissing != null
                                            && stack.topRunningActivityLocked() == topDismissing
                                && canShowWhileOccluded(true /* dismissKeyguard */,
                                            && canShowWhileOccluded(
                                                    true /* dismissKeyguard */,
                                                    false /* showWhenLocked */));
                }

                if (mDismissingKeyguardActivity == null
                        && stack.getTopDismissingKeyguardActivity() != null) {
                    mDismissingKeyguardActivity = stack.getTopDismissingKeyguardActivity();
                }
            }
        }
        mOccluded |= mWindowManager.isShowingDream();
        if (mOccluded != lastOccluded) {
            handleOccludedChanged();