From 2574343b43eb48f8610f6e510c84ff28bd107096 Mon Sep 17 00:00:00 2001 From: "Priyanka Advani (xWF)" Date: Mon, 23 Dec 2024 13:41:43 -0800 Subject: [PATCH 01/14] Revert "[AAPM] Add advanced protection dialog according to API f..." Revert submission 30767017-aapm-dialog-api-feedback Reason for revert: Droidmonitor created revert due to b/384828570. Will be verifying through ABTD before submission. Reverted changes: /q/submissionid:30767017-aapm-dialog-api-feedback Change-Id: Ibf26aca2453f2007370974290f5c16d6b091341e --- AndroidManifest.xml | 13 ---- res/values/strings.xml | 5 -- .../ActionDisabledByAdminDialog.java | 9 ++- ...ctionDisabledByAdvancedProtectionDialog.kt | 59 ------------------- .../wifi/WepNetworksPreferenceController.kt | 4 +- .../ActionDisabledByAdminDialogTest.java | 31 ++++------ .../WepNetworksPreferenceControllerTest.kt | 1 + 7 files changed, 22 insertions(+), 100 deletions(-) delete mode 100644 src/com/android/settings/security/ActionDisabledByAdvancedProtectionDialog.kt diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 37a2340653b..2295ee3dd1a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -4443,19 +4443,6 @@ - - - - - - - Your device administrator may be able to access data associated with this device, manage apps, and change this device\’s settings. - - Prevented by Advanced Protection - - This action is not allowed because Advanced Protection is on for your device. - Turn off diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java index b0d0af1eefb..e05ae71a05a 100644 --- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java +++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java @@ -109,9 +109,12 @@ public class ActionDisabledByAdminDialog extends Activity } if (enforcingAdmin.getAuthority() instanceof UnknownAuthority authority && ADVANCED_PROTECTION_SYSTEM_ENTITY.equals(authority.getName())) { - Intent apmSupportIntent = AdvancedProtectionManager - .createSupportIntentForPolicyIdentifierOrRestriction(restriction, - AdvancedProtectionManager.SUPPORT_DIALOG_TYPE_UNKNOWN); + AdvancedProtectionManager apm = getSystemService(AdvancedProtectionManager.class); + if (apm == null) { + return; + } + Intent apmSupportIntent = apm.createSupportIntentForPolicyIdentifierOrRestriction( + restriction, /* type */ null); startActivityAsUser(apmSupportIntent, UserHandle.of(userId)); finish(); } else { diff --git a/src/com/android/settings/security/ActionDisabledByAdvancedProtectionDialog.kt b/src/com/android/settings/security/ActionDisabledByAdvancedProtectionDialog.kt deleted file mode 100644 index d56f8958ac3..00000000000 --- a/src/com/android/settings/security/ActionDisabledByAdvancedProtectionDialog.kt +++ /dev/null @@ -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) - } -} diff --git a/src/com/android/settings/wifi/WepNetworksPreferenceController.kt b/src/com/android/settings/wifi/WepNetworksPreferenceController.kt index 59c67eef9ff..92716bec4ff 100644 --- a/src/com/android/settings/wifi/WepNetworksPreferenceController.kt +++ b/src/com/android/settings/wifi/WepNetworksPreferenceController.kt @@ -162,10 +162,10 @@ class WepNetworksPreferenceController(context: Context, preferenceKey: String) : emit(aapmManager?.isAdvancedProtectionEnabled ?: false) }.flowOn(Dispatchers.Default) private fun startSupportIntent() { - AdvancedProtectionManager.createSupportIntent( + aapmManager?.createSupportIntent( AdvancedProtectionManager.FEATURE_ID_DISALLOW_WEP, AdvancedProtectionManager.SUPPORT_DIALOG_TYPE_DISABLED_SETTING - ).let { mContext.startActivity(it) } + )?.let { mContext.startActivity(it) } } val wepAllowedFlow = diff --git a/tests/robotests/src/com/android/settings/enterprise/ActionDisabledByAdminDialogTest.java b/tests/robotests/src/com/android/settings/enterprise/ActionDisabledByAdminDialogTest.java index 37e04247f89..4b7abec906a 100644 --- a/tests/robotests/src/com/android/settings/enterprise/ActionDisabledByAdminDialogTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/ActionDisabledByAdminDialogTest.java @@ -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.ADVANCED_PROTECTION_SYSTEM_ENTITY; 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.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; @@ -45,6 +40,7 @@ import android.os.UserManager; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; +import android.security.advancedprotection.AdvancedProtectionManager; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; @@ -52,7 +48,6 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; @@ -64,6 +59,8 @@ public class ActionDisabledByAdminDialogTest { @Mock private DevicePolicyManager mDevicePolicyManager; + @Mock + private AdvancedProtectionManager mAdvancedProtectionManager; private ActionDisabledByAdminDialog mDialog; private final ComponentName mAdminComponent = new ComponentName("admin", "adminclass"); @@ -73,6 +70,8 @@ public class ActionDisabledByAdminDialogTest { MockitoAnnotations.initMocks(this); mDialog = spy(new ActionDisabledByAdminDialog()); doReturn(mDevicePolicyManager).when(mDialog).getSystemService(DevicePolicyManager.class); + doReturn(mAdvancedProtectionManager).when(mDialog).getSystemService( + AdvancedProtectionManager.class); } @Test @@ -119,28 +118,24 @@ public class ActionDisabledByAdminDialogTest { advancedProtectionAuthority, UserHandle.of(userId), mAdminComponent); 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(); dialogIntent.putExtra(Intent.EXTRA_USER_ID, userId); dialogIntent.putExtra(DevicePolicyManager.EXTRA_RESTRICTION, userRestriction); when(mDevicePolicyManager.getEnforcingAdmin(userId, userRestriction)) .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); - ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(mDialog).startActivityAsUser(intentCaptor.capture(), eq(UserHandle.of(userId))); + verify(mDialog).startActivityAsUser(apmIntent, UserHandle.of(userId)); 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) diff --git a/tests/spa_unit/src/com/android/settings/wifi/WepNetworksPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/wifi/WepNetworksPreferenceControllerTest.kt index 74107571b0d..1f0a4916310 100644 --- a/tests/spa_unit/src/com/android/settings/wifi/WepNetworksPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/wifi/WepNetworksPreferenceControllerTest.kt @@ -200,6 +200,7 @@ class WepNetworksPreferenceControllerTest { fun whenClick_aapmEnabled_openDialog() { mockAapmManager.stub { on { isAdvancedProtectionEnabled } doReturn true + on { createSupportIntent(any(), any()) } doReturn Intent() } doNothing().whenever(context).startActivity(any()) composeTestRule.setContent { controller.Content() } From 0fe222774d199565d628dd7905f8c5af3a7467d4 Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Thu, 26 Dec 2024 11:37:04 +0800 Subject: [PATCH 02/14] [Catalyst] Implement get{Read,Write}Permissions for Wi-Fi NO_IFTTT=Catalyst only Fix: 385268791 Flag: com.android.settings.flags.catalyst_internet_settings Test: devtool Change-Id: I136aacd63d079a8d3bfafba3b0aa3fd92bd582a4 --- src/com/android/settings/wifi/WifiSwitchPreference.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/com/android/settings/wifi/WifiSwitchPreference.kt b/src/com/android/settings/wifi/WifiSwitchPreference.kt index 0eef999ff8e..627a78b7e2c 100644 --- a/src/com/android/settings/wifi/WifiSwitchPreference.kt +++ b/src/com/android/settings/wifi/WifiSwitchPreference.kt @@ -16,6 +16,7 @@ package com.android.settings.wifi +import android.Manifest import android.content.BroadcastReceiver import android.content.Context import android.content.Intent @@ -37,6 +38,7 @@ import com.android.settingslib.WirelessUtils import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.KeyValueStore +import com.android.settingslib.datastore.Permissions import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.ReadWritePermit @@ -94,6 +96,15 @@ class WifiSwitchPreference : 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) = ReadWritePermit.ALLOW From 1568db6ea4fa73f89464ee926090454c97d906d2 Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Thu, 26 Dec 2024 13:13:31 +0800 Subject: [PATCH 03/14] [Catalyst] Implement get{Read,Write}Permissions for Adaptive connectivity NO_IFTTT=Catalyst only Fix: 385266011 Flag: com.android.settings.flags.catalyst_adaptive_connectivity Test: devtool Change-Id: I06505cc934ad829edb6a9b62ec0848cedcc814a2 --- .../network/AdaptiveConnectivityTogglePreference.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt b/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt index 77a141eb736..ec5061ee0fa 100644 --- a/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt +++ b/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt @@ -16,6 +16,7 @@ package com.android.settings.network +import android.Manifest import android.content.Context import android.net.wifi.WifiManager 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.SettingsSecureStore import com.android.settingslib.datastore.SettingsStore +import com.android.settingslib.datastore.and import com.android.settingslib.metadata.MainSwitchPreference import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.SensitivityLevel @@ -35,6 +37,11 @@ class AdaptiveConnectivityTogglePreference : override fun storage(context: Context): KeyValueStore = 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) = ReadWritePermit.ALLOW From 1c0cc38992515d2d9de4faedfa83bcdc7f3773af Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Thu, 26 Dec 2024 17:09:59 +0800 Subject: [PATCH 04/14] [Catalyst] Implement get{Read,Write}Permissions for Data Saver NO_IFTTT=Catalyst only Fix: 385050976 Flag: com.android.settings.flags.catalyst_restrict_background_parent_entry Test: devtool Change-Id: I3799007586f5a5b26fa20f077a311313bb35e2c3 --- .../settings/datausage/DataSaverMainSwitchPreference.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt b/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt index 79d3dc39f63..a05bd8784cc 100644 --- a/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt +++ b/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt @@ -16,12 +16,14 @@ package com.android.settings.datausage +import android.Manifest import android.content.Context import com.android.settings.R import com.android.settings.widget.MainSwitchBarMetadata import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.KeyValueStore +import com.android.settingslib.datastore.Permissions import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.SensitivityLevel @@ -36,6 +38,12 @@ class DataSaverMainSwitchPreference : MainSwitchBarMetadata, PreferenceLifecycle 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) = ReadWritePermit.ALLOW From d1066117f70d5cdd43b003b75977e13c6399f17a Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Thu, 26 Dec 2024 17:16:02 +0800 Subject: [PATCH 05/14] [Catalyst] Implement get{Read,Write}Permissions for Airplane mode NO_IFTTT=Catalyst only Fix: 385265477 Flag: com.android.settings.flags.catalyst_network_provider_and_internet_screen Test: devtool Change-Id: Ib357563787f01dead06c1167a1a5a9ad4a268082 --- src/com/android/settings/network/AirplaneModePreference.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/android/settings/network/AirplaneModePreference.kt b/src/com/android/settings/network/AirplaneModePreference.kt index c9377eb07ea..f86d41a9e60 100644 --- a/src/com/android/settings/network/AirplaneModePreference.kt +++ b/src/com/android/settings/network/AirplaneModePreference.kt @@ -65,6 +65,10 @@ class AirplaneModePreference : override val restrictionKeys 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) = ReadWritePermit.ALLOW From 5da3d3390a15c76768fb6207dbc97f1177bff6f8 Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Thu, 26 Dec 2024 10:31:34 +0000 Subject: [PATCH 06/14] [Catalyst] Implement get{Read,Write}Permissions for Ring volume NO_IFTTT=Catalyst only Fix: 386143268 Test: devtool Flag: com.android.settings.flags.catalyst_sound_screen Change-Id: I8ed7fa1d6a857d64896b33a80e17f7e08808bbaf --- .../notification/SeparateRingVolumePreference.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/com/android/settings/notification/SeparateRingVolumePreference.kt b/src/com/android/settings/notification/SeparateRingVolumePreference.kt index 0e557c419a1..4cdac1434bf 100644 --- a/src/com/android/settings/notification/SeparateRingVolumePreference.kt +++ b/src/com/android/settings/notification/SeparateRingVolumePreference.kt @@ -16,6 +16,8 @@ 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.NotificationManager 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.Intent import android.content.IntentFilter +import android.content.pm.PackageManager.FEATURE_AUTOMOTIVE import android.media.AudioManager import android.media.AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION import android.media.AudioManager.RINGER_MODE_NORMAL @@ -40,6 +43,8 @@ import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R import com.android.settingslib.datastore.KeyValueStore 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.PreferenceAvailabilityProvider 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) = 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) = ReadWritePermit.ALLOW From 2485a07426034d1aaea2071d61871e489a288d66 Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Thu, 26 Dec 2024 10:51:51 +0800 Subject: [PATCH 07/14] [Catalyst] Implement get{Read,Write}Permissions for Bluetooth NO_IFTTT=Catalyst only Fix: 385271230 Flag: com.android.settings.flags.catalyst_bluetooth_switchbar_screen Test: devtool Change-Id: I697a088d13fa019158c89835adb95759f7d30da7 --- .../settings/connecteddevice/BluetoothPreference.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/android/settings/connecteddevice/BluetoothPreference.kt b/src/com/android/settings/connecteddevice/BluetoothPreference.kt index 93b2f20a7a4..4d4853efbc5 100644 --- a/src/com/android/settings/connecteddevice/BluetoothPreference.kt +++ b/src/com/android/settings/connecteddevice/BluetoothPreference.kt @@ -16,6 +16,7 @@ package com.android.settings.connecteddevice +import android.Manifest import android.annotation.SuppressLint import android.bluetooth.BluetoothAdapter import android.content.BroadcastReceiver @@ -35,6 +36,7 @@ import com.android.settingslib.WirelessUtils import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.KeyValueStore +import com.android.settingslib.datastore.Permissions import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.SensitivityLevel @@ -52,6 +54,11 @@ class BluetoothPreference(private val bluetoothDataStore: BluetoothDataStore) : override val restrictionKeys: Array 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) = ReadWritePermit.ALLOW From 63a14901aaa45795a61a7224cc153077092ef798 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Thu, 26 Dec 2024 20:44:31 -0800 Subject: [PATCH 08/14] Revert "[Expressive design] Update MainSwitch in SettingsActivity." This reverts commit b7e0923414c1d38ac85888727f41b50033f48dc6. Reason for revert: Cause regression b/385850462 Change-Id: I82992d428ea985bc2a762854df2abd555cc4a467 --- res/layout/settings_main_prefs.xml | 7 ------- src/com/android/settings/SettingsActivity.java | 5 +---- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/res/layout/settings_main_prefs.xml b/res/layout/settings_main_prefs.xml index affdd7a2c5c..48352e2efa0 100644 --- a/res/layout/settings_main_prefs.xml +++ b/res/layout/settings_main_prefs.xml @@ -28,13 +28,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content"/> - - Date: Thu, 26 Dec 2024 10:28:16 +0000 Subject: [PATCH 09/14] [Catalyst] Implement get{Read,Write}Permissions for Media volume NO_IFTTT=Catalyst only Fix: 386143376 Test: devtool Flag: com.android.settings.flags.catalyst_sound_screen Change-Id: I1909c32ae1d067b095208b4a65ad53bd7080acf1 --- .../notification/MediaVolumePreference.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/com/android/settings/notification/MediaVolumePreference.kt b/src/com/android/settings/notification/MediaVolumePreference.kt index b644381b8a0..02bf82479c0 100644 --- a/src/com/android/settings/notification/MediaVolumePreference.kt +++ b/src/com/android/settings/notification/MediaVolumePreference.kt @@ -16,7 +16,10 @@ 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.pm.PackageManager.FEATURE_AUTOMOTIVE import android.media.AudioManager.STREAM_MUSIC import android.os.UserManager import androidx.preference.Preference @@ -24,6 +27,8 @@ import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R import com.android.settingslib.datastore.KeyValueStore 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.PreferenceAvailabilityProvider 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) = 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) = ReadWritePermit.ALLOW From 35b6dbd032f9283f985fc14197ef7002342d88b7 Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Thu, 26 Dec 2024 09:51:35 +0000 Subject: [PATCH 10/14] [Catalyst] Implement get{Read,Write}Permissions for Call volume NO_IFTTT=Catalyst only Fix: 386142831 Test: devtool Flag: com.android.settings.flags.catalyst_sound_screen Change-Id: I5ead6fa83dd6ce84f10c7352b60b354f1471f6c9 --- .../notification/CallVolumePreference.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/com/android/settings/notification/CallVolumePreference.kt b/src/com/android/settings/notification/CallVolumePreference.kt index 0e45b236248..3caac242316 100644 --- a/src/com/android/settings/notification/CallVolumePreference.kt +++ b/src/com/android/settings/notification/CallVolumePreference.kt @@ -16,7 +16,11 @@ 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.pm.PackageManager.FEATURE_AUTOMOTIVE import android.media.AudioManager import android.media.AudioManager.STREAM_BLUETOOTH_SCO import android.media.AudioManager.STREAM_VOICE_CALL @@ -26,6 +30,8 @@ import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R import com.android.settingslib.datastore.KeyValueStore 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.PreferenceAvailabilityProvider 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) = 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) = ReadWritePermit.ALLOW From c1fb46f717a6ed6edb1657fd79af8003caa8b668 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Fri, 27 Dec 2024 15:44:38 +0800 Subject: [PATCH 11/14] [Catalyst] Implement get{Read,Write}Permissions for Use Wi-Fi Calling Bug: 385288187 Flag: com.android.settings.flags.catalyst_wifi_calling Test: devtool Change-Id: I28d51248285ee153bdbfe04dd31e137107bef501 --- .../wifi/calling/WifiCallingMainSwitchPreference.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/com/android/settings/wifi/calling/WifiCallingMainSwitchPreference.kt b/src/com/android/settings/wifi/calling/WifiCallingMainSwitchPreference.kt index 07adac04f58..dc6737310d3 100644 --- a/src/com/android/settings/wifi/calling/WifiCallingMainSwitchPreference.kt +++ b/src/com/android/settings/wifi/calling/WifiCallingMainSwitchPreference.kt @@ -16,6 +16,9 @@ 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.telephony.SubscriptionManager 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.settingslib.datastore.KeyValueStore 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.ReadWritePermit 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 getReadPermissions(context: Context) = + Permissions.anyOf(READ_PRIVILEGED_PHONE_STATE, READ_PRECISE_PHONE_STATE) + override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) = ReadWritePermit.ALLOW + override fun getWritePermissions(context: Context) = + Permissions.anyOf(READ_PRIVILEGED_PHONE_STATE, READ_PRECISE_PHONE_STATE) and + MODIFY_PHONE_STATE + override fun getWritePermit( context: Context, value: Boolean?, From ac876b1173a310b3e0cc705e7388827ca907142d Mon Sep 17 00:00:00 2001 From: chenjean Date: Fri, 27 Dec 2024 10:24:50 +0800 Subject: [PATCH 12/14] feat(HCT): Notification 'open settings' action behavoir The notification should open High Contrast Text page and disappear automatically when the user taps the "Open Settings" button within the notification. Bug: 385794406 Flag: com.android.graphics.hwui.flags.high_contrast_text_small_text_rect Test: atest SettingsRoboTests:com.android.settings.accessibility.HighContrastTextMigrationReceiverTest Change-Id: Ibe3c343d39e3c98a8b98fb4252d5f5a37d1aaa49 --- .../HighContrastTextMigrationReceiver.java | 37 +++++++++++++++---- ...HighContrastTextMigrationReceiverTest.java | 37 +++++++++++++++---- 2 files changed, 58 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java b/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java index 803546707fd..8e311858f51 100644 --- a/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java +++ b/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java @@ -54,6 +54,9 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { static final String ACTION_RESTORED = "com.android.settings.accessibility.ACTION_HIGH_CONTRAST_TEXT_RESTORED"; @VisibleForTesting + static final String ACTION_OPEN_SETTINGS = + "com.android.settings.accessibility.ACTION_OPEN_HIGH_CONTRAST_TEXT_SETTINGS"; + @VisibleForTesting static final int NOTIFICATION_ID = 1; @Retention(RetentionPolicy.SOURCE) @@ -74,7 +77,16 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { 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: " + context.getUserId()); Settings.Secure.putInt(context.getContentResolver(), @@ -125,21 +137,20 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { R.string.accessibility_notification_high_contrast_text_content)) .setFlag(Notification.FLAG_NO_CLEAR, true); - Intent settingsIntent = new Intent(Settings.ACTION_TEXT_READING_SETTINGS); - settingsIntent.setPackage(context.getPackageName()); + Intent settingsIntent = createHighContrastTextSettingsIntent(context); 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, /* 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( /* icon= */ null, context.getString( R.string.accessibility_notification_high_contrast_text_action), - settingsPendingIntent + actionPendingIntent ).build(); notificationBuilder @@ -156,4 +167,14 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { notificationManager.createNotificationChannel(notificationChannel); 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; + } } diff --git a/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java b/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java index 1b663936fcb..b0864aa1073 100644 --- a/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java @@ -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.ON; 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_ID; 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 android.app.Application; import android.app.Notification; import android.app.NotificationManager; -import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -54,10 +55,13 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.Shadows; +import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowNotification; import org.robolectric.shadows.ShadowNotificationManager; import org.robolectric.shadows.ShadowPackageManager; +import java.util.List; + /** Tests for {@link HighContrastTextMigrationReceiver}. */ @RunWith(RobolectricTestRunner.class) public class HighContrastTextMigrationReceiverTest { @@ -66,6 +70,7 @@ public class HighContrastTextMigrationReceiverTest { public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private final Context mContext = ApplicationProvider.getApplicationContext(); private HighContrastTextMigrationReceiver mReceiver; + private ShadowApplication mShadowApplication; private ShadowNotificationManager mShadowNotificationManager; @Before @@ -73,6 +78,7 @@ public class HighContrastTextMigrationReceiverTest { NotificationManager notificationManager = mContext.getSystemService(NotificationManager.class); mShadowNotificationManager = Shadows.shadowOf(notificationManager); + mShadowApplication = Shadows.shadowOf((Application) mContext); // Setup Settings app as a system app ShadowPackageManager shadowPm = Shadows.shadowOf(mContext.getPackageManager()); @@ -187,6 +193,28 @@ public class HighContrastTextMigrationReceiverTest { 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 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() { Notification notification = mShadowNotificationManager.getNotification(NOTIFICATION_ID); assertThat(notification).isNull(); @@ -210,13 +238,6 @@ public class HighContrastTextMigrationReceiverTest { assertThat(notification.actions.length).isEqualTo(1); assertThat(notification.actions[0].title.toString()).isEqualTo( 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( From fc181bd015cbb042658b99999e6dc1c73603ac18 Mon Sep 17 00:00:00 2001 From: Vincent Wang Date: Fri, 27 Dec 2024 08:44:53 +0000 Subject: [PATCH 13/14] Remove US-UDFPS power optimization flag Bug: 386308574 Flag: EXEMPT for removing flag Test: Check screen off unlock is workable Change-Id: I8a9886ceada72a4589e97d256d8a967e78da5725 --- .../biometrics/fingerprint/FingerprintSettings.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java index d8a14f1e450..f649a40bb2c 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java @@ -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.EXTRA_FROM_SETTINGS_SUMMARY; 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.Dialog; @@ -603,11 +602,6 @@ public class FingerprintSettings extends SubSettings { } 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()); if (mFingerprintManager != null) { mSensorProperties = mFingerprintManager.getSensorPropertiesInternal(); From cfcf20c70acb5fe7b139f73fde3d5bc2a6dc2f35 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Fri, 27 Dec 2024 08:00:44 +0800 Subject: [PATCH 14/14] [Catalyst] Provide screen key to @ProvidePreferenceScreen NO_IFTTT=Catalyst only Bug: 386179791 Flag: com.android.settings.flags.catalyst Test: manual Change-Id: Ie8106ec45a32e4a61826512fc62746c9ffc47d9c --- src/com/android/settings/SettingsApplication.java | 14 +++++++------- .../settings/accessibility/ColorAndMotionScreen.kt | 4 ++-- .../settings/accessibility/TextReadingScreen.kt | 4 ++-- .../accessibility/VibrationIntensityScreen.kt | 4 ++-- .../settings/accessibility/VibrationScreen.kt | 4 ++-- .../connecteddevice/BluetoothDashboardScreen.kt | 4 ++-- .../android/settings/datausage/DataSaverScreen.kt | 6 +++--- .../deviceinfo/aboutphone/MyDeviceInfoScreen.kt | 4 ++-- .../firmwareversion/FirmwareVersionScreen.kt | 4 ++-- .../deviceinfo/legal/LegalSettingsScreen.kt | 4 ++-- .../deviceinfo/legal/ModuleLicensesScreen.kt | 4 ++-- .../settings/display/AutoBrightnessScreen.kt | 4 ++-- src/com/android/settings/display/DisplayScreen.kt | 4 ++-- .../settings/display/ScreenTimeoutScreen.kt | 4 ++-- .../settings/display/darkmode/DarkModeScreen.kt | 8 ++++---- .../fuelgauge/batterysaver/BatterySaverScreen.kt | 4 ++-- .../batteryusage/PowerUsageSummaryScreen.kt | 11 ++++++----- .../settings/language/LanguageSettingScreen.kt | 10 +++------- .../android/settings/location/LocationScreen.kt | 4 ++-- .../settings/network/AdaptiveConnectivityScreen.kt | 4 ++-- .../settings/network/MobileNetworkListScreen.kt | 4 ++-- .../settings/network/NetworkDashboardScreen.kt | 4 ++-- .../settings/network/NetworkProviderScreen.kt | 4 ++-- .../settings/network/tether/TetherScreen.kt | 4 ++-- .../android/settings/notification/SoundScreen.kt | 4 ++-- .../security/LockScreenPreferenceScreen.kt | 4 ++-- .../settings/wifi/calling/WifiCallingScreen.kt | 4 ++-- 27 files changed, 67 insertions(+), 70 deletions(-) diff --git a/src/com/android/settings/SettingsApplication.java b/src/com/android/settings/SettingsApplication.java index 99d3d922a0c..f2257d4dfdf 100644 --- a/src/com/android/settings/SettingsApplication.java +++ b/src/com/android/settings/SettingsApplication.java @@ -43,7 +43,8 @@ import com.android.settings.overlay.FeatureFactoryImpl; import com.android.settings.spa.SettingsSpaEnvironment; import com.android.settingslib.applications.AppIconCacheManager; 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.ProvidePreferenceScreenOptions; 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 java.lang.ref.WeakReference; -import java.util.List; /** Settings application which sets up activity embedding rules for the large screen device. */ @ProvidePreferenceScreenOptions( @@ -75,8 +75,8 @@ public class SettingsApplication extends Application { super.onCreate(); if (Flags.catalyst()) { - PreferenceScreenRegistry.INSTANCE.setPreferenceScreensSupplier( - this::getPreferenceScreens); + PreferenceScreenRegistry.INSTANCE.setPreferenceScreenMetadataCreators( + getPreferenceScreenCreators()); PreferenceBindingFactory.setDefaultFactory(new SettingsPreferenceBindingFactory()); } @@ -106,11 +106,11 @@ public class SettingsApplication extends Application { registerActivityLifecycleCallbacks(new DeveloperOptionsActivityLifecycle()); } - /** Returns the screens using metadata. */ - protected List getPreferenceScreens() { + /** Returns the creators of preference screen metadata. */ + protected FixedArrayMap getPreferenceScreenCreators() { // PreferenceScreenCollector is generated by annotation processor from classes annotated // with @ProvidePreferenceScreen - return PreferenceScreenCollector.get(this); + return PreferenceScreenCollector.get(); } @Override diff --git a/src/com/android/settings/accessibility/ColorAndMotionScreen.kt b/src/com/android/settings/accessibility/ColorAndMotionScreen.kt index 2d5eb0f8ea1..7cb403bddf5 100644 --- a/src/com/android/settings/accessibility/ColorAndMotionScreen.kt +++ b/src/com/android/settings/accessibility/ColorAndMotionScreen.kt @@ -26,7 +26,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(ColorAndMotionScreen.KEY) class ColorAndMotionScreen : PreferenceScreenCreator { override val key: String get() = KEY @@ -44,7 +44,7 @@ class ColorAndMotionScreen : PreferenceScreenCreator { override fun fragmentClass() = ColorAndMotionFragment::class.java override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { +RemoveAnimationsPreference() } diff --git a/src/com/android/settings/accessibility/TextReadingScreen.kt b/src/com/android/settings/accessibility/TextReadingScreen.kt index 8970d5228db..02272786b6d 100644 --- a/src/com/android/settings/accessibility/TextReadingScreen.kt +++ b/src/com/android/settings/accessibility/TextReadingScreen.kt @@ -22,7 +22,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(TextReadingScreen.KEY) class TextReadingScreen : PreferenceScreenCreator { override val key: String get() = KEY @@ -36,7 +36,7 @@ class TextReadingScreen : PreferenceScreenCreator { override fun hasCompleteHierarchy() = false - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} + override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {} companion object { const val KEY = "text_reading_screen" diff --git a/src/com/android/settings/accessibility/VibrationIntensityScreen.kt b/src/com/android/settings/accessibility/VibrationIntensityScreen.kt index 0a372308066..ce366dc1f0d 100644 --- a/src/com/android/settings/accessibility/VibrationIntensityScreen.kt +++ b/src/com/android/settings/accessibility/VibrationIntensityScreen.kt @@ -31,7 +31,7 @@ import com.android.settingslib.preference.PreferenceScreenCreator // 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. // LINT.IfChange -@ProvidePreferenceScreen +@ProvidePreferenceScreen(VibrationIntensityScreen.KEY) class VibrationIntensityScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { override val key: String get() = KEY @@ -52,7 +52,7 @@ class VibrationIntensityScreen : PreferenceScreenCreator, PreferenceAvailability override fun fragmentClass(): Class? = VibrationIntensitySettingsFragment::class.java - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { + override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { +VibrationMainSwitchPreference() } diff --git a/src/com/android/settings/accessibility/VibrationScreen.kt b/src/com/android/settings/accessibility/VibrationScreen.kt index 63a7c4492a1..6e3e54f2951 100644 --- a/src/com/android/settings/accessibility/VibrationScreen.kt +++ b/src/com/android/settings/accessibility/VibrationScreen.kt @@ -29,7 +29,7 @@ import com.android.settingslib.preference.PreferenceScreenCreator * Accessibility settings for vibration. */ // LINT.IfChange -@ProvidePreferenceScreen +@ProvidePreferenceScreen(VibrationScreen.KEY) class VibrationScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { override val key: String get() = KEY @@ -49,7 +49,7 @@ class VibrationScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider override fun fragmentClass(): Class? = VibrationSettings::class.java - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { + override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { +VibrationMainSwitchPreference() } diff --git a/src/com/android/settings/connecteddevice/BluetoothDashboardScreen.kt b/src/com/android/settings/connecteddevice/BluetoothDashboardScreen.kt index e6985cacaa9..f1f5bb54015 100644 --- a/src/com/android/settings/connecteddevice/BluetoothDashboardScreen.kt +++ b/src/com/android/settings/connecteddevice/BluetoothDashboardScreen.kt @@ -25,7 +25,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(BluetoothDashboardScreen.KEY) class BluetoothDashboardScreen : PreferenceScreenCreator { override val key: String get() = KEY @@ -46,7 +46,7 @@ class BluetoothDashboardScreen : PreferenceScreenCreator { makeLaunchIntent(context, BluetoothDashboardActivity::class.java, metadata?.key) override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { val bluetoothDataStore = BluetoothPreference.createDataStore(context) +BluetoothPreference(bluetoothDataStore) +BluetoothFooterPreference(bluetoothDataStore) diff --git a/src/com/android/settings/datausage/DataSaverScreen.kt b/src/com/android/settings/datausage/DataSaverScreen.kt index fd4441fbbe2..6974c93243f 100644 --- a/src/com/android/settings/datausage/DataSaverScreen.kt +++ b/src/com/android/settings/datausage/DataSaverScreen.kt @@ -20,6 +20,7 @@ import android.content.Context import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID import com.android.settings.R 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.utils.makeLaunchIntent 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.preferenceHierarchy 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) : PreferenceScreenCreator, PreferenceAvailabilityProvider, @@ -75,7 +75,7 @@ class DataSaverScreen(context: Context) : makeLaunchIntent(context, DataSaverSummaryActivity::class.java, metadata?.key) override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { +DataSaverMainSwitchPreference() } + preferenceHierarchy(context, this) { +DataSaverMainSwitchPreference() } override fun hasCompleteHierarchy() = false diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoScreen.kt b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoScreen.kt index 254a91e5ab3..4e9a45776c3 100644 --- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoScreen.kt +++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoScreen.kt @@ -27,7 +27,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(MyDeviceInfoScreen.KEY) class MyDeviceInfoScreen : PreferenceScreenCreator, PreferenceSummaryProvider, PreferenceIconProvider { override val key: String @@ -52,7 +52,7 @@ class MyDeviceInfoScreen : 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 diff --git a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionScreen.kt b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionScreen.kt index fbc749bb1ec..035f1cb899e 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionScreen.kt +++ b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionScreen.kt @@ -25,7 +25,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(FirmwareVersionScreen.KEY) class FirmwareVersionScreen : PreferenceScreenCreator, PreferenceSummaryProvider { override fun isFlagEnabled(context: Context) = Flags.catalystFirmwareVersion() @@ -45,7 +45,7 @@ class FirmwareVersionScreen : PreferenceScreenCreator, PreferenceSummaryProvider override fun fragmentClass() = FirmwareVersionSettings::class.java override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { +FirmwareVersionDetailPreference() +SecurityPatchLevelPreference() +MainlineModuleVersionPreference() diff --git a/src/com/android/settings/deviceinfo/legal/LegalSettingsScreen.kt b/src/com/android/settings/deviceinfo/legal/LegalSettingsScreen.kt index f990b5dbeb0..42bce16374d 100644 --- a/src/com/android/settings/deviceinfo/legal/LegalSettingsScreen.kt +++ b/src/com/android/settings/deviceinfo/legal/LegalSettingsScreen.kt @@ -23,7 +23,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(LegalSettingsScreen.KEY) open class LegalSettingsScreen : PreferenceScreenCreator { override val key: String get() = KEY @@ -36,7 +36,7 @@ open class LegalSettingsScreen : PreferenceScreenCreator { override fun fragmentClass() = LegalSettings::class.java override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { +LegalPreference("copyright", R.string.copyright_title, "android.settings.COPYRIGHT") +LegalPreference("license", R.string.license_title, "android.settings.LICENSE") +LegalPreference("terms", R.string.terms_title, "android.settings.TERMS") diff --git a/src/com/android/settings/deviceinfo/legal/ModuleLicensesScreen.kt b/src/com/android/settings/deviceinfo/legal/ModuleLicensesScreen.kt index c7f5e9c05d6..9a180915258 100644 --- a/src/com/android/settings/deviceinfo/legal/ModuleLicensesScreen.kt +++ b/src/com/android/settings/deviceinfo/legal/ModuleLicensesScreen.kt @@ -23,7 +23,7 @@ import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator // LINT.IfChange -@ProvidePreferenceScreen +@ProvidePreferenceScreen(ModuleLicensesScreen.KEY) class ModuleLicensesScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { override val key: String get() = KEY @@ -39,7 +39,7 @@ class ModuleLicensesScreen : PreferenceScreenCreator, PreferenceAvailabilityProv 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 { val modules = context.packageManager.getInstalledModules(/* flags= */ 0) diff --git a/src/com/android/settings/display/AutoBrightnessScreen.kt b/src/com/android/settings/display/AutoBrightnessScreen.kt index 945788aecde..ed9e078ffb6 100644 --- a/src/com/android/settings/display/AutoBrightnessScreen.kt +++ b/src/com/android/settings/display/AutoBrightnessScreen.kt @@ -40,7 +40,7 @@ import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenBinding import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(AutoBrightnessScreen.KEY) class AutoBrightnessScreen : PreferenceScreenCreator, PreferenceScreenBinding, @@ -60,7 +60,7 @@ class AutoBrightnessScreen : 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 = AutoBrightnessDataStore(SettingsSystemStore.get(context)) diff --git a/src/com/android/settings/display/DisplayScreen.kt b/src/com/android/settings/display/DisplayScreen.kt index d8a6be11e21..909e3004ba4 100644 --- a/src/com/android/settings/display/DisplayScreen.kt +++ b/src/com/android/settings/display/DisplayScreen.kt @@ -30,7 +30,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(DisplayScreen.KEY) open class DisplayScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider { override val key: String @@ -52,7 +52,7 @@ open class DisplayScreen : override fun fragmentClass() = DisplaySettings::class.java override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { +BrightnessLevelPreference() +AutoBrightnessScreen.KEY +LockScreenPreferenceScreen.KEY diff --git a/src/com/android/settings/display/ScreenTimeoutScreen.kt b/src/com/android/settings/display/ScreenTimeoutScreen.kt index 9dcd1021621..de4d34747b1 100644 --- a/src/com/android/settings/display/ScreenTimeoutScreen.kt +++ b/src/com/android/settings/display/ScreenTimeoutScreen.kt @@ -27,7 +27,7 @@ import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator // TODO(b/368359967): The entry point logic is not yet migrated -@ProvidePreferenceScreen +@ProvidePreferenceScreen(ScreenTimeoutScreen.KEY) class ScreenTimeoutScreen : PreferenceScreenCreator { override val key: String @@ -43,7 +43,7 @@ class ScreenTimeoutScreen : PreferenceScreenCreator { override fun hasCompleteHierarchy() = false override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { +AdaptiveSleepPreference() } + preferenceHierarchy(context, this) { +AdaptiveSleepPreference() } override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?) = makeLaunchIntent(context, ScreenTimeoutActivity::class.java, metadata?.key) diff --git a/src/com/android/settings/display/darkmode/DarkModeScreen.kt b/src/com/android/settings/display/darkmode/DarkModeScreen.kt index a768875ff00..963a641c4d3 100644 --- a/src/com/android/settings/display/darkmode/DarkModeScreen.kt +++ b/src/com/android/settings/display/darkmode/DarkModeScreen.kt @@ -37,7 +37,7 @@ import com.android.settingslib.preference.PreferenceScreenBinding import com.android.settingslib.preference.PreferenceScreenCreator // LINT.IfChange -@ProvidePreferenceScreen +@ProvidePreferenceScreen(DarkModeScreen.KEY) class DarkModeScreen(context: Context) : PreferenceScreenCreator, PreferenceScreenBinding, @@ -80,7 +80,7 @@ class DarkModeScreen(context: Context) : 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 @@ -89,8 +89,8 @@ class DarkModeScreen(context: Context) : override fun bind(preference: Preference, metadata: PreferenceMetadata) { super.bind(preference, metadata) if (preference is DarkModePreference) preference.setCatalystEnabled(true) - (preference as PrimarySwitchPreference).apply { - isSwitchEnabled = isEnabled() + (preference as? PrimarySwitchPreference)?.apply { + isSwitchEnabled = isEnabled isChecked = darkModeStorage.getBoolean(KEY) == true } } diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScreen.kt b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScreen.kt index d0220736612..11a76e50506 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScreen.kt +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScreen.kt @@ -22,7 +22,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(BatterySaverScreen.KEY) open class BatterySaverScreen : PreferenceScreenCreator { override val key: String get() = KEY @@ -40,7 +40,7 @@ open class BatterySaverScreen : PreferenceScreenCreator { override fun hasCompleteHierarchy() = false override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { +BatterySaverPreference() order -100 } + preferenceHierarchy(context, this) { +BatterySaverPreference() order -100 } companion object { const val KEY = "battery_saver_screen" diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt index 9ff46b92663..7dc7a773f9f 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt +++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt @@ -26,7 +26,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(PowerUsageSummaryScreen.KEY) class PowerUsageSummaryScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider { override val key: String @@ -54,10 +54,11 @@ class PowerUsageSummaryScreen : R.drawable.ic_settings_battery_white } - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { - +BatteryHeaderPreference() - +BatteryPercentageSwitchPreference() - } + override fun getPreferenceHierarchy(context: Context) = + preferenceHierarchy(context, this) { + +BatteryHeaderPreference() + +BatteryPercentageSwitchPreference() + } companion object { const val KEY = "power_usage_summary_screen" diff --git a/src/com/android/settings/language/LanguageSettingScreen.kt b/src/com/android/settings/language/LanguageSettingScreen.kt index 09ca11be979..c2b39b779d4 100644 --- a/src/com/android/settings/language/LanguageSettingScreen.kt +++ b/src/com/android/settings/language/LanguageSettingScreen.kt @@ -15,19 +15,15 @@ */ package com.android.settings.language -import android.content.ComponentName import android.content.Context -import android.content.pm.PackageManager import com.android.settings.R -import com.android.settings.Settings.LanguageSettingsActivity import com.android.settings.flags.Flags -import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen -class LanguageSettingScreen: PreferenceScreenCreator { +@ProvidePreferenceScreen(LanguageSettingScreen.KEY) +class LanguageSettingScreen : PreferenceScreenCreator { override val key: String get() = KEY @@ -46,7 +42,7 @@ class LanguageSettingScreen: PreferenceScreenCreator { override fun fragmentClass() = LanguageSettings::class.java - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} + override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {} companion object { const val KEY = "language_setting" diff --git a/src/com/android/settings/location/LocationScreen.kt b/src/com/android/settings/location/LocationScreen.kt index d45b762d102..1aed27a0314 100644 --- a/src/com/android/settings/location/LocationScreen.kt +++ b/src/com/android/settings/location/LocationScreen.kt @@ -25,7 +25,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(LocationScreen.KEY) class LocationScreen : PreferenceScreenCreator, PreferenceSummaryProvider, PreferenceIconProvider { override val key: String get() = KEY @@ -57,7 +57,7 @@ class LocationScreen : PreferenceScreenCreator, PreferenceSummaryProvider, Prefe override fun fragmentClass() = LocationSettings::class.java - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} + override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) {} companion object { const val KEY = "location_settings" diff --git a/src/com/android/settings/network/AdaptiveConnectivityScreen.kt b/src/com/android/settings/network/AdaptiveConnectivityScreen.kt index 0604236173f..829ec8dc534 100644 --- a/src/com/android/settings/network/AdaptiveConnectivityScreen.kt +++ b/src/com/android/settings/network/AdaptiveConnectivityScreen.kt @@ -23,7 +23,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(AdaptiveConnectivityScreen.KEY) class AdaptiveConnectivityScreen : PreferenceScreenCreator { override val key get() = KEY @@ -35,7 +35,7 @@ class AdaptiveConnectivityScreen : PreferenceScreenCreator { override fun fragmentClass() = AdaptiveConnectivitySettings::class.java - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { + override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { +AdaptiveConnectivityTogglePreference() } diff --git a/src/com/android/settings/network/MobileNetworkListScreen.kt b/src/com/android/settings/network/MobileNetworkListScreen.kt index d7231ccb711..592260b151d 100644 --- a/src/com/android/settings/network/MobileNetworkListScreen.kt +++ b/src/com/android/settings/network/MobileNetworkListScreen.kt @@ -46,7 +46,7 @@ import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenBinding import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(MobileNetworkListScreen.KEY) class MobileNetworkListScreen : PreferenceScreenCreator, PreferenceScreenBinding, @@ -160,7 +160,7 @@ class MobileNetworkListScreen : override fun fragmentClass() = MobileNetworkListFragment::class.java override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { +MobileDataPreference() } + preferenceHierarchy(context, this) { +MobileDataPreference() } companion object { const val KEY = "mobile_network_list" diff --git a/src/com/android/settings/network/NetworkDashboardScreen.kt b/src/com/android/settings/network/NetworkDashboardScreen.kt index 1ed88c080d1..b80c4a124ed 100644 --- a/src/com/android/settings/network/NetworkDashboardScreen.kt +++ b/src/com/android/settings/network/NetworkDashboardScreen.kt @@ -27,7 +27,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(NetworkDashboardScreen.KEY) class NetworkDashboardScreen : PreferenceScreenCreator, PreferenceIconProvider { override val key: String get() = KEY @@ -51,7 +51,7 @@ class NetworkDashboardScreen : PreferenceScreenCreator, PreferenceIconProvider { makeLaunchIntent(context, NetworkDashboardActivity::class.java, metadata?.key) override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { +MobileNetworkListScreen.KEY order -15 +AirplaneModePreference() order -5 +DataSaverScreen.KEY order 10 diff --git a/src/com/android/settings/network/NetworkProviderScreen.kt b/src/com/android/settings/network/NetworkProviderScreen.kt index 766ec0c6a51..198eeec1db7 100644 --- a/src/com/android/settings/network/NetworkProviderScreen.kt +++ b/src/com/android/settings/network/NetworkProviderScreen.kt @@ -26,7 +26,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(NetworkProviderScreen.KEY) class NetworkProviderScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceRestrictionMixin { override val key: String @@ -55,7 +55,7 @@ class NetworkProviderScreen : override fun fragmentClass() = NetworkProviderSettings::class.java - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { + override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { +WifiSwitchPreference() } diff --git a/src/com/android/settings/network/tether/TetherScreen.kt b/src/com/android/settings/network/tether/TetherScreen.kt index 5865c861f58..cd8851326fe 100644 --- a/src/com/android/settings/network/tether/TetherScreen.kt +++ b/src/com/android/settings/network/tether/TetherScreen.kt @@ -35,7 +35,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(TetherScreen.KEY) class TetherScreen : PreferenceScreenCreator, PreferenceTitleProvider, @@ -76,7 +76,7 @@ class TetherScreen : makeLaunchIntent(context, TetherSettingsActivity::class.java, metadata?.key) override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { val dataSaverStore = DataSaverMainSwitchPreference.createDataStore(context) +WifiHotspotSwitchPreference(context, dataSaverStore) } diff --git a/src/com/android/settings/notification/SoundScreen.kt b/src/com/android/settings/notification/SoundScreen.kt index c0694b9a7ca..44034cc7dd8 100644 --- a/src/com/android/settings/notification/SoundScreen.kt +++ b/src/com/android/settings/notification/SoundScreen.kt @@ -27,7 +27,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(SoundScreen.KEY) class SoundScreen : PreferenceScreenCreator, PreferenceIconProvider { override val key: String get() = KEY @@ -51,7 +51,7 @@ class SoundScreen : PreferenceScreenCreator, PreferenceIconProvider { override fun fragmentClass(): Class? = SoundSettings::class.java override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { +MediaVolumePreference() order -180 +CallVolumePreference() order -170 +SeparateRingVolumePreference() order -155 diff --git a/src/com/android/settings/security/LockScreenPreferenceScreen.kt b/src/com/android/settings/security/LockScreenPreferenceScreen.kt index 3c00b428ebd..9a3226abe1a 100644 --- a/src/com/android/settings/security/LockScreenPreferenceScreen.kt +++ b/src/com/android/settings/security/LockScreenPreferenceScreen.kt @@ -28,7 +28,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(LockScreenPreferenceScreen.KEY) open class LockScreenPreferenceScreen : PreferenceScreenCreator, PreferenceSummaryProvider { override val key: String get() = KEY @@ -52,7 +52,7 @@ open class LockScreenPreferenceScreen : PreferenceScreenCreator, PreferenceSumma makeLaunchIntent(context, LockScreenSettingsActivity::class.java, metadata?.key) override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { +AmbientDisplayAlwaysOnPreference() } diff --git a/src/com/android/settings/wifi/calling/WifiCallingScreen.kt b/src/com/android/settings/wifi/calling/WifiCallingScreen.kt index 6ab5e564f06..5eeed054ded 100644 --- a/src/com/android/settings/wifi/calling/WifiCallingScreen.kt +++ b/src/com/android/settings/wifi/calling/WifiCallingScreen.kt @@ -23,7 +23,7 @@ import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator -@ProvidePreferenceScreen +@ProvidePreferenceScreen(WifiCallingScreen.KEY) class WifiCallingScreen : PreferenceScreenCreator { override val key: String get() = KEY @@ -41,7 +41,7 @@ class WifiCallingScreen : PreferenceScreenCreator { override fun hasCompleteHierarchy() = false override fun getPreferenceHierarchy(context: Context) = - preferenceHierarchy(this) { + preferenceHierarchy(context, this) { val subId = SubscriptionManager.getDefaultSubscriptionId() if (SubscriptionManager.isValidSubscriptionId(subId)) { +WifiCallingMainSwitchPreference(subId)