summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/widget/LockPatternUtils.java20
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java84
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java6
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java4
4 files changed, 41 insertions, 73 deletions
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 47d501cda440..26eaafb0c1a6 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -111,6 +111,11 @@ public class LockPatternUtils {
public static final String KEYGUARD_SHOW_SECURITY_CHALLENGE = "showsecuritychallenge";
/**
+ * Tells the keyguard to show the widget with the specified id when the keyguard is created.
+ */
+ public static final String KEYGUARD_SHOW_APPWIDGET = "showappwidget";
+
+ /**
* Options used to lock the device upon user switch.
*/
public static final Bundle USER_SWITCH_LOCK_OPTIONS = new Bundle();
@@ -1183,21 +1188,6 @@ public class LockPatternUtils {
return true;
}
- public int getStickyAppWidgetIndex() {
- return Settings.Secure.getIntForUser(
- mContentResolver,
- Settings.Secure.LOCK_SCREEN_STICKY_APPWIDGET,
- -1,
- UserHandle.USER_CURRENT);
- }
-
- public void setStickyAppWidgetIndex(int value) {
- Settings.Secure.putIntForUser(mContentResolver,
- Settings.Secure.LOCK_SCREEN_STICKY_APPWIDGET,
- value,
- UserHandle.USER_CURRENT);
- }
-
private long getLong(String secureSettingKey, long defaultValue) {
try {
return getLockSettings().getLong(secureSettingKey, defaultValue,
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 68783c365123..2d63ef85d9ba 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
@@ -37,8 +37,6 @@ import android.os.Looper;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.os.UserHandle;
import android.os.UserManager;
import android.util.AttributeSet;
import android.util.Log;
@@ -75,6 +73,7 @@ public class KeyguardHostView extends KeyguardViewBase {
private boolean mIsVerifyUnlockOnly;
private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView
private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
+ private int mAppWidgetToShow;
protected Runnable mLaunchRunnable;
@@ -84,7 +83,6 @@ public class KeyguardHostView extends KeyguardViewBase {
private KeyguardSecurityModel mSecurityModel;
private KeyguardViewStateManager mViewStateManager;
- int mLocalStickyWidget = -1;
boolean mPersitentStickyWidgetLoaded = false;
private Rect mTempRect = new Rect();
@@ -768,7 +766,6 @@ public class KeyguardHostView extends KeyguardViewBase {
// Once the screen turns off, we no longer consider this to be first boot and we want the
// biometric unlock to start next time keyguard is shown.
KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
- saveStickyWidgetIndex();
checkAppWidgetConsistency();
showPrimarySecurityScreen(true);
getSecurityView(mCurrentSecuritySelection).onPause();
@@ -967,7 +964,7 @@ public class KeyguardHostView extends KeyguardViewBase {
initializeTransportControl();
}
- private void removeTransportFromWidgetPager() {
+ private boolean removeTransportFromWidgetPager() {
int page = getWidgetPosition(R.id.keyguard_transport_control);
if (page != -1) {
mAppWidgetContainer.removeWidget(mTransportControl);
@@ -976,8 +973,9 @@ public class KeyguardHostView extends KeyguardViewBase {
KeyguardHostView.this.addView(mTransportControl);
mTransportControl.setVisibility(View.GONE);
mViewStateManager.setTransportState(KeyguardViewStateManager.TRANSPORT_GONE);
- mTransportControl.post(mSwitchPageRunnable);
+ return true;
}
+ return false;
}
private void addTransportToWidgetPager() {
@@ -1006,8 +1004,9 @@ public class KeyguardHostView extends KeyguardViewBase {
mTransportControl.setKeyguardCallback(new TransportCallback() {
@Override
public void onListenerDetached() {
- removeTransportFromWidgetPager();
- mTransportControl.post(mSwitchPageRunnable);
+ if (removeTransportFromWidgetPager()) {
+ mTransportControl.post(mSwitchPageRunnable);
+ }
}
@Override
@@ -1183,7 +1182,6 @@ public class KeyguardHostView extends KeyguardViewBase {
@Override
public Parcelable onSaveInstanceState() {
if (DEBUG) Log.d(TAG, "onSaveInstanceState");
- saveStickyWidgetIndex();
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.transportState = mViewStateManager.getTransportState();
@@ -1207,9 +1205,7 @@ public class KeyguardHostView extends KeyguardViewBase {
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
if (DEBUG) Log.d(TAG, "Window is " + (hasWindowFocus ? "focused" : "unfocused"));
- if (!hasWindowFocus) {
- saveStickyWidgetIndex();
- } else if (mShowSecurityWhenReturn) {
+ if (hasWindowFocus && mShowSecurityWhenReturn) {
SlidingChallengeLayout slider =
(SlidingChallengeLayout) findViewById(R.id.sliding_layout);
if (slider != null) {
@@ -1243,31 +1239,13 @@ public class KeyguardHostView extends KeyguardViewBase {
return null;
}
- private int getStickyWidget() {
- // The first time we query the persistent state. From that point, we use a locally updated
- // notion of the sticky widget page.
- if (!mPersitentStickyWidgetLoaded) {
- mLocalStickyWidget = mLockPatternUtils.getStickyAppWidgetIndex();
- mPersitentStickyWidgetLoaded = true;
- }
- return mLocalStickyWidget;
- }
-
- public void updateStickyWidget(int index) {
- if (index < 0 || index >= mAppWidgetContainer.getChildCount()) {
- return;
- }
- if (mAppWidgetContainer.isAddPage(index)) {
- return;
- }
- if (mAppWidgetContainer.isCameraPage(index)) {
- return;
- }
- if (isMusicPage(index)) {
- return;
+ private boolean isWidgetPage(int pageIndex) {
+ View v = mAppWidgetContainer.getChildAt(pageIndex);
+ if (v != null && v instanceof KeyguardWidgetFrame) {
+ KeyguardWidgetFrame kwf = (KeyguardWidgetFrame) v;
+ return kwf.getContentAppWidgetId() != AppWidgetManager.INVALID_APPWIDGET_ID;
}
-
- mLocalStickyWidget = index;
+ return false;
}
boolean isMusicPage(int pageIndex) {
@@ -1276,23 +1254,23 @@ public class KeyguardHostView extends KeyguardViewBase {
private int getAppropriateWidgetPage(boolean isMusicPlaying) {
// assumes at least one widget (besides camera + add)
-
+ if (mAppWidgetToShow != AppWidgetManager.INVALID_APPWIDGET_ID) {
+ final int childCount = mAppWidgetContainer.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ if (mAppWidgetContainer.getWidgetPageAt(i).getContentAppWidgetId()
+ == mAppWidgetToShow) {
+ mAppWidgetToShow = AppWidgetManager.INVALID_APPWIDGET_ID;
+ return i;
+ }
+ }
+ mAppWidgetToShow = AppWidgetManager.INVALID_APPWIDGET_ID;
+ }
// if music playing, show transport
if (isMusicPlaying) {
if (DEBUG) Log.d(TAG, "Music playing, show transport");
return mAppWidgetContainer.getWidgetPageIndex(mTransportControl);
}
- // if we have a valid sticky widget, show it
- int stickyWidgetIndex = getStickyWidget();
- if (stickyWidgetIndex > -1
- && stickyWidgetIndex < mAppWidgetContainer.getChildCount()
- && !mAppWidgetContainer.isAddPage(stickyWidgetIndex)
- && !mAppWidgetContainer.isCameraPage(stickyWidgetIndex)) {
- if (DEBUG) Log.d(TAG, "Valid sticky widget found, show page " + stickyWidgetIndex);
- return stickyWidgetIndex;
- }
-
// else show the right-most widget (except for camera)
int rightMost = mAppWidgetContainer.getChildCount() - 1;
if (mAppWidgetContainer.isCameraPage(rightMost)) {
@@ -1302,13 +1280,6 @@ public class KeyguardHostView extends KeyguardViewBase {
return rightMost;
}
- private void saveStickyWidgetIndex() {
- if (DEBUG) Log.d(TAG, "saveStickyWidgetIndex: " + mLocalStickyWidget);
- if (mPersitentStickyWidgetLoaded && mLocalStickyWidget >= 0) {
- mLockPatternUtils.setStickyAppWidgetIndex(mLocalStickyWidget);
- }
- }
-
private void enableUserSelectorIfNecessary() {
if (!UserManager.supportsMultipleUsers()) {
return; // device doesn't support multi-user mode
@@ -1380,6 +1351,11 @@ public class KeyguardHostView extends KeyguardViewBase {
mAppWidgetContainer.setCurrentPage(getWidgetPosition(R.id.keyguard_multi_user_selector));
}
+ public void goToWidget(int appWidgetId) {
+ mAppWidgetToShow = appWidgetId;
+ mSwitchPageRunnable.run();
+ }
+
public boolean handleMenuKey() {
// The following enables the MENU key to work for testing automation
if (shouldEnableMenuKey()) {
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 6d886521b778..365c5306c1a6 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
@@ -18,6 +18,7 @@ package com.android.internal.policy.impl.keyguard;
import android.app.Activity;
import android.app.ActivityManager;
+import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
@@ -240,6 +241,11 @@ public class KeyguardViewManager {
if (options.getBoolean(LockPatternUtils.KEYGUARD_SHOW_SECURITY_CHALLENGE)) {
mKeyguardView.showNextSecurityScreenIfPresent();
}
+ int widgetToShow = options.getInt(LockPatternUtils.KEYGUARD_SHOW_APPWIDGET,
+ AppWidgetManager.INVALID_APPWIDGET_ID);
+ if (widgetToShow != AppWidgetManager.INVALID_APPWIDGET_ID) {
+ mKeyguardView.goToWidget(widgetToShow);
+ }
}
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java
index 922ced2d5ee3..49483436cdb4 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java
@@ -147,10 +147,6 @@ public class KeyguardViewStateManager implements
// We only modify the page state if it is not currently under control by the slider.
// This prevents conflicts.
- if (mKeyguardHostView != null) {
- mKeyguardHostView.updateStickyWidget(newPageIndex);
- }
-
// If the page hasn't switched, don't bother with any of this
if (mCurrentPage == newPageIndex) return;