diff options
author | Adrian Roos <roosa@google.com> | 2014-08-07 13:57:55 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-07 12:44:12 +0000 |
commit | 0da70938403650c5517b3da14b6c3fe0ef293e4a (patch) | |
tree | 5b2d0376c86124273a5e4a5df75f805723bcf761 | |
parent | 138b324d5db09cff27e43c8ee3614def01630013 (diff) | |
parent | 3c9a3501651aa8ad4f289e89119a6c0b4bdaf78a (diff) | |
download | frameworks_base-0da70938403650c5517b3da14b6c3fe0ef293e4a.zip frameworks_base-0da70938403650c5517b3da14b6c3fe0ef293e4a.tar.gz frameworks_base-0da70938403650c5517b3da14b6c3fe0ef293e4a.tar.bz2 |
Merge "Pass initiatedByUser to TrustListeners" into lmp-dev
6 files changed, 41 insertions, 23 deletions
diff --git a/core/java/android/app/trust/ITrustListener.aidl b/core/java/android/app/trust/ITrustListener.aidl index 45a066d..d80f58c 100644 --- a/core/java/android/app/trust/ITrustListener.aidl +++ b/core/java/android/app/trust/ITrustListener.aidl @@ -22,6 +22,6 @@ package android.app.trust; * {@hide} */ oneway interface ITrustListener { - void onTrustChanged(boolean enabled, int userId); + void onTrustChanged(boolean enabled, int userId, boolean initiatedByUser); void onTrustManagedChanged(boolean managed, int userId); }
\ No newline at end of file diff --git a/core/java/android/app/trust/TrustManager.java b/core/java/android/app/trust/TrustManager.java index 796e3cc..3d262b1 100644 --- a/core/java/android/app/trust/TrustManager.java +++ b/core/java/android/app/trust/TrustManager.java @@ -34,6 +34,7 @@ public class TrustManager { private static final int MSG_TRUST_MANAGED_CHANGED = 2; private static final String TAG = "TrustManager"; + private static final String DATA_INITIATED_BY_USER = "initiatedByUser"; private final ITrustManager mService; private final ArrayMap<TrustListener, ITrustListener> mTrustListeners; @@ -95,14 +96,17 @@ public class TrustManager { try { ITrustListener.Stub iTrustListener = new ITrustListener.Stub() { @Override - public void onTrustChanged(boolean enabled, int userId) throws RemoteException { - mHandler.obtainMessage(MSG_TRUST_CHANGED, (enabled ? 1 : 0), userId, - trustListener).sendToTarget(); + public void onTrustChanged(boolean enabled, int userId, boolean initiatedByUser) { + Message m = mHandler.obtainMessage(MSG_TRUST_CHANGED, (enabled ? 1 : 0), userId, + trustListener); + if (initiatedByUser) { + m.getData().putBoolean(DATA_INITIATED_BY_USER, initiatedByUser); + } + m.sendToTarget(); } @Override - public void onTrustManagedChanged(boolean managed, int userId) - throws RemoteException { + public void onTrustManagedChanged(boolean managed, int userId) { mHandler.obtainMessage(MSG_TRUST_MANAGED_CHANGED, (managed ? 1 : 0), userId, trustListener).sendToTarget(); } @@ -139,7 +143,11 @@ public class TrustManager { public void handleMessage(Message msg) { switch(msg.what) { case MSG_TRUST_CHANGED: - ((TrustListener)msg.obj).onTrustChanged(msg.arg1 != 0, msg.arg2); + boolean initiatedByUser = msg.peekData() != null && + msg.peekData().getBoolean(DATA_INITIATED_BY_USER); + ((TrustListener)msg.obj).onTrustChanged( + msg.arg1 != 0, msg.arg2, initiatedByUser); + break; case MSG_TRUST_MANAGED_CHANGED: ((TrustListener)msg.obj).onTrustManagedChanged(msg.arg1 != 0, msg.arg2); @@ -153,8 +161,10 @@ public class TrustManager { * Reports that the trust state has changed. * @param enabled if true, the system believes the environment to be trusted. * @param userId the user, for which the trust changed. + * @param initiatedByUser indicates that the user has explicitly initiated an action that + * proves the user is about to use the device. */ - void onTrustChanged(boolean enabled, int userId); + void onTrustChanged(boolean enabled, int userId, boolean initiatedByUser); /** * Reports that whether trust is managed has changed diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index 58cbaba..0d79ee2 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -229,13 +229,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private SparseBooleanArray mUserFingerprintRecognized = new SparseBooleanArray(); @Override - public void onTrustChanged(boolean enabled, int userId) { + public void onTrustChanged(boolean enabled, int userId, boolean initiatedByUser) { mUserHasTrust.put(userId, enabled); for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { cb.onTrustChanged(userId); + if (enabled && initiatedByUser) { + cb.onTrustInitiatedByUser(userId); + } } } } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java index 4827e79..0acb9d0 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java @@ -179,6 +179,11 @@ public class KeyguardUpdateMonitorCallback { public void onTrustManagedChanged(int userId) { } /** + * Called when the user has proved to a trust agent that they want to use the device. + */ + public void onTrustInitiatedByUser(int userId) { } + + /** * Called when a fingerprint is recognized. * @param userId */ diff --git a/services/core/java/com/android/server/trust/TrustAgentWrapper.java b/services/core/java/com/android/server/trust/TrustAgentWrapper.java index ee20b3c..0523af7 100644 --- a/services/core/java/com/android/server/trust/TrustAgentWrapper.java +++ b/services/core/java/com/android/server/trust/TrustAgentWrapper.java @@ -93,7 +93,6 @@ public class TrustAgentWrapper { mTrusted = true; mMessage = (CharSequence) msg.obj; boolean initiatedByUser = msg.arg1 != 0; - // TODO: Handle initiatedByUser. long durationMs = msg.getData().getLong(DATA_DURATION); if (durationMs > 0) { mHandler.removeMessages(MSG_TRUST_TIMEOUT); @@ -102,7 +101,7 @@ public class TrustAgentWrapper { mTrustManagerService.mArchive.logGrantTrust(mUserId, mName, (mMessage != null ? mMessage.toString() : null), durationMs, initiatedByUser); - mTrustManagerService.updateTrust(mUserId); + mTrustManagerService.updateTrust(mUserId, initiatedByUser); break; case MSG_TRUST_TIMEOUT: if (DEBUG) Slog.v(TAG, "Trust timed out : " + mName.flattenToShortString()); @@ -115,7 +114,7 @@ public class TrustAgentWrapper { if (msg.what == MSG_REVOKE_TRUST) { mTrustManagerService.mArchive.logRevokeTrust(mUserId, mName); } - mTrustManagerService.updateTrust(mUserId); + mTrustManagerService.updateTrust(mUserId, false); break; case MSG_RESTART_TIMEOUT: unbind(); @@ -130,7 +129,7 @@ public class TrustAgentWrapper { if (DEBUG) Log.v(TAG, "Re-enabling agent because it acknowledged " + "enabled features: " + mName); mTrustDisabledByDpm = false; - mTrustManagerService.updateTrust(mUserId); + mTrustManagerService.updateTrust(mUserId, false); } } else { if (DEBUG) Log.w(TAG, "Ignoring MSG_SET_TRUST_AGENT_FEATURES_COMPLETED " @@ -144,7 +143,7 @@ public class TrustAgentWrapper { mMessage = null; } mTrustManagerService.mArchive.logManagingTrust(mUserId, mName, mManagingTrust); - mTrustManagerService.updateTrust(mUserId); + mTrustManagerService.updateTrust(mUserId, false); break; } } @@ -282,7 +281,7 @@ public class TrustAgentWrapper { } if (mTrustDisabledByDpm != trustDisabled) { mTrustDisabledByDpm = trustDisabled; - mTrustManagerService.updateTrust(mUserId); + mTrustManagerService.updateTrust(mUserId, false); } return trustDisabled; } diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java index d3b8d5d..badead6 100644 --- a/services/core/java/com/android/server/trust/TrustManagerService.java +++ b/services/core/java/com/android/server/trust/TrustManagerService.java @@ -148,13 +148,13 @@ public class TrustManagerService extends SystemService { private void updateTrustAll() { List<UserInfo> userInfos = mUserManager.getUsers(true /* excludeDying */); for (UserInfo userInfo : userInfos) { - updateTrust(userInfo.id); + updateTrust(userInfo.id, false); } } - public void updateTrust(int userId) { + public void updateTrust(int userId, boolean initiatedByUser) { dispatchOnTrustManagedChanged(aggregateIsTrustManaged(userId), userId); - dispatchOnTrustChanged(aggregateIsTrusted(userId), userId); + dispatchOnTrustChanged(aggregateIsTrusted(userId), userId, initiatedByUser); } void refreshAgentList() { @@ -272,7 +272,7 @@ public class TrustManagerService extends SystemService { } } if (trustMayHaveChanged) { - updateTrust(userId); + updateTrust(userId, false); } refreshAgentList(); } @@ -375,7 +375,7 @@ public class TrustManagerService extends SystemService { if (successful && !mUserHasAuthenticatedSinceBoot.get(userId)) { mUserHasAuthenticatedSinceBoot.put(userId, true); - updateTrust(userId); + updateTrust(userId, false); } } @@ -386,7 +386,7 @@ public class TrustManagerService extends SystemService { updateTrustAll(); } else { mUserHasAuthenticatedSinceBoot.put(userId, false); - updateTrust(userId); + updateTrust(userId, false); } } @@ -410,10 +410,11 @@ public class TrustManagerService extends SystemService { } } - private void dispatchOnTrustChanged(boolean enabled, int userId) { + private void dispatchOnTrustChanged(boolean enabled, int userId, boolean initiatedByUser) { + if (!enabled) initiatedByUser = false; for (int i = 0; i < mTrustListeners.size(); i++) { try { - mTrustListeners.get(i).onTrustChanged(enabled, userId); + mTrustListeners.get(i).onTrustChanged(enabled, userId, initiatedByUser); } catch (DeadObjectException e) { Slog.d(TAG, "Removing dead TrustListener."); mTrustListeners.remove(i); |