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