• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.overlay
17 
18 import android.content.Context
19 import com.android.settings.accessibility.AccessibilityFeedbackFeatureProvider
20 import com.android.settings.accessibility.AccessibilityPageIdFeatureProvider
21 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider
22 import com.android.settings.accounts.AccountFeatureProvider
23 import com.android.settings.applications.ApplicationFeatureProvider
24 import com.android.settings.biometrics.BiometricsFeatureProvider
25 import com.android.settings.biometrics.face.FaceFeatureProvider
26 import com.android.settings.biometrics.fingerprint.FingerprintFeatureProvider
27 import com.android.settings.bluetooth.BluetoothFeatureProvider
28 import com.android.settings.connecteddevice.audiosharing.AudioSharingFeatureProvider
29 import com.android.settings.connecteddevice.fastpair.FastPairFeatureProvider
30 import com.android.settings.connecteddevice.stylus.StylusFeatureProvider
31 import com.android.settings.dashboard.DashboardFeatureProvider
32 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider
33 import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider
34 import com.android.settings.display.DisplayFeatureProvider
35 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider
36 import com.android.settings.fuelgauge.BatterySettingsFeatureProvider
37 import com.android.settings.fuelgauge.BatteryStatusFeatureProvider
38 import com.android.settings.fuelgauge.PowerUsageFeatureProvider
39 import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider
40 import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider
41 import com.android.settings.localepicker.LocaleFeatureProvider
42 import com.android.settings.notification.syncacrossdevices.SyncAcrossDevicesFeatureProvider
43 import com.android.settings.onboarding.OnboardingFeatureProvider
44 import com.android.settings.overlay.FeatureFactory.Companion.setFactory
45 import com.android.settings.panel.PanelFeatureProvider
46 import com.android.settings.privatespace.PrivateSpaceLoginFeatureProvider
47 import com.android.settings.search.SearchFeatureProvider
48 import com.android.settings.security.SecurityFeatureProvider
49 import com.android.settings.security.SecuritySettingsFeatureProvider
50 import com.android.settings.slices.SlicesFeatureProvider
51 import com.android.settings.users.UserFeatureProvider
52 import com.android.settings.vpn2.AdvancedVpnFeatureProvider
53 import com.android.settings.wifi.WifiTrackerLibProvider
54 import com.android.settings.wifi.factory.WifiFeatureProvider
55 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider
56 
57 /**
58  * Abstract class for creating feature controllers.
59  *
60  * Allows OEM implementations to define their own factories with their own controllers containing
61  * whatever code is needed to implement the features.
62  * To provide a factory implementation, implementors should call [setFactory] in their Application.
63  */
64 abstract class FeatureFactory {
65     /**
66      * Gets implementation for the Suggestion Feature provider.
67      */
68     abstract val suggestionFeatureProvider: SuggestionFeatureProvider
69 
70     /**
71      * Retrieves implementation for Hardware Info feature.
72      */
73     open val hardwareInfoFeatureProvider: HardwareInfoFeatureProvider? = null
74 
75     /** Implementation for [SupportFeatureProvider]. */
76     open val supportFeatureProvider: SupportFeatureProvider? = null
77 
78     abstract val metricsFeatureProvider: MetricsFeatureProvider
79 
80     abstract val powerUsageFeatureProvider: PowerUsageFeatureProvider
81 
82     /**
83      * Retrieves implementation for Battery Status feature.
84      */
85     abstract val batteryStatusFeatureProvider: BatteryStatusFeatureProvider
86 
87     /**
88      * Gets implementation for Battery Settings provider.
89      */
90     abstract val batterySettingsFeatureProvider: BatterySettingsFeatureProvider
91 
92     abstract val dashboardFeatureProvider: DashboardFeatureProvider
93     abstract val dockUpdaterFeatureProvider: DockUpdaterFeatureProvider
94     abstract val applicationFeatureProvider: ApplicationFeatureProvider
95     abstract val localeFeatureProvider: LocaleFeatureProvider
96 
97     abstract val enterprisePrivacyFeatureProvider: EnterprisePrivacyFeatureProvider
98 
99     abstract val searchFeatureProvider: SearchFeatureProvider
getSurveyFeatureProvidernull100     abstract fun getSurveyFeatureProvider(context: Context): SurveyFeatureProvider?
101     abstract val securityFeatureProvider: SecurityFeatureProvider
102     abstract val userFeatureProvider: UserFeatureProvider
103     abstract val slicesFeatureProvider: SlicesFeatureProvider
104     abstract val accountFeatureProvider: AccountFeatureProvider
105     abstract val panelFeatureProvider: PanelFeatureProvider
106     abstract fun getContextualCardFeatureProvider(context: Context): ContextualCardFeatureProvider
107 
108     /**
109      * Retrieves implementation for Bluetooth feature.
110      */
111     abstract val bluetoothFeatureProvider: BluetoothFeatureProvider
112 
113     /**
114      * Retrieves implementation for Biometrics feature.
115      */
116     abstract val biometricsFeatureProvider: BiometricsFeatureProvider
117 
118     /**
119      * Retrieves implementation for Face feature.
120      */
121     abstract val faceFeatureProvider: FaceFeatureProvider
122 
123     /**
124      * Retrieves implementation for Fingerprint feature.
125      */
126     abstract val fingerprintFeatureProvider: FingerprintFeatureProvider
127 
128     /**
129      * Gets implementation for the WifiTrackerLib.
130      */
131     abstract val wifiTrackerLibProvider: WifiTrackerLibProvider
132 
133     /**
134      * Retrieves implementation for SecuritySettings feature.
135      */
136     abstract val securitySettingsFeatureProvider: SecuritySettingsFeatureProvider
137 
138     /**
139      * Retrieves implementation for Accessibility feedback category feature.
140      */
141     abstract val accessibilityFeedbackFeatureProvider: AccessibilityFeedbackFeatureProvider
142 
143     /**
144      * Retrieves implementation for Accessibility search index feature.
145      */
146     abstract val accessibilitySearchFeatureProvider: AccessibilitySearchFeatureProvider
147 
148     /**
149      * Retrieves implementation for Accessibility page id category feature.
150      */
151     abstract val accessibilityPageIdFeatureProvider: AccessibilityPageIdFeatureProvider
152 
153     /**
154      * Retrieves implementation for advanced vpn feature.
155      */
156     abstract val advancedVpnFeatureProvider: AdvancedVpnFeatureProvider
157 
158     /**
159      * Retrieves implementation for Wi-Fi feature.
160      */
161     abstract val wifiFeatureProvider: WifiFeatureProvider
162 
163     /**
164      * Retrieves implementation for keyboard settings feature.
165      */
166     abstract val keyboardSettingsFeatureProvider: KeyboardSettingsFeatureProvider
167 
168     /**
169      * Retrieves implementation for stylus feature.
170      */
171     abstract val stylusFeatureProvider: StylusFeatureProvider
172 
173     /**
174      * Retrieves implementation for Onboarding related feature.
175      */
176     open val onboardingFeatureProvider: OnboardingFeatureProvider? = null
177 
178     /**
179      * Gets implementation for Fast Pair device updater provider.
180      */
181     abstract val fastPairFeatureProvider: FastPairFeatureProvider
182 
183     /**
184      * Gets implementation for audio sharing related feature.
185      */
186     abstract val audioSharingFeatureProvider: AudioSharingFeatureProvider
187 
188     /**
189      * Gets implementation for Private Space account login feature.
190      */
191     abstract val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider
192 
193     /**
194      * Gets implementation for Display feature.
195      */
196     abstract val displayFeatureProvider: DisplayFeatureProvider
197 
198     /**
199      * Gets implementation for sync across devices related feature.
200      */
201     abstract val syncAcrossDevicesFeatureProvider: SyncAcrossDevicesFeatureProvider
202 
203     companion object {
204         private var _factory: FeatureFactory? = null
205 
206         /** Returns a factory for creating feature controllers. */
207         @JvmStatic
208         val featureFactory: FeatureFactory
209             get() = _factory ?: throw UnsupportedOperationException("No feature factory configured")
210 
211         private var _appContext: Context? = null
212 
213         /** Returns an application [Context] used to create this [FeatureFactory]. */
214         @JvmStatic
215         val appContext: Context
216             get() = _appContext
217                 ?: throw UnsupportedOperationException("No feature factory configured")
218 
219         @JvmStatic
220         fun setFactory(appContext: Context, factory: FeatureFactory) {
221             _appContext = appContext
222             _factory = factory
223         }
224     }
225 }
226