From 24d7b5f22ac98392f8b2d2c94560173e44d1ca6c Mon Sep 17 00:00:00 2001 From: Nick Pelly Date: Tue, 11 Oct 2011 12:51:09 -0700 Subject: Send ACTION_USER_PRESENT when provisioning is completed. This is needed for application to know when the keyguard becomes unlocked, because isKeyguardLocked() is typically true while provisioning (setup wizard), but ACTION_USER_PRSENT was not sent when it transitions to false after provisioning. Bug: 5436867 Bug: 5430833 Change-Id: Icae13ff9cab84774a002a426eb9cb353fa1dc530 --- .../policy/impl/KeyguardStatusViewManager.java | 4 +++ .../policy/impl/KeyguardUpdateMonitor.java | 33 ++++++++++++++++++---- .../internal/policy/impl/KeyguardViewMediator.java | 5 ++++ .../policy/impl/LockPatternKeyguardView.java | 2 ++ 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java index 24dce1a..86807ad 100644 --- a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java +++ b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java @@ -606,6 +606,10 @@ class KeyguardStatusViewManager implements OnClickListener { public void onClockVisibilityChanged() { // ignored } + + public void onDeviceProvisioned() { + // ignored + } }; private SimStateCallback mSimStateCallback = new SimStateCallback() { diff --git a/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java index 10cf3aa..303a3b5 100644 --- a/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java +++ b/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java @@ -99,6 +99,7 @@ public class KeyguardUpdateMonitor { private static final int MSG_RINGER_MODE_CHANGED = 305; private static final int MSG_PHONE_STATE_CHANGED = 306; private static final int MSG_CLOCK_VISIBILITY_CHANGED = 307; + private static final int MSG_DEVICE_PROVISIONED = 308; /** * When we receive a @@ -178,6 +179,9 @@ public class KeyguardUpdateMonitor { case MSG_CLOCK_VISIBILITY_CHANGED: handleClockVisibilityChanged(); break; + case MSG_DEVICE_PROVISIONED: + handleDeviceProvisioned(); + break; } } }; @@ -197,10 +201,8 @@ public class KeyguardUpdateMonitor { super.onChange(selfChange); mDeviceProvisioned = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.DEVICE_PROVISIONED, 0) != 0; - if (mDeviceProvisioned && mContentObserver != null) { - // We don't need the observer anymore... - mContext.getContentResolver().unregisterContentObserver(mContentObserver); - mContentObserver = null; + if (mDeviceProvisioned) { + mHandler.sendMessage(mHandler.obtainMessage(MSG_DEVICE_PROVISIONED)); } if (DEBUG) Log.d(TAG, "DEVICE_PROVISIONED state = " + mDeviceProvisioned); } @@ -212,8 +214,14 @@ public class KeyguardUpdateMonitor { // prevent a race condition between where we check the flag and where we register the // observer by grabbing the value once again... - mDeviceProvisioned = Settings.Secure.getInt(mContext.getContentResolver(), + boolean provisioned = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.DEVICE_PROVISIONED, 0) != 0; + if (provisioned != mDeviceProvisioned) { + mDeviceProvisioned = provisioned; + if (mDeviceProvisioned) { + mHandler.sendMessage(mHandler.obtainMessage(MSG_DEVICE_PROVISIONED)); + } + } } // take a guess to start @@ -271,6 +279,17 @@ public class KeyguardUpdateMonitor { }, filter); } + protected void handleDeviceProvisioned() { + for (int i = 0; i < mInfoCallbacks.size(); i++) { + mInfoCallbacks.get(i).onDeviceProvisioned(); + } + if (mContentObserver != null) { + // We don't need the observer anymore... + mContext.getContentResolver().unregisterContentObserver(mContentObserver); + mContentObserver = null; + } + } + protected void handlePhoneStateChanged(String newState) { if (DEBUG) Log.d(TAG, "handlePhoneStateChanged(" + newState + ")"); if (TelephonyManager.EXTRA_STATE_IDLE.equals(newState)) { @@ -477,6 +496,10 @@ public class KeyguardUpdateMonitor { */ void onClockVisibilityChanged(); + /** + * Called when the device becomes provisioned + */ + void onDeviceProvisioned(); } /** diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java index c25e3ca..f1b6ef9 100644 --- a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java +++ b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java @@ -1323,4 +1323,9 @@ public class KeyguardViewMediator implements KeyguardViewCallback, public void onTimeChanged() { // ignored } + + /** {@inheritDoc} */ + public void onDeviceProvisioned() { + mContext.sendBroadcast(mUserPresentIntent); + } } diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java index 071044e..65cdd32 100644 --- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java +++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java @@ -615,6 +615,8 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler public void onRingerModeChanged(int state) {} @Override public void onClockVisibilityChanged() {} + @Override + public void onDeviceProvisioned() {} //We need to stop faceunlock when a phonecall comes in @Override -- cgit v1.1