From 99b69286f1e22575aa4807d63f01662477baedd5 Mon Sep 17 00:00:00 2001 From: Craig Mautner Date: Tue, 26 Aug 2014 17:03:39 -0700 Subject: [PATCH] Show IME over keyguard if IME target is showing IME was being hidden by keyguard even if the window it was attached to was showing. This change shows the IME if the window it is attached to is hiding the keyguard. Also fix an NPE that was crashing systemui. Fixes bug 16457525. Change-Id: If587eefa7b1e0ae26713906a76c0766ebaae69a6 --- .../statusbar/policy/WifiAccessPointController.java | 3 +++ .../core/java/com/android/server/wm/WindowAnimator.java | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiAccessPointController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiAccessPointController.java index 09e74720a645d..b800fbfb804f4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiAccessPointController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiAccessPointController.java @@ -134,6 +134,9 @@ public class WifiAccessPointController { final List aps = new ArrayList(scanResults.size()); final ArraySet ssids = new ArraySet(); for (ScanResult scanResult : scanResults) { + if (scanResult == null) { + continue; + } final String ssid = scanResult.SSID; if (TextUtils.isEmpty(ssid) || ssids.contains(ssid)) continue; if (!configured.containsKey(ssid)) continue; diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java index 4edd5cfda29f1..81cd6020c6078 100644 --- a/services/core/java/com/android/server/wm/WindowAnimator.java +++ b/services/core/java/com/android/server/wm/WindowAnimator.java @@ -248,6 +248,10 @@ public class WindowAnimator { mForceHiding = KEYGUARD_NOT_SHOWN; + final WindowState imeTarget = mService.mInputMethodTarget; + final boolean showImeOverKeyguard = imeTarget != null && imeTarget.isVisibleNow() && + (imeTarget.getAttrs().flags & FLAG_SHOW_WHEN_LOCKED) != 0; + for (int i = windows.size() - 1; i >= 0; i--) { WindowState win = windows.get(i); WindowStateAnimator winAnimator = win.mWinAnimator; @@ -312,7 +316,8 @@ public class WindowAnimator { + " hidden=" + win.mRootToken.hidden + " anim=" + win.mWinAnimator.mAnimation); } else if (mPolicy.canBeForceHidden(win, win.mAttrs)) { - final boolean hideWhenLocked = (flags & FLAG_SHOW_WHEN_LOCKED) == 0; + final boolean hideWhenLocked = (flags & FLAG_SHOW_WHEN_LOCKED) == 0 && + !(win.mIsImWindow && showImeOverKeyguard); final boolean changed; if (((mForceHiding == KEYGUARD_ANIMATING_IN) && (!winAnimator.isAnimating() || hideWhenLocked))