blob: a6a5e5addb0113bda49a9cc0b4b70854f612186a [file] [log] [blame]
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +01001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.cts.verifier.managedprovisioning;
18
19import android.app.Activity;
20import android.app.AlertDialog;
21import android.app.admin.DevicePolicyManager;
Benjamin Franz89e40fc2015-07-01 15:35:57 +010022import android.content.ComponentName;
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +010023import android.content.Context;
24import android.content.Intent;
Zoltan Szatmary-Ban01ce4542015-06-22 11:14:47 +010025import android.content.pm.PackageManager;
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +010026import android.database.DataSetObserver;
27import android.os.Bundle;
Benjamin Franz1c8defc2015-08-10 16:52:56 +010028import android.os.UserManager;
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +010029import android.provider.Settings;
30import android.util.Log;
31import android.view.View;
32import android.view.View.OnClickListener;
33
34import com.android.cts.verifier.ArrayTestListAdapter;
35import com.android.cts.verifier.IntentDrivenTestActivity;
36import com.android.cts.verifier.IntentDrivenTestActivity.ButtonInfo;
37import com.android.cts.verifier.PassFailButtons;
38import com.android.cts.verifier.R;
39import com.android.cts.verifier.TestListAdapter.TestListItem;
40import com.android.cts.verifier.TestResult;
41
42/**
43 * Activity that lists all positive device owner tests. Requires the following adb command be issued
44 * by the user prior to starting the tests:
45 *
46 * adb shell dpm set-device-owner
47 * 'com.android.cts.verifier/com.android.cts.verifier.managedprovisioning.DeviceAdminTestReceiver'
48 */
49public class DeviceOwnerPositiveTestActivity extends PassFailButtons.TestListActivity {
50 private static final String TAG = "DeviceOwnerPositiveTestActivity";
51
52 static final String EXTRA_COMMAND = "extra-command";
53 static final String EXTRA_TEST_ID = "extra-test-id";
54 static final String COMMAND_SET_POLICY = "set-policy";
55 static final String EXTRA_POLICY = "extra-policy";
56 static final String EXTRA_PARAMETER_1 = "extra_parameter_1";
57 static final String EXTRA_PARAMETER_2 = "extra_parameter_2";
58 static final String COMMAND_ADD_USER_RESTRICTION = "add-user-restriction";
59 static final String COMMAND_CLEAR_USER_RESTRICTION = "clear-user-restriction";
60 static final String EXTRA_RESTRICTION = "extra-restriction";
Benjamin Franz89e40fc2015-07-01 15:35:57 +010061 static final String COMMAND_TEAR_DOWN = "tear-down";
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +010062 static final String COMMAND_CHECK_DEVICE_OWNER = "check-device-owner";
63 static final String COMMAND_SET_GLOBAL_SETTING = "set-global-setting";
Benjamin Franz89e40fc2015-07-01 15:35:57 +010064 static final String COMMAND_SET_STATUSBAR_DISABLED = "set-statusbar-disabled";
65 static final String COMMAND_SET_KEYGUARD_DISABLED = "set-keyguard-disabled";
Sudheer Shanka72ba56a2015-07-17 18:30:44 +010066 static final String COMMAND_CHECK_PERMISSION_LOCKDOWN = "check-permission-lockdown";
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +010067 static final String EXTRA_SETTING = "extra-setting";
68
69 private static final String CHECK_DEVICE_OWNER_TEST_ID = "CHECK_DEVICE_OWNER";
Benjamin Franz2e9fd732015-08-10 15:43:42 +010070 private static final String DEVICE_ADMIN_SETTINGS_ID = "DEVICE_ADMIN_SETTINGS";
Zoltan Szatmary-Ban01ce4542015-06-22 11:14:47 +010071 private static final String WIFI_LOCKDOWN_TEST_ID = WifiLockdownTestActivity.class.getName();
Benjamin Franz89e40fc2015-07-01 15:35:57 +010072 private static final String DISABLE_STATUS_BAR_TEST_ID = "DISABLE_STATUS_BAR";
73 private static final String DISABLE_KEYGUARD_TEST_ID = "DISABLE_KEYGUARD";
Sudheer Shanka72ba56a2015-07-17 18:30:44 +010074 private static final String CHECK_PERMISSION_LOCKDOWN_TEST_ID =
75 PermissionLockdownTestActivity.class.getName();
Benjamin Franz1c8defc2015-08-10 16:52:56 +010076 private static final String DISALLOW_CONFIG_BT_ID = "DISALLOW_CONFIG_BT";
77 private static final String DISALLOW_CONFIG_WIFI_ID = "DISALLOW_CONFIG_WIFI";
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +010078 private static final String REMOVE_DEVICE_OWNER_TEST_ID = "REMOVE_DEVICE_OWNER";
79
80 @Override
81 protected void onCreate(Bundle savedInstanceState) {
82 super.onCreate(savedInstanceState);
83 setContentView(R.layout.positive_device_owner);
84 setInfoResources(R.string.device_owner_positive_tests,
85 R.string.device_owner_positive_tests_info, 0);
86 setPassFailButtonClickListeners();
87
88 final ArrayTestListAdapter adapter = new ArrayTestListAdapter(this);
89 adapter.add(TestListItem.newCategory(this, R.string.device_owner_positive_category));
90
91 addTestsToAdapter(adapter);
92
93 adapter.registerDataSetObserver(new DataSetObserver() {
94 @Override
95 public void onChanged() {
96 updatePassButton();
97 }
98 });
99
100 setTestListAdapter(adapter);
101
102 View setDeviceOwnerButton = findViewById(R.id.set_device_owner_button);
103 setDeviceOwnerButton.setOnClickListener(new OnClickListener() {
104 @Override
105 public void onClick(View v) {
106 new AlertDialog.Builder(
107 DeviceOwnerPositiveTestActivity.this)
108 .setIcon(android.R.drawable.ic_dialog_info)
109 .setTitle(R.string.set_device_owner_dialog_title)
110 .setMessage(R.string.set_device_owner_dialog_text)
111 .setPositiveButton(android.R.string.ok, null)
112 .show();
113 }
114 });
115
116 }
117
118 @Override
119 public void finish() {
120 // Pass and fail buttons are known to call finish() when clicked, and this is when we want
121 // to remove the device owner.
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100122 startActivity(createTearDownIntent());
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100123 super.finish();
124 }
125
126 /**
127 * Enable Pass Button when all tests passed.
128 */
129 private void updatePassButton() {
130 getPassButton().setEnabled(mAdapter.allTestsPassed());
131 }
132
133 private void addTestsToAdapter(final ArrayTestListAdapter adapter) {
134 adapter.add(createTestItem(this, CHECK_DEVICE_OWNER_TEST_ID,
135 R.string.device_owner_check_device_owner_test,
136 new Intent(this, CommandReceiver.class)
137 .putExtra(EXTRA_COMMAND, COMMAND_CHECK_DEVICE_OWNER)
138 ));
Benjamin Franz2e9fd732015-08-10 15:43:42 +0100139
140 // device admin settings
141 adapter.add(createInteractiveTestItem(this, DEVICE_ADMIN_SETTINGS_ID,
142 R.string.device_owner_device_admin_visible,
143 R.string.device_owner_device_admin_visible_info,
144 new ButtonInfo(
Benjamin Franz1c8defc2015-08-10 16:52:56 +0100145 R.string.device_owner_settings_go,
Benjamin Franz2e9fd732015-08-10 15:43:42 +0100146 new Intent(Settings.ACTION_SECURITY_SETTINGS))));
147
Zoltan Szatmary-Ban01ce4542015-06-22 11:14:47 +0100148 PackageManager packageManager = getPackageManager();
149 if (packageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)) {
Benjamin Franz1c8defc2015-08-10 16:52:56 +0100150 // WiFi Lock down tests
Zoltan Szatmary-Ban01ce4542015-06-22 11:14:47 +0100151 adapter.add(createTestItem(this, WIFI_LOCKDOWN_TEST_ID,
152 R.string.device_owner_wifi_lockdown_test,
153 new Intent(this, WifiLockdownTestActivity.class)));
Benjamin Franz1c8defc2015-08-10 16:52:56 +0100154
155 // DISALLOW_CONFIG_WIFI
156 adapter.add(createInteractiveTestItem(this, DISALLOW_CONFIG_WIFI_ID,
157 R.string.device_owner_disallow_config_wifi,
158 R.string.device_owner_disallow_config_wifi_info,
159 new ButtonInfo[] {
160 new ButtonInfo(
161 R.string.device_owner_user_restriction_set,
162 createSetUserRestrictionIntent(
163 UserManager.DISALLOW_CONFIG_WIFI)),
164 new ButtonInfo(
165 R.string.device_owner_settings_go,
166 new Intent(Settings.ACTION_WIFI_SETTINGS))}));
167 }
168
169 // DISALLOW_CONFIG_BLUETOOTH
170 if (packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
171 adapter.add(createInteractiveTestItem(this, DISALLOW_CONFIG_BT_ID,
172 R.string.device_owner_disallow_config_bt,
173 R.string.device_owner_disallow_config_bt_info,
174 new ButtonInfo[] {
175 new ButtonInfo(
176 R.string.device_owner_user_restriction_set,
177 createSetUserRestrictionIntent(
178 UserManager.DISALLOW_CONFIG_BLUETOOTH)),
179 new ButtonInfo(
180 R.string.device_owner_settings_go,
181 new Intent(Settings.ACTION_BLUETOOTH_SETTINGS))}));
Zoltan Szatmary-Ban01ce4542015-06-22 11:14:47 +0100182 }
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100183
184 // setStatusBarDisabled
185 adapter.add(createInteractiveTestItem(this, DISABLE_STATUS_BAR_TEST_ID,
186 R.string.device_owner_disable_statusbar_test,
187 R.string.device_owner_disable_statusbar_test_info,
188 new ButtonInfo[] {
189 new ButtonInfo(
190 R.string.device_owner_disable_statusbar_button,
191 createDeviceOwnerIntentWithBooleanParameter(
192 COMMAND_SET_STATUSBAR_DISABLED, true)),
193 new ButtonInfo(
194 R.string.device_owner_reenable_statusbar_button,
195 createDeviceOwnerIntentWithBooleanParameter(
196 COMMAND_SET_STATUSBAR_DISABLED, false))}));
197
198 // setKeyguardDisabled
199 adapter.add(createInteractiveTestItem(this, DISABLE_KEYGUARD_TEST_ID,
200 R.string.device_owner_disable_keyguard_test,
201 R.string.device_owner_disable_keyguard_test_info,
202 new ButtonInfo[] {
203 new ButtonInfo(
204 R.string.device_owner_disable_keyguard_button,
205 createDeviceOwnerIntentWithBooleanParameter(
206 COMMAND_SET_KEYGUARD_DISABLED, true)),
207 new ButtonInfo(
208 R.string.device_owner_reenable_keyguard_button,
209 createDeviceOwnerIntentWithBooleanParameter(
210 COMMAND_SET_KEYGUARD_DISABLED, false))}));
211
Sudheer Shanka72ba56a2015-07-17 18:30:44 +0100212 // setPermissionGrantState
213 adapter.add(createTestItem(this, CHECK_PERMISSION_LOCKDOWN_TEST_ID,
214 R.string.device_profile_owner_permission_lockdown_test,
215 new Intent(PermissionLockdownTestActivity.ACTION_CHECK_PERMISSION_LOCKDOWN)));
216
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100217 // removeDeviceOwner
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100218 adapter.add(createInteractiveTestItem(this, REMOVE_DEVICE_OWNER_TEST_ID,
219 R.string.device_owner_remove_device_owner_test,
220 R.string.device_owner_remove_device_owner_test_info,
221 new ButtonInfo(
222 R.string.remove_device_owner_button,
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100223 createTearDownIntent())));
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100224 }
225
226 static TestListItem createInteractiveTestItem(Activity activity, String id, int titleRes,
227 int infoRes, ButtonInfo buttonInfo) {
Zoltan Szatmary-Ban01ce4542015-06-22 11:14:47 +0100228 return createInteractiveTestItem(activity, id, titleRes, infoRes,
229 new ButtonInfo[] { buttonInfo });
230 }
231
232 static TestListItem createInteractiveTestItem(Activity activity, String id, int titleRes,
233 int infoRes, ButtonInfo[] buttonInfos) {
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100234 return TestListItem.newTest(activity, titleRes,
235 id, new Intent(activity, IntentDrivenTestActivity.class)
236 .putExtra(IntentDrivenTestActivity.EXTRA_ID, id)
237 .putExtra(IntentDrivenTestActivity.EXTRA_TITLE, titleRes)
238 .putExtra(IntentDrivenTestActivity.EXTRA_INFO, infoRes)
Zoltan Szatmary-Ban01ce4542015-06-22 11:14:47 +0100239 .putExtra(IntentDrivenTestActivity.EXTRA_BUTTONS, buttonInfos),
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100240 null);
241 }
242
243 static TestListItem createTestItem(Activity activity, String id, int titleRes,
244 Intent intent) {
245 return TestListItem.newTest(activity, titleRes, id, intent.putExtra(EXTRA_TEST_ID, id),
246 null);
247 }
248
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100249 private Intent createTearDownIntent() {
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100250 return new Intent(this, CommandReceiver.class)
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100251 .putExtra(EXTRA_COMMAND, COMMAND_TEAR_DOWN);
252 }
253
254 private Intent createDeviceOwnerIntentWithBooleanParameter(String command, boolean value) {
255 return new Intent(this, CommandReceiver.class)
256 .putExtra(EXTRA_COMMAND, command)
257 .putExtra(EXTRA_PARAMETER_1, value);
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100258 }
259
Benjamin Franz1c8defc2015-08-10 16:52:56 +0100260 private Intent createSetUserRestrictionIntent(String restriction) {
261 return new Intent(this, CommandReceiver.class)
262 .putExtra(EXTRA_COMMAND, COMMAND_ADD_USER_RESTRICTION)
263 .putExtra(EXTRA_RESTRICTION, restriction);
264 }
265
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100266 public static class CommandReceiver extends Activity {
267 @Override
268 public void onCreate(Bundle savedInstanceState) {
269 super.onCreate(savedInstanceState);
270 Intent intent = getIntent();
271 String command = intent.getStringExtra(EXTRA_COMMAND);
272 try {
273 DevicePolicyManager dpm = (DevicePolicyManager)
274 getSystemService(Context.DEVICE_POLICY_SERVICE);
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100275 ComponentName admin = DeviceAdminTestReceiver.getReceiverComponentName();
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100276 Log.i(TAG, "Command: " + command);
277
278 if (COMMAND_ADD_USER_RESTRICTION.equals(command)) {
279 String restrictionKey = intent.getStringExtra(EXTRA_RESTRICTION);
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100280 dpm.addUserRestriction(admin, restrictionKey);
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100281 Log.i(TAG, "Added user restriction " + restrictionKey);
282 } else if (COMMAND_CLEAR_USER_RESTRICTION.equals(command)) {
283 String restrictionKey = intent.getStringExtra(EXTRA_RESTRICTION);
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100284 dpm.clearUserRestriction(admin, restrictionKey);
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100285 Log.i(TAG, "Cleared user restriction " + restrictionKey);
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100286 } else if (COMMAND_TEAR_DOWN.equals(command)) {
287 tearDown(dpm, admin);
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100288 } else if (COMMAND_SET_GLOBAL_SETTING.equals(command)) {
289 final String setting = intent.getStringExtra(EXTRA_SETTING);
290 final String value = intent.getStringExtra(EXTRA_PARAMETER_1);
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100291 dpm.setGlobalSetting(admin, setting, value);
292 } else if (COMMAND_SET_STATUSBAR_DISABLED.equals(command)) {
293 final boolean value = intent.getBooleanExtra(EXTRA_PARAMETER_1, false);
294 dpm.setStatusBarDisabled(admin, value);
295 } else if (COMMAND_SET_KEYGUARD_DISABLED.equals(command)) {
296 final boolean value = intent.getBooleanExtra(EXTRA_PARAMETER_1, false);
297 if (value) {
298 dpm.resetPassword(null, 0);
299 }
300 dpm.setKeyguardDisabled(admin, value);
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100301 } else if (COMMAND_CHECK_DEVICE_OWNER.equals(command)) {
302 if (dpm.isDeviceOwnerApp(getPackageName())) {
303 TestResult.setPassedResult(this, intent.getStringExtra(EXTRA_TEST_ID),
304 null, null);
305 } else {
306 TestResult.setFailedResult(this, intent.getStringExtra(EXTRA_TEST_ID),
307 getString(R.string.device_owner_incorrect_device_owner), null);
308 }
309 } else {
310 Log.e(TAG, "Invalid command: " + command);
311 }
312 } catch (Exception e) {
313 Log.e(TAG, "Command " + command + " failed with exception " + e);
314 } finally {
315 // No matter what happened, don't let the activity run
316 finish();
317 }
318 }
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100319
320 private void tearDown(DevicePolicyManager dpm, ComponentName admin) {
321 if (dpm == null || !dpm.isDeviceOwnerApp(getPackageName())) {
322 return;
323 }
324
325 dpm.setStatusBarDisabled(admin, false);
326 dpm.setKeyguardDisabled(admin, false);
Benjamin Franz1c8defc2015-08-10 16:52:56 +0100327 dpm.clearUserRestriction(admin, UserManager.DISALLOW_CONFIG_BLUETOOTH);
328 dpm.clearUserRestriction(admin, UserManager.DISALLOW_CONFIG_WIFI);
Benjamin Franz89e40fc2015-07-01 15:35:57 +0100329 dpm.clearDeviceOwnerApp(getPackageName());
330 }
Zoltan Szatmary-Ban9a2b13e2015-06-15 17:05:04 +0100331 }
332}
333