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
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 4fb7a61..a947bb5 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 @@
 
         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 @@
         if (mViewStateManager != null) {
             mViewStateManager.showUsabilityHints();
         }
+        requestFocus();
     }
 
     @Override
@@ -897,6 +903,7 @@
         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 efd09e0..dac852a 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 @@
 
         if (force || mKeyguardView == null) {
             inflateKeyguardView(options);
+            mKeyguardView.requestFocus();
         }
         updateUserActivityTimeoutInWindowLayoutParams();
         mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);