Merge "Modifying user switcher per design (issue 7047393)" into jb-mr1-dev
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 3df9bb2..f0dfba1 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
@@ -67,6 +67,7 @@
     private AppWidgetHost mAppWidgetHost;
     private KeyguardWidgetPager mAppWidgetContainer;
     private ViewFlipper mSecurityViewContainer;
+    private KeyguardSelectorView mKeyguardSelectorView;
     private KeyguardTransportControlView mTransportControl;
     private boolean mEnableMenuKey;
     private boolean mIsVerifyUnlockOnly;
@@ -90,6 +91,7 @@
     /*package*/ interface UserSwitcherCallback {
         void hideSecurityView(int duration);
         void showSecurityView();
+        void showUnlockHint();
     }
 
     public KeyguardHostView(Context context) {
@@ -144,6 +146,7 @@
         KeyguardWidgetRegion kgwr = (KeyguardWidgetRegion) findViewById(R.id.kg_widget_region);
         kgwr.setVisibility(VISIBLE);
         mSecurityViewContainer = (ViewFlipper) findViewById(R.id.view_flipper);
+        mKeyguardSelectorView = (KeyguardSelectorView) findViewById(R.id.keyguard_selector_view);
 
         addDefaultWidgets();
         updateSecurityViews();
@@ -373,6 +376,18 @@
         showSecurityScreen(mSecurityModel.getBackupFor(currentMode));
     }
 
+    public boolean showNextSecurityScreenIfPresent() {
+        SecurityMode securityMode = mSecurityModel.getSecurityMode();
+        // Allow an alternate, such as biometric unlock
+        securityMode = mSecurityModel.getAlternateFor(securityMode);
+        if (SecurityMode.None == securityMode) {
+            return false;
+        } else {
+            showSecurityScreen(securityMode); // switch to the alternate security view
+            return true;
+        }
+    }
+
     private void showNextSecurityScreenOrFinish(boolean authenticated) {
         boolean finish = false;
         if (SecurityMode.None == mCurrentSecuritySelection) {
@@ -794,6 +809,12 @@
                 public void showSecurityView() {
                     mSecurityViewContainer.setAlpha(1.0f);
                 }
+
+                @Override
+                public void showUnlockHint() {
+                    mKeyguardSelectorView.ping();
+                }
+
             };
             multiUser.setCallback(callback);
         }
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
index a034f4c..7266883 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
@@ -57,32 +57,29 @@
         KeyguardMultiUserAvatar icon = (KeyguardMultiUserAvatar)
                 LayoutInflater.from(context).inflate(resId, userSelector, false);
 
-        icon.setup(info, userSelector);
+        icon.init(info, userSelector);
         return icon;
     }
 
     public KeyguardMultiUserAvatar(Context context) {
-        super(context, null, 0);
+        this(context, null, 0);
     }
 
     public KeyguardMultiUserAvatar(Context context, AttributeSet attrs) {
-        super(context, attrs, 0);
+        this(context, attrs, 0);
     }
 
     public KeyguardMultiUserAvatar(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
-    }
 
-    public void setup(UserInfo user, KeyguardMultiUserSelectorView userSelector) {
-        mUserInfo = user;
-        mUserSelector = userSelector;
-        init();
-    }
-
-    private void init() {
         Resources res = mContext.getResources();
         mActiveTextColor = res.getColor(R.color.kg_multi_user_text_active);
         mInactiveTextColor = res.getColor(R.color.kg_multi_user_text_inactive);
+    }
+
+    public void init(UserInfo user, KeyguardMultiUserSelectorView userSelector) {
+        mUserInfo = user;
+        mUserSelector = userSelector;
 
         mUserImage = (ImageView) findViewById(R.id.keyguard_user_avatar);
         mUserName = (TextView) findViewById(R.id.keyguard_user_name);        
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
index 3b45c22..8214142 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
@@ -107,7 +107,8 @@
         if (!(v instanceof KeyguardMultiUserAvatar)) return;
         final KeyguardMultiUserAvatar avatar = (KeyguardMultiUserAvatar) v;
         if (mActiveUserAvatar == avatar) {
-            // They clicked the active user, no need to do anything
+            // If they click the currently active user, show the unlock hint
+            mCallback.showUnlockHint();
             return;
         } else {
             // Reset the previously active user to appear inactive
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java
index 4003754..e3b7b01 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java
@@ -179,6 +179,10 @@
         return mGlowPadView.getTargetPosition(resId) != -1;
     }
 
+    public void ping() {
+        mGlowPadView.ping();
+    }
+
     private void updateTargets() {
         int currentUserHandle = mLockPatternUtils.getCurrentUser();
         DevicePolicyManager dpm = mLockPatternUtils.getDevicePolicyManager();
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 c4f761f..23a96fb 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
@@ -36,6 +36,7 @@
 import android.view.WindowManager;
 import android.widget.FrameLayout;
 
+import com.android.internal.policy.impl.keyguard.KeyguardSecurityModel.SecurityMode;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.R;
 
@@ -191,6 +192,7 @@
 
         if (userSwitched) {
             mKeyguardView.goToUserSwitcher();
+            mKeyguardView.showNextSecurityScreenIfPresent();
         }
 
         if (mScreenOn) {