• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 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;
18 
19 import static android.provider.Settings.ACTION_PRIVACY_SETTINGS;
20 
21 import android.content.ActivityNotFoundException;
22 import android.content.Context;
23 import android.content.Intent;
24 import android.os.Bundle;
25 import android.telephony.ims.ImsRcsManager;
26 import android.text.TextUtils;
27 import android.util.FeatureFlagUtils;
28 import android.util.Log;
29 
30 import com.android.internal.annotations.VisibleForTesting;
31 import com.android.settings.biometrics.face.FaceSettings;
32 import com.android.settings.core.FeatureFlags;
33 import com.android.settings.enterprise.EnterprisePrivacySettings;
34 import com.android.settings.network.MobileNetworkIntentConverter;
35 import com.android.settings.overlay.FeatureFactory;
36 import com.android.settings.safetycenter.SafetyCenterManagerWrapper;
37 import com.android.settings.security.SecuritySettingsFeatureProvider;
38 
39 import com.google.android.setupdesign.util.ThemeHelper;
40 
41 /**
42  * Top-level Settings activity
43  */
44 public class Settings extends SettingsActivity {
45 
46     /*
47     * Settings subclasses for launching independently.
48     */
49     public static class AssistGestureSettingsActivity extends SettingsActivity { /* empty */}
50     public static class BluetoothSettingsActivity extends SettingsActivity { /* empty */ }
51     public static class CreateShortcutActivity extends SettingsActivity { /* empty */ }
52     public static class FaceSettingsActivity extends SettingsActivity { /* empty */ }
53     /** Container for {@link FaceSettings} to use with a pre-defined task affinity. */
54     public static class FaceSettingsInternalActivity extends SettingsActivity { /* empty */ }
55     public static class FingerprintSettingsActivity extends SettingsActivity { /* empty */ }
56     public static class CombinedBiometricSettingsActivity extends SettingsActivity { /* empty */ }
57     public static class CombinedBiometricProfileSettingsActivity extends SettingsActivity { /* empty */ }
58     public static class TetherSettingsActivity extends SettingsActivity {
59         // TODO(b/147675042): Clean the override up when we enable the new Fragment persistently.
60         @Override
getIntent()61         public Intent getIntent() {
62             return wrapIntentWithAllInOneTetherSettingsIfNeeded(
63                     getApplicationContext(), super.getIntent());
64         }
65     }
66     public static class WifiTetherSettingsActivity extends SettingsActivity {
67         // TODO(b/147675042): Clean the override up when we enable the new Fragment persistently.
68         @Override
getIntent()69         public Intent getIntent() {
70             return wrapIntentWithAllInOneTetherSettingsIfNeeded(
71                     getApplicationContext(), super.getIntent());
72         }
73     }
74 
wrapIntentWithAllInOneTetherSettingsIfNeeded( Context context, Intent superIntent)75     private static Intent wrapIntentWithAllInOneTetherSettingsIfNeeded(
76             Context context, Intent superIntent) {
77         if (!FeatureFlagUtils.isEnabled(context, FeatureFlags.TETHER_ALL_IN_ONE)) {
78             return superIntent;
79         }
80 
81         final Intent modIntent = new Intent(superIntent);
82         modIntent.putExtra(EXTRA_SHOW_FRAGMENT,
83                 AllInOneTetherSettings.class.getCanonicalName());
84         Bundle args = superIntent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
85         if (args != null) {
86             args = new Bundle(args);
87         } else {
88             args = new Bundle();
89         }
90         args.putParcelable("intent", superIntent);
91         modIntent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
92         return modIntent;
93     }
94 
95     public static class VpnSettingsActivity extends SettingsActivity { /* empty */ }
96     /** Activity for Data saver settings. */
97     public static class DataSaverSummaryActivity extends SettingsActivity { /* empty */ }
98     public static class DateTimeSettingsActivity extends SettingsActivity { /* empty */ }
99     public static class PrivateVolumeForgetActivity extends SettingsActivity { /* empty */ }
100     public static class PublicVolumeSettingsActivity extends SettingsActivity { /* empty */ }
101     public static class WifiSettingsActivity extends SettingsActivity { /* empty */ }
102     public static class NetworkProviderSettingsActivity extends SettingsActivity { /* empty */ }
103     public static class NetworkSelectActivity extends SettingsActivity { /* empty */ }
104     /** Activity for the Wi-Fi network details settings. */
105     public static class WifiDetailsSettingsActivity extends SettingsActivity { /* empty */ }
106     public static class WifiP2pSettingsActivity extends SettingsActivity { /* empty */ }
107     public static class AvailableVirtualKeyboardActivity extends SettingsActivity { /* empty */ }
108     public static class KeyboardLayoutPickerActivity extends SettingsActivity { /* empty */ }
109     public static class PhysicalKeyboardActivity extends SettingsActivity { /* empty */ }
110     public static class InputMethodAndSubtypeEnablerActivity extends SettingsActivity { /* empty */ }
111     public static class SpellCheckersSettingsActivity extends SettingsActivity { /* empty */ }
112     public static class LocalePickerActivity extends SettingsActivity { /* empty */ }
113     public static class LanguageAndInputSettingsActivity extends SettingsActivity { /* empty */ }
114     public static class UserDictionarySettingsActivity extends SettingsActivity { /* empty */ }
115     public static class DarkThemeSettingsActivity extends SettingsActivity { /* empty */ }
116     public static class DisplaySettingsActivity extends SettingsActivity { /* empty */ }
117     public static class NightDisplaySettingsActivity extends SettingsActivity { /* empty */ }
118     public static class NightDisplaySuggestionActivity extends NightDisplaySettingsActivity { /* empty */ }
119     public static class SmartAutoRotateSettingsActivity extends SettingsActivity { /* empty */ }
120     public static class MyDeviceInfoActivity extends SettingsActivity { /* empty */ }
121     public static class ModuleLicensesActivity extends SettingsActivity { /* empty */ }
122     public static class ApplicationSettingsActivity extends SettingsActivity { /* empty */ }
123     public static class ManageApplicationsActivity extends SettingsActivity { /* empty */ }
124     public static class ManageAssistActivity extends SettingsActivity { /* empty */ }
125     public static class HighPowerApplicationsActivity extends SettingsActivity { /* empty */ }
126     public static class BackgroundCheckSummaryActivity extends SettingsActivity { /* empty */ }
127     public static class StorageUseActivity extends SettingsActivity { /* empty */ }
128     public static class DevelopmentSettingsDashboardActivity extends SettingsActivity { /* empty */ }
129     public static class AccessibilitySettingsActivity extends SettingsActivity { /* empty */ }
130     public static class AccessibilityDetailsSettingsActivity extends SettingsActivity { /* empty */ }
131     public static class CaptioningSettingsActivity extends SettingsActivity { /* empty */ }
132     public static class AccessibilityInversionSettingsActivity extends SettingsActivity { /* empty */ }
133     public static class AccessibilityContrastSettingsActivity extends SettingsActivity { /* empty */ }
134     public static class AccessibilityDaltonizerSettingsActivity extends SettingsActivity { /* empty */ }
135     /** Activity for lockscreen settings. */
136     public static class LockScreenSettingsActivity extends SettingsActivity { /* empty */ }
137     /** Activity for bluetooth pairing settings. */
138     public static class BlueToothPairingActivity extends SettingsActivity { /* empty */ }
139     /** Activity for Reduce Bright Colors. */
140     public static class ReduceBrightColorsSettingsActivity extends SettingsActivity { /* empty */ }
141     /** Activity for the security dashboard. */
142     public static class SecurityDashboardActivity extends SettingsActivity {
143 
144         private static final String TAG = "SecurityDashboardActivity";
145 
146         @Override
onCreate(Bundle savedState)147         protected void onCreate(Bundle savedState) {
148             super.onCreate(savedState);
149             handleSafetyCenterRedirection();
150         }
151 
152         /** Redirects to SafetyCenter if enabled. */
153         @VisibleForTesting
handleSafetyCenterRedirection()154         public void handleSafetyCenterRedirection() {
155             if (isFinishing()) {
156                 // Don't trampoline if already exiting this activity.
157                 return;
158             }
159 
160             if (SafetyCenterManagerWrapper.get().isEnabled(this)) {
161                 try {
162                     startActivity(new Intent(Intent.ACTION_SAFETY_CENTER));
163                     finish();
164                 } catch (ActivityNotFoundException e) {
165                     Log.e(TAG, "Unable to open safety center", e);
166                 }
167             }
168         }
169 
170         /** Whether the given fragment is allowed. */
171         @VisibleForTesting
172         @Override
isValidFragment(String fragmentName)173         public boolean isValidFragment(String fragmentName) {
174             return super.isValidFragment(fragmentName)
175                     || (fragmentName != null
176                             && TextUtils.equals(fragmentName, getAlternativeFragmentName()));
177         }
178 
179         @Override
getInitialFragmentName(Intent intent)180         public String getInitialFragmentName(Intent intent) {
181             final String alternativeFragmentName = getAlternativeFragmentName();
182             if (alternativeFragmentName != null) {
183                 return alternativeFragmentName;
184             }
185 
186             return super.getInitialFragmentName(intent);
187         }
188 
getAlternativeFragmentName()189         private String getAlternativeFragmentName() {
190             String alternativeFragmentClassname = null;
191             final SecuritySettingsFeatureProvider securitySettingsFeatureProvider =
192                     FeatureFactory.getFactory(this).getSecuritySettingsFeatureProvider();
193             if (securitySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment()) {
194                 alternativeFragmentClassname = securitySettingsFeatureProvider
195                         .getAlternativeSecuritySettingsFragmentClassname();
196             }
197             return alternativeFragmentClassname;
198         }
199     }
200     /** Activity for the Advanced security settings. */
201     public static class SecurityAdvancedSettings extends SettingsActivity { /* empty */ }
202     public static class UsageAccessSettingsActivity extends SettingsActivity { /* empty */ }
203     public static class AppUsageAccessSettingsActivity extends SettingsActivity { /* empty */ }
204     public static class LocationSettingsActivity extends SettingsActivity { /* empty */ }
205     public static class ScanningSettingsActivity extends SettingsActivity { /* empty */ }
206     public static class WifiScanningSettingsActivity extends SettingsActivity { /* empty */ }
207     /** Activity for the privacy dashboard. */
208     public static class PrivacyDashboardActivity extends SettingsActivity {
209 
210         private static final String TAG = "PrivacyDashboardActivity";
211 
212         @Override
onCreate(Bundle savedState)213         protected void onCreate(Bundle savedState) {
214             super.onCreate(savedState);
215             handleSafetyCenterRedirection();
216         }
217 
218         /** Redirects to SafetyCenter if enabled. */
219         @VisibleForTesting
handleSafetyCenterRedirection()220         public void handleSafetyCenterRedirection() {
221             if (isFinishing()) {
222                 // Don't trampoline if already exiting this activity.
223                 return;
224             }
225 
226             if (ACTION_PRIVACY_SETTINGS.equals(getIntent().getAction())
227                     && SafetyCenterManagerWrapper.get().isEnabled(this)) {
228                 try {
229                     startActivity(new Intent(Intent.ACTION_SAFETY_CENTER));
230                     finish();
231                 } catch (ActivityNotFoundException e) {
232                     Log.e(TAG, "Unable to open safety center", e);
233                 }
234             }
235         }
236     }
237     public static class PrivacyControlsActivity extends SettingsActivity { /* empty */ }
238     public static class PrivacySettingsActivity extends SettingsActivity { /* empty */ }
239     public static class FactoryResetActivity extends SettingsActivity {
240         @Override
onCreate(Bundle savedState)241         protected void onCreate(Bundle savedState) {
242             setTheme(SetupWizardUtils.getTheme(this, getIntent()));
243             ThemeHelper.trySetDynamicColor(this);
244             super.onCreate(savedState);
245         }
246 
247         @Override
isToolbarEnabled()248         protected boolean isToolbarEnabled() {
249             return false;
250         }
251     }
252     public static class FactoryResetConfirmActivity extends SettingsActivity {
253         @Override
onCreate(Bundle savedState)254         protected void onCreate(Bundle savedState) {
255             setTheme(SetupWizardUtils.getTheme(this, getIntent()));
256             ThemeHelper.trySetDynamicColor(this);
257             super.onCreate(savedState);
258         }
259 
260         @Override
isToolbarEnabled()261         protected boolean isToolbarEnabled() {
262             return false;
263         }
264     }
265     public static class RunningServicesActivity extends SettingsActivity { /* empty */ }
266     public static class BatterySaverSettingsActivity extends SettingsActivity { /* empty */ }
267     public static class BatterySaverScheduleSettingsActivity extends SettingsActivity { /* empty */ }
268     public static class AccountSyncSettingsActivity extends SettingsActivity { /* empty */ }
269     public static class AccountSyncSettingsInAddAccountActivity extends SettingsActivity { /* empty */ }
270     public static class DeviceAdminSettingsActivity extends SettingsActivity { /* empty */ }
271     public static class DataUsageSummaryActivity extends SettingsActivity { /* empty */ }
272     public static class MobileDataUsageListActivity extends SettingsActivity { /* empty */ }
273     public static class ConfigureWifiSettingsActivity extends SettingsActivity { /* empty */ }
274     public static class SavedAccessPointsSettingsActivity extends SettingsActivity { /* empty */ }
275     public static class TextToSpeechSettingsActivity extends SettingsActivity { /* empty */ }
276     public static class AndroidBeamSettingsActivity extends SettingsActivity { /* empty */ }
277     public static class WifiDisplaySettingsActivity extends SettingsActivity { /* empty */ }
278     public static class DreamSettingsActivity extends SettingsActivity { /* empty */ }
279     public static class NotificationStationActivity extends SettingsActivity { /* empty */ }
280     public static class UserSettingsActivity extends SettingsActivity { /* empty */ }
281     public static class NotificationAccessSettingsActivity extends SettingsActivity { /* empty */ }
282     public static class NotificationAccessDetailsActivity extends SettingsActivity { /* empty */ }
283     public static class VrListenersSettingsActivity extends SettingsActivity { /* empty */ }
284     public static class PremiumSmsAccessActivity extends SettingsActivity { /* empty */ }
285     public static class PictureInPictureSettingsActivity extends SettingsActivity { /* empty */ }
286     public static class TurnScreenOnSettingsActivity extends SettingsActivity { /* empty */ }
287     public static class AppPictureInPictureSettingsActivity extends SettingsActivity { /* empty */ }
288     public static class ZenAccessSettingsActivity extends SettingsActivity { /* empty */ }
289     public static class ZenAccessDetailSettingsActivity extends SettingsActivity {}
290     public static class ConditionProviderSettingsActivity extends SettingsActivity { /* empty */ }
291     public static class UsbSettingsActivity extends SettingsActivity { /* empty */ }
292     public static class UsbDetailsActivity extends SettingsActivity { /* empty */ }
293     public static class TrustedCredentialsSettingsActivity extends SettingsActivity { /* empty */ }
294     public static class PaymentSettingsActivity extends SettingsActivity { /* empty */ }
295     public static class PrintSettingsActivity extends SettingsActivity { /* empty */ }
296     public static class PrintJobSettingsActivity extends SettingsActivity { /* empty */ }
297     public static class ZenModeSettingsActivity extends SettingsActivity { /* empty */ }
298     public static class ZenModeBehaviorSettingsActivity extends SettingsActivity { /* empty */ }
299     public static class ZenModeBlockedEffectsSettingsActivity extends SettingsActivity { /* empty */ }
300     public static class ZenModeAutomationSettingsActivity extends SettingsActivity { /* empty */ }
301     public static class ZenModeScheduleRuleSettingsActivity extends SettingsActivity { /* empty */ }
302     public static class ZenModeEventRuleSettingsActivity extends SettingsActivity { /* empty */ }
303     public static class SoundSettingsActivity extends SettingsActivity { /* empty */ }
304     public static class ConfigureNotificationSettingsActivity extends SettingsActivity { /* empty */ }
305     public static class ConversationListSettingsActivity extends SettingsActivity { /* empty */ }
306     public static class AppBubbleNotificationSettingsActivity extends SettingsActivity { /* empty */ }
307     public static class NotificationAssistantSettingsActivity extends SettingsActivity{ /* empty */ }
308     public static class NotificationAppListActivity extends SettingsActivity { /* empty */ }
309     public static class NotificationReviewPermissionsActivity extends SettingsActivity { /* empty */ }
310     public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ }
311     public static class ChannelNotificationSettingsActivity extends SettingsActivity { /* empty */ }
312     public static class ChannelGroupNotificationSettingsActivity extends SettingsActivity { /* empty */ }
313     public static class ManageDomainUrlsActivity extends SettingsActivity { /* empty */ }
314     public static class AutomaticStorageManagerSettingsActivity extends SettingsActivity { /* empty */ }
315     public static class GamesStorageActivity extends SettingsActivity { /* empty */ }
316     public static class GestureNavigationSettingsActivity extends SettingsActivity { /* empty */ }
317     /** Activity to manage 2-/3-button navigation configuration. */
318     public static class ButtonNavigationSettingsActivity extends SettingsActivity { /* empty */ }
319     public static class InteractAcrossProfilesSettingsActivity extends SettingsActivity {
320         /* empty */
321     }
322     public static class AppInteractAcrossProfilesSettingsActivity extends SettingsActivity {
323         /* empty */
324     }
325 
326     public static class ApnSettingsActivity extends SettingsActivity { /* empty */ }
327     public static class WifiCallingSettingsActivity extends SettingsActivity { /* empty */ }
328     public static class MemorySettingsActivity extends SettingsActivity { /* empty */ }
329     public static class AppMemoryUsageActivity extends SettingsActivity { /* empty */ }
330     public static class OverlaySettingsActivity extends SettingsActivity { /* empty */ }
331     public static class ManageExternalStorageActivity extends SettingsActivity { /* empty */ }
332     public static class AppManageExternalStorageActivity extends SettingsActivity { /* empty */ }
333     public static class MediaManagementAppsActivity extends SettingsActivity { /* empty */ }
334     public static class AppMediaManagementAppsActivity extends SettingsActivity { /* empty */ }
335     public static class WriteSettingsActivity extends SettingsActivity { /* empty */ }
336     public static class ChangeWifiStateActivity extends SettingsActivity { /* empty */ }
337     public static class AppDrawOverlaySettingsActivity extends SettingsActivity { /* empty */ }
338     public static class AppWriteSettingsActivity extends SettingsActivity { /* empty */ }
339     /** Activity to manage app battery usage details. */
340     public static class AppBatteryUsageActivity extends SettingsActivity { /* empty */ }
341 
342     public static class ManageExternalSourcesActivity extends SettingsActivity {/* empty */ }
343     public static class ManageAppExternalSourcesActivity extends SettingsActivity { /* empty */ }
344     public static class WallpaperSettingsActivity extends SettingsActivity { /* empty */ }
345     public static class ManagedProfileSettingsActivity extends SettingsActivity { /* empty */ }
346     public static class DeletionHelperActivity extends SettingsActivity { /* empty */ }
347 
348     /** Actviity to manage apps with {@link android.Manifest.permission#SCHEDULE_EXACT_ALARM} */
349     public static class AlarmsAndRemindersActivity extends SettingsActivity {/* empty */ }
350     /** App specific version of {@link AlarmsAndRemindersActivity} */
351     public static class AlarmsAndRemindersAppActivity extends SettingsActivity {/* empty */ }
352 
353     public static class ApnEditorActivity extends SettingsActivity { /* empty */ }
354     public static class ChooseAccountActivity extends SettingsActivity { /* empty */ }
355     public static class IccLockSettingsActivity extends SettingsActivity { /* empty */ }
356     public static class TestingSettingsActivity extends SettingsActivity { /* empty */ }
357     public static class WifiAPITestActivity extends SettingsActivity { /* empty */ }
358     public static class WifiInfoActivity extends SettingsActivity { /* empty */ }
359     public static class EnterprisePrivacySettingsActivity extends SettingsActivity {
360         @Override
onCreate(Bundle savedInstanceState)361         public void onCreate(Bundle savedInstanceState) {
362             super.onCreate(savedInstanceState);
363             if (FeatureFactory.getFactory(this)
364                     .getEnterprisePrivacyFeatureProvider(this)
365                     .showParentalControls()) {
366                 finish();
367             } else if (!EnterprisePrivacySettings.isPageEnabled(this)) {
368                 finish();
369             }
370         }
371     }
372     public static class WebViewAppPickerActivity extends SettingsActivity { /* empty */ }
373     public static class AdvancedConnectedDeviceActivity extends SettingsActivity { /* empty */ }
374     public static class BluetoothDeviceDetailActivity extends SettingsActivity { /* empty */ }
375     public static class BluetoothBroadcastActivity extends SettingsActivity { /* empty */ }
376     public static class BluetoothFindBroadcastsActivity extends SettingsActivity { /* empty */ }
377     public static class WifiCallingDisclaimerActivity extends SettingsActivity { /* empty */ }
378     public static class MobileNetworkListActivity extends SettingsActivity {}
379     public static class PowerMenuSettingsActivity extends SettingsActivity {}
380     public static class MobileNetworkActivity extends SettingsActivity {
381 
382         public static final String TAG = "MobileNetworkActivity";
383         public static final String EXTRA_MMS_MESSAGE = "mms_message";
384         public static final String EXTRA_SHOW_CAPABILITY_DISCOVERY_OPT_IN =
385                 "show_capability_discovery_opt_in";
386 
387         private MobileNetworkIntentConverter mIntentConverter;
388 
389         /**
390          * Override of #onNewIntent() requires Activity to have "singleTop" launch mode within
391          * AndroidManifest.xml
392          */
393         @Override
onNewIntent(Intent intent)394         protected void onNewIntent(Intent intent) {
395             super.onNewIntent(intent);
396 
397             Log.d(TAG, "Starting onNewIntent");
398 
399             createUiFromIntent(null /* savedState */, convertIntent(intent));
400         }
401 
402         @Override
getIntent()403         public Intent getIntent() {
404             return convertIntent(super.getIntent());
405         }
406 
convertIntent(Intent copyFrom)407         private Intent convertIntent(Intent copyFrom) {
408             if (mIntentConverter == null) {
409                 mIntentConverter = new MobileNetworkIntentConverter(this);
410             }
411             Intent intent = mIntentConverter.apply(copyFrom);
412             return (intent == null) ? copyFrom : intent;
413         }
414 
doesIntentContainOptInAction(Intent intent)415         public static boolean doesIntentContainOptInAction(Intent intent) {
416             String intentAction = (intent != null ? intent.getAction() : null);
417             return TextUtils.equals(intentAction,
418                     ImsRcsManager.ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN);
419         }
420     }
421 
422     /**
423      * Activity for BugReportHandlerPicker.
424      */
425     public static class BugReportHandlerPickerActivity extends SettingsActivity { /* empty */ }
426 
427     // Top level categories for new IA
428     public static class NetworkDashboardActivity extends SettingsActivity {}
429     public static class ConnectedDeviceDashboardActivity extends SettingsActivity {}
430     public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ }
431     public static class StorageDashboardActivity extends SettingsActivity {}
432     public static class AccountDashboardActivity extends SettingsActivity {}
433     public static class SystemDashboardActivity extends SettingsActivity {}
434 
435     /**
436      * Activity for MediaControlsSettings
437      */
438     public static class MediaControlsSettingsActivity extends SettingsActivity {}
439 
440     /**
441      * Activity for AppDashboard.
442      */
443     public static class AppDashboardActivity extends SettingsActivity {}
444 
445     public static class AdaptiveBrightnessActivity extends SettingsActivity { /* empty */ }
446 
447     /**
448      * Activity for OneHandedSettings
449      */
450     public static class OneHandedSettingsActivity extends SettingsActivity { /* empty */ }
451 }
452