• 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.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