• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }