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 package com.android.settings.testutils; 17 18 import static org.mockito.ArgumentMatchers.anyString; 19 import static org.mockito.Mockito.mock; 20 import static org.mockito.Mockito.when; 21 22 import android.content.Context; 23 24 import com.android.settings.accounts.AccountFeatureProvider; 25 import com.android.settings.applications.ApplicationFeatureProvider; 26 import com.android.settings.aware.AwareFeatureProvider; 27 import com.android.settings.biometrics.face.FaceFeatureProvider; 28 import com.android.settings.bluetooth.BluetoothFeatureProvider; 29 import com.android.settings.dashboard.DashboardFeatureProvider; 30 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; 31 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; 32 import com.android.settings.fuelgauge.BatteryStatusFeatureProvider; 33 import com.android.settings.fuelgauge.PowerUsageFeatureProvider; 34 import com.android.settings.gestures.AssistGestureFeatureProvider; 35 import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider; 36 import com.android.settings.localepicker.LocaleFeatureProvider; 37 import com.android.settings.overlay.DockUpdaterFeatureProvider; 38 import com.android.settings.overlay.FeatureFactory; 39 import com.android.settings.overlay.SupportFeatureProvider; 40 import com.android.settings.overlay.SurveyFeatureProvider; 41 import com.android.settings.panel.PanelFeatureProvider; 42 import com.android.settings.search.SearchFeatureProvider; 43 import com.android.settings.security.SecurityFeatureProvider; 44 import com.android.settings.slices.SlicesFeatureProvider; 45 import com.android.settings.users.UserFeatureProvider; 46 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; 47 48 import org.mockito.Answers; 49 50 /** 51 * Test util to provide fake FeatureFactory. To use this factory, call {@code setupForTest} in 52 * {@code @Before} method of the test class. 53 */ 54 public class FakeFeatureFactory extends FeatureFactory { 55 56 public final SupportFeatureProvider supportFeatureProvider; 57 public final MetricsFeatureProvider metricsFeatureProvider; 58 public final BatteryStatusFeatureProvider batteryStatusFeatureProvider; 59 public final PowerUsageFeatureProvider powerUsageFeatureProvider; 60 public final DashboardFeatureProvider dashboardFeatureProvider; 61 public final DockUpdaterFeatureProvider dockUpdaterFeatureProvider; 62 public final LocaleFeatureProvider localeFeatureProvider; 63 public final ApplicationFeatureProvider applicationFeatureProvider; 64 public final EnterprisePrivacyFeatureProvider enterprisePrivacyFeatureProvider; 65 public final SurveyFeatureProvider surveyFeatureProvider; 66 public final SecurityFeatureProvider securityFeatureProvider; 67 public final SuggestionFeatureProvider suggestionsFeatureProvider; 68 public final UserFeatureProvider userFeatureProvider; 69 public final AssistGestureFeatureProvider assistGestureFeatureProvider; 70 public final AccountFeatureProvider mAccountFeatureProvider; 71 public final BluetoothFeatureProvider mBluetoothFeatureProvider; 72 public final AwareFeatureProvider mAwareFeatureProvider; 73 public final FaceFeatureProvider mFaceFeatureProvider; 74 75 public PanelFeatureProvider panelFeatureProvider; 76 public SlicesFeatureProvider slicesFeatureProvider; 77 public SearchFeatureProvider searchFeatureProvider; 78 public ContextualCardFeatureProvider mContextualCardFeatureProvider; 79 80 /** 81 * Call this in {@code @Before} method of the test class to use fake factory. 82 */ setupForTest()83 public static FakeFeatureFactory setupForTest() { 84 final Context context = mock(Context.class, Answers.RETURNS_DEEP_STUBS); 85 sFactory = null; 86 when(context.getString(com.android.settings.R.string.config_featureFactory)) 87 .thenReturn(FakeFeatureFactory.class.getName()); 88 try { 89 Class c = FakeFeatureFactory.class; 90 when(context.getClassLoader().loadClass(anyString())).thenReturn(c); 91 } catch (ClassNotFoundException e) { 92 // Ignore. 93 } 94 return (FakeFeatureFactory) FakeFeatureFactory.getFactory(context); 95 } 96 97 /** 98 * Used by reflection. Do not call directly. 99 */ FakeFeatureFactory()100 public FakeFeatureFactory() { 101 supportFeatureProvider = mock(SupportFeatureProvider.class); 102 metricsFeatureProvider = mock(MetricsFeatureProvider.class); 103 batteryStatusFeatureProvider = mock(BatteryStatusFeatureProvider.class); 104 powerUsageFeatureProvider = mock(PowerUsageFeatureProvider.class); 105 dashboardFeatureProvider = mock(DashboardFeatureProvider.class); 106 dockUpdaterFeatureProvider = mock(DockUpdaterFeatureProvider.class); 107 localeFeatureProvider = mock(LocaleFeatureProvider.class); 108 applicationFeatureProvider = mock(ApplicationFeatureProvider.class); 109 enterprisePrivacyFeatureProvider = mock(EnterprisePrivacyFeatureProvider.class); 110 searchFeatureProvider = mock(SearchFeatureProvider.class); 111 surveyFeatureProvider = mock(SurveyFeatureProvider.class); 112 securityFeatureProvider = mock(SecurityFeatureProvider.class); 113 suggestionsFeatureProvider = mock(SuggestionFeatureProvider.class); 114 userFeatureProvider = mock(UserFeatureProvider.class); 115 assistGestureFeatureProvider = mock(AssistGestureFeatureProvider.class); 116 slicesFeatureProvider = mock(SlicesFeatureProvider.class); 117 mAccountFeatureProvider = mock(AccountFeatureProvider.class); 118 mContextualCardFeatureProvider = mock(ContextualCardFeatureProvider.class); 119 panelFeatureProvider = mock(PanelFeatureProvider.class); 120 mBluetoothFeatureProvider = mock(BluetoothFeatureProvider.class); 121 mAwareFeatureProvider = mock(AwareFeatureProvider.class); 122 mFaceFeatureProvider = mock(FaceFeatureProvider.class); 123 } 124 125 @Override getSuggestionFeatureProvider(Context context)126 public SuggestionFeatureProvider getSuggestionFeatureProvider(Context context) { 127 return suggestionsFeatureProvider; 128 } 129 130 @Override getSupportFeatureProvider(Context context)131 public SupportFeatureProvider getSupportFeatureProvider(Context context) { 132 return supportFeatureProvider; 133 } 134 135 @Override getMetricsFeatureProvider()136 public MetricsFeatureProvider getMetricsFeatureProvider() { 137 return metricsFeatureProvider; 138 } 139 140 @Override getBatteryStatusFeatureProvider(Context context)141 public BatteryStatusFeatureProvider getBatteryStatusFeatureProvider(Context context) { 142 return batteryStatusFeatureProvider; 143 } 144 145 @Override getPowerUsageFeatureProvider(Context context)146 public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) { 147 return powerUsageFeatureProvider; 148 } 149 150 @Override getDashboardFeatureProvider(Context context)151 public DashboardFeatureProvider getDashboardFeatureProvider(Context context) { 152 return dashboardFeatureProvider; 153 } 154 155 @Override getDockUpdaterFeatureProvider()156 public DockUpdaterFeatureProvider getDockUpdaterFeatureProvider() { 157 return dockUpdaterFeatureProvider; 158 } 159 160 @Override getApplicationFeatureProvider(Context context)161 public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) { 162 return applicationFeatureProvider; 163 } 164 165 @Override getLocaleFeatureProvider()166 public LocaleFeatureProvider getLocaleFeatureProvider() { 167 return localeFeatureProvider; 168 } 169 170 @Override getEnterprisePrivacyFeatureProvider(Context context)171 public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) { 172 return enterprisePrivacyFeatureProvider; 173 } 174 175 @Override getSearchFeatureProvider()176 public SearchFeatureProvider getSearchFeatureProvider() { 177 return searchFeatureProvider; 178 } 179 180 @Override getSurveyFeatureProvider(Context context)181 public SurveyFeatureProvider getSurveyFeatureProvider(Context context) { 182 return surveyFeatureProvider; 183 } 184 185 @Override getSecurityFeatureProvider()186 public SecurityFeatureProvider getSecurityFeatureProvider() { 187 return securityFeatureProvider; 188 } 189 190 @Override getUserFeatureProvider(Context context)191 public UserFeatureProvider getUserFeatureProvider(Context context) { 192 return userFeatureProvider; 193 } 194 195 @Override getAssistGestureFeatureProvider()196 public AssistGestureFeatureProvider getAssistGestureFeatureProvider() { 197 return assistGestureFeatureProvider; 198 } 199 200 @Override getSlicesFeatureProvider()201 public SlicesFeatureProvider getSlicesFeatureProvider() { 202 return slicesFeatureProvider; 203 } 204 205 @Override getAccountFeatureProvider()206 public AccountFeatureProvider getAccountFeatureProvider() { 207 return mAccountFeatureProvider; 208 } 209 210 @Override getPanelFeatureProvider()211 public PanelFeatureProvider getPanelFeatureProvider() { 212 return panelFeatureProvider; 213 } 214 215 @Override getContextualCardFeatureProvider(Context context)216 public ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context) { 217 return mContextualCardFeatureProvider; 218 } 219 220 @Override getBluetoothFeatureProvider(Context context)221 public BluetoothFeatureProvider getBluetoothFeatureProvider(Context context) { 222 return mBluetoothFeatureProvider; 223 } 224 225 @Override getAwareFeatureProvider()226 public AwareFeatureProvider getAwareFeatureProvider() { 227 return mAwareFeatureProvider; 228 } 229 230 @Override getFaceFeatureProvider()231 public FaceFeatureProvider getFaceFeatureProvider() { 232 return mFaceFeatureProvider; 233 } 234 } 235