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.settings.privacy; 18 19 import static android.Manifest.permission_group.CALENDAR; 20 import static android.Manifest.permission_group.CAMERA; 21 import static android.Manifest.permission_group.CONTACTS; 22 import static android.Manifest.permission_group.LOCATION; 23 import static android.Manifest.permission_group.MICROPHONE; 24 import static android.Manifest.permission_group.PHONE; 25 import static android.Manifest.permission_group.SMS; 26 27 import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE; 28 import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; 29 30 import static com.google.common.truth.Truth.assertThat; 31 32 import static org.mockito.ArgumentMatchers.any; 33 import static org.mockito.Mockito.never; 34 import static org.mockito.Mockito.spy; 35 import static org.mockito.Mockito.times; 36 import static org.mockito.Mockito.verify; 37 import static org.mockito.Mockito.when; 38 39 import android.content.Context; 40 import android.content.pm.UserInfo; 41 import android.os.UserManager; 42 import android.permission.RuntimePermissionUsageInfo; 43 import android.provider.DeviceConfig; 44 import android.view.accessibility.AccessibilityManager; 45 46 import androidx.preference.PreferenceScreen; 47 48 import com.android.internal.widget.LockPatternUtils; 49 import com.android.settings.Utils; 50 import com.android.settings.testutils.FakeFeatureFactory; 51 import com.android.settings.testutils.shadow.ShadowDeviceConfig; 52 import com.android.settings.testutils.shadow.ShadowPermissionControllerManager; 53 import com.android.settings.testutils.shadow.ShadowUserManager; 54 import com.android.settingslib.widget.BarChartInfo; 55 import com.android.settingslib.widget.BarChartPreference; 56 import com.android.settingslib.widget.BarViewInfo; 57 58 import org.junit.After; 59 import org.junit.Before; 60 import org.junit.Test; 61 import org.junit.runner.RunWith; 62 import org.mockito.Mock; 63 import org.mockito.MockitoAnnotations; 64 import org.robolectric.RobolectricTestRunner; 65 import org.robolectric.RuntimeEnvironment; 66 import org.robolectric.annotation.Config; 67 import org.robolectric.shadow.api.Shadow; 68 import org.robolectric.shadows.ShadowAccessibilityManager; 69 import org.robolectric.shadows.androidx.fragment.FragmentController; 70 71 import java.util.ArrayList; 72 import java.util.List; 73 74 @RunWith(RobolectricTestRunner.class) 75 @Config(shadows = {ShadowDeviceConfig.class, ShadowUserManager.class, 76 ShadowPermissionControllerManager.class}) 77 public class PermissionBarChartPreferenceControllerTest { 78 79 @Mock 80 private PreferenceScreen mScreen; 81 @Mock 82 private LockPatternUtils mLockPatternUtils; 83 84 private PermissionBarChartPreferenceController mController; 85 private BarChartPreference mPreference; 86 private PrivacyDashboardFragment mFragment; 87 88 @Before setUp()89 public void setUp() { 90 MockitoAnnotations.initMocks(this); 91 final Context context = RuntimeEnvironment.application; 92 final UserManager userManager = context.getSystemService(UserManager.class); 93 final ShadowUserManager shadowUserManager = Shadow.extract(userManager); 94 final ShadowAccessibilityManager accessibilityManager = Shadow.extract( 95 AccessibilityManager.getInstance(context)); 96 accessibilityManager.setEnabledAccessibilityServiceList(new ArrayList<>()); 97 shadowUserManager.addProfile(new UserInfo(123, null, 0)); 98 when(FakeFeatureFactory.setupForTest().securityFeatureProvider.getLockPatternUtils( 99 any(Context.class))).thenReturn(mLockPatternUtils); 100 101 mController = spy(new PermissionBarChartPreferenceController(context, "test_key")); 102 mFragment = spy(FragmentController.of(new PrivacyDashboardFragment()) 103 .create().start().get()); 104 mController.setFragment(mFragment); 105 mPreference = spy(new BarChartPreference(context)); 106 when(mScreen.findPreference(mController.getPreferenceKey())) 107 .thenReturn((BarChartPreference) mPreference); 108 } 109 110 @After tearDown()111 public void tearDown() { 112 ShadowDeviceConfig.reset(); 113 } 114 115 @Test getAvailabilityStatus_permissionHubNotSet_shouldReturnUnsupported()116 public void getAvailabilityStatus_permissionHubNotSet_shouldReturnUnsupported() { 117 // We have not yet set the property to show the Permissions Hub. 118 assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); 119 } 120 } 121