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 android.content.Context; 19 20 import com.android.settings.applications.ApplicationFeatureProvider; 21 import com.android.settings.core.instrumentation.MetricsFeatureProvider; 22 import com.android.settings.dashboard.DashboardFeatureProvider; 23 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; 24 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; 25 import com.android.settings.fuelgauge.PowerUsageFeatureProvider; 26 import com.android.settings.gestures.AssistGestureFeatureProvider; 27 import com.android.settings.localepicker.LocaleFeatureProvider; 28 import com.android.settings.overlay.FeatureFactory; 29 import com.android.settings.overlay.SupportFeatureProvider; 30 import com.android.settings.security.SecurityFeatureProvider; 31 import com.android.settings.search2.SearchFeatureProvider; 32 import com.android.settings.overlay.SurveyFeatureProvider; 33 import com.android.settings.users.UserFeatureProvider; 34 35 import static org.mockito.Matchers.anyString; 36 import static org.mockito.Mockito.mock; 37 import static org.mockito.Mockito.when; 38 39 /** 40 * Test util to provide fake FeatureFactory. To use this factory, call {@code setupForTest} in 41 * {@code @Before} method of the test class. 42 */ 43 public class FakeFeatureFactory extends FeatureFactory { 44 45 public final SupportFeatureProvider supportFeatureProvider; 46 public final MetricsFeatureProvider metricsFeatureProvider; 47 public final PowerUsageFeatureProvider powerUsageFeatureProvider; 48 public final DashboardFeatureProvider dashboardFeatureProvider; 49 public final LocaleFeatureProvider localeFeatureProvider; 50 public final ApplicationFeatureProvider applicationFeatureProvider; 51 public final EnterprisePrivacyFeatureProvider enterprisePrivacyFeatureProvider; 52 public final SearchFeatureProvider searchFeatureProvider; 53 public final SurveyFeatureProvider surveyFeatureProvider; 54 public final SecurityFeatureProvider securityFeatureProvider; 55 public final SuggestionFeatureProvider suggestionsFeatureProvider; 56 public final UserFeatureProvider userFeatureProvider; 57 public final AssistGestureFeatureProvider assistGestureFeatureProvider; 58 59 /** 60 * Call this in {@code @Before} method of the test class to use fake factory. 61 * 62 * @param context The context must be a deep mock. 63 */ setupForTest(Context context)64 public static void setupForTest(Context context) { 65 sFactory = null; 66 when(context.getString(com.android.settings.R.string.config_featureFactory)) 67 .thenReturn(FakeFeatureFactory.class.getName()); 68 try { 69 Class c = FakeFeatureFactory.class; 70 when(context.getClassLoader().loadClass(anyString())).thenReturn(c); 71 } catch (ClassNotFoundException e) { 72 // Ignore. 73 } 74 } 75 76 /** 77 * Used by reflection. Do not call directly. 78 */ FakeFeatureFactory()79 public FakeFeatureFactory() { 80 supportFeatureProvider = mock(SupportFeatureProvider.class); 81 metricsFeatureProvider = mock(MetricsFeatureProvider.class); 82 powerUsageFeatureProvider = mock(PowerUsageFeatureProvider.class); 83 dashboardFeatureProvider = mock(DashboardFeatureProvider.class); 84 localeFeatureProvider = mock(LocaleFeatureProvider.class); 85 applicationFeatureProvider = mock(ApplicationFeatureProvider.class); 86 enterprisePrivacyFeatureProvider = mock(EnterprisePrivacyFeatureProvider.class); 87 searchFeatureProvider = mock(SearchFeatureProvider.class); 88 surveyFeatureProvider = mock(SurveyFeatureProvider.class); 89 securityFeatureProvider = mock(SecurityFeatureProvider.class); 90 suggestionsFeatureProvider = mock(SuggestionFeatureProvider.class); 91 userFeatureProvider = mock(UserFeatureProvider.class); 92 assistGestureFeatureProvider = mock(AssistGestureFeatureProvider.class); 93 } 94 95 @Override getSuggestionFeatureProvider(Context context)96 public SuggestionFeatureProvider getSuggestionFeatureProvider(Context context) { 97 return suggestionsFeatureProvider; 98 } 99 100 @Override getSupportFeatureProvider(Context context)101 public SupportFeatureProvider getSupportFeatureProvider(Context context) { 102 return supportFeatureProvider; 103 } 104 105 @Override getMetricsFeatureProvider()106 public MetricsFeatureProvider getMetricsFeatureProvider() { 107 return metricsFeatureProvider; 108 } 109 110 @Override getPowerUsageFeatureProvider(Context context)111 public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) { 112 return powerUsageFeatureProvider; 113 } 114 115 @Override getDashboardFeatureProvider(Context context)116 public DashboardFeatureProvider getDashboardFeatureProvider(Context context) { 117 return dashboardFeatureProvider; 118 } 119 120 @Override getApplicationFeatureProvider(Context context)121 public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) { 122 return applicationFeatureProvider; 123 } 124 125 @Override getLocaleFeatureProvider()126 public LocaleFeatureProvider getLocaleFeatureProvider() { 127 return localeFeatureProvider; 128 } 129 130 @Override getEnterprisePrivacyFeatureProvider(Context context)131 public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) { 132 return enterprisePrivacyFeatureProvider; 133 } 134 135 @Override getSearchFeatureProvider()136 public SearchFeatureProvider getSearchFeatureProvider() { 137 return searchFeatureProvider; 138 } 139 140 @Override getSurveyFeatureProvider(Context context)141 public SurveyFeatureProvider getSurveyFeatureProvider(Context context) { 142 return surveyFeatureProvider; 143 } 144 145 @Override getSecurityFeatureProvider()146 public SecurityFeatureProvider getSecurityFeatureProvider() { 147 return securityFeatureProvider; 148 } 149 150 @Override getUserFeatureProvider(Context context)151 public UserFeatureProvider getUserFeatureProvider(Context context) { 152 return userFeatureProvider; 153 } 154 155 @Override getAssistGestureFeatureProvider()156 public AssistGestureFeatureProvider getAssistGestureFeatureProvider() { 157 return assistGestureFeatureProvider; 158 } 159 } 160