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

Commit d28ccd7c authored by Adrian Roos's avatar Adrian Roos
Browse files

Show back button while RemoteInput is active on keyguard

Bug: 22452379
Change-Id: Iea1cdb885698c717b98904453bf14e2bdd7d7562
parent 7213bdd1
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -30,11 +30,11 @@ import java.util.ArrayList;
public class RemoteInputController {

    private final ArrayList<WeakReference<NotificationData.Entry>> mRemoteInputs = new ArrayList<>();
    private final StatusBarWindowManager mStatusBarWindowManager;
    private final ArrayList<Callback> mCallbacks = new ArrayList<>(3);
    private final HeadsUpManager mHeadsUpManager;

    public RemoteInputController(StatusBarWindowManager sbwm, HeadsUpManager headsUpManager) {
        mStatusBarWindowManager = sbwm;
        addCallback(sbwm);
        mHeadsUpManager = headsUpManager;
    }

@@ -59,8 +59,12 @@ public class RemoteInputController {
    }

    private void apply(NotificationData.Entry entry) {
        mStatusBarWindowManager.setRemoteInputActive(isRemoteInputActive());
        mHeadsUpManager.setRemoteInputActive(entry, isRemoteInputActive(entry));
        boolean remoteInputActive = isRemoteInputActive();
        int N = mCallbacks.size();
        for (int i = 0; i < N; i++) {
            mCallbacks.get(i).onRemoteInputActive(remoteInputActive);
        }
    }

    /**
@@ -99,4 +103,12 @@ public class RemoteInputController {
    }


    public void addCallback(Callback callback) {
        Preconditions.checkNotNull(callback);
        mCallbacks.add(callback);
    }

    public interface Callback {
        void onRemoteInputActive(boolean active);
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -1086,6 +1086,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        mKeyguardIndicationController.setStatusBarKeyguardViewManager(
                mStatusBarKeyguardViewManager);
        mFingerprintUnlockController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
        mRemoteInputController.addCallback(mStatusBarKeyguardViewManager);
        mKeyguardViewMediatorCallback = keyguardViewMediator.getViewMediatorCallback();
    }

+19 −5
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.RemoteInputController;

import static com.android.keyguard.KeyguardHostView.OnDismissAction;

@@ -40,7 +41,7 @@ import static com.android.keyguard.KeyguardHostView.OnDismissAction;
 * which is in turn, reported to this class by the current
 * {@link com.android.keyguard.KeyguardViewBase}.
 */
public class StatusBarKeyguardViewManager {
public class StatusBarKeyguardViewManager implements RemoteInputController.Callback {

    // When hiding the Keyguard with timing supplied from WindowManager, better be early than late.
    private static final long HIDE_TIMING_CORRECTION_MS = -3 * 16;
@@ -69,12 +70,15 @@ public class StatusBarKeyguardViewManager {
    private KeyguardBouncer mBouncer;
    private boolean mShowing;
    private boolean mOccluded;
    private boolean mRemoteInputActive;

    private boolean mFirstUpdate = true;
    private boolean mLastShowing;
    private boolean mLastOccluded;
    private boolean mLastBouncerShowing;
    private boolean mLastBouncerDismissible;
    private boolean mLastRemoteInputActive;

    private OnDismissAction mAfterKeyguardGoneAction;
    private boolean mDeviceWillWakeUp;
    private boolean mDeferScrimFadeOut;
@@ -199,6 +203,12 @@ public class StatusBarKeyguardViewManager {
        mPhoneStatusBar.onScreenTurnedOn();
    }

    @Override
    public void onRemoteInputActive(boolean active) {
        mRemoteInputActive = active;
        updateStates();
    }

    public void onScreenTurnedOff() {
        mScreenTurnedOn = false;
    }
@@ -429,18 +439,21 @@ public class StatusBarKeyguardViewManager {
        boolean occluded = mOccluded;
        boolean bouncerShowing = mBouncer.isShowing();
        boolean bouncerDismissible = !mBouncer.isFullscreenBouncer();
        boolean remoteInputActive = mRemoteInputActive;

        if ((bouncerDismissible || !showing) != (mLastBouncerDismissible || !mLastShowing)
        if ((bouncerDismissible || !showing || remoteInputActive) !=
                (mLastBouncerDismissible || !mLastShowing || mLastRemoteInputActive)
                || mFirstUpdate) {
            if (bouncerDismissible || !showing) {
            if (bouncerDismissible || !showing || remoteInputActive) {
                mContainer.setSystemUiVisibility(vis & ~View.STATUS_BAR_DISABLE_BACK);
            } else {
                mContainer.setSystemUiVisibility(vis | View.STATUS_BAR_DISABLE_BACK);
            }
        }

        boolean navBarVisible = (!(showing && !occluded) || bouncerShowing);
        boolean lastNavBarVisible = (!(mLastShowing && !mLastOccluded) || mLastBouncerShowing);
        boolean navBarVisible = (!(showing && !occluded) || bouncerShowing || remoteInputActive);
        boolean lastNavBarVisible = (!(mLastShowing && !mLastOccluded) || mLastBouncerShowing
                || mLastRemoteInputActive);
        if (navBarVisible != lastNavBarVisible || mFirstUpdate) {
            if (mPhoneStatusBar.getNavigationBarView() != null) {
                if (navBarVisible) {
@@ -477,6 +490,7 @@ public class StatusBarKeyguardViewManager {
        mLastOccluded = occluded;
        mLastBouncerShowing = bouncerShowing;
        mLastBouncerDismissible = bouncerDismissible;
        mLastRemoteInputActive = remoteInputActive;

        mPhoneStatusBar.onKeyguardViewManagerStatesUpdated();
    }
+4 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.view.WindowManager;
import com.android.keyguard.R;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.StatusBarState;

import java.io.FileDescriptor;
@@ -39,7 +40,7 @@ import java.lang.reflect.Field;
/**
 * Encapsulates all logic for the status bar window state management.
 */
public class StatusBarWindowManager {
public class StatusBarWindowManager implements RemoteInputController.Callback {

    private final Context mContext;
    private final WindowManager mWindowManager;
@@ -292,7 +293,8 @@ public class StatusBarWindowManager {
        apply(mCurrentState);
    }

    public void setRemoteInputActive(boolean remoteInputActive) {
    @Override
    public void onRemoteInputActive(boolean remoteInputActive) {
        mCurrentState.remoteInputActive = remoteInputActive;
        apply(mCurrentState);
    }