diff options
| author | 2016-01-06 15:23:14 +0100 | |
|---|---|---|
| committer | 2016-01-06 15:23:14 +0100 | |
| commit | d28ccd7cab8e1a187dfd6c5733efe7cdfb652202 (patch) | |
| tree | d0b43e4c73b6edb3d9a0621079277963ae522adb | |
| parent | 7213bdd10437c3da8705154260342ad25c2c5345 (diff) | |
Show back button while RemoteInput is active on keyguard
Bug: 22452379
Change-Id: Iea1cdb885698c717b98904453bf14e2bdd7d7562
4 files changed, 39 insertions, 10 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java b/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java index f243b00143a2..d7e47c27dc71 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java @@ -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); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 80fcba60e895..94d3cc0fc785 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1086,6 +1086,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mKeyguardIndicationController.setStatusBarKeyguardViewManager( mStatusBarKeyguardViewManager); mFingerprintUnlockController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager); + mRemoteInputController.addCallback(mStatusBarKeyguardViewManager); mKeyguardViewMediatorCallback = keyguardViewMediator.getViewMediatorCallback(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 05f6e57d9199..f14f0d4c28a4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -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(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java index abe51ac3a5d0..9d2f0de4c1e0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java @@ -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); } |