From 2bb8bfd1e85c8359412159fde57dd5722f5be58c Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Wed, 13 Aug 2014 02:06:54 +0200 Subject: Dismiss bouncer when onTrustInitiatedByUser fires Also modifies the SampleTrustAgent to allow testing of the feature and adds the initiatedByUser flag to the dumpsys output. Bug: 16840500 Change-Id: I4c08ddcdcbd0ab02c694a1873f73cb9a250f98d7 --- .../android/keyguard/KeyguardSimpleHostView.java | 12 ++++++++++ .../android/trustagent/test/SampleTrustAgent.java | 28 ++++++++++++++++++---- .../trustagent/test/SampleTrustAgentSettings.java | 2 +- .../com/android/server/trust/TrustArchive.java | 4 ++-- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimpleHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimpleHostView.java index bc159cb..f009787 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimpleHostView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimpleHostView.java @@ -68,5 +68,17 @@ public class KeyguardSimpleHostView extends KeyguardViewBase { public void onUserSwitchComplete(int userId) { getSecurityContainer().showPrimarySecurityScreen(false /* turning off */); } + + @Override + public void onTrustInitiatedByUser(int userId) { + if (userId != mLockPatternUtils.getCurrentUser()) return; + if (!isAttachedToWindow()) return; + + if (isVisibleToUser()) { + dismiss(false /* authenticated */); + } else { + // TODO: Play first half of unlock sound. + } + } }; } diff --git a/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgent.java b/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgent.java index ed17494..4ea1c77 100644 --- a/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgent.java +++ b/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgent.java @@ -31,6 +31,16 @@ import android.widget.Toast; public class SampleTrustAgent extends TrustAgentService implements SharedPreferences.OnSharedPreferenceChangeListener { + /** + * If true, allows anyone to control this trust agent, e.g. using adb: + *
+     * $ adb shell am broadcast -a action.sample_trust_agent.grant_trust\
+     *  -e extra.message SampleTrust\
+     *  --el extra.duration 1000 --ez extra.init_by_user false
+     * 
+ */ + private static final boolean ALLOW_EXTERNAL_BROADCASTS = false; + LocalBroadcastManager mLocalBroadcastManager; private static final String ACTION_GRANT_TRUST = "action.sample_trust_agent.grant_trust"; @@ -38,7 +48,7 @@ public class SampleTrustAgent extends TrustAgentService private static final String EXTRA_MESSAGE = "extra.message"; private static final String EXTRA_DURATION = "extra.duration"; - private static final String EXTRA_EXTRA = "extra.extra"; + private static final String EXTRA_INITIATED_BY_USER = "extra.init_by_user"; private static final String PREFERENCE_REPORT_UNLOCK_ATTEMPTS = "preference.report_unlock_attempts"; @@ -50,11 +60,16 @@ public class SampleTrustAgent extends TrustAgentService @Override public void onCreate() { super.onCreate(); + mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); + IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_GRANT_TRUST); filter.addAction(ACTION_REVOKE_TRUST); - mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); mLocalBroadcastManager.registerReceiver(mReceiver, filter); + if (ALLOW_EXTERNAL_BROADCASTS) { + registerReceiver(mReceiver, filter); + } + setManagingTrust(getIsManagingTrust(this)); PreferenceManager.getDefaultSharedPreferences(this) .registerOnSharedPreferenceChangeListener(this); @@ -79,6 +94,9 @@ public class SampleTrustAgent extends TrustAgentService public void onDestroy() { super.onDestroy(); mLocalBroadcastManager.unregisterReceiver(mReceiver); + if (ALLOW_EXTERNAL_BROADCASTS) { + unregisterReceiver(mReceiver); + } PreferenceManager.getDefaultSharedPreferences(this) .unregisterOnSharedPreferenceChangeListener(this); } @@ -91,7 +109,7 @@ public class SampleTrustAgent extends TrustAgentService try { grantTrust(intent.getStringExtra(EXTRA_MESSAGE), intent.getLongExtra(EXTRA_DURATION, 0), - false /* initiatedByUser */); + intent.getBooleanExtra(EXTRA_INITIATED_BY_USER, false)); } catch (IllegalStateException e) { Toast.makeText(context, "IllegalStateException: " + e.getMessage(), Toast.LENGTH_SHORT).show(); @@ -103,11 +121,11 @@ public class SampleTrustAgent extends TrustAgentService }; public static void sendGrantTrust(Context context, - String message, long durationMs, Bundle extra) { + String message, long durationMs, boolean initiatedByUser) { Intent intent = new Intent(ACTION_GRANT_TRUST); intent.putExtra(EXTRA_MESSAGE, message); intent.putExtra(EXTRA_DURATION, durationMs); - intent.putExtra(EXTRA_EXTRA, extra); + intent.putExtra(EXTRA_INITIATED_BY_USER, initiatedByUser); LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } diff --git a/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgentSettings.java b/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgentSettings.java index 2c85609..bea74ab 100644 --- a/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgentSettings.java +++ b/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgentSettings.java @@ -59,7 +59,7 @@ public class SampleTrustAgentSettings extends Activity implements View.OnClickLi int id = v.getId(); if (id == R.id.enable_trust) { SampleTrustAgent.sendGrantTrust(this, "SampleTrustAgent", TRUST_DURATION_MS, - null /* extra */); + false /* initiatedByUser */); } else if (id == R.id.revoke_trust) { SampleTrustAgent.sendRevokeTrust(this); } else if (id == R.id.crash) { diff --git a/services/core/java/com/android/server/trust/TrustArchive.java b/services/core/java/com/android/server/trust/TrustArchive.java index d4ed86d..7253716 100644 --- a/services/core/java/com/android/server/trust/TrustArchive.java +++ b/services/core/java/com/android/server/trust/TrustArchive.java @@ -129,8 +129,8 @@ public class TrustArchive { } switch (ev.type) { case TYPE_GRANT_TRUST: - writer.printf(", message=\"%s\", duration=%s", - ev.message, formatDuration(ev.duration)); + writer.printf(", message=\"%s\", duration=%s, initiatedByUser=%d", + ev.message, formatDuration(ev.duration), ev.userInitiated ? 1 : 0); break; case TYPE_MANAGING_TRUST: writer.printf(", managingTrust=" + ev.managingTrust); -- cgit v1.1