1 /* 2 * Copyright (C) 2016 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 17 package com.android.cts.verifier.managedprovisioning; 18 19 import android.app.admin.DevicePolicyManager; 20 import android.content.Intent; 21 import android.database.DataSetObserver; 22 import android.os.Bundle; 23 import android.provider.Settings; 24 import android.util.Pair; 25 import android.view.View; 26 27 import com.android.cts.verifier.ArrayTestListAdapter; 28 import com.android.cts.verifier.PassFailButtons; 29 import com.android.cts.verifier.R; 30 import com.android.cts.verifier.TestListAdapter.TestListItem; 31 32 import java.util.ArrayList; 33 34 /** 35 * Test class to verify transparency for policies enforced by device/profile owner. 36 */ 37 public class PolicyTransparencyTestListActivity extends PassFailButtons.TestListActivity 38 implements View.OnClickListener { 39 public static final String ACTION_CHECK_POLICY_TRANSPARENCY = 40 "com.android.cts.verifier.managedprovisioning.action.CHECK_POLICY_TRANSPARENCY"; 41 public static final String EXTRA_IS_DEVICE_OWNER = 42 "com.android.cts.verifier.managedprovisioning.extra.IS_DEVICE_OWNER"; 43 44 private static final Pair<Intent, Integer>[] POLICIES; 45 static { 46 final String[] policyTests = new String[] { 47 PolicyTransparencyTestActivity.TEST_CHECK_AUTO_TIME_REQUIRED, 48 PolicyTransparencyTestActivity.TEST_CHECK_KEYGURAD_UNREDACTED_NOTIFICATION, 49 PolicyTransparencyTestActivity.TEST_CHECK_LOCK_SCREEN_INFO, 50 PolicyTransparencyTestActivity.TEST_CHECK_MAXIMUM_TIME_TO_LOCK, 51 PolicyTransparencyTestActivity.TEST_CHECK_PASSWORD_QUALITY, 52 PolicyTransparencyTestActivity.TEST_CHECK_PERMITTED_ACCESSIBILITY_SERVICE, 53 PolicyTransparencyTestActivity.TEST_CHECK_PERMITTED_INPUT_METHOD 54 }; 55 final String[] settingsIntentActions = new String[] { 56 Settings.ACTION_DATE_SETTINGS, 57 Settings.ACTION_SETTINGS, 58 Settings.ACTION_SECURITY_SETTINGS, 59 Settings.ACTION_DISPLAY_SETTINGS, 60 DevicePolicyManager.ACTION_SET_NEW_PASSWORD, 61 Settings.ACTION_ACCESSIBILITY_SETTINGS, 62 Settings.ACTION_INPUT_METHOD_SETTINGS 63 }; 64 final int[] policyLabels = new int[] { 65 R.string.set_auto_time_required, 66 R.string.disallow_keyguard_unredacted_notifications, 67 R.string.set_lock_screen_info, 68 R.string.set_maximum_time_to_lock, 69 R.string.set_password_quality, 70 R.string.set_permitted_accessibility_services, 71 R.string.set_permitted_input_methods 72 }; 73 if (policyTests.length != settingsIntentActions.length || 74 policyTests.length != policyLabels.length) { 75 throw new AssertionError("Number of items in policyTests, " 76 + " settingsIntentActions and policyLabels do not match"); 77 } 78 POLICIES = new Pair[policyTests.length]; 79 for (int i = 0; i < policyTests.length; ++i) { 80 final Intent intent = 81 new Intent(PolicyTransparencyTestActivity.ACTION_SHOW_POLICY_TRANSPARENCY_TEST) 82 .putExtra(PolicyTransparencyTestActivity.EXTRA_TEST, policyTests[i]) 83 .putExtra(PolicyTransparencyTestActivity.EXTRA_SETTINGS_INTENT_ACTION, 84 settingsIntentActions[i]); 85 POLICIES[i] = Pair.create(intent, policyLabels[i]); 86 } 87 } 88 89 private static final ArrayList<String> ALSO_VALID_FOR_PO = new ArrayList<String>(); 90 static { 91 ALSO_VALID_FOR_PO.add( 92 PolicyTransparencyTestActivity.TEST_CHECK_PERMITTED_ACCESSIBILITY_SERVICE); 93 ALSO_VALID_FOR_PO.add(PolicyTransparencyTestActivity.TEST_CHECK_PERMITTED_INPUT_METHOD); 94 } 95 96 private boolean mIsDeviceOwner; 97 98 @Override onCreate(Bundle savedInstanceState)99 protected void onCreate(Bundle savedInstanceState) { 100 super.onCreate(savedInstanceState); 101 setContentView(R.layout.policy_transparency_test_list); 102 setInfoResources(R.string.device_profile_owner_policy_transparency_test, 103 R.string.device_profile_owner_policy_transparency_test_info, 0); 104 setPassFailButtonClickListeners(); 105 setSupportMsgButtonClickListeners(); 106 107 mIsDeviceOwner = getIntent().getBooleanExtra(EXTRA_IS_DEVICE_OWNER, false); 108 109 final ArrayTestListAdapter adapter = new ArrayTestListAdapter(this); 110 addTestsToAdapter(adapter); 111 adapter.registerDataSetObserver(new DataSetObserver() { 112 @Override 113 public void onChanged() { 114 updatePassButton(); 115 } 116 }); 117 118 setTestListAdapter(adapter); 119 } 120 addTestsToAdapter(final ArrayTestListAdapter adapter)121 private void addTestsToAdapter(final ArrayTestListAdapter adapter) { 122 for (String restriction : UserRestrictions.getUserRestrictions()) { 123 final Intent intent = UserRestrictions.getUserRestrictionTestIntent(this, restriction); 124 if (!mIsDeviceOwner && !UserRestrictions.isValidForPO(restriction)) { 125 continue; 126 } 127 final String title = UserRestrictions.getRestrictionLabel(this, restriction); 128 String testId = (mIsDeviceOwner ? "DO_" : "PO_") + title; 129 intent.putExtra(PolicyTransparencyTestActivity.EXTRA_TEST_ID, testId); 130 adapter.add(TestListItem.newTest(title, testId, intent, null)); 131 } 132 133 for (Pair<Intent, Integer> policy : POLICIES) { 134 final Intent intent = policy.first; 135 String test = intent.getStringExtra(PolicyTransparencyTestActivity.EXTRA_TEST); 136 if (!mIsDeviceOwner && !ALSO_VALID_FOR_PO.contains(test)) { 137 continue; 138 } 139 final String title = getString(policy.second); 140 String testId = (mIsDeviceOwner ? "DO_" : "PO_") + title; 141 intent.putExtra(PolicyTransparencyTestActivity.EXTRA_TITLE, title); 142 intent.putExtra(PolicyTransparencyTestActivity.EXTRA_TEST_ID, testId); 143 adapter.add(TestListItem.newTest(title, testId, intent, null)); 144 } 145 } 146 setSupportMsgButtonClickListeners()147 private void setSupportMsgButtonClickListeners() { 148 findViewById(R.id.short_msg_button).setOnClickListener(this); 149 findViewById(R.id.long_msg_button).setOnClickListener(this); 150 } 151 152 @Override onClick(View view)153 public void onClick(View view) { 154 if (view.getId() == R.id.short_msg_button) { 155 final Intent intent = new Intent(SetSupportMessageActivity.ACTION_SET_SUPPORT_MSG); 156 intent.putExtra(SetSupportMessageActivity.EXTRA_SUPPORT_MSG_TYPE, 157 SetSupportMessageActivity.TYPE_SHORT_MSG); 158 startActivity(intent); 159 } else if (view.getId() == R.id.long_msg_button) { 160 final Intent intent = new Intent(SetSupportMessageActivity.ACTION_SET_SUPPORT_MSG); 161 intent.putExtra(SetSupportMessageActivity.EXTRA_SUPPORT_MSG_TYPE, 162 SetSupportMessageActivity.TYPE_LONG_MSG); 163 startActivity(intent); 164 } 165 } 166 167 @Override getTestId()168 public String getTestId() { 169 return getIntent().getStringExtra(PolicyTransparencyTestActivity.EXTRA_TEST_ID); 170 } 171 172 @Override finish()173 public void finish() { 174 super.finish(); 175 final Intent intent = new Intent(CommandReceiverActivity.ACTION_EXECUTE_COMMAND); 176 intent.putExtra(CommandReceiverActivity.EXTRA_COMMAND, mIsDeviceOwner 177 ? CommandReceiverActivity.COMMAND_DEVICE_OWNER_CLEAR_POLICIES 178 : CommandReceiverActivity.COMMAND_PROFILE_OWNER_CLEAR_POLICIES); 179 startActivity(intent); 180 } 181 }