1 /*
2  * Copyright (C) 2022 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.spa
18 
19 import android.content.Context
20 import android.util.FeatureFlagUtils
21 import com.android.settings.network.apn.ApnEditPageProvider
22 import com.android.settings.print.PrintSettingsPageProvider
23 import com.android.settings.spa.about.AboutPhonePageProvider
24 import com.android.settings.spa.app.AllAppListPageProvider
25 import com.android.settings.spa.app.AppsMainPageProvider
26 import com.android.settings.spa.app.appcompat.UserAspectRatioAppsPageProvider
27 import com.android.settings.spa.app.appinfo.AppInfoSettingsProvider
28 import com.android.settings.spa.app.appinfo.CloneAppInfoSettingsProvider
29 import com.android.settings.spa.app.backgroundinstall.BackgroundInstalledAppsPageProvider
30 import com.android.settings.spa.app.battery.BatteryOptimizationModeAppListPageProvider
31 import com.android.settings.spa.app.specialaccess.AlarmsAndRemindersAppListProvider
32 import com.android.settings.spa.app.specialaccess.AllFilesAccessAppListProvider
33 import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListProvider
34 import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider
35 import com.android.settings.spa.app.specialaccess.LongBackgroundTasksAppListProvider
36 import com.android.settings.spa.app.specialaccess.MediaManagementAppsAppListProvider
37 import com.android.settings.spa.app.specialaccess.MediaRoutingControlAppListProvider
38 import com.android.settings.spa.app.specialaccess.ModifySystemSettingsAppListProvider
39 import com.android.settings.spa.app.specialaccess.NfcTagAppsSettingsProvider
40 import com.android.settings.spa.app.specialaccess.PictureInPictureListProvider
41 import com.android.settings.spa.app.specialaccess.SpecialAppAccessPageProvider
42 import com.android.settings.spa.app.specialaccess.TurnScreenOnAppsAppListProvider
43 import com.android.settings.spa.app.specialaccess.UseFullScreenIntentAppListProvider
44 import com.android.settings.spa.app.specialaccess.WifiControlAppListProvider
45 import com.android.settings.spa.app.specialaccess.WriteSystemPreferencesAppListProvider
46 import com.android.settings.spa.app.storage.StorageAppListPageProvider
47 import com.android.settings.spa.core.instrumentation.SpaLogMetricsProvider
48 import com.android.settings.spa.core.instrumentation.SpaLogProvider
49 import com.android.settings.spa.development.UsageStatsPageProvider
50 import com.android.settings.spa.development.compat.PlatformCompatAppListPageProvider
51 import com.android.settings.spa.home.HomePageProvider
52 import com.android.settings.spa.network.NetworkAndInternetPageProvider
53 import com.android.settings.spa.network.NetworkCellularGroupProvider
54 import com.android.settings.spa.network.SimOnboardingPageProvider
55 import com.android.settings.spa.notification.AppListNotificationsPageProvider
56 import com.android.settings.spa.notification.NotificationMainPageProvider
57 import com.android.settings.spa.system.AppLanguagesPageProvider
58 import com.android.settings.spa.system.LanguageAndInputPageProvider
59 import com.android.settings.spa.system.SystemMainPageProvider
60 import com.android.settings.wifi.details2.WifiPrivacyPageProvider
61 import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository
62 import com.android.settingslib.spa.framework.common.SpaEnvironment
63 import com.android.settingslib.spa.framework.common.SpaLogger
64 import com.android.settingslib.spa.framework.common.createSettingsPage
65 import com.android.settingslib.spaprivileged.template.app.TogglePermissionAppListProvider
66 import com.android.settingslib.spaprivileged.template.app.TogglePermissionAppListTemplate
67 
68 open class SettingsSpaEnvironment(context: Context) : SpaEnvironment(context) {
getTogglePermissionAppListProvidersnull69     open fun getTogglePermissionAppListProviders(): List<TogglePermissionAppListProvider> {
70         return listOf(
71             AllFilesAccessAppListProvider,
72             DisplayOverOtherAppsAppListProvider,
73             MediaManagementAppsAppListProvider,
74             MediaRoutingControlAppListProvider,
75             ModifySystemSettingsAppListProvider,
76             UseFullScreenIntentAppListProvider,
77             PictureInPictureListProvider,
78             InstallUnknownAppsListProvider,
79             AlarmsAndRemindersAppListProvider,
80             WifiControlAppListProvider,
81             NfcTagAppsSettingsProvider,
82             LongBackgroundTasksAppListProvider,
83             TurnScreenOnAppsAppListProvider,
84             WriteSystemPreferencesAppListProvider,
85         )
86     }
87 
<lambda>null88     override val pageProviderRepository = lazy {
89         val togglePermissionAppListTemplate = TogglePermissionAppListTemplate(
90             allProviders = getTogglePermissionAppListProviders()
91         )
92         SettingsPageProviderRepository(
93             allPageProviders = settingsPageProviders()
94                 + togglePermissionAppListTemplate.createPageProviders(),
95             rootPages = listOf(
96                 HomePageProvider.createSettingsPage()
97             ),
98         )
99     }
100 
101 
settingsPageProvidersnull102     open fun settingsPageProviders() = listOf(
103         HomePageProvider,
104         AppsMainPageProvider,
105         AllAppListPageProvider,
106         AppInfoSettingsProvider,
107         SpecialAppAccessPageProvider,
108         NotificationMainPageProvider,
109         AppListNotificationsPageProvider,
110         SystemMainPageProvider,
111         LanguageAndInputPageProvider,
112         AppLanguagesPageProvider,
113         UsageStatsPageProvider,
114         PlatformCompatAppListPageProvider,
115         BackgroundInstalledAppsPageProvider,
116         UserAspectRatioAppsPageProvider,
117         CloneAppInfoSettingsProvider,
118         NetworkAndInternetPageProvider,
119         AboutPhonePageProvider,
120         StorageAppListPageProvider.Apps,
121         StorageAppListPageProvider.Games,
122         ApnEditPageProvider,
123         SimOnboardingPageProvider,
124         BatteryOptimizationModeAppListPageProvider,
125         NetworkCellularGroupProvider(),
126         WifiPrivacyPageProvider,
127         PrintSettingsPageProvider,
128     )
129 
130     override val logger = if (FeatureFlagUtils.isEnabled(
131             context, FeatureFlagUtils.SETTINGS_ENABLE_SPA_METRICS
132         )
133     ) SpaLogMetricsProvider // ToDo: Implement 'SpaLogProvider' for SPA settings.
134     else object : SpaLogger {}
135 }
136