diff --git a/aconfig/Android.bp b/aconfig/Android.bp index d511d0463c2..f7b48818093 100644 --- a/aconfig/Android.bp +++ b/aconfig/Android.bp @@ -6,7 +6,7 @@ package { aconfig_declarations { name: "aconfig_settings_flags", package: "com.android.settings.flags", - container: "system", + container: "system_ext", srcs: [ "*.aconfig", ], diff --git a/aconfig/settings_accessibility_flag_declarations_legacy.aconfig b/aconfig/settings_accessibility_flag_declarations_legacy.aconfig index 6e02bfe20eb..d0e5850ddc3 100644 --- a/aconfig/settings_accessibility_flag_declarations_legacy.aconfig +++ b/aconfig/settings_accessibility_flag_declarations_legacy.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" # NOTE: Don't add new accessibility flags here, since the package name doesn't follow # the best practice for setting's feature flag go/settings-trunk-stable diff --git a/aconfig/settings_biometrics_framework_flag_declarations.aconfig b/aconfig/settings_biometrics_framework_flag_declarations.aconfig index 4355ed146f7..e787da05e90 100644 --- a/aconfig/settings_biometrics_framework_flag_declarations.aconfig +++ b/aconfig/settings_biometrics_framework_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "biometric_settings_provider" diff --git a/aconfig/settings_biometrics_integration_declarations.aconfig b/aconfig/settings_biometrics_integration_declarations.aconfig index ea3ac193587..66d794b9d70 100644 --- a/aconfig/settings_biometrics_integration_declarations.aconfig +++ b/aconfig/settings_biometrics_integration_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "sfps_enroll_refinement" diff --git a/aconfig/settings_bluetooth_declarations.aconfig b/aconfig/settings_bluetooth_declarations.aconfig index 3d4f4155c30..c2684f29124 100644 --- a/aconfig/settings_bluetooth_declarations.aconfig +++ b/aconfig/settings_bluetooth_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "enable_offload_bluetooth_operations_to_background_thread" @@ -23,4 +23,4 @@ flag { metadata { purpose: PURPOSE_BUGFIX } -} \ No newline at end of file +} diff --git a/aconfig/settings_connecteddevice_flag_declarations.aconfig b/aconfig/settings_connecteddevice_flag_declarations.aconfig index 49dd4b45010..3d2e9f5ec51 100644 --- a/aconfig/settings_connecteddevice_flag_declarations.aconfig +++ b/aconfig/settings_connecteddevice_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "enable_subsequent_pair_settings_integration" diff --git a/aconfig/settings_datetime_flag_declarations.aconfig b/aconfig/settings_datetime_flag_declarations.aconfig index 3d9d8b317a5..dc3f1f409a6 100644 --- a/aconfig/settings_datetime_flag_declarations.aconfig +++ b/aconfig/settings_datetime_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "datetime_feedback" diff --git a/aconfig/settings_development_flag_declarations.aconfig b/aconfig/settings_development_flag_declarations.aconfig index 318f862eff8..b9a084f3a29 100644 --- a/aconfig/settings_development_flag_declarations.aconfig +++ b/aconfig/settings_development_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" # NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors. diff --git a/aconfig/settings_display_flag_declarations.aconfig b/aconfig/settings_display_flag_declarations.aconfig index 9fe587b0162..52b9603e051 100644 --- a/aconfig/settings_display_flag_declarations.aconfig +++ b/aconfig/settings_display_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "protect_screen_timeout_with_auth" diff --git a/aconfig/settings_experience_flag_declarations.aconfig b/aconfig/settings_experience_flag_declarations.aconfig index e6cb924159a..9fe3f327383 100644 --- a/aconfig/settings_experience_flag_declarations.aconfig +++ b/aconfig/settings_experience_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "new_apn_page_enabled" diff --git a/aconfig/settings_flag_declarations.aconfig b/aconfig/settings_flag_declarations.aconfig index c7a21e9938e..b90ff9f27d2 100644 --- a/aconfig/settings_flag_declarations.aconfig +++ b/aconfig/settings_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "show_factory_reset_cancel_button" diff --git a/aconfig/settings_globalintl_flag_declarations.aconfig b/aconfig/settings_globalintl_flag_declarations.aconfig index 95202d36484..48f3a2933d5 100644 --- a/aconfig/settings_globalintl_flag_declarations.aconfig +++ b/aconfig/settings_globalintl_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "terms_of_address_enabled" diff --git a/aconfig/settings_notification_flag_declarations.aconfig b/aconfig/settings_notification_flag_declarations.aconfig index bdb65738827..f2ef4287f41 100644 --- a/aconfig/settings_notification_flag_declarations.aconfig +++ b/aconfig/settings_notification_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "dedupe_dnd_settings_channels" diff --git a/aconfig/settings_onboarding_experience_flag_declarations.aconfig b/aconfig/settings_onboarding_experience_flag_declarations.aconfig index 8d58d40a66c..830c1017741 100644 --- a/aconfig/settings_onboarding_experience_flag_declarations.aconfig +++ b/aconfig/settings_onboarding_experience_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "enable_sound_backup" diff --git a/aconfig/settings_perform_backup_tasks_flag_declarations.aconfig b/aconfig/settings_perform_backup_tasks_flag_declarations.aconfig index d060e24aaf8..dcb876b52f7 100644 --- a/aconfig/settings_perform_backup_tasks_flag_declarations.aconfig +++ b/aconfig/settings_perform_backup_tasks_flag_declarations.aconfig @@ -1,9 +1,9 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "enable_perform_backup_tasks_in_settings" namespace: "backstage_power" description: "Enable the Perform Backup Tasks screen in Settings" bug: "320563660" -} \ No newline at end of file +} diff --git a/aconfig/settings_security_flag_declarations.aconfig b/aconfig/settings_security_flag_declarations.aconfig index 3684212f87c..e27f835aea8 100644 --- a/aconfig/settings_security_flag_declarations.aconfig +++ b/aconfig/settings_security_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "protect_lock_after_timeout_with_auth" diff --git a/aconfig/settings_telephony_flag_declarations.aconfig b/aconfig/settings_telephony_flag_declarations.aconfig index dab1b45b548..c12de7ac340 100644 --- a/aconfig/settings_telephony_flag_declarations.aconfig +++ b/aconfig/settings_telephony_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "remove_key_hide_enable_2g" diff --git a/aconfig/settings_threadnetwork_flag_declarations.aconfig b/aconfig/settings_threadnetwork_flag_declarations.aconfig index e5448a91eb4..99664678137 100644 --- a/aconfig/settings_threadnetwork_flag_declarations.aconfig +++ b/aconfig/settings_threadnetwork_flag_declarations.aconfig @@ -1,5 +1,5 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "thread_settings_enabled" diff --git a/aconfig/settings_voice_activation_apps_flag_declarations.aconfig b/aconfig/settings_voice_activation_apps_flag_declarations.aconfig index a18e8c5a5b5..9ca3525b1e5 100644 --- a/aconfig/settings_voice_activation_apps_flag_declarations.aconfig +++ b/aconfig/settings_voice_activation_apps_flag_declarations.aconfig @@ -1,9 +1,9 @@ package: "com.android.settings.flags" -container: "system" +container: "system_ext" flag { name: "enable_voice_activation_apps_in_settings" namespace: "permissions" description: "Enable voice activation apps in Settings" bug: "303727896" -} \ No newline at end of file +} diff --git a/res/values/strings.xml b/res/values/strings.xml index a4d830565ed..8685ad923ba 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6937,7 +6937,7 @@ } - Multiple users + Users Users & profiles @@ -12440,6 +12440,8 @@ Allow multiple users allow, multiple, user, permit, many + + multiple, users, profiles, people, accounts, switch, many Use wireless debugging diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java index f0415286a6d..109ae4f22fb 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java @@ -352,11 +352,6 @@ public class FingerprintSettings extends SubSettings { */ protected void handleError(int errMsgId, CharSequence msg) { switch (errMsgId) { - case FingerprintManager.FINGERPRINT_ERROR_CANCELED: - case FingerprintManager.FINGERPRINT_ERROR_USER_CANCELED: - // Only happens if we get preempted by another activity, or canceled by the - // user (e.g. swipe up to home). Ignored. - return; case FingerprintManager.FINGERPRINT_ERROR_LOCKOUT: mInFingerprintLockout = true; // We've been locked out. Reset after 30s. diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 6abe52bb5b4..a4193f8219c 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -99,8 +99,6 @@ import java.util.Optional; /** * UI for Mobile network and Wi-Fi network settings. - * - * TODO(b/167474581): Define the intent android.settings.NETWORK_PROVIDER_SETTINGS in Settings.java. */ @SearchIndexable public class NetworkProviderSettings extends RestrictedSettingsFragment @@ -108,9 +106,6 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment WifiDialog2.WifiDialog2Listener, DialogInterface.OnDismissListener, AirplaneModeEnabler.OnAirplaneModeChangedListener, InternetUpdater.InternetChangeListener { - public static final String ACTION_NETWORK_PROVIDER_SETTINGS = - "android.settings.NETWORK_PROVIDER_SETTINGS"; - private static final String TAG = "NetworkProviderSettings"; // IDs of context menu static final int MENU_ID_CONNECT = Menu.FIRST + 1; diff --git a/src/com/android/settings/spa/network/SimsSection.kt b/src/com/android/settings/spa/network/SimsSection.kt index 5f6810d9f5d..59e63dfd8ee 100644 --- a/src/com/android/settings/spa/network/SimsSection.kt +++ b/src/com/android/settings/spa/network/SimsSection.kt @@ -37,6 +37,7 @@ import com.android.settings.R import com.android.settings.Utils import com.android.settings.network.SubscriptionUtil import com.android.settings.network.telephony.MobileNetworkUtils +import com.android.settings.network.telephony.SubscriptionActivationRepository import com.android.settings.network.telephony.isSubscriptionEnabledFlow import com.android.settings.network.telephony.phoneNumberFlow import com.android.settingslib.spa.widget.preference.PreferenceModel @@ -70,6 +71,9 @@ private fun SimPreference(subInfo: SubscriptionInfo) { emit(SubscriptionUtil.isConvertedPsimSubscription(subInfo)) } }.collectAsStateWithLifecycle(initialValue = false) + val isActivationChangeable by remember { + SubscriptionActivationRepository(context).isActivationChangeableFlow() + }.collectAsStateWithLifecycle(initialValue = false) RestrictedTwoTargetSwitchPreference( model = object : SwitchPreferenceModel { override val title = subInfo.displayName.toString() @@ -81,7 +85,7 @@ private fun SimPreference(subInfo: SubscriptionInfo) { } } override val icon = @Composable { SimIcon(subInfo.isEmbedded) } - override val changeable = { !isConvertedPsim } + override val changeable = { isActivationChangeable && !isConvertedPsim } override val checked = { checked.value } override val onCheckedChange = { newChecked: Boolean -> SubscriptionUtil.startToggleSubscriptionDialogActivity( diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index 8dbb91cf506..083608dde3e 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -138,6 +138,7 @@ public class UserSettings extends SettingsPreferenceFragment private static final String KEY_REMOVE_GUEST_ON_EXIT = "remove_guest_on_exit"; private static final String KEY_GUEST_USER_CATEGORY = "guest_user_category"; private static final String KEY_ALLOW_MULTIPLE_USERS = "allow_multiple_users"; + private static final String KEY_USER_SETTINGS_SCREEN = "user_settings_screen"; private static final String SETTING_GUEST_HAS_LOGGED_IN = "systemui.guest_has_logged_in"; @@ -1740,6 +1741,16 @@ public class UserSettings extends SettingsPreferenceFragment return rawData; } + SearchIndexableRaw multipleUsersData = new SearchIndexableRaw(context); + multipleUsersData.key = KEY_USER_SETTINGS_SCREEN; + multipleUsersData.title = + context.getString(R.string.user_settings_title); + multipleUsersData.keywords = + context.getString(R.string.multiple_users_title_keywords); + multipleUsersData.screenTitle = + context.getString(R.string.user_settings_title); + rawData.add(multipleUsersData); + SearchIndexableRaw allowMultipleUsersResult = new SearchIndexableRaw(context); allowMultipleUsersResult.key = KEY_ALLOW_MULTIPLE_USERS; diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java index 58e7e2d4003..6407f648acb 100644 --- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java @@ -17,6 +17,7 @@ package com.android.settings.biometrics.fingerprint; import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON; +import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_REAR; import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_OPTICAL; import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment; @@ -33,13 +34,16 @@ import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.content.Context; import android.content.Intent; import android.content.pm.UserInfo; import android.hardware.biometrics.ComponentInfoInternal; import android.hardware.biometrics.SensorProperties; +import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorProperties; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; @@ -80,6 +84,7 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.util.ArrayList; +import java.util.List; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowSettingsPreferenceFragment.class, ShadowUtils.class, ShadowFragment.class, @@ -147,7 +152,6 @@ public class FingerprintSettingsFragmentTest { public void testCancellationSignalLifeCycle() { setUpFragment(false); - mFingerprintAuthenticateSidecar.setFingerprintManager(mFingerprintManager); doNothing().when(mFingerprintManager).authenticate(any(), mCancellationSignalArgumentCaptor.capture(), @@ -213,6 +217,7 @@ public class FingerprintSettingsFragmentTest { doReturn(fragmentManager).when(mActivity).getSupportFragmentManager(); mFingerprintAuthenticateSidecar = new FingerprintAuthenticateSidecar(); + mFingerprintAuthenticateSidecar.setFingerprintManager(mFingerprintManager); doReturn(mFingerprintAuthenticateSidecar).when(fragmentManager).findFragmentByTag( "authenticate_sidecar"); @@ -246,4 +251,27 @@ public class FingerprintSettingsFragmentTest { true /* resetLockoutRequiresHardwareAuthToken */)); doReturn(props).when(mFingerprintManager).getSensorPropertiesInternal(); } + + @Test + public void testAuthOnFragmentSetup() { + doReturn(List.of(new Fingerprint("Finger 1", 1, 2, 3))) + .when(mFingerprintManager).getEnrolledFingerprints(anyInt()); + setUpFragment(false, 1, TYPE_REAR); + + verify(mFingerprintManager).authenticate(any(), any(), + any(), any(), anyInt()); + } + + @Test + public void testErrorCancelledRestartsAuth() { + doReturn(List.of(new Fingerprint("Finger 1", 1, 2, 3))) + .when(mFingerprintManager).getEnrolledFingerprints(anyInt()); + setUpFragment(false, 1, TYPE_REAR); + + // When we receive a cancel, we should restart auth. + mFragment.handleError(FingerprintManager.FINGERPRINT_ERROR_CANCELED, "blah"); + + verify(mFingerprintManager, times(2)).authenticate(any(), any(), + any(), any(), anyInt()); + } } diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java index a399e1771dd..5826ca25cc9 100644 --- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java +++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java @@ -104,6 +104,7 @@ public class UserSettingsTest { private static final String KEY_USER_GUEST = "user_guest"; private static final String KEY_ALLOW_MULTIPLE_USERS = "allow_multiple_users"; + private static final String KEY_USER_SETTINGS_SCREEN = "user_settings_screen"; private static final int ACTIVE_USER_ID = 0; private static final int INACTIVE_ADMIN_USER_ID = 1; private static final int INACTIVE_SECONDARY_USER_ID = 14; @@ -211,7 +212,7 @@ public class UserSettingsTest { @Test public void testGetRawDataToIndex_returnAllIndexablePreferences() { - String[] expectedKeys = {KEY_ALLOW_MULTIPLE_USERS}; + String[] expectedKeys = {KEY_ALLOW_MULTIPLE_USERS, KEY_USER_SETTINGS_SCREEN}; List keysResultList = new ArrayList<>(); ShadowUserManager.getShadow().setSupportsMultipleUsers(true); List rawData = diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java index 345631cf5f6..7534845223a 100644 --- a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java +++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java @@ -43,6 +43,7 @@ import android.net.ConnectivityManager; import android.net.Uri; import android.net.wifi.WifiManager; import android.os.UserManager; +import android.provider.Settings; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -390,7 +391,7 @@ public class ProviderModelSliceTest { } private PendingIntent getPrimaryAction() { - final Intent intent = new Intent("android.settings.NETWORK_PROVIDER_SETTINGS") + final Intent intent = new Intent(Settings.ACTION_NETWORK_PROVIDER_SETTINGS) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); return PendingIntent.getActivity(mContext, 0 /* requestCode */, intent, PendingIntent.FLAG_IMMUTABLE /* flags */);