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