1/* 2 * Copyright (C) 2018 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.settings.enterprise; 18 19import static org.junit.Assert.assertEquals; 20import static org.junit.Assert.assertNotNull; 21import static org.junit.Assert.assertNull; 22import static org.junit.Assert.assertTrue; 23 24import android.app.Activity; 25import android.app.admin.DevicePolicyManager; 26import android.content.ComponentName; 27import android.content.Intent; 28import android.content.pm.UserInfo; 29import android.os.Process; 30import android.os.UserManager; 31import android.view.ViewGroup; 32import android.widget.FrameLayout; 33import android.widget.TextView; 34 35import com.android.settings.DeviceAdminAdd; 36import com.android.settings.R; 37import com.android.settings.Settings; 38import com.android.settings.testutils.CustomActivity; 39import com.android.settings.testutils.SettingsRobolectricTestRunner; 40import com.android.settings.testutils.shadow.ShadowActivity; 41import com.android.settings.testutils.shadow.ShadowDevicePolicyManager; 42import com.android.settings.testutils.shadow.ShadowProcess; 43import com.android.settings.testutils.shadow.ShadowUserManager; 44import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 45 46import org.junit.Before; 47import org.junit.Test; 48import org.junit.runner.RunWith; 49import org.robolectric.Robolectric; 50import org.robolectric.RuntimeEnvironment; 51import org.robolectric.Shadows; 52import org.robolectric.annotation.Config; 53import org.robolectric.shadow.api.Shadow; 54 55@RunWith(SettingsRobolectricTestRunner.class) 56@Config(shadows = { 57 ShadowDevicePolicyManager.class, 58 ShadowUserManager.class, 59 ShadowActivity.class, 60 ShadowProcess.class 61}) 62public class ActionDisabledByAdminDialogHelperTest { 63 private ActionDisabledByAdminDialogHelper mHelper; 64 private Activity mActivity; 65 private org.robolectric.shadows.ShadowActivity mActivityShadow; 66 67 @Before 68 public void setUp() { 69 mActivity = Robolectric.buildActivity(CustomActivity.class).get(); 70 mActivityShadow = Shadow.extract(mActivity); 71 mHelper = new ActionDisabledByAdminDialogHelper(mActivity); 72 } 73 74 @Test 75 public void testShowAdminPoliciesWithComponent() { 76 final int userId = 123; 77 final ComponentName component = new ComponentName("some.package.name", 78 "some.package.name.SomeClass"); 79 final EnforcedAdmin admin = new EnforcedAdmin(component, userId); 80 81 mHelper.showAdminPolicies(admin, mActivity); 82 83 final Intent intent = mActivityShadow.getNextStartedActivity(); 84 assertTrue( 85 intent.getBooleanExtra(DeviceAdminAdd.EXTRA_CALLED_FROM_SUPPORT_DIALOG, false)); 86 assertEquals(component, 87 intent.getParcelableExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN)); 88 } 89 90 @Test 91 public void testShowAdminPoliciesWithoutComponent() { 92 final int userId = 123; 93 final EnforcedAdmin admin = new EnforcedAdmin(null, userId); 94 mHelper.showAdminPolicies(admin, mActivity); 95 final Intent intent = mActivityShadow.getNextStartedActivity(); 96 assertEquals(intent.getComponent(), new ComponentName(mActivity, 97 Settings.DeviceAdminSettingsActivity.class.getName())); 98 } 99 100 @Test 101 public void testSetAdminSupportTitle() { 102 final ViewGroup view = new FrameLayout(mActivity); 103 final TextView textView = new TextView(mActivity); 104 textView.setId(R.id.admin_support_dialog_title); 105 view.addView(textView); 106 107 mHelper.setAdminSupportTitle(view, UserManager.DISALLOW_ADJUST_VOLUME); 108 assertEquals(Shadows.shadowOf(textView).innerText(), 109 mActivity.getString(R.string.disabled_by_policy_title_adjust_volume)); 110 111 mHelper.setAdminSupportTitle(view, UserManager.DISALLOW_OUTGOING_CALLS); 112 assertEquals(Shadows.shadowOf(textView).innerText(), 113 mActivity.getString(R.string.disabled_by_policy_title_outgoing_calls)); 114 115 mHelper.setAdminSupportTitle(view, UserManager.DISALLOW_SMS); 116 assertEquals(Shadows.shadowOf(textView).innerText(), 117 mActivity.getString(R.string.disabled_by_policy_title_sms)); 118 119 mHelper.setAdminSupportTitle(view, DevicePolicyManager.POLICY_DISABLE_CAMERA); 120 assertEquals(Shadows.shadowOf(textView).innerText(), 121 mActivity.getString(R.string.disabled_by_policy_title_camera)); 122 123 mHelper.setAdminSupportTitle(view, DevicePolicyManager.POLICY_DISABLE_SCREEN_CAPTURE); 124 assertEquals(Shadows.shadowOf(textView).innerText(), 125 mActivity.getString(R.string.disabled_by_policy_title_screen_capture)); 126 127 mHelper.setAdminSupportTitle(view, DevicePolicyManager.POLICY_MANDATORY_BACKUPS); 128 assertEquals(Shadows.shadowOf(textView).innerText(), 129 mActivity.getString(R.string.disabled_by_policy_title_turn_off_backups)); 130 131 mHelper.setAdminSupportTitle(view, DevicePolicyManager.POLICY_SUSPEND_PACKAGES); 132 assertEquals(Shadows.shadowOf(textView).innerText(), 133 mActivity.getString(R.string.disabled_by_policy_title_suspend_packages)); 134 135 mHelper.setAdminSupportTitle(view, "another restriction"); 136 assertEquals(Shadows.shadowOf(textView).innerText(), 137 mActivity.getString(R.string.disabled_by_policy_title)); 138 139 mHelper.setAdminSupportTitle(view, null); 140 assertEquals(Shadows.shadowOf(textView).innerText(), 141 mActivity.getString(R.string.disabled_by_policy_title)); 142 } 143 144 @Test 145 public void testSetAdminSupportDetails() { 146 final ShadowDevicePolicyManager dpmShadow = ShadowDevicePolicyManager.getShadow(); 147 final UserManager userManager = RuntimeEnvironment.application.getSystemService( 148 UserManager.class); 149 final ShadowUserManager userManagerShadow = Shadow.extract(userManager); 150 final ViewGroup view = new FrameLayout(mActivity); 151 final ComponentName component = new ComponentName("some.package.name", 152 "some.package.name.SomeClass"); 153 final EnforcedAdmin admin = new EnforcedAdmin(component, 123); 154 final TextView textView = new TextView(mActivity); 155 156 textView.setId(R.id.admin_support_msg); 157 view.addView(textView); 158 dpmShadow.setShortSupportMessageForUser(component, 123, "some message"); 159 dpmShadow.setIsAdminActiveAsUser(true); 160 userManagerShadow.addProfile(new UserInfo(123, null, 0)); 161 ShadowProcess.setMyUid(Process.SYSTEM_UID); 162 163 mHelper.setAdminSupportDetails(mActivity, view, admin); 164 assertNotNull(admin.component); 165 assertEquals("some message", Shadows.shadowOf(textView).innerText()); 166 } 167 168 @Test 169 public void testSetAdminSupportDetailsNotAdmin() { 170 final ShadowDevicePolicyManager dpmShadow = ShadowDevicePolicyManager.getShadow(); 171 final UserManager userManager = RuntimeEnvironment.application.getSystemService( 172 UserManager.class); 173 final ShadowUserManager userManagerShadow = Shadow.extract(userManager); 174 final ComponentName component = new ComponentName("some.package.name", 175 "some.package.name.SomeClass"); 176 final EnforcedAdmin admin = new EnforcedAdmin(component, 123); 177 178 dpmShadow.setShortSupportMessageForUser(component, 123, "some message"); 179 dpmShadow.setIsAdminActiveAsUser(false); 180 userManagerShadow.addProfile(new UserInfo(123, null, 0)); 181 182 mHelper.setAdminSupportDetails(mActivity, null, admin); 183 assertNull(admin.component); 184 } 185} 186 187