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.core.gateway;
18 
19 import com.android.settings.AllInOneTetherSettings;
20 import com.android.settings.DisplaySettings;
21 import com.android.settings.IccLockSettings;
22 import com.android.settings.MainClear;
23 import com.android.settings.MainClearConfirm;
24 import com.android.settings.Settings;
25 import com.android.settings.TestingSettings;
26 import com.android.settings.TetherSettings;
27 import com.android.settings.TrustedCredentialsSettings;
28 import com.android.settings.accessibility.AccessibilityDetailsSettingsFragment;
29 import com.android.settings.accessibility.AccessibilitySettings;
30 import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
31 import com.android.settings.accessibility.CaptionPropertiesFragment;
32 import com.android.settings.accessibility.ToggleColorInversionPreferenceFragment;
33 import com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment;
34 import com.android.settings.accessibility.ToggleReduceBrightColorsPreferenceFragment;
35 import com.android.settings.accounts.AccountDashboardFragment;
36 import com.android.settings.accounts.AccountSyncSettings;
37 import com.android.settings.accounts.ChooseAccountFragment;
38 import com.android.settings.accounts.ManagedProfileSettings;
39 import com.android.settings.applications.AppDashboardFragment;
40 import com.android.settings.applications.ProcessStatsSummary;
41 import com.android.settings.applications.ProcessStatsUi;
42 import com.android.settings.applications.UsageAccessDetails;
43 import com.android.settings.applications.appinfo.AlarmsAndRemindersDetails;
44 import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
45 import com.android.settings.applications.appinfo.DrawOverlayDetails;
46 import com.android.settings.applications.appinfo.ExternalSourcesDetails;
47 import com.android.settings.applications.appinfo.ManageExternalStorageDetails;
48 import com.android.settings.applications.appinfo.MediaManagementAppsDetails;
49 import com.android.settings.applications.appinfo.WriteSettingsDetails;
50 import com.android.settings.applications.appops.BackgroundCheckSummary;
51 import com.android.settings.applications.assist.ManageAssist;
52 import com.android.settings.applications.manageapplications.ManageApplications;
53 import com.android.settings.applications.managedomainurls.ManageDomainUrls;
54 import com.android.settings.applications.specialaccess.deviceadmin.DeviceAdminSettings;
55 import com.android.settings.applications.specialaccess.interactacrossprofiles.InteractAcrossProfilesDetails;
56 import com.android.settings.applications.specialaccess.interactacrossprofiles.InteractAcrossProfilesSettings;
57 import com.android.settings.applications.specialaccess.notificationaccess.NotificationAccessDetails;
58 import com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureDetails;
59 import com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureSettings;
60 import com.android.settings.applications.specialaccess.premiumsms.PremiumSmsAccess;
61 import com.android.settings.applications.specialaccess.vrlistener.VrListenerSettings;
62 import com.android.settings.applications.specialaccess.zenaccess.ZenAccessDetails;
63 import com.android.settings.backup.PrivacySettings;
64 import com.android.settings.backup.ToggleBackupSettingFragment;
65 import com.android.settings.backup.UserBackupSettingsActivity;
66 import com.android.settings.biometrics.combination.CombinedBiometricProfileSettings;
67 import com.android.settings.biometrics.combination.CombinedBiometricSettings;
68 import com.android.settings.biometrics.face.FaceSettings;
69 import com.android.settings.biometrics.fingerprint.FingerprintSettings;
70 import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
71 import com.android.settings.bluetooth.BluetoothPairingDetail;
72 import com.android.settings.bugreporthandler.BugReportHandlerPicker;
73 import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
74 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
75 import com.android.settings.connecteddevice.PreviouslyConnectedDeviceDashboardFragment;
76 import com.android.settings.connecteddevice.usb.UsbDetailsFragment;
77 import com.android.settings.datausage.DataSaverSummary;
78 import com.android.settings.datausage.DataUsageList;
79 import com.android.settings.datausage.DataUsageSummary;
80 import com.android.settings.datetime.DateTimeSettings;
81 import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
82 import com.android.settings.development.DevelopmentSettingsDashboardFragment;
83 import com.android.settings.deviceinfo.PrivateVolumeForget;
84 import com.android.settings.deviceinfo.PublicVolumeSettings;
85 import com.android.settings.deviceinfo.StorageDashboardFragment;
86 import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
87 import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionSettings;
88 import com.android.settings.deviceinfo.legal.ModuleLicensesDashboard;
89 import com.android.settings.display.NightDisplaySettings;
90 import com.android.settings.display.SmartAutoRotatePreferenceFragment;
91 import com.android.settings.display.darkmode.DarkModeSettingsFragment;
92 import com.android.settings.dream.DreamSettings;
93 import com.android.settings.enterprise.EnterprisePrivacySettings;
94 import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
95 import com.android.settings.fuelgauge.PowerUsageSummary;
96 import com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleSettings;
97 import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
98 import com.android.settings.gestures.AssistGestureSettings;
99 import com.android.settings.gestures.DoubleTapPowerSettings;
100 import com.android.settings.gestures.DoubleTapScreenSettings;
101 import com.android.settings.gestures.DoubleTwistGestureSettings;
102 import com.android.settings.gestures.GestureNavigationSettingsFragment;
103 import com.android.settings.gestures.PickupGestureSettings;
104 import com.android.settings.gestures.PowerMenuSettings;
105 import com.android.settings.gestures.SwipeToNotificationSettings;
106 import com.android.settings.gestures.SystemNavigationGestureSettings;
107 import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
108 import com.android.settings.inputmethod.KeyboardLayoutPickerFragment;
109 import com.android.settings.inputmethod.PhysicalKeyboardFragment;
110 import com.android.settings.inputmethod.SpellCheckersSettings;
111 import com.android.settings.inputmethod.UserDictionaryList;
112 import com.android.settings.inputmethod.UserDictionarySettings;
113 import com.android.settings.language.LanguageAndInputSettings;
114 import com.android.settings.localepicker.LocaleListEditor;
115 import com.android.settings.location.LocationServices;
116 import com.android.settings.location.LocationSettings;
117 import com.android.settings.location.WifiScanningFragment;
118 import com.android.settings.network.MobileNetworkListFragment;
119 import com.android.settings.network.NetworkDashboardFragment;
120 import com.android.settings.network.NetworkProviderSettings;
121 import com.android.settings.network.apn.ApnEditor;
122 import com.android.settings.network.apn.ApnSettings;
123 import com.android.settings.network.telephony.NetworkSelectSettings;
124 import com.android.settings.nfc.AndroidBeam;
125 import com.android.settings.nfc.PaymentSettings;
126 import com.android.settings.notification.ConfigureNotificationSettings;
127 import com.android.settings.notification.NotificationAccessSettings;
128 import com.android.settings.notification.NotificationAssistantPicker;
129 import com.android.settings.notification.SoundSettings;
130 import com.android.settings.notification.app.AppBubbleNotificationSettings;
131 import com.android.settings.notification.app.AppNotificationSettings;
132 import com.android.settings.notification.app.ChannelNotificationSettings;
133 import com.android.settings.notification.app.ConversationListSettings;
134 import com.android.settings.notification.history.NotificationStation;
135 import com.android.settings.notification.zen.ZenAccessSettings;
136 import com.android.settings.notification.zen.ZenModeAutomationSettings;
137 import com.android.settings.notification.zen.ZenModeBlockedEffectsSettings;
138 import com.android.settings.notification.zen.ZenModeEventRuleSettings;
139 import com.android.settings.notification.zen.ZenModeScheduleRuleSettings;
140 import com.android.settings.notification.zen.ZenModeSettings;
141 import com.android.settings.password.ChooseLockPassword;
142 import com.android.settings.password.ChooseLockPattern;
143 import com.android.settings.print.PrintJobSettingsFragment;
144 import com.android.settings.print.PrintSettingsFragment;
145 import com.android.settings.privacy.PrivacyDashboardFragment;
146 import com.android.settings.security.CryptKeeperSettings;
147 import com.android.settings.security.LockscreenDashboardFragment;
148 import com.android.settings.security.SecuritySettings;
149 import com.android.settings.shortcut.CreateShortcut;
150 import com.android.settings.sound.MediaControlsSettings;
151 import com.android.settings.support.SupportDashboardActivity;
152 import com.android.settings.system.ResetDashboardFragment;
153 import com.android.settings.system.SystemDashboardFragment;
154 import com.android.settings.tts.TextToSpeechSettings;
155 import com.android.settings.users.UserSettings;
156 import com.android.settings.vpn2.VpnSettings;
157 import com.android.settings.wallpaper.WallpaperTypeSettings;
158 import com.android.settings.webview.WebViewAppPicker;
159 import com.android.settings.wfd.WifiDisplaySettings;
160 import com.android.settings.wifi.ConfigureWifiSettings;
161 import com.android.settings.wifi.WifiAPITest;
162 import com.android.settings.wifi.WifiInfo;
163 import com.android.settings.wifi.WifiSettings;
164 import com.android.settings.wifi.calling.WifiCallingDisclaimerFragment;
165 import com.android.settings.wifi.calling.WifiCallingSettings;
166 import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
167 import com.android.settings.wifi.p2p.WifiP2pSettings;
168 import com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2;
169 import com.android.settings.wifi.tether.WifiTetherSettings;
170 
171 public class SettingsGateway {
172 
173     /**
174      * A list of fragment that can be hosted by SettingsActivity. SettingsActivity will throw a
175      * security exception if the fragment it needs to display is not in this list.
176      */
177     public static final String[] ENTRY_FRAGMENTS = {
178             AdvancedConnectedDeviceDashboardFragment.class.getName(),
179             CreateShortcut.class.getName(),
180             BluetoothPairingDetail.class.getName(),
181             WifiSettings.class.getName(),
182             WifiNetworkDetailsFragment.class.getName(),
183             ConfigureWifiSettings.class.getName(),
184             SavedAccessPointsWifiSettings2.class.getName(),
185             AllInOneTetherSettings.class.getName(),
186             TetherSettings.class.getName(),
187             SmartAutoRotatePreferenceFragment.class.getName(),
188             WifiP2pSettings.class.getName(),
189             WifiTetherSettings.class.getName(),
190             BackgroundCheckSummary.class.getName(),
191             VpnSettings.class.getName(),
192             DataSaverSummary.class.getName(),
193             DateTimeSettings.class.getName(),
194             LocaleListEditor.class.getName(),
195             AvailableVirtualKeyboardFragment.class.getName(),
196             LanguageAndInputSettings.class.getName(),
197             SpellCheckersSettings.class.getName(),
198             UserDictionaryList.class.getName(),
199             UserDictionarySettings.class.getName(),
200             DisplaySettings.class.getName(),
201             MyDeviceInfoFragment.class.getName(),
202             ModuleLicensesDashboard.class.getName(),
203             ManageApplications.class.getName(),
204             FirmwareVersionSettings.class.getName(),
205             ManageAssist.class.getName(),
206             ProcessStatsUi.class.getName(),
207             NotificationStation.class.getName(),
208             LocationSettings.class.getName(),
209             WifiScanningFragment.class.getName(),
210             PrivacyDashboardFragment.class.getName(),
211             LocationServices.class.getName(),
212             SecuritySettings.class.getName(),
213             UsageAccessDetails.class.getName(),
214             PrivacySettings.class.getName(),
215             DeviceAdminSettings.class.getName(),
216             AccessibilityDetailsSettingsFragment.class.getName(),
217             AccessibilitySettings.class.getName(),
218             AccessibilitySettingsForSetupWizard.class.getName(),
219             CaptionPropertiesFragment.class.getName(),
220             ToggleDaltonizerPreferenceFragment.class.getName(),
221             ToggleColorInversionPreferenceFragment.class.getName(),
222             ToggleReduceBrightColorsPreferenceFragment.class.getName(),
223             TextToSpeechSettings.class.getName(),
224             PrivateVolumeForget.class.getName(),
225             PublicVolumeSettings.class.getName(),
226             DevelopmentSettingsDashboardFragment.class.getName(),
227             AndroidBeam.class.getName(),
228             WifiDisplaySettings.class.getName(),
229             PowerUsageSummary.class.getName(),
230             AccountSyncSettings.class.getName(),
231             AssistGestureSettings.class.getName(),
232             FaceSettings.class.getName(),
233             FingerprintSettings.FingerprintSettingsFragment.class.getName(),
234             CombinedBiometricSettings.class.getName(),
235             CombinedBiometricProfileSettings.class.getName(),
236             SwipeToNotificationSettings.class.getName(),
237             DoubleTapPowerSettings.class.getName(),
238             DoubleTapScreenSettings.class.getName(),
239             PickupGestureSettings.class.getName(),
240             DoubleTwistGestureSettings.class.getName(),
241             SystemNavigationGestureSettings.class.getName(),
242             CryptKeeperSettings.class.getName(),
243             DataUsageSummary.class.getName(),
244             DreamSettings.class.getName(),
245             UserSettings.class.getName(),
246             NotificationAccessSettings.class.getName(),
247             NotificationAccessDetails.class.getName(),
248             AppBubbleNotificationSettings.class.getName(),
249             ZenAccessSettings.class.getName(),
250             ZenAccessDetails.class.getName(),
251             ZenModeAutomationSettings.class.getName(),
252             PrintSettingsFragment.class.getName(),
253             PrintJobSettingsFragment.class.getName(),
254             TrustedCredentialsSettings.class.getName(),
255             PaymentSettings.class.getName(),
256             KeyboardLayoutPickerFragment.class.getName(),
257             PhysicalKeyboardFragment.class.getName(),
258             ZenModeSettings.class.getName(),
259             SoundSettings.class.getName(),
260             ConversationListSettings.class.getName(),
261             ConfigureNotificationSettings.class.getName(),
262             ChooseLockPassword.ChooseLockPasswordFragment.class.getName(),
263             ChooseLockPattern.ChooseLockPatternFragment.class.getName(),
264             AppInfoDashboardFragment.class.getName(),
265             BatterySaverSettings.class.getName(),
266             AppNotificationSettings.class.getName(),
267             NotificationAssistantPicker.class.getName(),
268             ChannelNotificationSettings.class.getName(),
269             ApnSettings.class.getName(),
270             ApnEditor.class.getName(),
271             WifiCallingSettings.class.getName(),
272             ZenModeScheduleRuleSettings.class.getName(),
273             ZenModeEventRuleSettings.class.getName(),
274             ZenModeBlockedEffectsSettings.class.getName(),
275             ProcessStatsUi.class.getName(),
276             AdvancedPowerUsageDetail.class.getName(),
277             ProcessStatsSummary.class.getName(),
278             DrawOverlayDetails.class.getName(),
279             WriteSettingsDetails.class.getName(),
280             ExternalSourcesDetails.class.getName(),
281             ManageExternalStorageDetails.class.getName(),
282             WallpaperTypeSettings.class.getName(),
283             VrListenerSettings.class.getName(),
284             PictureInPictureSettings.class.getName(),
285             PictureInPictureDetails.class.getName(),
286             PremiumSmsAccess.class.getName(),
287             ManagedProfileSettings.class.getName(),
288             ChooseAccountFragment.class.getName(),
289             IccLockSettings.class.getName(),
290             TestingSettings.class.getName(),
291             WifiAPITest.class.getName(),
292             WifiInfo.class.getName(),
293             MainClear.class.getName(),
294             MainClearConfirm.class.getName(),
295             ResetDashboardFragment.class.getName(),
296             NightDisplaySettings.class.getName(),
297             ManageDomainUrls.class.getName(),
298             AutomaticStorageManagerSettings.class.getName(),
299             StorageDashboardFragment.class.getName(),
300             SystemDashboardFragment.class.getName(),
301             NetworkDashboardFragment.class.getName(),
302             ConnectedDeviceDashboardFragment.class.getName(),
303             UsbDetailsFragment.class.getName(),
304             AppDashboardFragment.class.getName(),
305             WifiCallingDisclaimerFragment.class.getName(),
306             AccountDashboardFragment.class.getName(),
307             EnterprisePrivacySettings.class.getName(),
308             WebViewAppPicker.class.getName(),
309             LockscreenDashboardFragment.class.getName(),
310             BluetoothDeviceDetailsFragment.class.getName(),
311             DataUsageList.class.getName(),
312             ToggleBackupSettingFragment.class.getName(),
313             PreviouslyConnectedDeviceDashboardFragment.class.getName(),
314             BatterySaverScheduleSettings.class.getName(),
315             MobileNetworkListFragment.class.getName(),
316             PowerMenuSettings.class.getName(),
317             DarkModeSettingsFragment.class.getName(),
318             BugReportHandlerPicker.class.getName(),
319             GestureNavigationSettingsFragment.class.getName(),
320             InteractAcrossProfilesSettings.class.getName(),
321             InteractAcrossProfilesDetails.class.getName(),
322             MediaControlsSettings.class.getName(),
323             NetworkProviderSettings.class.getName(),
324             NetworkSelectSettings.class.getName(),
325             AlarmsAndRemindersDetails.class.getName(),
326             MediaManagementAppsDetails.class.getName()
327     };
328 
329     public static final String[] SETTINGS_FOR_RESTRICTED = {
330             // Home page
331             Settings.NetworkDashboardActivity.class.getName(),
332             Settings.ConnectedDeviceDashboardActivity.class.getName(),
333             Settings.AppDashboardActivity.class.getName(),
334             Settings.DisplaySettingsActivity.class.getName(),
335             Settings.SoundSettingsActivity.class.getName(),
336             Settings.StorageDashboardActivity.class.getName(),
337             Settings.PowerUsageSummaryActivity.class.getName(),
338             Settings.AccountDashboardActivity.class.getName(),
339             Settings.PrivacySettingsActivity.class.getName(),
340             Settings.SecurityDashboardActivity.class.getName(),
341             Settings.AccessibilitySettingsActivity.class.getName(),
342             Settings.SystemDashboardActivity.class.getName(),
343             SupportDashboardActivity.class.getName(),
344             // Home page > Network & Internet
345             Settings.WifiSettingsActivity.class.getName(),
346             Settings.DataUsageSummaryActivity.class.getName(),
347             Settings.NetworkProviderSettingsActivity.class.getName(),
348             Settings.NetworkSelectActivity.class.getName(),
349             // Home page > Connected devices
350             Settings.BluetoothSettingsActivity.class.getName(),
351             Settings.WifiDisplaySettingsActivity.class.getName(),
352             Settings.PrintSettingsActivity.class.getName(),
353             // Home page > Apps & Notifications
354             Settings.UserSettingsActivity.class.getName(),
355             Settings.ConfigureNotificationSettingsActivity.class.getName(),
356             Settings.ManageApplicationsActivity.class.getName(),
357             Settings.PaymentSettingsActivity.class.getName(),
358             // Home page > Security & screen lock
359             Settings.LocationSettingsActivity.class.getName(),
360             // Home page > System
361             Settings.LanguageAndInputSettingsActivity.class.getName(),
362             Settings.DateTimeSettingsActivity.class.getName(),
363             Settings.EnterprisePrivacySettingsActivity.class.getName(),
364             Settings.MyDeviceInfoActivity.class.getName(),
365             Settings.ModuleLicensesActivity.class.getName(),
366             UserBackupSettingsActivity.class.getName(),
367     };
368 }
369