Show back button while RemoteInput is active on keyguard
Bug: 22452379 Change-Id: Iea1cdb885698c717b98904453bf14e2bdd7d7562
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1086,6 +1086,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
mKeyguardIndicationController.setStatusBarKeyguardViewManager(
|
||||
mStatusBarKeyguardViewManager);
|
||||
mFingerprintUnlockController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
|
||||
mRemoteInputController.addCallback(mStatusBarKeyguardViewManager);
|
||||
mKeyguardViewMediatorCallback = keyguardViewMediator.getViewMediatorCallback();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user