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) {