Merge "Fix emergency call area updates." into jb-mr1-lockscreen-dev
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 47d501cd..26eaafb 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -111,6 +111,11 @@
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 @@
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/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 406f644..5397a29 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -3168,8 +3168,7 @@
if (lidOpen) {
if (keyguardIsShowingTq()) {
- mKeyguardMediator.onWakeKeyWhenKeyguardShowingTq(
- KeyEvent.KEYCODE_POWER, mDockMode != Intent.EXTRA_DOCK_STATE_UNDOCKED);
+ mKeyguardMediator.onWakeKeyWhenKeyguardShowingTq(KeyEvent.KEYCODE_POWER);
} else {
mPowerManager.wakeUp(SystemClock.uptimeMillis());
}
@@ -3388,11 +3387,10 @@
// When the screen is off and the key is not injected, determine whether
// to wake the device but don't pass the key to the application.
result = 0;
- if (down && isWakeKey) {
+ if (down && isWakeKey && isWakeKeyWhenScreenOff(keyCode)) {
if (keyguardActive) {
- // If the keyguard is showing, let it decide what to do with the wake key.
- mKeyguardMediator.onWakeKeyWhenKeyguardShowingTq(keyCode,
- mDockMode != Intent.EXTRA_DOCK_STATE_UNDOCKED);
+ // If the keyguard is showing, let it wake the device when ready.
+ mKeyguardMediator.onWakeKeyWhenKeyguardShowingTq(keyCode);
} else {
// Otherwise, wake the device ourselves.
result |= ACTION_WAKE_UP;
@@ -3614,6 +3612,40 @@
return result;
}
+ /**
+ * When the screen is off we ignore some keys that might otherwise typically
+ * be considered wake keys. We filter them out here.
+ *
+ * {@link KeyEvent#KEYCODE_POWER} is notably absent from this list because it
+ * is always considered a wake key.
+ */
+ private boolean isWakeKeyWhenScreenOff(int keyCode) {
+ switch (keyCode) {
+ // ignore volume keys unless docked
+ case KeyEvent.KEYCODE_VOLUME_UP:
+ case KeyEvent.KEYCODE_VOLUME_DOWN:
+ case KeyEvent.KEYCODE_VOLUME_MUTE:
+ return mDockMode != Intent.EXTRA_DOCK_STATE_UNDOCKED;
+
+ // ignore media and camera keys
+ case KeyEvent.KEYCODE_MUTE:
+ case KeyEvent.KEYCODE_HEADSETHOOK:
+ case KeyEvent.KEYCODE_MEDIA_PLAY:
+ case KeyEvent.KEYCODE_MEDIA_PAUSE:
+ case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
+ case KeyEvent.KEYCODE_MEDIA_STOP:
+ case KeyEvent.KEYCODE_MEDIA_NEXT:
+ case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
+ case KeyEvent.KEYCODE_MEDIA_REWIND:
+ case KeyEvent.KEYCODE_MEDIA_RECORD:
+ case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
+ case KeyEvent.KEYCODE_CAMERA:
+ return false;
+ }
+ return true;
+ }
+
+
/** {@inheritDoc} */
@Override
public int interceptMotionBeforeQueueingWhenScreenOff(int policyFlags) {
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 68783c3..1ee0e86 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.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,10 @@
private boolean mIsVerifyUnlockOnly;
private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView
private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
+ private int mAppWidgetToShow;
+
+ private boolean mBootCompleted = false;
+ private boolean mCheckAppWidgetConsistencyOnBootCompleted = false;
protected Runnable mLaunchRunnable;
@@ -84,7 +86,6 @@
private KeyguardSecurityModel mSecurityModel;
private KeyguardViewStateManager mViewStateManager;
- int mLocalStickyWidget = -1;
boolean mPersitentStickyWidgetLoaded = false;
private Rect mTempRect = new Rect();
@@ -142,6 +143,19 @@
}
}
+ private KeyguardUpdateMonitorCallback mUpdateMonitorCallbacks =
+ new KeyguardUpdateMonitorCallback() {
+ @Override
+ public void onBootCompleted() {
+ mBootCompleted = true;
+ if (mCheckAppWidgetConsistencyOnBootCompleted) {
+ checkAppWidgetConsistency();
+ mSwitchPageRunnable.run();
+ mCheckAppWidgetConsistencyOnBootCompleted = false;
+ }
+ }
+ };
+
@Override
public boolean onTouchEvent(MotionEvent ev) {
boolean result = super.onTouchEvent(ev);
@@ -265,12 +279,14 @@
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mAppWidgetHost.startListening();
+ KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateMonitorCallbacks);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mAppWidgetHost.stopListening();
+ KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mUpdateMonitorCallbacks);
}
private AppWidgetHost getAppWidgetHost() {
@@ -768,7 +784,6 @@
// 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 +982,7 @@
initializeTransportControl();
}
- private void removeTransportFromWidgetPager() {
+ private boolean removeTransportFromWidgetPager() {
int page = getWidgetPosition(R.id.keyguard_transport_control);
if (page != -1) {
mAppWidgetContainer.removeWidget(mTransportControl);
@@ -976,8 +991,9 @@
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 +1022,9 @@
mTransportControl.setKeyguardCallback(new TransportCallback() {
@Override
public void onListenerDetached() {
- removeTransportFromWidgetPager();
- mTransportControl.post(mSwitchPageRunnable);
+ if (removeTransportFromWidgetPager()) {
+ mTransportControl.post(mSwitchPageRunnable);
+ }
}
@Override
@@ -1087,8 +1104,13 @@
}
return appWidgetId;
}
-
public void checkAppWidgetConsistency() {
+ // Since this method may bind a widget (which we can't do until boot completed) we
+ // may have to defer it until after boot complete.
+ if (!mBootCompleted) {
+ mCheckAppWidgetConsistencyOnBootCompleted = true;
+ return;
+ }
final int childCount = mAppWidgetContainer.getChildCount();
boolean widgetPageExists = false;
for (int i = 0; i < childCount; i++) {
@@ -1183,7 +1205,6 @@
@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 +1228,7 @@
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 +1262,13 @@
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;
+ 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;
}
- 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;
- }
-
- mLocalStickyWidget = index;
+ return false;
}
boolean isMusicPage(int pageIndex) {
@@ -1276,23 +1277,23 @@
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 +1303,6 @@
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 +1374,11 @@
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/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java
index 5fb8cf0..51f0418 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java
@@ -81,6 +81,8 @@
private static final int MSG_USER_SWITCHED = 310;
private static final int MSG_USER_REMOVED = 311;
private static final int MSG_KEYGUARD_VISIBILITY_CHANGED = 312;
+ protected static final int MSG_BOOT_COMPLETED = 313;
+
private static KeyguardUpdateMonitor sInstance;
@@ -152,6 +154,9 @@
case MSG_KEYGUARD_VISIBILITY_CHANGED:
handleKeyguardVisibilityChanged(msg.arg1);
break;
+ case MSG_BOOT_COMPLETED:
+ handleBootCompleted();
+ break;
}
}
@@ -198,6 +203,8 @@
} else if (Intent.ACTION_USER_REMOVED.equals(action)) {
mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_REMOVED,
intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0), 0));
+ } else if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_BOOT_COMPLETED));
}
}
};
@@ -340,6 +347,7 @@
filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
filter.addAction(Intent.ACTION_USER_REMOVED);
+ filter.addAction(Intent.ACTION_BOOT_COMPLETED);
context.registerReceiver(mBroadcastReceiver, filter);
try {
@@ -420,6 +428,18 @@
}
/**
+ * Handle {@link #MSG_BOOT_COMPLETED}
+ */
+ protected void handleBootCompleted() {
+ for (int i = 0; i < mCallbacks.size(); i++) {
+ KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
+ if (cb != null) {
+ cb.onBootCompleted();
+ }
+ }
+ }
+
+ /**
* Handle {@link #MSG_USER_SWITCHED}
*/
protected void handleUserRemoved(int userId) {
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java
index 8c9ac8b..1ba1388 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java
@@ -99,4 +99,12 @@
* Called when a user is removed.
*/
void onUserRemoved(int userId) { }
+
+ /**
+ * Called when boot completed.
+ *
+ * Note, this callback will only be received if boot complete occurs after registering with
+ * KeyguardUpdateMonitor.
+ */
+ void onBootCompleted() { }
}
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 6d88652..365c530 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 @@
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 @@
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/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
index 3648d99..5e19271 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
@@ -175,7 +175,7 @@
* Does not turn on screen, held while a call to {@link KeyguardViewManager#wakeWhenReadyTq(int)}
* is called to make sure the device doesn't sleep before it has a chance to poke
* the wake lock.
- * @see #wakeWhenReadyLocked(int)
+ * @see #wakeWhenReady(int)
*/
private PowerManager.WakeLock mWakeAndHandOff;
@@ -935,8 +935,8 @@
* @see #handleWakeWhenReady
* @see #onWakeKeyWhenKeyguardShowingTq(int)
*/
- private void wakeWhenReadyLocked(int keyCode) {
- if (DBG_WAKE) Log.d(TAG, "wakeWhenReadyLocked(" + keyCode + ")");
+ private void wakeWhenReady(int keyCode) {
+ if (DBG_WAKE) Log.d(TAG, "wakeWhenReady(" + keyCode + ")");
/**
* acquire the handoff lock that will keep the cpu running. this will
@@ -1014,54 +1014,14 @@
* action should be posted to a handler.
*
* @param keyCode The keycode of the key that woke the device
- * @param isDocked True if the device is in the dock
- * @return Whether we poked the wake lock (and turned the screen on)
*/
- public boolean onWakeKeyWhenKeyguardShowingTq(int keyCode, boolean isDocked) {
+ public void onWakeKeyWhenKeyguardShowingTq(int keyCode) {
if (DEBUG) Log.d(TAG, "onWakeKeyWhenKeyguardShowing(" + keyCode + ")");
- if (isWakeKeyWhenKeyguardShowing(keyCode, isDocked)) {
- // give the keyguard view manager a chance to adjust the state of the
- // keyguard based on the key that woke the device before poking
- // the wake lock
- wakeWhenReadyLocked(keyCode);
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * When the keyguard is showing we ignore some keys that might otherwise typically
- * be considered wake keys. We filter them out here.
- *
- * {@link KeyEvent#KEYCODE_POWER} is notably absent from this list because it
- * is always considered a wake key.
- */
- private boolean isWakeKeyWhenKeyguardShowing(int keyCode, boolean isDocked) {
- switch (keyCode) {
- // ignore volume keys unless docked
- case KeyEvent.KEYCODE_VOLUME_UP:
- case KeyEvent.KEYCODE_VOLUME_DOWN:
- case KeyEvent.KEYCODE_VOLUME_MUTE:
- return isDocked;
-
- // ignore media and camera keys
- case KeyEvent.KEYCODE_MUTE:
- case KeyEvent.KEYCODE_HEADSETHOOK:
- case KeyEvent.KEYCODE_MEDIA_PLAY:
- case KeyEvent.KEYCODE_MEDIA_PAUSE:
- case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
- case KeyEvent.KEYCODE_MEDIA_STOP:
- case KeyEvent.KEYCODE_MEDIA_NEXT:
- case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
- case KeyEvent.KEYCODE_MEDIA_REWIND:
- case KeyEvent.KEYCODE_MEDIA_RECORD:
- case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
- case KeyEvent.KEYCODE_CAMERA:
- return false;
- }
- return true;
+ // give the keyguard view manager a chance to adjust the state of the
+ // keyguard based on the key that woke the device before poking
+ // the wake lock
+ wakeWhenReady(keyCode);
}
/**
@@ -1073,17 +1033,14 @@
* The 'Tq' suffix is per the documentation in {@link WindowManagerPolicy}.
* Be sure not to take any action that takes a long time; any significant
* action should be posted to a handler.
- *
- * @return Whether we poked the wake lock (and turned the screen on)
*/
- public boolean onWakeMotionWhenKeyguardShowingTq() {
+ public void onWakeMotionWhenKeyguardShowingTq() {
if (DEBUG) Log.d(TAG, "onWakeMotionWhenKeyguardShowing()");
// give the keyguard view manager a chance to adjust the state of the
// keyguard based on the key that woke the device before poking
// the wake lock
- wakeWhenReadyLocked(KeyEvent.KEYCODE_UNKNOWN);
- return true;
+ wakeWhenReady(KeyEvent.KEYCODE_UNKNOWN);
}
public void keyguardDone(boolean authenticated, boolean wakeup) {
@@ -1350,7 +1307,7 @@
}
/**
- * Handle message sent by {@link #wakeWhenReadyLocked(int)}
+ * Handle message sent by {@link #wakeWhenReady(int)}
* @param keyCode The key that woke the device.
* @see #WAKE_WHEN_READY
*/
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 922ced2..4948343 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 @@
// 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;
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
index 9caeb0d..f20b8d4 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
@@ -173,6 +173,22 @@
}
}
+ private void updateWidgetFramesImportantForAccessibility() {
+ final int pageCount = getPageCount();
+ for (int i = 0; i < pageCount; i++) {
+ KeyguardWidgetFrame frame = getWidgetPageAt(i);
+ updateWidgetFrameImportantForAccessibility(frame);
+ }
+ }
+
+ private void updateWidgetFrameImportantForAccessibility(KeyguardWidgetFrame frame) {
+ if (frame.getContentAlpha() <= 0) {
+ frame.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
+ } else {
+ frame.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+ }
+ }
+
private void userActivity() {
if (mCallbacks != null) {
mCallbacks.onUserActivityTimeoutChanged();
@@ -305,6 +321,7 @@
content.getContentDescription());
frame.setContentDescription(contentDescription);
}
+ updateWidgetFrameImportantForAccessibility(frame);
}
/**
@@ -548,6 +565,12 @@
}
@Override
+ void setCurrentPage(int currentPage) {
+ super.setCurrentPage(currentPage);
+ updateWidgetFramesImportantForAccessibility();
+ }
+
+ @Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
mHasMeasure = false;
@@ -658,6 +681,7 @@
}
mWidgetToResetAfterFadeOut = -1;
}
+ updateWidgetFramesImportantForAccessibility();
}
});
mChildrenOutlineFadeAnimation.start();