Snap for 12854492 from 47d59ab974 to 25Q2-release

Change-Id: I748c316901e32c98e4d96d15064c916a4414cbd5
This commit is contained in:
Android Build Coastguard Worker
2024-12-27 18:17:12 -08:00
48 changed files with 243 additions and 203 deletions

View File

@@ -4460,19 +4460,6 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".security.ActionDisabledByAdvancedProtectionDialog"
android:theme="@style/Theme.AlertDialog"
android:taskAffinity="com.android.settings.security"
android:excludeFromRecents="true"
android:exported="false"
android:launchMode="singleTop"
android:featureFlag="android.security.aapm_api">
<intent-filter android:priority="1">
<action android:name="android.security.advancedprotection.action.SHOW_ADVANCED_PROTECTION_SUPPORT_DIALOG" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity <activity
android:name="Settings$ManageExternalStorageActivity" android:name="Settings$ManageExternalStorageActivity"
android:knownActivityEmbeddingCerts="@array/config_known_host_certs" android:knownActivityEmbeddingCerts="@array/config_known_host_certs"

View File

@@ -28,13 +28,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<com.android.settings.widget.SettingsMainSwitchBar
android:id="@+id/expressive_switch_bar"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dip"/>
<FrameLayout <FrameLayout
android:id="@+id/main_content" android:id="@+id/main_content"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -10696,11 +10696,6 @@
<string name="admin_financed_message">Your device administrator may be able to access data <string name="admin_financed_message">Your device administrator may be able to access data
associated with this device, manage apps, and change this device\s settings.</string> associated with this device, manage apps, and change this device\s settings.</string>
<!-- Title for dialog displayed when user taps a setting on their phone that's blocked by Advanced Protection. [CHAR LIMIT=50] -->
<string name="disabled_by_advanced_protection_title">Prevented by Advanced Protection</string>
<!-- Short summary for dialog displayed when user taps a setting on their phone that's blocked by Advanced Protection. [CHAR LIMIT=NONE] -->
<string name="disabled_by_advanced_protection_message">This action is not allowed because Advanced Protection is on for your device.</string>
<!-- Turn off a conditional state of the device (e.g. airplane mode, or hotspot) [CHAR LIMIT=30] --> <!-- Turn off a conditional state of the device (e.g. airplane mode, or hotspot) [CHAR LIMIT=30] -->
<string name="condition_turn_off">Turn off</string> <string name="condition_turn_off">Turn off</string>

View File

