From 147f9568afe645d9bfb91f3037f5336d8a2482cc Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 3 Dec 2012 17:55:16 -0800 Subject: Fix ring volume issue by addressing focus regression in keyguard. This fixes a regression where ring volume can be changed in keyguard. Because KeyguardHostView is now being re-created in onScreenTurnedOff(), it loses focus and the volume keys get handled by the fallback handler. The fix is to ensure at least one child under KeyguardHostView has focus whenever we re-create it. Fixes bug 7546960 Change-Id: I34b7db402401a824f463d35d7546c05dc2979243 --- .../android/internal/policy/impl/keyguard/KeyguardHostView.java | 7 +++++++ .../android/internal/policy/impl/keyguard/KeyguardViewManager.java | 1 + 2 files changed, 8 insertions(+) diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java index 4fb7a6110ed3..a947bb551ae1 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java @@ -283,6 +283,11 @@ public class KeyguardHostView extends KeyguardViewBase { showPrimarySecurityScreen(false); updateSecurityViews(); + + // Make sure at least this view is focusable in case nothing below it is. Otherwise, + // requestFocus() on this view will fail and allow events, such as volume keys, to be + // handled by the fallback handler. See bug 7546960 for details. + setFocusableInTouchMode(true); } private boolean shouldEnableAddWidget() { @@ -878,6 +883,7 @@ public class KeyguardHostView extends KeyguardViewBase { if (mViewStateManager != null) { mViewStateManager.showUsabilityHints(); } + requestFocus(); } @Override @@ -897,6 +903,7 @@ public class KeyguardHostView extends KeyguardViewBase { if (cameraPage != null) { cameraPage.onScreenTurnedOff(); } + clearFocus(); } public void clearAppWidgetToShow() { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java index efd09e0d0ade..dac852a862bb 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java @@ -216,6 +216,7 @@ public class KeyguardViewManager { if (force || mKeyguardView == null) { inflateKeyguardView(options); + mKeyguardView.requestFocus(); } updateUserActivityTimeoutInWindowLayoutParams(); mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams); -- cgit v1.2.3-59-g8ed1b