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