SampleTrustAgent.java revision 604e7558ef32098644b2f9456d7743a07ae789dc
1a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos/* 2a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * Copyright (C) 2014 The Android Open Source Project 3a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * 4a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * Licensed under the Apache License, Version 2.0 (the "License"); 5a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * you may not use this file except in compliance with the License. 6a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * You may obtain a copy of the License at 7a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * 8a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * http://www.apache.org/licenses/LICENSE-2.0 9a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * 10a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * Unless required by applicable law or agreed to in writing, software 11a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * distributed under the License is distributed on an "AS IS" BASIS, 12a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * See the License for the specific language governing permissions and 14a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos * limitations under the License 15a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos */ 16a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 17a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roospackage com.android.trustagent.test; 18a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 19a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.content.BroadcastReceiver; 20a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.content.Context; 21a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.content.Intent; 22a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.content.IntentFilter; 23a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.content.SharedPreferences; 24a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.os.Bundle; 25a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.preference.PreferenceManager; 26a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.service.trust.TrustAgentService; 27a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.support.v4.content.LocalBroadcastManager; 28604e7558ef32098644b2f9456d7743a07ae789dcJim Millerimport android.util.Log; 29a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roosimport android.widget.Toast; 30a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 31a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roospublic class SampleTrustAgent extends TrustAgentService { 32a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 33a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos LocalBroadcastManager mLocalBroadcastManager; 34a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 357e03dfcb796ef1a6000a5fd5fda03c9e15ea62e1Adrian Roos private static final String ACTION_GRANT_TRUST = "action.sample_trust_agent.grant_trust"; 36a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos private static final String ACTION_REVOKE_TRUST = "action.sample_trust_agent.revoke_trust"; 37a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 38a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos private static final String EXTRA_MESSAGE = "extra.message"; 39a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos private static final String EXTRA_DURATION = "extra.duration"; 40a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos private static final String EXTRA_EXTRA = "extra.extra"; 41a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 42a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos private static final String PREFERENCE_REPORT_UNLOCK_ATTEMPTS 43a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos = "preference.report_unlock_attempts"; 44a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 45604e7558ef32098644b2f9456d7743a07ae789dcJim Miller private static final String TAG = "SampleTrustAgent"; 46604e7558ef32098644b2f9456d7743a07ae789dcJim Miller 47a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos @Override 48a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos public void onCreate() { 49a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos super.onCreate(); 50a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos IntentFilter filter = new IntentFilter(); 517e03dfcb796ef1a6000a5fd5fda03c9e15ea62e1Adrian Roos filter.addAction(ACTION_GRANT_TRUST); 52a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos filter.addAction(ACTION_REVOKE_TRUST); 53a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); 54a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos mLocalBroadcastManager.registerReceiver(mReceiver, filter); 55a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 56a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 57a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos @Override 587e03dfcb796ef1a6000a5fd5fda03c9e15ea62e1Adrian Roos public void onUnlockAttempt(boolean successful) { 59a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos if (getReportUnlockAttempts(this)) { 60a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos Toast.makeText(this, "onUnlockAttempt(successful=" + successful + ")", 61a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos Toast.LENGTH_SHORT).show(); 62a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 63a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 64a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 65a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos @Override 66604e7558ef32098644b2f9456d7743a07ae789dcJim Miller public boolean onSetTrustAgentFeaturesEnabled(Bundle options) { 67604e7558ef32098644b2f9456d7743a07ae789dcJim Miller Log.v(TAG, "Policy options received: " + options.getStringArrayList(KEY_FEATURES)); 68604e7558ef32098644b2f9456d7743a07ae789dcJim Miller // TODO: Handle options 69604e7558ef32098644b2f9456d7743a07ae789dcJim Miller return true; // inform DPM that we support it 70604e7558ef32098644b2f9456d7743a07ae789dcJim Miller } 71604e7558ef32098644b2f9456d7743a07ae789dcJim Miller 72604e7558ef32098644b2f9456d7743a07ae789dcJim Miller @Override 73a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos public void onDestroy() { 74a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos super.onDestroy(); 75a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos mLocalBroadcastManager.unregisterReceiver(mReceiver); 76a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 77a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 78a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos private BroadcastReceiver mReceiver = new BroadcastReceiver() { 79a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos @Override 80a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos public void onReceive(Context context, Intent intent) { 81a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos String action = intent.getAction(); 827e03dfcb796ef1a6000a5fd5fda03c9e15ea62e1Adrian Roos if (ACTION_GRANT_TRUST.equals(action)) { 837e03dfcb796ef1a6000a5fd5fda03c9e15ea62e1Adrian Roos grantTrust(intent.getStringExtra(EXTRA_MESSAGE), 84a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos intent.getLongExtra(EXTRA_DURATION, 0), 85a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos false /* initiatedByUser */); 86a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } else if (ACTION_REVOKE_TRUST.equals(action)) { 87a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos revokeTrust(); 88a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 89a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 90a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos }; 91a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 927e03dfcb796ef1a6000a5fd5fda03c9e15ea62e1Adrian Roos public static void sendGrantTrust(Context context, 93a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos String message, long durationMs, Bundle extra) { 947e03dfcb796ef1a6000a5fd5fda03c9e15ea62e1Adrian Roos Intent intent = new Intent(ACTION_GRANT_TRUST); 95a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos intent.putExtra(EXTRA_MESSAGE, message); 96a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos intent.putExtra(EXTRA_DURATION, durationMs); 97a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos intent.putExtra(EXTRA_EXTRA, extra); 98a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 99a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 100a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 101a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos public static void sendRevokeTrust(Context context) { 102a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos Intent intent = new Intent(ACTION_REVOKE_TRUST); 103a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 104a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 105a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 106a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos public static void setReportUnlockAttempts(Context context, boolean enabled) { 107a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos SharedPreferences sharedPreferences = PreferenceManager 108a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos .getDefaultSharedPreferences(context); 109a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos sharedPreferences.edit().putBoolean(PREFERENCE_REPORT_UNLOCK_ATTEMPTS, enabled).apply(); 110a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 111a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos 112a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos public static boolean getReportUnlockAttempts(Context context) { 113a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos SharedPreferences sharedPreferences = PreferenceManager 114a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos .getDefaultSharedPreferences(context); 115a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos return sharedPreferences.getBoolean(PREFERENCE_REPORT_UNLOCK_ATTEMPTS, false); 116a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos } 117a3dafcfb26117e3a2efa3983bd7ba79ae6831680Adrian Roos} 118