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 
17 package com.android.settings.overlay;
18 
19 import android.app.AppGlobals;
20 import android.app.admin.DevicePolicyManager;
21 import android.content.Context;
22 import android.net.ConnectivityManager;
23 import android.net.VpnManager;
24 import android.os.UserManager;
25 
26 import androidx.annotation.Keep;
27 
28 import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider;
29 import com.android.settings.accessibility.AccessibilityMetricsFeatureProviderImpl;
30 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
31 import com.android.settings.accessibility.AccessibilitySearchFeatureProviderImpl;
32 import com.android.settings.accounts.AccountFeatureProvider;
33 import com.android.settings.accounts.AccountFeatureProviderImpl;
34 import com.android.settings.applications.ApplicationFeatureProvider;
35 import com.android.settings.applications.ApplicationFeatureProviderImpl;
36 import com.android.settings.applications.GameSettingsFeatureProvider;
37 import com.android.settings.applications.GameSettingsFeatureProviderImpl;
38 import com.android.settings.applications.appinfo.ExtraAppInfoFeatureProvider;
39 import com.android.settings.applications.appinfo.ExtraAppInfoFeatureProviderImpl;
40 import com.android.settings.aware.AwareFeatureProvider;
41 import com.android.settings.aware.AwareFeatureProviderImpl;
42 import com.android.settings.biometrics.face.FaceFeatureProvider;
43 import com.android.settings.biometrics.face.FaceFeatureProviderImpl;
44 import com.android.settings.bluetooth.BluetoothFeatureProvider;
45 import com.android.settings.bluetooth.BluetoothFeatureProviderImpl;
46 import com.android.settings.connecteddevice.dock.DockUpdaterFeatureProviderImpl;
47 import com.android.settings.core.instrumentation.SettingsMetricsFeatureProvider;
48 import com.android.settings.dashboard.DashboardFeatureProvider;
49 import com.android.settings.dashboard.DashboardFeatureProviderImpl;
50 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
51 import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
52 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
53 import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl;
54 import com.android.settings.fuelgauge.BatterySettingsFeatureProvider;
55 import com.android.settings.fuelgauge.BatterySettingsFeatureProviderImpl;
56 import com.android.settings.fuelgauge.BatteryStatusFeatureProvider;
57 import com.android.settings.fuelgauge.BatteryStatusFeatureProviderImpl;
58 import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
59 import com.android.settings.fuelgauge.PowerUsageFeatureProviderImpl;
60 import com.android.settings.gestures.AssistGestureFeatureProvider;
61 import com.android.settings.gestures.AssistGestureFeatureProviderImpl;
62 import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider;
63 import com.android.settings.homepage.contextualcards.ContextualCardFeatureProviderImpl;
64 import com.android.settings.localepicker.LocaleFeatureProvider;
65 import com.android.settings.localepicker.LocaleFeatureProviderImpl;
66 import com.android.settings.panel.PanelFeatureProvider;
67 import com.android.settings.panel.PanelFeatureProviderImpl;
68 import com.android.settings.search.SearchFeatureProvider;
69 import com.android.settings.search.SearchFeatureProviderImpl;
70 import com.android.settings.security.SecurityFeatureProvider;
71 import com.android.settings.security.SecurityFeatureProviderImpl;
72 import com.android.settings.security.SecuritySettingsFeatureProvider;
73 import com.android.settings.security.SecuritySettingsFeatureProviderImpl;
74 import com.android.settings.slices.SlicesFeatureProvider;
75 import com.android.settings.slices.SlicesFeatureProviderImpl;
76 import com.android.settings.users.UserFeatureProvider;
77 import com.android.settings.users.UserFeatureProviderImpl;
78 import com.android.settings.wifi.WifiTrackerLibProvider;
79 import com.android.settings.wifi.WifiTrackerLibProviderImpl;
80 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
81 
82 /**
83  * {@link FeatureFactory} implementation for AOSP Settings.
84  */
85 @Keep
86 public class FeatureFactoryImpl extends FeatureFactory {
87 
88     private ApplicationFeatureProvider mApplicationFeatureProvider;
89     private MetricsFeatureProvider mMetricsFeatureProvider;
90     private DashboardFeatureProviderImpl mDashboardFeatureProvider;
91     private DockUpdaterFeatureProvider mDockUpdaterFeatureProvider;
92     private LocaleFeatureProvider mLocaleFeatureProvider;
93     private EnterprisePrivacyFeatureProvider mEnterprisePrivacyFeatureProvider;
94     private SearchFeatureProvider mSearchFeatureProvider;
95     private SecurityFeatureProvider mSecurityFeatureProvider;
96     private SuggestionFeatureProvider mSuggestionFeatureProvider;
97     private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
98     private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
99     private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
100     private AssistGestureFeatureProvider mAssistGestureFeatureProvider;
101     private UserFeatureProvider mUserFeatureProvider;
102     private SlicesFeatureProvider mSlicesFeatureProvider;
103     private AccountFeatureProvider mAccountFeatureProvider;
104     private PanelFeatureProvider mPanelFeatureProvider;
105     private ContextualCardFeatureProvider mContextualCardFeatureProvider;
106     private BluetoothFeatureProvider mBluetoothFeatureProvider;
107     private AwareFeatureProvider mAwareFeatureProvider;
108     private FaceFeatureProvider mFaceFeatureProvider;
109     private WifiTrackerLibProvider mWifiTrackerLibProvider;
110     private ExtraAppInfoFeatureProvider mExtraAppInfoFeatureProvider;
111     private SecuritySettingsFeatureProvider mSecuritySettingsFeatureProvider;
112     private GameSettingsFeatureProvider mGameSettingsFeatureProvider;
113     private AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider;
114     private AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
115 
116     @Override
getSupportFeatureProvider(Context context)117     public SupportFeatureProvider getSupportFeatureProvider(Context context) {
118         return null;
119     }
120 
121     @Override
getMetricsFeatureProvider()122     public MetricsFeatureProvider getMetricsFeatureProvider() {
123         if (mMetricsFeatureProvider == null) {
124             mMetricsFeatureProvider = new SettingsMetricsFeatureProvider();
125         }
126         return mMetricsFeatureProvider;
127     }
128 
129     @Override
getPowerUsageFeatureProvider(Context context)130     public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) {
131         if (mPowerUsageFeatureProvider == null) {
132             mPowerUsageFeatureProvider = new PowerUsageFeatureProviderImpl(
133                     context.getApplicationContext());
134         }
135         return mPowerUsageFeatureProvider;
136     }
137 
138     @Override
getBatteryStatusFeatureProvider(Context context)139     public BatteryStatusFeatureProvider getBatteryStatusFeatureProvider(Context context) {
140         if (mBatteryStatusFeatureProvider == null) {
141             mBatteryStatusFeatureProvider = new BatteryStatusFeatureProviderImpl(
142                     context.getApplicationContext());
143         }
144         return mBatteryStatusFeatureProvider;
145     }
146 
147     @Override
getBatterySettingsFeatureProvider(Context context)148     public BatterySettingsFeatureProvider getBatterySettingsFeatureProvider(Context context) {
149         if (mBatterySettingsFeatureProvider == null) {
150             mBatterySettingsFeatureProvider = new BatterySettingsFeatureProviderImpl(context);
151         }
152         return mBatterySettingsFeatureProvider;
153     }
154 
155     @Override
getDashboardFeatureProvider(Context context)156     public DashboardFeatureProvider getDashboardFeatureProvider(Context context) {
157         if (mDashboardFeatureProvider == null) {
158             mDashboardFeatureProvider = new DashboardFeatureProviderImpl(
159                     context.getApplicationContext());
160         }
161         return mDashboardFeatureProvider;
162     }
163 
164     @Override
getDockUpdaterFeatureProvider()165     public DockUpdaterFeatureProvider getDockUpdaterFeatureProvider() {
166         if (mDockUpdaterFeatureProvider == null) {
167             mDockUpdaterFeatureProvider = new DockUpdaterFeatureProviderImpl();
168         }
169         return mDockUpdaterFeatureProvider;
170     }
171 
172     @Override
getApplicationFeatureProvider(Context context)173     public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) {
174         if (mApplicationFeatureProvider == null) {
175             final Context appContext = context.getApplicationContext();
176             mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(appContext,
177                     appContext.getPackageManager(),
178                     AppGlobals.getPackageManager(),
179                     (DevicePolicyManager) appContext
180                             .getSystemService(Context.DEVICE_POLICY_SERVICE));
181         }
182         return mApplicationFeatureProvider;
183     }
184 
185     @Override
getLocaleFeatureProvider()186     public LocaleFeatureProvider getLocaleFeatureProvider() {
187         if (mLocaleFeatureProvider == null) {
188             mLocaleFeatureProvider = new LocaleFeatureProviderImpl();
189         }
190         return mLocaleFeatureProvider;
191     }
192 
193     @Override
getEnterprisePrivacyFeatureProvider(Context context)194     public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) {
195         if (mEnterprisePrivacyFeatureProvider == null) {
196             final Context appContext = context.getApplicationContext();
197             mEnterprisePrivacyFeatureProvider = new EnterprisePrivacyFeatureProviderImpl(appContext,
198                     (DevicePolicyManager) appContext.getSystemService(
199                             Context.DEVICE_POLICY_SERVICE),
200                     appContext.getPackageManager(),
201                     UserManager.get(appContext),
202                     appContext.getSystemService(ConnectivityManager.class),
203                     appContext.getSystemService(VpnManager.class),
204                     appContext.getResources());
205         }
206         return mEnterprisePrivacyFeatureProvider;
207     }
208 
209     @Override
getSearchFeatureProvider()210     public SearchFeatureProvider getSearchFeatureProvider() {
211         if (mSearchFeatureProvider == null) {
212             mSearchFeatureProvider = new SearchFeatureProviderImpl();
213         }
214         return mSearchFeatureProvider;
215     }
216 
217     @Override
getSurveyFeatureProvider(Context context)218     public SurveyFeatureProvider getSurveyFeatureProvider(Context context) {
219         return null;
220     }
221 
222     @Override
getSecurityFeatureProvider()223     public SecurityFeatureProvider getSecurityFeatureProvider() {
224         if (mSecurityFeatureProvider == null) {
225             mSecurityFeatureProvider = new SecurityFeatureProviderImpl();
226         }
227         return mSecurityFeatureProvider;
228     }
229 
230     @Override
getSuggestionFeatureProvider(Context context)231     public SuggestionFeatureProvider getSuggestionFeatureProvider(Context context) {
232         if (mSuggestionFeatureProvider == null) {
233             mSuggestionFeatureProvider = new SuggestionFeatureProviderImpl(
234                     context.getApplicationContext());
235         }
236         return mSuggestionFeatureProvider;
237     }
238 
239     @Override
getUserFeatureProvider(Context context)240     public UserFeatureProvider getUserFeatureProvider(Context context) {
241         if (mUserFeatureProvider == null) {
242             mUserFeatureProvider = new UserFeatureProviderImpl(context.getApplicationContext());
243         }
244         return mUserFeatureProvider;
245     }
246 
247     @Override
getAssistGestureFeatureProvider()248     public AssistGestureFeatureProvider getAssistGestureFeatureProvider() {
249         if (mAssistGestureFeatureProvider == null) {
250             mAssistGestureFeatureProvider = new AssistGestureFeatureProviderImpl();
251         }
252         return mAssistGestureFeatureProvider;
253     }
254 
255     @Override
getSlicesFeatureProvider()256     public SlicesFeatureProvider getSlicesFeatureProvider() {
257         if (mSlicesFeatureProvider == null) {
258             mSlicesFeatureProvider = new SlicesFeatureProviderImpl();
259         }
260         return mSlicesFeatureProvider;
261     }
262 
263     @Override
getAccountFeatureProvider()264     public AccountFeatureProvider getAccountFeatureProvider() {
265         if (mAccountFeatureProvider == null) {
266             mAccountFeatureProvider = new AccountFeatureProviderImpl();
267         }
268         return mAccountFeatureProvider;
269     }
270 
271     @Override
getPanelFeatureProvider()272     public PanelFeatureProvider getPanelFeatureProvider() {
273         if (mPanelFeatureProvider == null) {
274             mPanelFeatureProvider = new PanelFeatureProviderImpl();
275         }
276         return mPanelFeatureProvider;
277     }
278 
279     @Override
getContextualCardFeatureProvider(Context context)280     public ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context) {
281         if (mContextualCardFeatureProvider == null) {
282             mContextualCardFeatureProvider = new ContextualCardFeatureProviderImpl(
283                     context.getApplicationContext());
284         }
285         return mContextualCardFeatureProvider;
286     }
287 
288     @Override
getBluetoothFeatureProvider(Context context)289     public BluetoothFeatureProvider getBluetoothFeatureProvider(Context context) {
290         if (mBluetoothFeatureProvider == null) {
291             mBluetoothFeatureProvider = new BluetoothFeatureProviderImpl(
292                     context.getApplicationContext());
293         }
294         return mBluetoothFeatureProvider;
295     }
296 
297     @Override
getAwareFeatureProvider()298     public AwareFeatureProvider getAwareFeatureProvider() {
299         if (mAwareFeatureProvider == null) {
300             mAwareFeatureProvider = new AwareFeatureProviderImpl();
301         }
302         return mAwareFeatureProvider;
303     }
304 
305     @Override
getFaceFeatureProvider()306     public FaceFeatureProvider getFaceFeatureProvider() {
307         if (mFaceFeatureProvider == null) {
308             mFaceFeatureProvider = new FaceFeatureProviderImpl();
309         }
310         return mFaceFeatureProvider;
311     }
312 
313     @Override
getWifiTrackerLibProvider()314     public WifiTrackerLibProvider getWifiTrackerLibProvider() {
315         if (mWifiTrackerLibProvider == null) {
316             mWifiTrackerLibProvider = new WifiTrackerLibProviderImpl();
317         }
318         return mWifiTrackerLibProvider;
319     }
320 
321     @Override
getExtraAppInfoFeatureProvider()322     public ExtraAppInfoFeatureProvider getExtraAppInfoFeatureProvider() {
323         if (mExtraAppInfoFeatureProvider == null) {
324             mExtraAppInfoFeatureProvider = new ExtraAppInfoFeatureProviderImpl();
325         }
326         return mExtraAppInfoFeatureProvider;
327     }
328 
329     @Override
getSecuritySettingsFeatureProvider()330     public SecuritySettingsFeatureProvider getSecuritySettingsFeatureProvider() {
331         if (mSecuritySettingsFeatureProvider == null) {
332             mSecuritySettingsFeatureProvider = new SecuritySettingsFeatureProviderImpl();
333         }
334         return mSecuritySettingsFeatureProvider;
335     }
336 
337     @Override
getGameSettingsFeatureProvider()338     public GameSettingsFeatureProvider getGameSettingsFeatureProvider() {
339         if (mGameSettingsFeatureProvider == null) {
340             mGameSettingsFeatureProvider = new GameSettingsFeatureProviderImpl();
341         }
342         return mGameSettingsFeatureProvider;
343     }
344 
345     @Override
getAccessibilitySearchFeatureProvider()346     public AccessibilitySearchFeatureProvider getAccessibilitySearchFeatureProvider() {
347         if (mAccessibilitySearchFeatureProvider == null) {
348             mAccessibilitySearchFeatureProvider = new AccessibilitySearchFeatureProviderImpl();
349         }
350         return mAccessibilitySearchFeatureProvider;
351     }
352 
353     @Override
getAccessibilityMetricsFeatureProvider()354     public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() {
355         if (mAccessibilityMetricsFeatureProvider == null) {
356             mAccessibilityMetricsFeatureProvider = new AccessibilityMetricsFeatureProviderImpl();
357         }
358         return mAccessibilityMetricsFeatureProvider;
359     }
360 }
361