summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/res/res/layout-land/keyguard_host_view.xml7
-rw-r--r--core/res/res/layout-port/keyguard_host_view.xml7
-rw-r--r--core/res/res/layout-sw600dp-land/keyguard_host_view.xml7
-rw-r--r--core/res/res/layout-sw600dp-port/keyguard_host_view.xml7
-rw-r--r--core/res/res/values/public.xml7
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java184
6 files changed, 102 insertions, 117 deletions
diff --git a/core/res/res/layout-land/keyguard_host_view.xml b/core/res/res/layout-land/keyguard_host_view.xml
index b4041556f12..0028a547f73 100644
--- a/core/res/res/layout-land/keyguard_host_view.xml
+++ b/core/res/res/layout-land/keyguard_host_view.xml
@@ -45,13 +45,8 @@
android:layout_weight="1"
android:gravity="center">
+ <!-- SelectorView is always used, so add it here. The rest are loaded dynamically -->
<include layout="@layout/keyguard_selector_view"/>
- <include layout="@layout/keyguard_account_view"/>
- <include layout="@layout/keyguard_pattern_view"/>
- <include layout="@layout/keyguard_password_view"/>
- <include layout="@layout/keyguard_sim_pin_view"/>
- <include layout="@layout/keyguard_sim_puk_view"/>
- <include layout="@layout/keyguard_face_unlock_view"/>
</ViewFlipper>
diff --git a/core/res/res/layout-port/keyguard_host_view.xml b/core/res/res/layout-port/keyguard_host_view.xml
index 5dc2225a757..5e467d1f51b 100644
--- a/core/res/res/layout-port/keyguard_host_view.xml
+++ b/core/res/res/layout-port/keyguard_host_view.xml
@@ -33,13 +33,8 @@
android:layout_height="match_parent"
android:gravity="center">
+ <!-- SelectorView is always used, so add it here. The rest are loaded dynamically -->
<include layout="@layout/keyguard_selector_view"/>
- <include layout="@layout/keyguard_account_view"/>
- <include layout="@layout/keyguard_pattern_view"/>
- <include layout="@layout/keyguard_password_view"/>
- <include layout="@layout/keyguard_sim_pin_view"/>
- <include layout="@layout/keyguard_sim_puk_view"/>
- <include layout="@layout/keyguard_face_unlock_view"/>
</ViewFlipper>
diff --git a/core/res/res/layout-sw600dp-land/keyguard_host_view.xml b/core/res/res/layout-sw600dp-land/keyguard_host_view.xml
index e77f5843ac5..5b6bb2f9384 100644
--- a/core/res/res/layout-sw600dp-land/keyguard_host_view.xml
+++ b/core/res/res/layout-sw600dp-land/keyguard_host_view.xml
@@ -52,13 +52,8 @@
android:layout_weight="1"
android:gravity="center">
+ <!-- SelectorView is always used, so add it here. The rest are loaded dynamically -->
<include layout="@layout/keyguard_selector_view"/>
- <include layout="@layout/keyguard_account_view"/>
- <include layout="@layout/keyguard_pattern_view"/>
- <include layout="@layout/keyguard_password_view"/>
- <include layout="@layout/keyguard_sim_pin_view"/>
- <include layout="@layout/keyguard_sim_puk_view"/>
- <include layout="@layout/keyguard_face_unlock_view"/>
</ViewFlipper>
diff --git a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml
index 082f4816742..397b88116bd 100644
--- a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml
+++ b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml
@@ -47,13 +47,8 @@
android:layout_weight="0.6"
android:layout_gravity="center">
+ <!-- SelectorView is always used, so add it here. The rest are loaded dynamically -->
<include layout="@layout/keyguard_selector_view"/>
- <include layout="@layout/keyguard_account_view"/>
- <include layout="@layout/keyguard_pattern_view"/>
- <include layout="@layout/keyguard_password_view"/>
- <include layout="@layout/keyguard_sim_pin_view"/>
- <include layout="@layout/keyguard_sim_puk_view"/>
- <include layout="@layout/keyguard_face_unlock_view"/>
</ViewFlipper>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 3e27abc2e3d..9a8e71279f0 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1367,6 +1367,13 @@
<java-symbol type="layout" name="keyguard_screen_tab_unlock_land" />
<java-symbol type="layout" name="keyguard_screen_unlock_landscape" />
<java-symbol type="layout" name="keyguard_screen_unlock_portrait" />
+ <java-symbol type="layout" name="keyguard_selector_view" />
+ <java-symbol type="layout" name="keyguard_pattern_view" />
+ <java-symbol type="layout" name="keyguard_password_view" />
+ <java-symbol type="layout" name="keyguard_face_unlock_view" />
+ <java-symbol type="layout" name="keyguard_sim_pin_view" />
+ <java-symbol type="layout" name="keyguard_sim_puk_view" />
+ <java-symbol type="layout" name="keyguard_account_view" />
<java-symbol type="layout" name="recent_apps_dialog" />
<java-symbol type="layout" name="screen_action_bar" />
<java-symbol type="layout" name="screen_action_bar_overlay" />
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 00bc9bebb58..e170ec151b5 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
@@ -62,35 +62,13 @@ public class KeyguardHostView extends KeyguardViewBase {
private static final String KEYGUARD_WIDGET_PREFS = "keyguard_widget_prefs";
private static final String TAG = "KeyguardViewHost";
-
- private static final int SECURITY_SELECTOR_ID = R.id.keyguard_selector_view;
- private static final int SECURITY_PATTERN_ID = R.id.keyguard_pattern_view;
- private static final int SECURITY_PASSWORD_ID = R.id.keyguard_password_view;
- private static final int SECURITY_BIOMETRIC_ID = R.id.keyguard_face_unlock_view;
- private static final int SECURITY_SIM_PIN_ID = R.id.keyguard_sim_pin_view;
- private static final int SECURITY_SIM_PUK_ID = R.id.keyguard_sim_puk_view;
- private static final int SECURITY_ACCOUNT_ID = R.id.keyguard_account_view;
-
private AppWidgetHost mAppWidgetHost;
private KeyguardWidgetPager mAppWidgetContainer;
- private ViewFlipper mViewFlipper;
+ private ViewFlipper mSecurityViewContainer;
private boolean mEnableMenuKey;
private boolean mIsVerifyUnlockOnly;
private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView
- private int mCurrentSecurityId = SECURITY_SELECTOR_ID;
-
- // KeyguardSecurityViews
- final private int [] mViewIds = {
- SECURITY_SELECTOR_ID,
- SECURITY_PATTERN_ID,
- SECURITY_PASSWORD_ID,
- SECURITY_BIOMETRIC_ID,
- SECURITY_SIM_PIN_ID,
- SECURITY_SIM_PUK_ID,
- SECURITY_ACCOUNT_ID,
- };
-
- private ArrayList<View> mViews = new ArrayList<View>(mViewIds.length);
+ private SecurityMode mCurrentSecuritySelection = SecurityMode.None;
protected Runnable mLaunchRunnable;
@@ -125,33 +103,31 @@ public class KeyguardHostView extends KeyguardViewBase {
protected void onFinishInflate() {
mAppWidgetContainer = (KeyguardWidgetPager) findViewById(R.id.app_widget_container);
mAppWidgetContainer.setVisibility(VISIBLE);
+ mSecurityViewContainer = (ViewFlipper) findViewById(R.id.view_flipper);
+ updateSecurityViews();
+ }
- // View Flipper
- mViewFlipper = (ViewFlipper) findViewById(R.id.view_flipper);
+ private void updateSecurityViews() {
+ int children = mSecurityViewContainer.getChildCount();
+ for (int i = 0; i < children; i++) {
+ updateSecurityView(mSecurityViewContainer.getChildAt(i));
+ }
+ }
- // Initialize all security views
- for (int i = 0; i < mViewIds.length; i++) {
- View view = findViewById(mViewIds[i]);
- mViews.add(view);
- if (view != null) {
- ((KeyguardSecurityView) view).setKeyguardCallback(mCallback);
- } else {
- Log.v("*********", "Can't find view id " + mViewIds[i]);
- }
+ private void updateSecurityView(View view) {
+ if (view instanceof KeyguardSecurityView) {
+ KeyguardSecurityView ksv = (KeyguardSecurityView) view;
+ ksv.setKeyguardCallback(mCallback);
+ ksv.setLockPatternUtils(mLockPatternUtils);
+ } else {
+ Log.w(TAG, "View " + view + " is not a KeyguardSecurityView");
}
}
void setLockPatternUtils(LockPatternUtils utils) {
mSecurityModel.setLockPatternUtils(utils);
mLockPatternUtils = utils;
- for (int i = 0; i < mViews.size(); i++) {
- KeyguardSecurityView ksv = (KeyguardSecurityView) mViews.get(i);
- if (ksv != null) {
- ksv.setLockPatternUtils(utils);
- } else {
- Log.w(TAG, "**** ksv was null at " + i);
- }
- }
+ updateSecurityViews();
}
@Override
@@ -313,7 +289,7 @@ public class KeyguardHostView extends KeyguardViewBase {
showTimeout = false; // don't show both dialogs
} else if (failedAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET) {
mLockPatternUtils.setPermanentlyLocked(true);
- showSecurityScreen(SECURITY_ACCOUNT_ID);
+ showSecurityScreen(SecurityMode.Account);
// don't show timeout dialog because we show account unlock screen next
showTimeout = false;
}
@@ -333,56 +309,53 @@ public class KeyguardHostView extends KeyguardViewBase {
*/
private void showBackupSecurity() {
SecurityMode currentMode = mSecurityModel.getAlternateFor(mSecurityModel.getSecurityMode());
- SecurityMode backup = mSecurityModel.getBackupFor(currentMode);
- showSecurityScreen(getSecurityViewIdForMode(backup));
+ showSecurityScreen(mSecurityModel.getBackupFor(currentMode));
}
private void showNextSecurityScreenOrFinish(boolean authenticated) {
boolean finish = false;
- if (SECURITY_SELECTOR_ID == mCurrentSecurityId) {
+ if (SecurityMode.None == mCurrentSecuritySelection) {
SecurityMode securityMode = mSecurityModel.getSecurityMode();
// Allow an alternate, such as biometric unlock
securityMode = mSecurityModel.getAlternateFor(securityMode);
- int realSecurityId = getSecurityViewIdForMode(securityMode);
- if (SECURITY_SELECTOR_ID == realSecurityId) {
+ if (SecurityMode.None == securityMode) {
finish = true; // no security required
} else {
- showSecurityScreen(realSecurityId); // switch to the "real" security view
+ showSecurityScreen(securityMode); // switch to the alternate security view
}
} else if (authenticated) {
- switch (mCurrentSecurityId) {
- case SECURITY_PATTERN_ID:
- case SECURITY_PASSWORD_ID:
- case SECURITY_ACCOUNT_ID:
- case SECURITY_BIOMETRIC_ID:
+ switch (mCurrentSecuritySelection) {
+ case Pattern:
+ case Password:
+ case Account:
+ case Biometric:
finish = true;
break;
- case SECURITY_SIM_PIN_ID:
- case SECURITY_SIM_PUK_ID:
+ case SimPin:
+ case SimPuk:
// Shortcut for SIM PIN/PUK to go to directly to user's security screen or home
SecurityMode securityMode = mSecurityModel.getSecurityMode();
if (securityMode != SecurityMode.None) {
- showSecurityScreen(getSecurityViewIdForMode(securityMode));
+ showSecurityScreen(securityMode);
} else {
finish = true;
}
break;
default:
- showSecurityScreen(SECURITY_SELECTOR_ID);
+ showSecurityScreen(SecurityMode.None);
break;
}
} else {
// Not authenticated but we were asked to dismiss so go back to selector screen.
- showSecurityScreen(SECURITY_SELECTOR_ID);
+ showSecurityScreen(SecurityMode.None);
}
if (finish) {
// If there's a pending runnable because the user interacted with a widget
// and we're leaving keyguard, then run it.
if (mLaunchRunnable != null) {
mLaunchRunnable.run();
- mViewFlipper.setDisplayedChild(0);
mLaunchRunnable = null;
}
mViewMediatorCallback.keyguardDone(true);
@@ -438,28 +411,38 @@ public class KeyguardHostView extends KeyguardViewBase {
mLaunchRunnable = runnable;
}
- private KeyguardSecurityView getSecurityView(int securitySelectorId) {
- final int children = mViewFlipper.getChildCount();
+ private KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
+ final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
+ KeyguardSecurityView view = null;
+ final int children = mSecurityViewContainer.getChildCount();
for (int child = 0; child < children; child++) {
- if (mViewFlipper.getChildAt(child).getId() == securitySelectorId) {
- return ((KeyguardSecurityView)mViewFlipper.getChildAt(child));
+ if (mSecurityViewContainer.getChildAt(child).getId() == securityViewIdForMode) {
+ view = ((KeyguardSecurityView)mSecurityViewContainer.getChildAt(child));
+ break;
}
}
- return null;
+ if (view == null) {
+ final LayoutInflater inflater = LayoutInflater.from(mContext);
+ View v = inflater.inflate(getLayoutIdFor(securityMode), this, false);
+ mSecurityViewContainer.addView(v);
+ updateSecurityView(v);
+ view = (KeyguardSecurityView) v;
+ }
+ return view;
}
/**
* Switches to the given security view unless it's already being shown, in which case
* this is a no-op.
*
- * @param securityViewId
+ * @param securityMode
*/
- private void showSecurityScreen(int securityViewId) {
+ private void showSecurityScreen(SecurityMode securityMode) {
- if (securityViewId == mCurrentSecurityId) return;
+ if (securityMode == mCurrentSecuritySelection) return;
- KeyguardSecurityView oldView = getSecurityView(mCurrentSecurityId);
- KeyguardSecurityView newView = getSecurityView(securityViewId);
+ KeyguardSecurityView oldView = getSecurityView(mCurrentSecuritySelection);
+ KeyguardSecurityView newView = getSecurityView(securityMode);
// Emulate Activity life cycle
oldView.onPause();
@@ -468,45 +451,46 @@ public class KeyguardHostView extends KeyguardViewBase {
mViewMediatorCallback.setNeedsInput(newView.needsInput());
// Find and show this child.
- final int childCount = mViewFlipper.getChildCount();
+ final int childCount = mSecurityViewContainer.getChildCount();
// If we're go to/from the selector view, do flip animation, otherwise use fade animation.
- final boolean doFlip = mCurrentSecurityId == SECURITY_SELECTOR_ID
- || securityViewId == SECURITY_SELECTOR_ID;
+ final boolean doFlip = mCurrentSecuritySelection == SecurityMode.None
+ || securityMode == SecurityMode.None;
final int inAnimation = doFlip ? R.anim.keyguard_security_animate_in
: R.anim.keyguard_security_fade_in;
final int outAnimation = doFlip ? R.anim.keyguard_security_animate_out
: R.anim.keyguard_security_fade_out;
- mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(mContext, inAnimation));
- mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(mContext, outAnimation));
+ mSecurityViewContainer.setInAnimation(AnimationUtils.loadAnimation(mContext, inAnimation));
+ mSecurityViewContainer.setOutAnimation(AnimationUtils.loadAnimation(mContext, outAnimation));
+ final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
for (int i = 0; i < childCount; i++) {
- if (securityViewId == mViewFlipper.getChildAt(i).getId()) {
- mViewFlipper.setDisplayedChild(i);
+ if (mSecurityViewContainer.getChildAt(i).getId() == securityViewIdForMode) {
+ mSecurityViewContainer.setDisplayedChild(i);
break;
}
}
// Discard current runnable if we're switching back to the selector view
- if (securityViewId == SECURITY_SELECTOR_ID) {
+ if (securityMode == SecurityMode.None) {
setOnDismissRunnable(null);
}
- mCurrentSecurityId = securityViewId;
+ mCurrentSecuritySelection = securityMode;
}
@Override
public void onScreenTurnedOn() {
if (DEBUG) Log.d(TAG, "screen on");
- showSecurityScreen(mCurrentSecurityId);
- getSecurityView(mCurrentSecurityId).onResume();
+ showSecurityScreen(mCurrentSecuritySelection);
+ getSecurityView(mCurrentSecuritySelection).onResume();
}
@Override
public void onScreenTurnedOff() {
if (DEBUG) Log.d(TAG, "screen off");
- showSecurityScreen(SECURITY_SELECTOR_ID);
- getSecurityView(mCurrentSecurityId).onPause();
+ showSecurityScreen(SecurityMode.None);
+ getSecurityView(mCurrentSecuritySelection).onPause();
}
@Override
@@ -537,7 +521,7 @@ public class KeyguardHostView extends KeyguardViewBase {
if (DEBUG) Log.d(TAG, "onWakeKey");
if (keyCode == KeyEvent.KEYCODE_MENU && isSecure()) {
if (DEBUG) Log.d(TAG, "switching screens to unlock screen because wake key was MENU");
- showSecurityScreen(SECURITY_SELECTOR_ID);
+ showSecurityScreen(SecurityMode.None);
mViewMediatorCallback.pokeWakelock();
} else {
if (DEBUG) Log.d(TAG, "poking wake lock immediately");
@@ -557,23 +541,37 @@ public class KeyguardHostView extends KeyguardViewBase {
} else {
// otherwise, go to the unlock screen, see if they can verify it
mIsVerifyUnlockOnly = true;
- showSecurityScreen(getSecurityViewIdForMode(securityMode));
+ showSecurityScreen(securityMode);
}
}
private int getSecurityViewIdForMode(SecurityMode securityMode) {
switch (securityMode) {
- case None: return SECURITY_SELECTOR_ID;
- case Pattern: return SECURITY_PATTERN_ID;
- case Password: return SECURITY_PASSWORD_ID;
- case Biometric: return SECURITY_BIOMETRIC_ID;
- case Account: return SECURITY_ACCOUNT_ID;
- case SimPin: return SECURITY_SIM_PIN_ID;
- case SimPuk: return SECURITY_SIM_PUK_ID;
+ case None: return R.id.keyguard_selector_view;
+ case Pattern: return R.id.keyguard_pattern_view;
+ case Password: return R.id.keyguard_password_view;
+ case Biometric: return R.id.keyguard_face_unlock_view;
+ case Account: return R.id.keyguard_account_view;
+ case SimPin: return R.id.keyguard_sim_pin_view;
+ case SimPuk: return R.id.keyguard_sim_puk_view;
}
return 0;
}
+ private int getLayoutIdFor(SecurityMode securityMode) {
+ switch (securityMode) {
+ case None: return R.layout.keyguard_selector_view;
+ case Pattern: return R.layout.keyguard_pattern_view;
+ case Password: return R.layout.keyguard_password_view;
+ case Biometric: return R.layout.keyguard_face_unlock_view;
+ case Account: return R.layout.keyguard_account_view;
+ case SimPin: return R.layout.keyguard_sim_pin_view;
+ case SimPuk: return R.layout.keyguard_sim_puk_view;
+ default:
+ throw new RuntimeException("No layout for securityMode " + securityMode);
+ }
+ }
+
private void addWidget(int appId) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext);
AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(appId);