• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 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.deviceandprofileowner;
18 
19 import static android.os.UserManager.DISALLOW_CONTENT_SUGGESTIONS;
20 
21 import static com.android.cts.deviceandprofileowner.ContentSuggestionsActivity.CONTENT_SUGGESTIONS_ACTIVITY_NAME;
22 import static com.android.cts.deviceandprofileowner.ContentSuggestionsActivity.CONTENT_SUGGESTIONS_PACKAGE_NAME;
23 
24 import android.content.Intent;
25 
26 public class ContentSuggestionsRestrictionsTest extends BaseDeviceAdminTest {
27 
28     private static final int MAX_TIME_TEMPORARY_SERVICE_CAN_BE_SET= 12000;
29 
30     private static final int SLEEP_TIME_WAITING_FOR_SERVICE_CONNECTION_MS = 100;
31 
32     private static final String SERVICE_NAME =
33             "com.android.cts.devicepolicy.contentsuggestions/.SimpleContentSuggestionsService";
34 
35     int mUserId;
36 
37     @Override
setUp()38     protected void setUp() throws Exception {
39         super.setUp();
40 
41         mUserId = getInstrumentation().getContext().getUserId();
42     }
43 
44     @Override
tearDown()45     protected void tearDown() throws Exception {
46         try {
47             disableService();
48         } finally {
49             mDevicePolicyManager.clearUserRestriction(ADMIN_RECEIVER_COMPONENT,
50                     DISALLOW_CONTENT_SUGGESTIONS);
51         }
52         super.tearDown();
53     }
54 
testDisallowContentSuggestions_allowed()55     public void testDisallowContentSuggestions_allowed() throws Exception {
56         enableService();
57 
58         final boolean enabledBefore = launchActivityAndGetEnabled();
59         assertTrue(enabledBefore);
60 
61         mDevicePolicyManager.addUserRestriction(
62                 ADMIN_RECEIVER_COMPONENT, DISALLOW_CONTENT_SUGGESTIONS);
63 
64         // Must try a couple times because it will be disabled asynchronously.
65         for (int i = 1; i <= 5; i++) {
66             final boolean disabledAfter = !launchActivityAndGetEnabled();
67             if (disabledAfter) {
68                 return;
69             }
70             Thread.sleep(100);
71         }
72         fail("Not disabled after 2.5s");
73     }
74 
launchActivityAndGetEnabled()75     private boolean launchActivityAndGetEnabled() throws Exception {
76         final Intent launchIntent = new Intent();
77         launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
78         launchIntent.setClassName(
79                 CONTENT_SUGGESTIONS_PACKAGE_NAME, CONTENT_SUGGESTIONS_ACTIVITY_NAME);
80         final ContentSuggestionsActivity activity = launchActivity(
81                 "com.android.cts.deviceandprofileowner", ContentSuggestionsActivity.class, null);
82         return activity.isContentSuggestionsEnabled();
83     }
84 
enableService()85     private void enableService() throws Exception {
86         runShellCommand("cmd content_suggestions set temporary-service %d %s %d", mUserId,
87                 SERVICE_NAME, MAX_TIME_TEMPORARY_SERVICE_CAN_BE_SET);
88         // TODO: ideally it should wait until the service's onConnected() is called, but that
89         // would be too complicated
90         Thread.sleep(SLEEP_TIME_WAITING_FOR_SERVICE_CONNECTION_MS);
91     }
92 
disableService()93     private void disableService() {
94         runShellCommand("cmd content_suggestions set temporary-service %d", mUserId);
95     }
96 }
97