@@ -311,10 +311,7 @@ public class SettingsActivity extends SettingsBaseActivity
} }
setContentView(R.layout.settings_main_prefs); setContentView(R.layout.settings_main_prefs);
mMainSwitch = findViewById(R.id.switch_bar);
mMainSwitch = SettingsThemeHelper.isExpressiveTheme(this)
? findViewById(R.id.expressive_switch_bar)
: findViewById(R.id.switch_bar);
if (mMainSwitch != null) { if (mMainSwitch != null) {
mMainSwitch.setMetricsCategory(lookupMetricsCategory()); mMainSwitch.setMetricsCategory(lookupMetricsCategory());
mMainSwitch.setTranslationZ(findViewById(R.id.main_content).getTranslationZ() + 1); mMainSwitch.setTranslationZ(findViewById(R.id.main_content).getTranslationZ() + 1);

View File

@@ -43,7 +43,8 @@ import com.android.settings.overlay.FeatureFactoryImpl;
import com.android.settings.spa.SettingsSpaEnvironment; import com.android.settings.spa.SettingsSpaEnvironment;
import com.android.settingslib.applications.AppIconCacheManager; import com.android.settingslib.applications.AppIconCacheManager;
import com.android.settingslib.datastore.BackupRestoreStorageManager; import com.android.settingslib.datastore.BackupRestoreStorageManager;
import com.android.settingslib.metadata.PreferenceScreenMetadata; import com.android.settingslib.metadata.FixedArrayMap;
import com.android.settingslib.metadata.PreferenceScreenMetadataCreator;
import com.android.settingslib.metadata.PreferenceScreenRegistry; import com.android.settingslib.metadata.PreferenceScreenRegistry;
import com.android.settingslib.metadata.ProvidePreferenceScreenOptions; import com.android.settingslib.metadata.ProvidePreferenceScreenOptions;
import com.android.settingslib.preference.PreferenceBindingFactory; import com.android.settingslib.preference.PreferenceBindingFactory;
@@ -52,7 +53,6 @@ import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.List;
/** Settings application which sets up activity embedding rules for the large screen device. */ /** Settings application which sets up activity embedding rules for the large screen device. */
@ProvidePreferenceScreenOptions( @ProvidePreferenceScreenOptions(
@@ -75,8 +75,8 @@ public class SettingsApplication extends Application {
super.onCreate(); super.onCreate();
if (Flags.catalyst()) { if (Flags.catalyst()) {
PreferenceScreenRegistry.INSTANCE.setPreferenceScreensSupplier( PreferenceScreenRegistry.INSTANCE.setPreferenceScreenMetadataCreators(
this::getPreferenceScreens); getPreferenceScreenCreators());
PreferenceBindingFactory.setDefaultFactory(new SettingsPreferenceBindingFactory()); PreferenceBindingFactory.setDefaultFactory(new SettingsPreferenceBindingFactory());
} }
@@ -106,11 +106,11 @@ public class SettingsApplication extends Application {
registerActivityLifecycleCallbacks(new DeveloperOptionsActivityLifecycle()); registerActivityLifecycleCallbacks(new DeveloperOptionsActivityLifecycle());
} }
/** Returns the screens using metadata. */ /** Returns the creators of preference screen metadata. */
protected List<PreferenceScreenMetadata> getPreferenceScreens() { protected FixedArrayMap<String, PreferenceScreenMetadataCreator> getPreferenceScreenCreators() {
// PreferenceScreenCollector is generated by annotation processor from classes annotated // PreferenceScreenCollector is generated by annotation processor from classes annotated
// with @ProvidePreferenceScreen // with @ProvidePreferenceScreen
return PreferenceScreenCollector.get(this); return PreferenceScreenCollector.get();
} }
@Override @Override

View File

@@ -26,7 +26,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(ColorAndMotionScreen.KEY)
class ColorAndMotionScreen : PreferenceScreenCreator { class ColorAndMotionScreen : PreferenceScreenCreator {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -44,7 +44,7 @@ class ColorAndMotionScreen : PreferenceScreenCreator {
override fun fragmentClass() = ColorAndMotionFragment::class.java override fun fragmentClass() = ColorAndMotionFragment::class.java
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
+RemoveAnimationsPreference() +RemoveAnimationsPreference()
} }

View File

@@ -54,6 +54,9 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver {
static final String ACTION_RESTORED = static final String ACTION_RESTORED =
"com.android.settings.accessibility.ACTION_HIGH_CONTRAST_TEXT_RESTORED"; "com.android.settings.accessibility.ACTION_HIGH_CONTRAST_TEXT_RESTORED";
@VisibleForTesting @VisibleForTesting
static final String ACTION_OPEN_SETTINGS =
"com.android.settings.accessibility.ACTION_OPEN_HIGH_CONTRAST_TEXT_SETTINGS";
@VisibleForTesting
static final int NOTIFICATION_ID = 1; static final int NOTIFICATION_ID = 1;
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@@ -74,7 +77,16 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver {
return; return;
} }
if (ACTION_RESTORED.equals(intent.getAction())) { if (ACTION_OPEN_SETTINGS.equals(intent.getAction())) {
// Close notification drawer before opening the HCT setting.
context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
Intent settingsIntent = createHighContrastTextSettingsIntent(context);
settingsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(settingsIntent);
context.getSystemService(NotificationManager.class).cancel(NOTIFICATION_ID);
} else if (ACTION_RESTORED.equals(intent.getAction())) {
Log.i(TAG, "HCT attempted to be restored from backup; showing notification for userId: " Log.i(TAG, "HCT attempted to be restored from backup; showing notification for userId: "
+ context.getUserId()); + context.getUserId());
Settings.Secure.putInt(context.getContentResolver(), Settings.Secure.putInt(context.getContentResolver(),
@@ -125,21 +137,20 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver {
R.string.accessibility_notification_high_contrast_text_content)) R.string.accessibility_notification_high_contrast_text_content))
.setFlag(Notification.FLAG_NO_CLEAR, true); .setFlag(Notification.FLAG_NO_CLEAR, true);
Intent settingsIntent = new Intent(Settings.ACTION_TEXT_READING_SETTINGS); Intent settingsIntent = createHighContrastTextSettingsIntent(context);
settingsIntent.setPackage(context.getPackageName());
if (settingsIntent.resolveActivity(context.getPackageManager()) != null) { if (settingsIntent.resolveActivity(context.getPackageManager()) != null) {
Bundle fragmentArgs = new Bundle();
fragmentArgs.putString(EXTRA_FRAGMENT_ARG_KEY,
TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY);
settingsIntent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs);
PendingIntent settingsPendingIntent = PendingIntent.getActivity(context, PendingIntent settingsPendingIntent = PendingIntent.getActivity(context,
/* requestCode = */ 0, settingsIntent, PendingIntent.FLAG_IMMUTABLE); /* requestCode = */ 0, settingsIntent, PendingIntent.FLAG_IMMUTABLE);
Intent actionIntent = new Intent(context, HighContrastTextMigrationReceiver.class);
actionIntent.setAction(ACTION_OPEN_SETTINGS);
PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0,
actionIntent, PendingIntent.FLAG_IMMUTABLE);
Notification.Action settingsAction = new Notification.Action.Builder( Notification.Action settingsAction = new Notification.Action.Builder(
/* icon= */ null, /* icon= */ null,
context.getString( context.getString(
R.string.accessibility_notification_high_contrast_text_action), R.string.accessibility_notification_high_contrast_text_action),
settingsPendingIntent actionPendingIntent
).build(); ).build();
notificationBuilder notificationBuilder
@@ -156,4 +167,14 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver {
notificationManager.createNotificationChannel(notificationChannel); notificationManager.createNotificationChannel(notificationChannel);
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
} }
private Intent createHighContrastTextSettingsIntent(Context context) {
Intent settingsIntent = new Intent(Settings.ACTION_TEXT_READING_SETTINGS);
settingsIntent.setPackage(context.getPackageName());
Bundle fragmentArgs = new Bundle();
fragmentArgs.putString(EXTRA_FRAGMENT_ARG_KEY,
TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY);
settingsIntent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs);
return settingsIntent;
}
} }

View File

@@ -22,7 +22,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(TextReadingScreen.KEY)
class TextReadingScreen : PreferenceScreenCreator { class TextReadingScreen : PreferenceScreenCreator {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -36,7 +36,7 @@ class TextReadingScreen : PreferenceScreenCreator {
override fun hasCompleteHierarchy() = false override fun hasCompleteHierarchy() = false
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {}
companion object { companion object {
const val KEY = "text_reading_screen" const val KEY = "text_reading_screen"

View File

@@ -31,7 +31,7 @@ import com.android.settingslib.preference.PreferenceScreenCreator
// We might be able to consolidate this into VibrationScreen with PreferenceHierarchy choosing // We might be able to consolidate this into VibrationScreen with PreferenceHierarchy choosing
// between toggle or slider preferences based on device config, depending on how overlays are done. // between toggle or slider preferences based on device config, depending on how overlays are done.
// LINT.IfChange // LINT.IfChange
@ProvidePreferenceScreen @ProvidePreferenceScreen(VibrationIntensityScreen.KEY)
class VibrationIntensityScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { class VibrationIntensityScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -52,7 +52,7 @@ class VibrationIntensityScreen : PreferenceScreenCreator, PreferenceAvailability
override fun fragmentClass(): Class<out Fragment>? = override fun fragmentClass(): Class<out Fragment>? =
VibrationIntensitySettingsFragment::class.java VibrationIntensitySettingsFragment::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {
+VibrationMainSwitchPreference() +VibrationMainSwitchPreference()
} }

View File

@@ -29,7 +29,7 @@ import com.android.settingslib.preference.PreferenceScreenCreator
* Accessibility settings for vibration. * Accessibility settings for vibration.
*/ */
// LINT.IfChange // LINT.IfChange
@ProvidePreferenceScreen @ProvidePreferenceScreen(VibrationScreen.KEY)
class VibrationScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { class VibrationScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -49,7 +49,7 @@ class VibrationScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider
override fun fragmentClass(): Class<out Fragment>? = VibrationSettings::class.java override fun fragmentClass(): Class<out Fragment>? = VibrationSettings::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {
+VibrationMainSwitchPreference() +VibrationMainSwitchPreference()
} }

View File

@@ -27,7 +27,6 @@ import static com.android.settings.Utils.isPrivateProfile;
import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST; import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST;
import static com.android.settings.biometrics.BiometricEnrollBase.EXTRA_FROM_SETTINGS_SUMMARY; import static com.android.settings.biometrics.BiometricEnrollBase.EXTRA_FROM_SETTINGS_SUMMARY;
import static com.android.settings.biometrics.BiometricEnrollBase.EXTRA_KEY_CHALLENGE; import static com.android.settings.biometrics.BiometricEnrollBase.EXTRA_KEY_CHALLENGE;
import static com.android.settings.flags.Flags.screenOffUnlockPowerOptimization;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
@@ -603,11 +602,6 @@ public class FingerprintSettings extends SubSettings {
} }
private boolean isUltrasnoicUdfps() { private boolean isUltrasnoicUdfps() {
// b/368465560 Gate either ultrasonic or optical UDFPS if the power do not optimized
if (!screenOffUnlockPowerOptimization()) {
return false;
}
mFingerprintManager = Utils.getFingerprintManagerOrNull(getActivity()); mFingerprintManager = Utils.getFingerprintManagerOrNull(getActivity());
if (mFingerprintManager != null) { if (mFingerprintManager != null) {
mSensorProperties = mFingerprintManager.getSensorPropertiesInternal(); mSensorProperties = mFingerprintManager.getSensorPropertiesInternal();

View File

@@ -25,7 +25,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(BluetoothDashboardScreen.KEY)
class BluetoothDashboardScreen : PreferenceScreenCreator { class BluetoothDashboardScreen : PreferenceScreenCreator {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -46,7 +46,7 @@ class BluetoothDashboardScreen : PreferenceScreenCreator {
makeLaunchIntent(context, BluetoothDashboardActivity::class.java, metadata?.key) makeLaunchIntent(context, BluetoothDashboardActivity::class.java, metadata?.key)
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
val bluetoothDataStore = BluetoothPreference.createDataStore(context) val bluetoothDataStore = BluetoothPreference.createDataStore(context)
+BluetoothPreference(bluetoothDataStore) +BluetoothPreference(bluetoothDataStore)
+BluetoothFooterPreference(bluetoothDataStore) +BluetoothFooterPreference(bluetoothDataStore)

View File

@@ -16,6 +16,7 @@
package com.android.settings.connecteddevice package com.android.settings.connecteddevice
import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.bluetooth.BluetoothAdapter import android.bluetooth.BluetoothAdapter
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
@@ -35,6 +36,7 @@ import com.android.settingslib.WirelessUtils
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.Permissions
import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel import com.android.settingslib.metadata.SensitivityLevel
@@ -52,6 +54,11 @@ class BluetoothPreference(private val bluetoothDataStore: BluetoothDataStore) :
override val restrictionKeys: Array<String> override val restrictionKeys: Array<String>
get() = arrayOf(UserManager.DISALLOW_BLUETOOTH, UserManager.DISALLOW_CONFIG_BLUETOOTH) get() = arrayOf(UserManager.DISALLOW_BLUETOOTH, UserManager.DISALLOW_CONFIG_BLUETOOTH)
override fun getReadPermissions(context: Context) = Permissions.EMPTY
override fun getWritePermissions(context: Context) =
Permissions.allOf(Manifest.permission.BLUETOOTH_CONNECT)
override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW

View File

@@ -16,12 +16,14 @@
package com.android.settings.datausage package com.android.settings.datausage
import android.Manifest
import android.content.Context import android.content.Context
import com.android.settings.R import com.android.settings.R
import com.android.settings.widget.MainSwitchBarMetadata import com.android.settings.widget.MainSwitchBarMetadata
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.Permissions
import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel import com.android.settingslib.metadata.SensitivityLevel
@@ -36,6 +38,12 @@ class DataSaverMainSwitchPreference : MainSwitchBarMetadata, PreferenceLifecycle
override fun storage(context: Context) = createDataStore(context) override fun storage(context: Context) = createDataStore(context)
override fun getReadPermissions(context: Context) =
Permissions.allOf(Manifest.permission.MANAGE_NETWORK_POLICY)
override fun getWritePermissions(context: Context) =
Permissions.allOf(Manifest.permission.MANAGE_NETWORK_POLICY)
override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW

View File

@@ -20,6 +20,7 @@ import android.content.Context
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import com.android.settings.R import com.android.settings.R
import com.android.settings.Settings.DataSaverSummaryActivity import com.android.settings.Settings.DataSaverSummaryActivity
import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settings.utils.makeLaunchIntent import com.android.settings.utils.makeLaunchIntent
import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.HandlerExecutor
@@ -32,9 +33,8 @@ import com.android.settingslib.metadata.PreferenceSummaryProvider
import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY
@ProvidePreferenceScreen @ProvidePreferenceScreen(DataSaverScreen.KEY)
class DataSaverScreen(context: Context) : class DataSaverScreen(context: Context) :
PreferenceScreenCreator, PreferenceScreenCreator,
PreferenceAvailabilityProvider, PreferenceAvailabilityProvider,
@@ -75,7 +75,7 @@ class DataSaverScreen(context: Context) :
makeLaunchIntent(context, DataSaverSummaryActivity::class.java, metadata?.key) makeLaunchIntent(context, DataSaverSummaryActivity::class.java, metadata?.key)
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { +DataSaverMainSwitchPreference() } preferenceHierarchy(context, this) { +DataSaverMainSwitchPreference() }
override fun hasCompleteHierarchy() = false override fun hasCompleteHierarchy() = false

View File

@@ -27,7 +27,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(MyDeviceInfoScreen.KEY)
class MyDeviceInfoScreen : class MyDeviceInfoScreen :
PreferenceScreenCreator, PreferenceSummaryProvider, PreferenceIconProvider { PreferenceScreenCreator, PreferenceSummaryProvider, PreferenceIconProvider {
override val key: String override val key: String
@@ -52,7 +52,7 @@ class MyDeviceInfoScreen :
override fun fragmentClass() = MyDeviceInfoFragment::class.java override fun fragmentClass() = MyDeviceInfoFragment::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {}
override fun hasCompleteHierarchy() = false override fun hasCompleteHierarchy() = false

View File

@@ -25,7 +25,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(FirmwareVersionScreen.KEY)
class FirmwareVersionScreen : PreferenceScreenCreator, PreferenceSummaryProvider { class FirmwareVersionScreen : PreferenceScreenCreator, PreferenceSummaryProvider {
override fun isFlagEnabled(context: Context) = Flags.catalystFirmwareVersion() override fun isFlagEnabled(context: Context) = Flags.catalystFirmwareVersion()
@@ -45,7 +45,7 @@ class FirmwareVersionScreen : PreferenceScreenCreator, PreferenceSummaryProvider
override fun fragmentClass() = FirmwareVersionSettings::class.java override fun fragmentClass() = FirmwareVersionSettings::class.java
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
+FirmwareVersionDetailPreference() +FirmwareVersionDetailPreference()
+SecurityPatchLevelPreference() +SecurityPatchLevelPreference()
+MainlineModuleVersionPreference() +MainlineModuleVersionPreference()

View File

@@ -23,7 +23,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(LegalSettingsScreen.KEY)
open class LegalSettingsScreen : PreferenceScreenCreator { open class LegalSettingsScreen : PreferenceScreenCreator {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -36,7 +36,7 @@ open class LegalSettingsScreen : PreferenceScreenCreator {
override fun fragmentClass() = LegalSettings::class.java override fun fragmentClass() = LegalSettings::class.java
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
+LegalPreference("copyright", R.string.copyright_title, "android.settings.COPYRIGHT") +LegalPreference("copyright", R.string.copyright_title, "android.settings.COPYRIGHT")
+LegalPreference("license", R.string.license_title, "android.settings.LICENSE") +LegalPreference("license", R.string.license_title, "android.settings.LICENSE")
+LegalPreference("terms", R.string.terms_title, "android.settings.TERMS") +LegalPreference("terms", R.string.terms_title, "android.settings.TERMS")

View File

@@ -23,7 +23,7 @@ import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
// LINT.IfChange // LINT.IfChange
@ProvidePreferenceScreen @ProvidePreferenceScreen(ModuleLicensesScreen.KEY)
class ModuleLicensesScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { class ModuleLicensesScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -39,7 +39,7 @@ class ModuleLicensesScreen : PreferenceScreenCreator, PreferenceAvailabilityProv
override fun fragmentClass() = ModuleLicensesDashboard::class.java override fun fragmentClass() = ModuleLicensesDashboard::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {}
override fun isAvailable(context: Context): Boolean { override fun isAvailable(context: Context): Boolean {
val modules = context.packageManager.getInstalledModules(/* flags= */ 0) val modules = context.packageManager.getInstalledModules(/* flags= */ 0)

View File

@@ -40,7 +40,7 @@ import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenBinding import com.android.settingslib.preference.PreferenceScreenBinding
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(AutoBrightnessScreen.KEY)
class AutoBrightnessScreen : class AutoBrightnessScreen :
PreferenceScreenCreator, PreferenceScreenCreator,
PreferenceScreenBinding, PreferenceScreenBinding,
@@ -60,7 +60,7 @@ class AutoBrightnessScreen :
override fun hasCompleteHierarchy() = false override fun hasCompleteHierarchy() = false
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {}
override fun storage(context: Context): KeyValueStore = override fun storage(context: Context): KeyValueStore =
AutoBrightnessDataStore(SettingsSystemStore.get(context)) AutoBrightnessDataStore(SettingsSystemStore.get(context))

View File

@@ -30,7 +30,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(DisplayScreen.KEY)
open class DisplayScreen : open class DisplayScreen :
PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider { PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider {
override val key: String override val key: String
@@ -52,7 +52,7 @@ open class DisplayScreen :
override fun fragmentClass() = DisplaySettings::class.java override fun fragmentClass() = DisplaySettings::class.java
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
+BrightnessLevelPreference() +BrightnessLevelPreference()
+AutoBrightnessScreen.KEY +AutoBrightnessScreen.KEY
+LockScreenPreferenceScreen.KEY +LockScreenPreferenceScreen.KEY

View File

@@ -27,7 +27,7 @@ import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
// TODO(b/368359967): The entry point logic is not yet migrated // TODO(b/368359967): The entry point logic is not yet migrated
@ProvidePreferenceScreen @ProvidePreferenceScreen(ScreenTimeoutScreen.KEY)
class ScreenTimeoutScreen : PreferenceScreenCreator { class ScreenTimeoutScreen : PreferenceScreenCreator {
override val key: String override val key: String
@@ -43,7 +43,7 @@ class ScreenTimeoutScreen : PreferenceScreenCreator {
override fun hasCompleteHierarchy() = false override fun hasCompleteHierarchy() = false
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { +AdaptiveSleepPreference() } preferenceHierarchy(context, this) { +AdaptiveSleepPreference() }
override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?) = override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?) =
makeLaunchIntent(context, ScreenTimeoutActivity::class.java, metadata?.key) makeLaunchIntent(context, ScreenTimeoutActivity::class.java, metadata?.key)

View File

@@ -37,7 +37,7 @@ import com.android.settingslib.preference.PreferenceScreenBinding
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
// LINT.IfChange // LINT.IfChange
@ProvidePreferenceScreen @ProvidePreferenceScreen(DarkModeScreen.KEY)
class DarkModeScreen(context: Context) : class DarkModeScreen(context: Context) :
PreferenceScreenCreator, PreferenceScreenCreator,
PreferenceScreenBinding, PreferenceScreenBinding,
@@ -80,7 +80,7 @@ class DarkModeScreen(context: Context) :
override fun hasCompleteHierarchy() = false override fun hasCompleteHierarchy() = false
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {}
override fun storage(context: Context): KeyValueStore = darkModeStorage override fun storage(context: Context): KeyValueStore = darkModeStorage
@@ -89,8 +89,8 @@ class DarkModeScreen(context: Context) :
override fun bind(preference: Preference, metadata: PreferenceMetadata) { override fun bind(preference: Preference, metadata: PreferenceMetadata) {
super.bind(preference, metadata) super.bind(preference, metadata)
if (preference is DarkModePreference) preference.setCatalystEnabled(true) if (preference is DarkModePreference) preference.setCatalystEnabled(true)
(preference as PrimarySwitchPreference).apply { (preference as? PrimarySwitchPreference)?.apply {
isSwitchEnabled = isEnabled() isSwitchEnabled = isEnabled
isChecked = darkModeStorage.getBoolean(KEY) == true isChecked = darkModeStorage.getBoolean(KEY) == true
} }
} }

View File

@@ -109,9 +109,12 @@ public class ActionDisabledByAdminDialog extends Activity
} }
if (enforcingAdmin.getAuthority() instanceof UnknownAuthority authority if (enforcingAdmin.getAuthority() instanceof UnknownAuthority authority
&& ADVANCED_PROTECTION_SYSTEM_ENTITY.equals(authority.getName())) { && ADVANCED_PROTECTION_SYSTEM_ENTITY.equals(authority.getName())) {
Intent apmSupportIntent = AdvancedProtectionManager AdvancedProtectionManager apm = getSystemService(AdvancedProtectionManager.class);
.createSupportIntentForPolicyIdentifierOrRestriction(restriction, if (apm == null) {
AdvancedProtectionManager.SUPPORT_DIALOG_TYPE_UNKNOWN); return;
}
Intent apmSupportIntent = apm.createSupportIntentForPolicyIdentifierOrRestriction(
restriction, /* type */ null);
startActivityAsUser(apmSupportIntent, UserHandle.of(userId)); startActivityAsUser(apmSupportIntent, UserHandle.of(userId));
finish(); finish();
} else { } else {

View File

@@ -22,7 +22,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(BatterySaverScreen.KEY)
open class BatterySaverScreen : PreferenceScreenCreator { open class BatterySaverScreen : PreferenceScreenCreator {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -40,7 +40,7 @@ open class BatterySaverScreen : PreferenceScreenCreator {
override fun hasCompleteHierarchy() = false override fun hasCompleteHierarchy() = false
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { +BatterySaverPreference() order -100 } preferenceHierarchy(context, this) { +BatterySaverPreference() order -100 }
companion object { companion object {
const val KEY = "battery_saver_screen" const val KEY = "battery_saver_screen"

View File

@@ -26,7 +26,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(PowerUsageSummaryScreen.KEY)
class PowerUsageSummaryScreen : class PowerUsageSummaryScreen :
PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider { PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider {
override val key: String override val key: String
@@ -54,7 +54,8 @@ class PowerUsageSummaryScreen :
R.drawable.ic_settings_battery_white R.drawable.ic_settings_battery_white
} }
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(context, this) {
+BatteryHeaderPreference() +BatteryHeaderPreference()
+BatteryPercentageSwitchPreference() +BatteryPercentageSwitchPreference()
} }

View File

@@ -15,18 +15,14 @@
*/ */
package com.android.settings.language package com.android.settings.language
import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.pm.PackageManager
import com.android.settings.R import com.android.settings.R
import com.android.settings.Settings.LanguageSettingsActivity
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(LanguageSettingScreen.KEY)
class LanguageSettingScreen : PreferenceScreenCreator { class LanguageSettingScreen : PreferenceScreenCreator {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -46,7 +42,7 @@ class LanguageSettingScreen: PreferenceScreenCreator {
override fun fragmentClass() = LanguageSettings::class.java override fun fragmentClass() = LanguageSettings::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {}
companion object { companion object {
const val KEY = "language_setting" const val KEY = "language_setting"

View File

@@ -25,7 +25,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(LocationScreen.KEY)
class LocationScreen : PreferenceScreenCreator, PreferenceSummaryProvider, PreferenceIconProvider { class LocationScreen : PreferenceScreenCreator, PreferenceSummaryProvider, PreferenceIconProvider {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -57,7 +57,7 @@ class LocationScreen : PreferenceScreenCreator, PreferenceSummaryProvider, Prefe
override fun fragmentClass() = LocationSettings::class.java override fun fragmentClass() = LocationSettings::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {}
companion object { companion object {
const val KEY = "location_settings" const val KEY = "location_settings"

View File

@@ -23,7 +23,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(AdaptiveConnectivityScreen.KEY)
class AdaptiveConnectivityScreen : PreferenceScreenCreator { class AdaptiveConnectivityScreen : PreferenceScreenCreator {
override val key override val key
get() = KEY get() = KEY
@@ -35,7 +35,7 @@ class AdaptiveConnectivityScreen : PreferenceScreenCreator {
override fun fragmentClass() = AdaptiveConnectivitySettings::class.java override fun fragmentClass() = AdaptiveConnectivitySettings::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {
+AdaptiveConnectivityTogglePreference() +AdaptiveConnectivityTogglePreference()
} }

View File

@@ -16,6 +16,7 @@
package com.android.settings.network package com.android.settings.network
import android.Manifest
import android.content.Context import android.content.Context
import android.net.wifi.WifiManager import android.net.wifi.WifiManager
import android.provider.Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED import android.provider.Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED
@@ -24,6 +25,7 @@ import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObservableDelegate import com.android.settingslib.datastore.KeyedObservableDelegate
import com.android.settingslib.datastore.SettingsSecureStore import com.android.settingslib.datastore.SettingsSecureStore
import com.android.settingslib.datastore.SettingsStore import com.android.settingslib.datastore.SettingsStore
import com.android.settingslib.datastore.and
import com.android.settingslib.metadata.MainSwitchPreference import com.android.settingslib.metadata.MainSwitchPreference
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel import com.android.settingslib.metadata.SensitivityLevel
@@ -35,6 +37,11 @@ class AdaptiveConnectivityTogglePreference :
override fun storage(context: Context): KeyValueStore = override fun storage(context: Context): KeyValueStore =
AdaptiveConnectivityToggleStorage(context, SettingsSecureStore.get(context)) AdaptiveConnectivityToggleStorage(context, SettingsSecureStore.get(context))
override fun getReadPermissions(context: Context) = SettingsSecureStore.getReadPermissions()
override fun getWritePermissions(context: Context) =
SettingsSecureStore.getWritePermissions() and Manifest.permission.NETWORK_SETTINGS
override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW

View File

@@ -65,6 +65,10 @@ class AirplaneModePreference :
override val restrictionKeys override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_AIRPLANE_MODE) get() = arrayOf(UserManager.DISALLOW_AIRPLANE_MODE)
override fun getReadPermissions(context: Context) = SettingsGlobalStore.getReadPermissions()
override fun getWritePermissions(context: Context) = SettingsGlobalStore.getWritePermissions()
override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW

View File

@@ -46,7 +46,7 @@ import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenBinding import com.android.settingslib.preference.PreferenceScreenBinding
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(MobileNetworkListScreen.KEY)
class MobileNetworkListScreen : class MobileNetworkListScreen :
PreferenceScreenCreator, PreferenceScreenCreator,
PreferenceScreenBinding, PreferenceScreenBinding,
@@ -160,7 +160,7 @@ class MobileNetworkListScreen :
override fun fragmentClass() = MobileNetworkListFragment::class.java override fun fragmentClass() = MobileNetworkListFragment::class.java
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { +MobileDataPreference() } preferenceHierarchy(context, this) { +MobileDataPreference() }
companion object { companion object {
const val KEY = "mobile_network_list" const val KEY = "mobile_network_list"

View File

@@ -27,7 +27,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(NetworkDashboardScreen.KEY)
class NetworkDashboardScreen : PreferenceScreenCreator, PreferenceIconProvider { class NetworkDashboardScreen : PreferenceScreenCreator, PreferenceIconProvider {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -51,7 +51,7 @@ class NetworkDashboardScreen : PreferenceScreenCreator, PreferenceIconProvider {
makeLaunchIntent(context, NetworkDashboardActivity::class.java, metadata?.key) makeLaunchIntent(context, NetworkDashboardActivity::class.java, metadata?.key)
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
+MobileNetworkListScreen.KEY order -15 +MobileNetworkListScreen.KEY order -15
+AirplaneModePreference() order -5 +AirplaneModePreference() order -5
+DataSaverScreen.KEY order 10 +DataSaverScreen.KEY order 10

View File

@@ -26,7 +26,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(NetworkProviderScreen.KEY)
class NetworkProviderScreen : class NetworkProviderScreen :
PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceRestrictionMixin { PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceRestrictionMixin {
override val key: String override val key: String
@@ -55,7 +55,7 @@ class NetworkProviderScreen :
override fun fragmentClass() = NetworkProviderSettings::class.java override fun fragmentClass() = NetworkProviderSettings::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {
+WifiSwitchPreference() +WifiSwitchPreference()
} }

View File

@@ -35,7 +35,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(TetherScreen.KEY)
class TetherScreen : class TetherScreen :
PreferenceScreenCreator, PreferenceScreenCreator,
PreferenceTitleProvider, PreferenceTitleProvider,
@@ -76,7 +76,7 @@ class TetherScreen :
makeLaunchIntent(context, TetherSettingsActivity::class.java, metadata?.key) makeLaunchIntent(context, TetherSettingsActivity::class.java, metadata?.key)
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
val dataSaverStore = DataSaverMainSwitchPreference.createDataStore(context) val dataSaverStore = DataSaverMainSwitchPreference.createDataStore(context)
+WifiHotspotSwitchPreference(context, dataSaverStore) +WifiHotspotSwitchPreference(context, dataSaverStore)
} }

View File

@@ -16,7 +16,11 @@
package com.android.settings.notification package com.android.settings.notification
import android.Manifest.permission.MODIFY_AUDIO_SETTINGS
import android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED
import android.Manifest.permission.MODIFY_PHONE_STATE
import android.content.Context import android.content.Context
import android.content.pm.PackageManager.FEATURE_AUTOMOTIVE
import android.media.AudioManager import android.media.AudioManager
import android.media.AudioManager.STREAM_BLUETOOTH_SCO import android.media.AudioManager.STREAM_BLUETOOTH_SCO
import android.media.AudioManager.STREAM_VOICE_CALL import android.media.AudioManager.STREAM_VOICE_CALL
@@ -26,6 +30,8 @@ import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.datastore.Permissions
import com.android.settingslib.datastore.and
import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceIconProvider import com.android.settingslib.metadata.PreferenceIconProvider
@@ -76,9 +82,19 @@ open class CallVolumePreference :
} }
} }
override fun getReadPermissions(context: Context) = Permissions.EMPTY
override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW
override fun getWritePermissions(context: Context): Permissions? {
var permissions = Permissions.allOf(MODIFY_AUDIO_SETTINGS, MODIFY_PHONE_STATE)
if (context.packageManager.hasSystemFeature(FEATURE_AUTOMOTIVE)) {
permissions = permissions and MODIFY_AUDIO_SETTINGS_PRIVILEGED
}
return permissions
}
override fun getWritePermit(context: Context, value: Int?, callingPid: Int, callingUid: Int) = override fun getWritePermit(context: Context, value: Int?, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW

View File

@@ -16,7 +16,10 @@
package com.android.settings.notification package com.android.settings.notification
import android.Manifest.permission.MODIFY_AUDIO_SETTINGS
import android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED
import android.content.Context import android.content.Context
import android.content.pm.PackageManager.FEATURE_AUTOMOTIVE
import android.media.AudioManager.STREAM_MUSIC import android.media.AudioManager.STREAM_MUSIC
import android.os.UserManager import android.os.UserManager
import androidx.preference.Preference import androidx.preference.Preference
@@ -24,6 +27,8 @@ import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.datastore.Permissions
import com.android.settingslib.datastore.and
import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceIconProvider import com.android.settingslib.metadata.PreferenceIconProvider
@@ -77,9 +82,19 @@ open class MediaVolumePreference :
} }
} }
override fun getReadPermissions(context: Context) = Permissions.EMPTY
override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW
override fun getWritePermissions(context: Context): Permissions? {
var permissions = Permissions.allOf(MODIFY_AUDIO_SETTINGS)
if (context.packageManager.hasSystemFeature(FEATURE_AUTOMOTIVE)) {
permissions = permissions and MODIFY_AUDIO_SETTINGS_PRIVILEGED
}
return permissions
}
override fun getWritePermit(context: Context, value: Int?, callingPid: Int, callingUid: Int) = override fun getWritePermit(context: Context, value: Int?, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW

View File

@@ -16,6 +16,8 @@
package com.android.settings.notification package com.android.settings.notification
import android.Manifest.permission.MODIFY_AUDIO_SETTINGS
import android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED
import android.app.INotificationManager import android.app.INotificationManager
import android.app.NotificationManager import android.app.NotificationManager
import android.app.NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED import android.app.NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED
@@ -24,6 +26,7 @@ import android.content.Context
import android.content.Context.NOTIFICATION_SERVICE import android.content.Context.NOTIFICATION_SERVICE
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.content.pm.PackageManager.FEATURE_AUTOMOTIVE
import android.media.AudioManager import android.media.AudioManager
import android.media.AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION import android.media.AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION
import android.media.AudioManager.RINGER_MODE_NORMAL import android.media.AudioManager.RINGER_MODE_NORMAL
@@ -40,6 +43,8 @@ import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.datastore.Permissions
import com.android.settingslib.datastore.and
import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceIconProvider import com.android.settingslib.metadata.PreferenceIconProvider
@@ -94,9 +99,19 @@ open class SeparateRingVolumePreference :
} }
} }
override fun getReadPermissions(context: Context) = Permissions.EMPTY
override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW
override fun getWritePermissions(context: Context): Permissions? {
var permissions = Permissions.allOf(MODIFY_AUDIO_SETTINGS)
if (context.packageManager.hasSystemFeature(FEATURE_AUTOMOTIVE)) {
permissions = permissions and MODIFY_AUDIO_SETTINGS_PRIVILEGED
}
return permissions
}
override fun getWritePermit(context: Context, value: Int?, callingPid: Int, callingUid: Int) = override fun getWritePermit(context: Context, value: Int?, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW

View File

@@ -27,7 +27,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(SoundScreen.KEY)
class SoundScreen : PreferenceScreenCreator, PreferenceIconProvider { class SoundScreen : PreferenceScreenCreator, PreferenceIconProvider {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -51,7 +51,7 @@ class SoundScreen : PreferenceScreenCreator, PreferenceIconProvider {
override fun fragmentClass(): Class<out Fragment>? = SoundSettings::class.java override fun fragmentClass(): Class<out Fragment>? = SoundSettings::class.java
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
+MediaVolumePreference() order -180 +MediaVolumePreference() order -180
+CallVolumePreference() order -170 +CallVolumePreference() order -170
+SeparateRingVolumePreference() order -155 +SeparateRingVolumePreference() order -155

View File

@@ -1,59 +0,0 @@
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.security;
import android.app.Activity
import android.content.DialogInterface
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.android.settings.R
import androidx.appcompat.app.AlertDialog;
class ActionDisabledByAdvancedProtectionDialog : Activity(), DialogInterface.OnDismissListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val dialogView = layoutInflater.inflate(R.layout.support_details_dialog, null) as ViewGroup
val builder = AlertDialog.Builder(this)
.setPositiveButton(R.string.okay, null)
.setView(dialogView)
.setOnDismissListener(this)
initializeDialogView(dialogView)
builder.show()
}
override fun onDismiss(dialog: DialogInterface) {
finish()
}
private fun initializeDialogView(dialogView: View) {
setSupportTitle(dialogView)
setSupportDetails(dialogView)
}
private fun setSupportTitle(root: View) {
val titleView: TextView = root.findViewById(R.id.admin_support_dialog_title) ?: return
titleView.setText(R.string.disabled_by_advanced_protection_title)
}
private fun setSupportDetails(root: View) {
val textView: TextView = root.findViewById(R.id.admin_support_msg)
textView.setText(R.string.disabled_by_advanced_protection_message)
}
}

View File

@@ -28,7 +28,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(LockScreenPreferenceScreen.KEY)
open class LockScreenPreferenceScreen : PreferenceScreenCreator, PreferenceSummaryProvider { open class LockScreenPreferenceScreen : PreferenceScreenCreator, PreferenceSummaryProvider {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -52,7 +52,7 @@ open class LockScreenPreferenceScreen : PreferenceScreenCreator, PreferenceSumma
makeLaunchIntent(context, LockScreenSettingsActivity::class.java, metadata?.key) makeLaunchIntent(context, LockScreenSettingsActivity::class.java, metadata?.key)
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
+AmbientDisplayAlwaysOnPreference() +AmbientDisplayAlwaysOnPreference()
} }

View File

@@ -162,10 +162,10 @@ class WepNetworksPreferenceController(context: Context, preferenceKey: String) :
emit(aapmManager?.isAdvancedProtectionEnabled ?: false) }.flowOn(Dispatchers.Default) emit(aapmManager?.isAdvancedProtectionEnabled ?: false) }.flowOn(Dispatchers.Default)
private fun startSupportIntent() { private fun startSupportIntent() {
AdvancedProtectionManager.createSupportIntent( aapmManager?.createSupportIntent(
AdvancedProtectionManager.FEATURE_ID_DISALLOW_WEP, AdvancedProtectionManager.FEATURE_ID_DISALLOW_WEP,
AdvancedProtectionManager.SUPPORT_DIALOG_TYPE_DISABLED_SETTING AdvancedProtectionManager.SUPPORT_DIALOG_TYPE_DISABLED_SETTING
).let { mContext.startActivity(it) } )?.let { mContext.startActivity(it) }
} }
val wepAllowedFlow = val wepAllowedFlow =

View File

@@ -16,6 +16,7 @@
package com.android.settings.wifi package com.android.settings.wifi
import android.Manifest
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@@ -37,6 +38,7 @@ import com.android.settingslib.WirelessUtils
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.Permissions
import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
@@ -94,6 +96,15 @@ class WifiSwitchPreference :
return true return true
} }
override fun getReadPermissions(context: Context) =
Permissions.allOf(Manifest.permission.ACCESS_WIFI_STATE)
override fun getWritePermissions(context: Context) =
Permissions.anyOf(
Manifest.permission.NETWORK_SETTINGS,
Manifest.permission.CHANGE_WIFI_STATE,
)
override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW

View File

@@ -16,6 +16,9 @@
package com.android.settings.wifi.calling package com.android.settings.wifi.calling
import android.Manifest.permission.MODIFY_PHONE_STATE
import android.Manifest.permission.READ_PRECISE_PHONE_STATE
import android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
import android.content.Context import android.content.Context
import android.telephony.SubscriptionManager import android.telephony.SubscriptionManager
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
@@ -28,6 +31,8 @@ import com.android.settings.widget.SettingsMainSwitchPreference
import com.android.settings.wifi.calling.WifiCallingSettingsForSub.getCarrierActivityIntent import com.android.settings.wifi.calling.WifiCallingSettingsForSub.getCarrierActivityIntent
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.datastore.Permissions
import com.android.settingslib.datastore.and
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel import com.android.settingslib.metadata.SensitivityLevel
@@ -60,9 +65,16 @@ class WifiCallingMainSwitchPreference(private val subId: Int) :
override fun createWidget(context: Context) = SettingsMainSwitchPreference(context) override fun createWidget(context: Context) = SettingsMainSwitchPreference(context)
override fun getReadPermissions(context: Context) =
Permissions.anyOf(READ_PRIVILEGED_PHONE_STATE, READ_PRECISE_PHONE_STATE)
override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW
override fun getWritePermissions(context: Context) =
Permissions.anyOf(READ_PRIVILEGED_PHONE_STATE, READ_PRECISE_PHONE_STATE) and
MODIFY_PHONE_STATE
override fun getWritePermit( override fun getWritePermit(
context: Context, context: Context,
value: Boolean?, value: Boolean?,

View File

@@ -23,7 +23,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen(WifiCallingScreen.KEY)
class WifiCallingScreen : PreferenceScreenCreator { class WifiCallingScreen : PreferenceScreenCreator {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -41,7 +41,7 @@ class WifiCallingScreen : PreferenceScreenCreator {
override fun hasCompleteHierarchy() = false override fun hasCompleteHierarchy() = false
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { preferenceHierarchy(context, this) {
val subId = SubscriptionManager.getDefaultSubscriptionId() val subId = SubscriptionManager.getDefaultSubscriptionId()
if (SubscriptionManager.isValidSubscriptionId(subId)) { if (SubscriptionManager.isValidSubscriptionId(subId)) {
+WifiCallingMainSwitchPreference(subId) +WifiCallingMainSwitchPreference(subId)

View File

@@ -20,6 +20,7 @@ import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENT
import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.ACTION_RESTORED; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.ACTION_RESTORED;
import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.ACTION_OPEN_SETTINGS;
import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.NOTIFICATION_CHANNEL; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.NOTIFICATION_CHANNEL;
import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.NOTIFICATION_ID; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.NOTIFICATION_ID;
import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.PromptState.PROMPT_SHOWN; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.PromptState.PROMPT_SHOWN;
@@ -28,9 +29,9 @@ import static com.android.settings.accessibility.HighContrastTextMigrationReceiv
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.app.Application;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -54,10 +55,13 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.Shadows; import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowApplication;
import org.robolectric.shadows.ShadowNotification; import org.robolectric.shadows.ShadowNotification;
import org.robolectric.shadows.ShadowNotificationManager; import org.robolectric.shadows.ShadowNotificationManager;
import org.robolectric.shadows.ShadowPackageManager; import org.robolectric.shadows.ShadowPackageManager;
import java.util.List;
/** Tests for {@link HighContrastTextMigrationReceiver}. */ /** Tests for {@link HighContrastTextMigrationReceiver}. */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class HighContrastTextMigrationReceiverTest { public class HighContrastTextMigrationReceiverTest {
@@ -66,6 +70,7 @@ public class HighContrastTextMigrationReceiverTest {
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
private final Context mContext = ApplicationProvider.getApplicationContext(); private final Context mContext = ApplicationProvider.getApplicationContext();
private HighContrastTextMigrationReceiver mReceiver; private HighContrastTextMigrationReceiver mReceiver;
private ShadowApplication mShadowApplication;
private ShadowNotificationManager mShadowNotificationManager; private ShadowNotificationManager mShadowNotificationManager;
@Before @Before
@@ -73,6 +78,7 @@ public class HighContrastTextMigrationReceiverTest {
NotificationManager notificationManager = NotificationManager notificationManager =
mContext.getSystemService(NotificationManager.class); mContext.getSystemService(NotificationManager.class);
mShadowNotificationManager = Shadows.shadowOf(notificationManager); mShadowNotificationManager = Shadows.shadowOf(notificationManager);
mShadowApplication = Shadows.shadowOf((Application) mContext);
// Setup Settings app as a system app // Setup Settings app as a system app
ShadowPackageManager shadowPm = Shadows.shadowOf(mContext.getPackageManager()); ShadowPackageManager shadowPm = Shadows.shadowOf(mContext.getPackageManager());
@@ -187,6 +193,28 @@ public class HighContrastTextMigrationReceiverTest {
verifyNotificationNotSent(); verifyNotificationNotSent();
} }
@Test
@EnableFlags(Flags.FLAG_HIGH_CONTRAST_TEXT_SMALL_TEXT_RECT)
public void onReceive_openSettingsIntent_openHighContrastTextPreference() {
Intent intent = new Intent(ACTION_OPEN_SETTINGS);
mReceiver.onReceive(mContext, intent);
List<Intent> broadcastIntents = mShadowApplication.getBroadcastIntents();
assertThat(broadcastIntents.size()).isEqualTo(1);
assertThat(broadcastIntents.get(0).getAction())
.isEqualTo(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
Intent startedActivitie = mShadowApplication.getNextStartedActivity();
assertThat(startedActivitie).isNotNull();
Bundle fragmentArgs = startedActivitie.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
assertThat(fragmentArgs).isNotNull();
assertThat(fragmentArgs.getString(EXTRA_FRAGMENT_ARG_KEY))
.isEqualTo(TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY);
Notification notification = mShadowNotificationManager.getNotification(NOTIFICATION_ID);
assertThat(notification).isNull();
}
private void verifyNotificationNotSent() { private void verifyNotificationNotSent() {
Notification notification = mShadowNotificationManager.getNotification(NOTIFICATION_ID); Notification notification = mShadowNotificationManager.getNotification(NOTIFICATION_ID);
assertThat(notification).isNull(); assertThat(notification).isNull();
@@ -210,13 +238,6 @@ public class HighContrastTextMigrationReceiverTest {
assertThat(notification.actions.length).isEqualTo(1); assertThat(notification.actions.length).isEqualTo(1);
assertThat(notification.actions[0].title.toString()).isEqualTo( assertThat(notification.actions[0].title.toString()).isEqualTo(
mContext.getString(R.string.accessibility_notification_high_contrast_text_action)); mContext.getString(R.string.accessibility_notification_high_contrast_text_action));
PendingIntent pendingIntent = notification.actions[0].actionIntent;
Intent settingsIntent = Shadows.shadowOf(pendingIntent).getSavedIntent();
Bundle fragmentArgs = settingsIntent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
assertThat(fragmentArgs).isNotNull();
assertThat(fragmentArgs.getString(EXTRA_FRAGMENT_ARG_KEY))
.isEqualTo(TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY);
} }
private void assertPromptStateAndHctState( private void assertPromptStateAndHctState(

View File

@@ -20,14 +20,9 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.security.advancedprotection.AdvancedProtectionManager.ACTION_SHOW_ADVANCED_PROTECTION_SUPPORT_DIALOG; import static android.security.advancedprotection.AdvancedProtectionManager.ACTION_SHOW_ADVANCED_PROTECTION_SUPPORT_DIALOG;
import static android.security.advancedprotection.AdvancedProtectionManager.ADVANCED_PROTECTION_SYSTEM_ENTITY; import static android.security.advancedprotection.AdvancedProtectionManager.ADVANCED_PROTECTION_SYSTEM_ENTITY;
import static android.security.advancedprotection.AdvancedProtectionManager.EXTRA_SUPPORT_DIALOG_FEATURE; import static android.security.advancedprotection.AdvancedProtectionManager.EXTRA_SUPPORT_DIALOG_FEATURE;
import static android.security.advancedprotection.AdvancedProtectionManager.EXTRA_SUPPORT_DIALOG_TYPE;
import static android.security.advancedprotection.AdvancedProtectionManager.FEATURE_ID_DISALLOW_INSTALL_UNKNOWN_SOURCES;
import static android.security.advancedprotection.AdvancedProtectionManager.SUPPORT_DIALOG_TYPE_UNKNOWN;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
@@ -45,6 +40,7 @@ import android.os.UserManager;
import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.security.advancedprotection.AdvancedProtectionManager;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -52,7 +48,6 @@ import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
@@ -64,6 +59,8 @@ public class ActionDisabledByAdminDialogTest {
@Mock @Mock
private DevicePolicyManager mDevicePolicyManager; private DevicePolicyManager mDevicePolicyManager;
@Mock
private AdvancedProtectionManager mAdvancedProtectionManager;
private ActionDisabledByAdminDialog mDialog; private ActionDisabledByAdminDialog mDialog;
private final ComponentName mAdminComponent = new ComponentName("admin", "adminclass"); private final ComponentName mAdminComponent = new ComponentName("admin", "adminclass");
@@ -73,6 +70,8 @@ public class ActionDisabledByAdminDialogTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mDialog = spy(new ActionDisabledByAdminDialog()); mDialog = spy(new ActionDisabledByAdminDialog());
doReturn(mDevicePolicyManager).when(mDialog).getSystemService(DevicePolicyManager.class); doReturn(mDevicePolicyManager).when(mDialog).getSystemService(DevicePolicyManager.class);
doReturn(mAdvancedProtectionManager).when(mDialog).getSystemService(
AdvancedProtectionManager.class);
} }
@Test @Test
@@ -119,28 +118,24 @@ public class ActionDisabledByAdminDialogTest {
advancedProtectionAuthority, UserHandle.of(userId), mAdminComponent); advancedProtectionAuthority, UserHandle.of(userId), mAdminComponent);
final String userRestriction = UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY; final String userRestriction = UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY;
final Intent apmIntent = new Intent(ACTION_SHOW_ADVANCED_PROTECTION_SUPPORT_DIALOG);
apmIntent.setFlags(FLAG_ACTIVITY_NEW_TASK);
apmIntent.putExtra(EXTRA_SUPPORT_DIALOG_FEATURE, "featureId");
final Intent dialogIntent = new Intent(); final Intent dialogIntent = new Intent();
dialogIntent.putExtra(Intent.EXTRA_USER_ID, userId); dialogIntent.putExtra(Intent.EXTRA_USER_ID, userId);
dialogIntent.putExtra(DevicePolicyManager.EXTRA_RESTRICTION, userRestriction); dialogIntent.putExtra(DevicePolicyManager.EXTRA_RESTRICTION, userRestriction);
when(mDevicePolicyManager.getEnforcingAdmin(userId, userRestriction)) when(mDevicePolicyManager.getEnforcingAdmin(userId, userRestriction))
.thenReturn(advancedProtectionEnforcingAdmin); .thenReturn(advancedProtectionEnforcingAdmin);
doNothing().when(mDialog).startActivityAsUser(any(), eq(UserHandle.of(userId))); when(mAdvancedProtectionManager.createSupportIntentForPolicyIdentifierOrRestriction(
userRestriction, /* type */ null)).thenReturn(apmIntent);
doNothing().when(mDialog).startActivityAsUser(apmIntent, UserHandle.of(userId));
mDialog.getAdminDetailsFromIntent(dialogIntent); mDialog.getAdminDetailsFromIntent(dialogIntent);
ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mDialog).startActivityAsUser(apmIntent, UserHandle.of(userId));
verify(mDialog).startActivityAsUser(intentCaptor.capture(), eq(UserHandle.of(userId)));
assertTrue(mDialog.isFinishing()); assertTrue(mDialog.isFinishing());
Intent launchedIntent = intentCaptor.getValue();
assertEquals("Intent action is incorrect", ACTION_SHOW_ADVANCED_PROTECTION_SUPPORT_DIALOG,
launchedIntent.getAction());
assertEquals("Feature ID extra is incorrect", FEATURE_ID_DISALLOW_INSTALL_UNKNOWN_SOURCES,
launchedIntent.getIntExtra(EXTRA_SUPPORT_DIALOG_FEATURE, -1));
assertEquals("Type is incorrect", SUPPORT_DIALOG_TYPE_UNKNOWN,
launchedIntent.getIntExtra(EXTRA_SUPPORT_DIALOG_TYPE, -1));
assertEquals(FLAG_ACTIVITY_NEW_TASK, launchedIntent.getFlags());
} }
@RequiresFlagsEnabled(android.security.Flags.FLAG_AAPM_API) @RequiresFlagsEnabled(android.security.Flags.FLAG_AAPM_API)

View File

@@ -200,6 +200,7 @@ class WepNetworksPreferenceControllerTest {
fun whenClick_aapmEnabled_openDialog() { fun whenClick_aapmEnabled_openDialog() {
mockAapmManager.stub { mockAapmManager.stub {
on { isAdvancedProtectionEnabled } doReturn true on { isAdvancedProtectionEnabled } doReturn true
on { createSupportIntent(any(), any()) } doReturn Intent()
} }
doNothing().whenever(context).startActivity(any()) doNothing().whenever(context).startActivity(any())
composeTestRule.setContent { controller.Content() } composeTestRule.setContent { controller.Content() }