From 27255b7a7ca9ff0ec49c432b8338e7390dbb47dc Mon Sep 17 00:00:00 2001 From: hoffc Date: Fri, 29 Mar 2024 15:32:13 +0800 Subject: [PATCH 01/12] Fix SMS and Calls preference summary displays empty. SMS and Calls preference summary set to summary_placeholder in displayPreference's every call. But displayPreference can be called multiple times, so it may result in SMS and Calls preference summary displays empty when refreshSummary is not explicitly called after displayPreference's last call. Move the summary placeholder setting to layout xml. Bug: 331874741 Change-Id: I4c6f34dd813fa9a6d7e2c4df2cac279679ee6960 --- res/xml/mobile_network_settings.xml | 2 ++ .../network/telephony/DefaultSubscriptionController.java | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml index 62a88b75646..8b59f80bfa6 100644 --- a/res/xml/mobile_network_settings.xml +++ b/res/xml/mobile_network_settings.xml @@ -37,6 +37,7 @@ @@ -44,6 +45,7 @@ diff --git a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java index 206b3a9cc08..84263821e50 100644 --- a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java +++ b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java @@ -112,8 +112,6 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = screen.findPreference(getPreferenceKey()); - // Set a summary placeholder to reduce flicker. - mPreference.setSummaryProvider(pref -> mContext.getString(R.string.summary_placeholder)); updateEntries(); } From 0e9c157c36f9ef7f085bb13638908531adc81309 Mon Sep 17 00:00:00 2001 From: David Jacobo Date: Fri, 5 May 2023 19:51:35 -0700 Subject: [PATCH 02/12] Add flag to control Internet preference This CL adds a flag named config_show_internet_settings so access to Internet preference can be easily customized as Wi-fi preference was in the past, this level of customization was lost when Internet preference was introduced here ag/13053253. Bug: 271203982 Test: make -j32 Settings Test: atest -c InternetPreferenceControllerTest (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:0af54a1d3cfa26ba5f23b5d8c74ade2bb582f76f) Merged-In: Iaf9a18f9389be089304d11bd3206d6917ab85124 Change-Id: Iaf9a18f9389be089304d11bd3206d6917ab85124 --- res/values/config.xml | 3 +++ .../settings/network/InternetPreferenceController.java | 2 +- .../android/settings/network/NetworkProviderSettings.java | 6 ++++++ .../settings/network/InternetPreferenceControllerTest.java | 6 ++++-- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/res/values/config.xml b/res/values/config.xml index e3d8e7dd8ba..fad7acc0869 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -387,6 +387,9 @@ true + + true + true diff --git a/src/com/android/settings/network/InternetPreferenceController.java b/src/com/android/settings/network/InternetPreferenceController.java index 1f5042fc917..aed44d531e5 100644 --- a/src/com/android/settings/network/InternetPreferenceController.java +++ b/src/com/android/settings/network/InternetPreferenceController.java @@ -180,7 +180,7 @@ public class InternetPreferenceController extends AbstractPreferenceController i @Override public boolean isAvailable() { - return true; + return mContext.getResources().getBoolean(R.bool.config_show_internet_settings); } @Override diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 0bc426c9887..5c639ed4580 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -295,6 +295,12 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); + final Context context = getContext(); + if (context != null && !context.getResources().getBoolean( + R.bool.config_show_internet_settings)) { + finish(); + return; + } mAirplaneModeEnabler = new AirplaneModeEnabler(getContext(), this); // TODO(b/37429702): Add animations and preference comparator back after initial screen is diff --git a/tests/unit/src/com/android/settings/network/InternetPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/InternetPreferenceControllerTest.java index 4ba12cbd769..8a4acd28f38 100644 --- a/tests/unit/src/com/android/settings/network/InternetPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/InternetPreferenceControllerTest.java @@ -49,6 +49,7 @@ import androidx.test.annotation.UiThreadTest; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.android.settings.R; import com.android.settings.testutils.ResourcesUtils; import com.android.settings.wifi.WifiPickerTrackerHelper; import com.android.settings.wifi.WifiSummaryUpdater; @@ -188,8 +189,9 @@ public class InternetPreferenceControllerTest { } @Test - public void isAvailable_shouldBeTrue() { - assertThat(mController.isAvailable()).isTrue(); + public void isAvailable_shouldMatchPrefFlag() { + assertThat(mController.isAvailable()).isEqualTo( + mContext.getResources().getBoolean(R.bool.config_show_internet_settings)); } @Test From 2c631fcd5684291a2be7f0a239e4eb274e43260f Mon Sep 17 00:00:00 2001 From: josephpv Date: Thu, 4 Apr 2024 17:33:54 +0000 Subject: [PATCH 03/12] canAddPrivateProfile checks for private space creation test Bug: 332854426 Test: atest PrivateSpaceMaintainerTest, atest PrivateSpaceDeletionProgressFragmentTest Change-Id: I50ddd15f53e14b54a2d8df201b94f8423eec3d72 --- .../PrivateSpaceAuthenticationActivityTest.java | 3 +++ .../privatespace/PrivateSpaceMaintainerTest.java | 12 ++++++++++++ .../PrivateSpaceDeletionProgressFragmentTest.java | 5 +++++ 3 files changed, 20 insertions(+) diff --git a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceAuthenticationActivityTest.java b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceAuthenticationActivityTest.java index 8a7bd70e0ed..499cd934fb1 100644 --- a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceAuthenticationActivityTest.java +++ b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceAuthenticationActivityTest.java @@ -18,6 +18,7 @@ package com.android.settings.privatespace; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assume.assumeTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.spy; @@ -27,6 +28,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.Intent; import android.os.Flags; +import android.os.UserManager; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; @@ -91,6 +93,7 @@ public class PrivateSpaceAuthenticationActivityTest { @RequiresFlagsEnabled({Flags.FLAG_ALLOW_PRIVATE_PROFILE, android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES}) public void whenPrivateProfileDoesNotExist_triggersSetupFlow() { + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); when(mPrivateSpaceMaintainer.doesPrivateSpaceExist()).thenReturn(false); final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); diff --git a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java index bb1eb22caa8..f68f0c19e07 100644 --- a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java +++ b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java @@ -80,6 +80,7 @@ public class PrivateSpaceMaintainerTest { public void deletePrivateSpace_psExists_deletesPS() { mSetFlagsRule.enableFlags( android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); privateSpaceMaintainer.createPrivateSpace(); @@ -112,6 +113,7 @@ public class PrivateSpaceMaintainerTest { public void createPrivateSpace_psDoesNotExist_createsPS() { mSetFlagsRule.enableFlags( android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); privateSpaceMaintainer.deletePrivateSpace(); @@ -127,6 +129,7 @@ public class PrivateSpaceMaintainerTest { public void createPrivateSpace_psExists_returnsFalse() { mSetFlagsRule.enableFlags( android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); privateSpaceMaintainer.deletePrivateSpace(); @@ -143,6 +146,7 @@ public class PrivateSpaceMaintainerTest { public void createPrivateSpace_psDoesNotExist_resetsHidePSSettings() { mSetFlagsRule.enableFlags( android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); Settings.Secure.putInt( @@ -166,6 +170,7 @@ public class PrivateSpaceMaintainerTest { Flags.FLAG_ALLOW_PRIVATE_PROFILE, android.multiuser.Flags.FLAG_ENABLE_PS_SENSITIVE_NOTIFICATIONS_TOGGLE, android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); privateSpaceMaintainer.deletePrivateSpace(); @@ -183,6 +188,7 @@ public class PrivateSpaceMaintainerTest { public void createPrivateSpace_psExists_doesNotResetHidePSSettings() { mSetFlagsRule.enableFlags( android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); privateSpaceMaintainer.createPrivateSpace(); @@ -204,6 +210,7 @@ public class PrivateSpaceMaintainerTest { public void lockPrivateSpace_psExistsAndPrivateProfileRunning_locksCreatedPrivateSpace() { mSetFlagsRule.enableFlags( android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); privateSpaceMaintainer.createPrivateSpace(); @@ -222,6 +229,7 @@ public class PrivateSpaceMaintainerTest { public void lockPrivateSpace_psExistsAndPrivateProfileNotRunning_returnsFalse() { mSetFlagsRule.enableFlags( android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); privateSpaceMaintainer.createPrivateSpace(); @@ -258,6 +266,7 @@ public class PrivateSpaceMaintainerTest { public void createPrivateSpace_psDoesNotExist_setsUserSetupComplete() { mSetFlagsRule.enableFlags( android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); privateSpaceMaintainer.createPrivateSpace(); @@ -272,6 +281,7 @@ public class PrivateSpaceMaintainerTest { public void createPrivateSpace_pSExists_doesNotChangeUserSetupSetting() { mSetFlagsRule.enableFlags( android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); privateSpaceMaintainer.createPrivateSpace(); @@ -290,6 +300,7 @@ public class PrivateSpaceMaintainerTest { Flags.FLAG_ALLOW_PRIVATE_PROFILE, android.multiuser.Flags.FLAG_SUPPORT_AUTOLOCK_FOR_PRIVATE_SPACE, android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); final int autoLockOption = 2; PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); @@ -314,6 +325,7 @@ public class PrivateSpaceMaintainerTest { Flags.FLAG_ALLOW_PRIVATE_PROFILE, android.multiuser.Flags.FLAG_SUPPORT_AUTOLOCK_FOR_PRIVATE_SPACE, android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); final int privateSpaceAutLockValue = 1; PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); diff --git a/tests/unit/src/com/android/settings/privatespace/delete/PrivateSpaceDeletionProgressFragmentTest.java b/tests/unit/src/com/android/settings/privatespace/delete/PrivateSpaceDeletionProgressFragmentTest.java index ffc1edf0c28..d6eadd59780 100644 --- a/tests/unit/src/com/android/settings/privatespace/delete/PrivateSpaceDeletionProgressFragmentTest.java +++ b/tests/unit/src/com/android/settings/privatespace/delete/PrivateSpaceDeletionProgressFragmentTest.java @@ -20,6 +20,7 @@ import static com.android.settings.privatespace.PrivateSpaceMaintainer.ErrorDele import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assume.assumeTrue; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; @@ -28,6 +29,7 @@ import static org.mockito.Mockito.verify; import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Flags; +import android.os.UserManager; import android.platform.test.flag.junit.SetFlagsRule; import androidx.test.annotation.UiThreadTest; @@ -90,6 +92,7 @@ public class PrivateSpaceDeletionProgressFragmentTest { doNothing().when(spyFragment).showSuccessfulDeletionToast(); mSetFlagsRule.enableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE, android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); mPrivateSpaceMaintainer.createPrivateSpace(); spyFragment.deletePrivateSpace(); @@ -104,6 +107,7 @@ public class PrivateSpaceDeletionProgressFragmentTest { doNothing().when(spyFragment).showSuccessfulDeletionToast(); mSetFlagsRule.enableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE, android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); mPrivateSpaceMaintainer.createPrivateSpace(); spyFragment.deletePrivateSpace(); @@ -128,6 +132,7 @@ public class PrivateSpaceDeletionProgressFragmentTest { doNothing().when(spyFragment).showDeletionInternalErrorToast(); mSetFlagsRule.enableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE, android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); spyFragment.deletePrivateSpace(); From cf2d6356015e953973c3fdf6994269060c2f255a Mon Sep 17 00:00:00 2001 From: Becca Hughes Date: Fri, 5 Apr 2024 16:26:25 +0000 Subject: [PATCH 04/12] Add provider name to on/off switch talkback Test: ondevice manual Bug: 322274544 Change-Id: If067b3bea941ae997d9aefe03286d3b223956326 --- res/values/strings.xml | 3 +++ ...CredentialManagerPreferenceController.java | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 9fbce465110..f54338621bd 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11115,6 +11115,9 @@ Use %1$s\? + + %1$s on/off + Turn off diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java index 47beeb66e21..a92b755331c 100644 --- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java +++ b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java @@ -1072,6 +1072,22 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl return mChecked; } + @Override + public void setTitle(@Nullable CharSequence title) { + super.setTitle(title); + maybeUpdateContentDescription(); + } + + private void maybeUpdateContentDescription() { + final CharSequence appName = getTitle(); + + if (mSwitch != null && !TextUtils.isEmpty(appName)) { + mSwitch.setContentDescription( + getContext().getString( + R.string.credman_on_off_switch_content_description, appName)); + } + } + public void setPreferenceListener(OnCombiPreferenceClickListener onClickListener) { mOnClickListener = onClickListener; } @@ -1094,6 +1110,9 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl // Store this for later. mSwitch = switchView; + + // Update the content description. + maybeUpdateContentDescription(); } super.setOnPreferenceClickListener( From 0c14078504a56123d21c5b19d4e02622cdf827d9 Mon Sep 17 00:00:00 2001 From: Becca Hughes Date: Mon, 8 Apr 2024 10:05:06 -0700 Subject: [PATCH 05/12] Disable primary provider clickable state Since this view isn't clickable this was resulting in incorrect talkback descriptions. Bug: 322252309 Test: on device manual Change-Id: I6b00707dbab9081a5ed09cc2383d06baf0397600 --- .../applications/credentials/PrimaryProviderPreference.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/android/settings/applications/credentials/PrimaryProviderPreference.java b/src/com/android/settings/applications/credentials/PrimaryProviderPreference.java index 84459e057ab..4a45ea4ed06 100644 --- a/src/com/android/settings/applications/credentials/PrimaryProviderPreference.java +++ b/src/com/android/settings/applications/credentials/PrimaryProviderPreference.java @@ -129,6 +129,7 @@ public class PrimaryProviderPreference extends GearPreference { } }); setVisibility(mOpenButton, mOpenButtonVisible); + holder.itemView.setClickable(false); mChangeButton = (Button) holder.findViewById(R.id.change_button); mChangeButton.setOnClickListener( From 6ae958abd26ed77ecd4d3fb1720bb912553da2ea Mon Sep 17 00:00:00 2001 From: Song Chun Fan Date: Mon, 8 Apr 2024 18:16:11 +0000 Subject: [PATCH 06/12] [Settings/Archive] remove all checks for the archiving system property No longer needed Change-Id: I24bc9a3d7503da1606d29eb3dfa963b0e6bf9d3e BUG: 331165939 Test: builds --- src/com/android/settings/applications/AppCounter.java | 3 +-- src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt | 3 +-- .../settings/spa/app/appinfo/HibernationSwitchPreference.kt | 3 +-- .../spa/app/appinfo/HibernationSwitchPreferenceTest.kt | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/applications/AppCounter.java b/src/com/android/settings/applications/AppCounter.java index 2b1e47eaf23..bc752e94fd7 100644 --- a/src/com/android/settings/applications/AppCounter.java +++ b/src/com/android/settings/applications/AppCounter.java @@ -72,8 +72,7 @@ public abstract class AppCounter extends AsyncTask { } private boolean isArchivingEnabled() { - return mFf.archiving() || SystemProperties.getBoolean("pm.archiving.enabled", false) - || Flags.appArchiving(); + return mFf.archiving() || Flags.appArchiving(); } @Override diff --git a/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt b/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt index 2fd8fc59edf..f38dd96ef98 100644 --- a/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt +++ b/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt @@ -179,5 +179,4 @@ private fun AppInfoSettings(packageInfoPresenter: PackageInfoPresenter) { } fun isArchivingEnabled(featureFlags: PmFeatureFlags) = - featureFlags.archiving() || SystemProperties.getBoolean("pm.archiving.enabled", false) - || Flags.appArchiving() \ No newline at end of file + featureFlags.archiving() || Flags.appArchiving() \ No newline at end of file diff --git a/src/com/android/settings/spa/app/appinfo/HibernationSwitchPreference.kt b/src/com/android/settings/spa/app/appinfo/HibernationSwitchPreference.kt index 86d7f445090..7a45ed4ea2f 100644 --- a/src/com/android/settings/spa/app/appinfo/HibernationSwitchPreference.kt +++ b/src/com/android/settings/spa/app/appinfo/HibernationSwitchPreference.kt @@ -93,8 +93,7 @@ fun HibernationSwitchPreference( } private fun isArchivingEnabled() = - PmFlags.archiving() || SystemProperties.getBoolean("pm.archiving.enabled", false) - || Flags.appArchiving() + PmFlags.archiving() || Flags.appArchiving() private class HibernationSwitchPresenter(context: Context, private val app: ApplicationInfo) { private val appOpsManager = context.appOpsManager diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/HibernationSwitchPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/HibernationSwitchPreferenceTest.kt index b61e3a9fd7c..a0be3f2498a 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/HibernationSwitchPreferenceTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/HibernationSwitchPreferenceTest.kt @@ -163,8 +163,7 @@ class HibernationSwitchPreferenceTest { } private fun isArchivingEnabled() = - PmFlags.archiving() || SystemProperties.getBoolean("pm.archiving.enabled", false) - || Flags.appArchiving() + PmFlags.archiving() || Flags.appArchiving() @Test fun `An app targets Q with ops mode default when hibernation targets pre S - not exempted`() { mockOpsMode(MODE_DEFAULT) From ea0453e5f67273f2f3ed2db4fa71a99238aada99 Mon Sep 17 00:00:00 2001 From: Rafael Higuera Silva Date: Fri, 5 Apr 2024 18:58:26 +0000 Subject: [PATCH 07/12] Add logic to log interaction of RAC warning dialog. Bug: 326618987 Test: make, atest EuiccRacConnectivityDialogFragmentTest Change-Id: Iccec9245da27d525cfb3d74504ab86859e152a6e --- .../network/EraseEuiccDataDialogFragment.java | 3 + .../EuiccRacConnectivityDialogFragment.java | 41 +++++++-- ...uiccRacConnectivityDialogFragmentTest.java | 83 +++++++++++++++++++ 3 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/network/EuiccRacConnectivityDialogFragmentTest.java diff --git a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java index 3bf9db33321..01ced4ea197 100644 --- a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java +++ b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java @@ -43,6 +43,9 @@ public class EraseEuiccDataDialogFragment extends InstrumentedDialogFragment imp "com.android.settings.network"; public static void show(ResetDashboardFragment host) { + if (host.getActivity() == null) { + return; + } final EraseEuiccDataDialogFragment dialog = new EraseEuiccDataDialogFragment(); dialog.setTargetFragment(host, 0 /* requestCode */); final FragmentManager manager = host.getActivity().getSupportFragmentManager(); diff --git a/src/com/android/settings/network/EuiccRacConnectivityDialogFragment.java b/src/com/android/settings/network/EuiccRacConnectivityDialogFragment.java index 76a587e679f..663631ff51a 100644 --- a/src/com/android/settings/network/EuiccRacConnectivityDialogFragment.java +++ b/src/com/android/settings/network/EuiccRacConnectivityDialogFragment.java @@ -33,14 +33,25 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import com.android.settings.R; -import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.system.ResetDashboardFragment; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; +import com.android.settingslib.core.lifecycle.ObservableDialogFragment; -public class EuiccRacConnectivityDialogFragment extends InstrumentedDialogFragment - implements DialogInterface.OnClickListener { +public class EuiccRacConnectivityDialogFragment extends ObservableDialogFragment + implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener { public static final String TAG = "EuiccRacConnectivityDlg"; + private static final int METRICS_TAG = + SettingsEnums.ACTION_RESET_ESIMS_RAC_CONNECTIVITY_WARNING; + private static final int METRICS_CANCEL_VALUE = 0; + private static final int METRICS_CONTINUE_VALUE = 1; + + private MetricsFeatureProvider mMetricsFeatureProvider; static void show(ResetDashboardFragment host) { + if (host.getActivity() == null) { + return; + } final EuiccRacConnectivityDialogFragment dialog = new EuiccRacConnectivityDialogFragment(); dialog.setTargetFragment(host, /* requestCode= */ 0); final FragmentManager manager = host.getActivity().getSupportFragmentManager(); @@ -48,8 +59,9 @@ public class EuiccRacConnectivityDialogFragment extends InstrumentedDialogFragme } @Override - public int getMetricsCategory() { - return SettingsEnums.RESET_EUICC; + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider(); } @NonNull @@ -62,7 +74,7 @@ public class EuiccRacConnectivityDialogFragment extends InstrumentedDialogFragme new AlertDialog.Builder(getContext()) .setOnDismissListener(this) // Return is on the right side - .setPositiveButton(R.string.wifi_warning_return_button, null) + .setPositiveButton(R.string.wifi_warning_return_button, this) // Continue is on the left side .setNegativeButton(R.string.wifi_warning_continue_button, this); @@ -109,7 +121,24 @@ public class EuiccRacConnectivityDialogFragment extends InstrumentedDialogFragme // Positions of the buttons have been switch: // negative button = left button = the button to continue if (which == DialogInterface.BUTTON_NEGATIVE) { + logMetrics(METRICS_CONTINUE_VALUE); EraseEuiccDataDialogFragment.show(((ResetDashboardFragment) fragment)); + } else { + logMetrics(METRICS_CANCEL_VALUE); } } + + @Override + public void onCancel(@NonNull DialogInterface dialog) { + final Fragment fragment = getTargetFragment(); + if (!(fragment instanceof ResetDashboardFragment)) { + Log.e(TAG, "getTargetFragment return unexpected type"); + return; + } + logMetrics(METRICS_CANCEL_VALUE); + } + + private void logMetrics(int value) { + mMetricsFeatureProvider.action(getActivity(), METRICS_TAG, value); + } } diff --git a/tests/robotests/src/com/android/settings/network/EuiccRacConnectivityDialogFragmentTest.java b/tests/robotests/src/com/android/settings/network/EuiccRacConnectivityDialogFragmentTest.java new file mode 100644 index 00000000000..3a4ba6e2b73 --- /dev/null +++ b/tests/robotests/src/com/android/settings/network/EuiccRacConnectivityDialogFragmentTest.java @@ -0,0 +1,83 @@ +/* + * 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.network; + +import static org.mockito.Mockito.verify; + +import android.app.settings.SettingsEnums; +import android.content.DialogInterface; + +import com.android.settings.system.ResetDashboardFragment; +import com.android.settings.testutils.FakeFeatureFactory; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.shadows.androidx.fragment.FragmentController; + +@RunWith(RobolectricTestRunner.class) +public class EuiccRacConnectivityDialogFragmentTest { + private static final int CONTINUE_VALUE = 1; + private static final int CANCEL_VALUE = 0; + + private EuiccRacConnectivityDialogFragment mRacDialogFragment; + private FakeFeatureFactory mFeatureFactory; + @Mock private DialogInterface mDialogInterface; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mFeatureFactory = FakeFeatureFactory.setupForTest(); + mRacDialogFragment = new EuiccRacConnectivityDialogFragment(); + + FragmentController.setupFragment(mRacDialogFragment); + mRacDialogFragment.setTargetFragment(new ResetDashboardFragment(), /* requestCode= */ 0); + } + + @Test + public void dialogAction_continue_intentResetESIMS_metricsLogged() { + mRacDialogFragment.onClick(mDialogInterface, DialogInterface.BUTTON_NEGATIVE); + verify(mFeatureFactory.metricsFeatureProvider) + .action( + mRacDialogFragment.getActivity(), + SettingsEnums.ACTION_RESET_ESIMS_RAC_CONNECTIVITY_WARNING, + CONTINUE_VALUE); + } + + @Test + public void dialogAction_backCancel_intentResetESIMS_metricsLogged() { + mRacDialogFragment.onCancel(mDialogInterface); + verify(mFeatureFactory.metricsFeatureProvider) + .action( + mRacDialogFragment.getActivity(), + SettingsEnums.ACTION_RESET_ESIMS_RAC_CONNECTIVITY_WARNING, + CANCEL_VALUE); + } + + @Test + public void dialogAction_buttonCancel_intentResetESIMS_metricsLogged() { + mRacDialogFragment.onCancel(mDialogInterface); + verify(mFeatureFactory.metricsFeatureProvider) + .action( + mRacDialogFragment.getActivity(), + SettingsEnums.ACTION_RESET_ESIMS_RAC_CONNECTIVITY_WARNING, + CANCEL_VALUE); + } +} From 75b679d96d5a7aa9fc6ce77897a6c9486323f052 Mon Sep 17 00:00:00 2001 From: Becca Hughes Date: Mon, 8 Apr 2024 12:12:20 -0700 Subject: [PATCH 08/12] Add missing description to work profile tab Impl: https: //hsv.googleplex.com/6193893270880256 Bug: 333082300 Test: manual on device Change-Id: Ie8bb07050d2d215821b2a4df08c6739aedbf904c --- res/xml/accounts_work_dashboard_settings_credman.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/res/xml/accounts_work_dashboard_settings_credman.xml b/res/xml/accounts_work_dashboard_settings_credman.xml index 44bdb52a915..c275b82140b 100644 --- a/res/xml/accounts_work_dashboard_settings_credman.xml +++ b/res/xml/accounts_work_dashboard_settings_credman.xml @@ -22,6 +22,9 @@ android:title="@string/account_dashboard_title_with_passkeys" settings:keywords="@string/keywords_accounts"> + + Date: Tue, 9 Apr 2024 05:41:28 +0000 Subject: [PATCH 09/12] Remove LooperMode.LEGACY usage Bug: 330824314 Test: atest Change-Id: I7b2cb83ddb969a907cea0df18486f89f05969ebc --- .../deviceinfo/PrivateVolumeUnmountTest.java | 10 ++++-- ...faultAppsListPreferenceControllerTest.java | 24 +++++++++----- .../batteryusage/DataProcessManagerTest.java | 32 ++++++++++++------- 3 files changed, 45 insertions(+), 21 deletions(-) diff --git a/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeUnmountTest.java b/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeUnmountTest.java index 4704475bb94..9425d08a2bc 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeUnmountTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeUnmountTest.java @@ -30,19 +30,23 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; +import org.robolectric.android.util.concurrent.PausedExecutorService; import org.robolectric.annotation.Config; -import org.robolectric.annotation.LooperMode; +import org.robolectric.shadows.ShadowLooper; +import org.robolectric.shadows.ShadowPausedAsyncTask; import org.robolectric.shadows.androidx.fragment.FragmentController; @RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) @Config(shadows = ShadowStorageManager.class) public class PrivateVolumeUnmountTest { private PrivateVolumeUnmount mFragment; + private PausedExecutorService mExecutorService; @Before public void setUp() { + mExecutorService = new PausedExecutorService(); + ShadowPausedAsyncTask.overrideExecutor(mExecutorService); Bundle bundle = new Bundle(); bundle.putString(VolumeInfo.EXTRA_VOLUME_ID, "id"); mFragment = FragmentController.of(new PrivateVolumeUnmount(), bundle) @@ -65,6 +69,8 @@ public class PrivateVolumeUnmountTest { final Button confirm = mFragment.getView().findViewById(R.id.confirm); confirm.performClick(); + mExecutorService.runAll(); + ShadowLooper.idleMainLooper(); assertThat(ShadowStorageManager.isUnmountCalled()).isTrue(); } diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceControllerTest.java index 1a16d04812b..dc61455560e 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceControllerTest.java @@ -37,6 +37,7 @@ import android.os.UserHandle; import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; +import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; @@ -46,23 +47,27 @@ import com.android.settings.testutils.ApplicationTestUtils; import com.android.settings.testutils.FakeFeatureFactory; 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.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.LooperMode; -import org.robolectric.shadows.ShadowApplication; +import org.robolectric.android.util.concurrent.PausedExecutorService; +import org.robolectric.shadows.ShadowLooper; +import org.robolectric.shadows.ShadowPausedAsyncTask; import java.util.Arrays; import java.util.Collections; @RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) public class EnterpriseSetDefaultAppsListPreferenceControllerTest { + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + private static final int USER_ID = 0; private static final int APP_UID = 0; @@ -82,11 +87,13 @@ public class EnterpriseSetDefaultAppsListPreferenceControllerTest { private Context mContext; private FakeFeatureFactory mFeatureFactory; + private PausedExecutorService mExecutorService; @Before public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); + mExecutorService = new PausedExecutorService(); + ShadowPausedAsyncTask.overrideExecutor(mExecutorService); + mContext = spy(ApplicationProvider.getApplicationContext()); mFeatureFactory = FakeFeatureFactory.setupForTest(); when(mFragment.getPreferenceScreen()).thenReturn(mScreen); when(mPrefenceManager.getContext()).thenReturn(mContext); @@ -127,7 +134,8 @@ public class EnterpriseSetDefaultAppsListPreferenceControllerTest { new UserAppInfo(user, appInfo2))); new EnterpriseSetDefaultAppsListPreferenceController(mContext, mFragment, mPackageManager); - ShadowApplication.runBackgroundTasks(); + mExecutorService.runAll(); + ShadowLooper.idleMainLooper(); ArgumentCaptor apps = ArgumentCaptor.forClass(Preference.class); verify(mScreen, times(2)).addPreference(apps.capture()); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java index b025db8d551..7faca0d0960 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java @@ -41,19 +41,24 @@ import android.os.RemoteException; import android.os.UserManager; import android.text.format.DateUtils; +import androidx.test.core.app.ApplicationProvider; + import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.LooperMode; +import org.robolectric.android.util.concurrent.PausedExecutorService; +import org.robolectric.shadows.ShadowLooper; +import org.robolectric.shadows.ShadowPausedAsyncTask; import java.util.ArrayList; import java.util.Collections; @@ -65,10 +70,14 @@ import java.util.function.Supplier; @RunWith(RobolectricTestRunner.class) public final class DataProcessManagerTest { + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + private static final String FAKE_ENTRY_KEY = "fake_entry_key"; private Context mContext; private DataProcessManager mDataProcessManager; + private PausedExecutorService mExecutorService; @Mock private UserIdsSeries mUserIdsSeries; @Mock private IUsageStatsManager mUsageStatsManager; @@ -80,9 +89,9 @@ public final class DataProcessManagerTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); - - mContext = spy(RuntimeEnvironment.application); + mExecutorService = new PausedExecutorService(); + ShadowPausedAsyncTask.overrideExecutor(mExecutorService); + mContext = spy(ApplicationProvider.getApplicationContext()); DataProcessor.sTestSystemAppsPackageNames = Set.of(); DataProcessor.sUsageStatsManager = mUsageStatsManager; doReturn(mContext).when(mContext).getApplicationContext(); @@ -117,7 +126,6 @@ public final class DataProcessManagerTest { } @Test - @LooperMode(LooperMode.Mode.LEGACY) public void constructor_noLevelData() { final DataProcessManager dataProcessManager = new DataProcessManager( @@ -129,7 +137,6 @@ public final class DataProcessManagerTest { } @Test - @LooperMode(LooperMode.Mode.LEGACY) public void start_loadEmptyDatabaseAppUsageData() { final MatrixCursor cursor = new MatrixCursor( @@ -142,6 +149,8 @@ public final class DataProcessManagerTest { doReturn(true).when(mUserManager).isUserUnlocked(anyInt()); mDataProcessManager.start(); + mExecutorService.runAll(); + ShadowLooper.idleMainLooper(); assertThat(mDataProcessManager.getIsCurrentAppUsageLoaded()).isTrue(); assertThat(mDataProcessManager.getIsDatabaseAppUsageLoaded()).isTrue(); @@ -152,7 +161,6 @@ public final class DataProcessManagerTest { } @Test - @LooperMode(LooperMode.Mode.LEGACY) public void start_loadExpectedAppUsageData() throws RemoteException { final List hourlyBatteryLevelsPerDay = new ArrayList<>(); @@ -254,6 +262,8 @@ public final class DataProcessManagerTest { hourlyBatteryLevelsPerDay, /* batteryHistoryMap= */ new HashMap<>()); dataProcessManager.start(); + mExecutorService.runAll(); + ShadowLooper.idleMainLooper(); assertThat(dataProcessManager.getIsCurrentAppUsageLoaded()).isTrue(); assertThat(dataProcessManager.getIsDatabaseAppUsageLoaded()).isTrue(); @@ -301,7 +311,6 @@ public final class DataProcessManagerTest { } @Test - @LooperMode(LooperMode.Mode.LEGACY) public void start_currentUserLocked_emptyAppUsageList() throws RemoteException { final UsageEvents.Event event = getUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED, /* timestamp= */ 1, "package"); @@ -323,6 +332,8 @@ public final class DataProcessManagerTest { DatabaseUtils.sFakeSupplier = () -> cursor; mDataProcessManager.start(); + mExecutorService.runAll(); + ShadowLooper.idleMainLooper(); assertThat(mDataProcessManager.getAppUsageEventList()).isEmpty(); assertThat(mDataProcessManager.getAppUsagePeriodMap()).isNull(); @@ -330,7 +341,6 @@ public final class DataProcessManagerTest { } @Test - @LooperMode(LooperMode.Mode.LEGACY) public void getBatteryLevelData_emptyHistoryMap_returnNull() { assertThat( DataProcessManager.getBatteryLevelData( From 04404a37c70f1007779401c2ec697f2ffe50b486 Mon Sep 17 00:00:00 2001 From: Haijie Hong Date: Tue, 9 Apr 2024 14:19:13 +0800 Subject: [PATCH 10/12] Use default locale when formatting passkey Bug: 332677725 Test: atest BluetoothPairingControllerTest Change-Id: I21d6606e71eefd2f00994993d3ed277742c5f9b0 --- .../android/settings/bluetooth/BluetoothPairingController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java index f75d301ad22..dc7d4dcac26 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingController.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java @@ -448,7 +448,7 @@ public class BluetoothPairingController implements OnCheckedChangeListener, switch (mType) { case BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION: case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY: - return String.format(Locale.US, "%06d", passkey); + return String.format(Locale.getDefault(), "%06d", passkey); case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PIN: return String.format("%04d", passkey); From 91bcc2b594edf0aa2a477dd7dae4388ab32c95cf Mon Sep 17 00:00:00 2001 From: tomhsu Date: Mon, 8 Apr 2024 07:35:24 +0000 Subject: [PATCH 11/12] Listen wifi entry change to make sure UI correct. Bug: 319905522 Test: make pass. Test: atest pass. Change-Id: I0900caf6521bd9a250e85863f48e39668734f1be --- .../NetworkMobileProviderController.java | 7 ----- .../network/NetworkProviderSettings.java | 4 --- .../SubscriptionsPreferenceController.java | 27 ++++++++++++++++--- ...SubscriptionsPreferenceControllerTest.java | 2 +- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/network/NetworkMobileProviderController.java b/src/com/android/settings/network/NetworkMobileProviderController.java index e0db395caf4..8d9d353b736 100644 --- a/src/com/android/settings/network/NetworkMobileProviderController.java +++ b/src/com/android/settings/network/NetworkMobileProviderController.java @@ -24,7 +24,6 @@ import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.settings.core.BasePreferenceController; -import com.android.settings.wifi.WifiPickerTrackerHelper; import com.android.settingslib.core.lifecycle.Lifecycle; /** @@ -117,12 +116,6 @@ public class NetworkMobileProviderController extends BasePreferenceController im mPreferenceCategory.setVisible(available); } - public void setWifiPickerTrackerHelper(WifiPickerTrackerHelper helper) { - if (mSubscriptionsController != null) { - mSubscriptionsController.setWifiPickerTrackerHelper(helper); - } - } - /** * Hides the preference. */ diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 0bc426c9887..d45447ddcbb 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -477,10 +477,6 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mOpenSsid = intent.getStringExtra(EXTRA_START_CONNECT_SSID); } - if (mNetworkMobileProviderController != null) { - mNetworkMobileProviderController.setWifiPickerTrackerHelper(mWifiPickerTrackerHelper); - } - requireActivity().addMenuProvider(mMenuProvider); } diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java index 09ce02ee194..d9a64646aef 100644 --- a/src/com/android/settings/network/SubscriptionsPreferenceController.java +++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java @@ -68,6 +68,7 @@ import com.android.settingslib.mobile.MobileMappings.Config; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.SignalStrengthUtil; import com.android.wifitrackerlib.WifiEntry; +import com.android.wifitrackerlib.WifiPickerTracker; import java.util.Collections; import java.util.List; @@ -82,7 +83,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl LifecycleObserver, SubscriptionsChangeListener.SubscriptionsChangeListenerClient, MobileDataEnabledListener.Client, DataConnectivityListener.Client, SignalStrengthListener.Callback, TelephonyDisplayInfoListener.Callback, - TelephonyCallback.CarrierNetworkListener { + TelephonyCallback.CarrierNetworkListener, WifiPickerTracker.WifiPickerTrackerCallback { private static final String TAG = "SubscriptionsPrefCntrlr"; private UpdateListener mUpdateListener; @@ -95,7 +96,8 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl private DataConnectivityListener mConnectivityListener; private SignalStrengthListener mSignalStrengthListener; private TelephonyDisplayInfoListener mTelephonyDisplayInfoListener; - private WifiPickerTrackerHelper mWifiPickerTrackerHelper; + @VisibleForTesting + WifiPickerTrackerHelper mWifiPickerTrackerHelper; private final WifiManager mWifiManager; private boolean mCarrierNetworkChangeMode; @@ -163,6 +165,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl mSignalStrengthListener = new SignalStrengthListener(context, this); mTelephonyDisplayInfoListener = new TelephonyDisplayInfoListener(context, this); lifecycle.addObserver(this); + mWifiPickerTrackerHelper = new WifiPickerTrackerHelper(lifecycle, context, this); mSubsPrefCtrlInjector = createSubsPrefCtrlInjector(); mConfig = mSubsPrefCtrlInjector.getConfig(mContext); } @@ -485,8 +488,24 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl update(); } - public void setWifiPickerTrackerHelper(WifiPickerTrackerHelper helper) { - mWifiPickerTrackerHelper = helper; + @Override + public void onNumSavedNetworksChanged() { + //Do nothing + } + + @Override + public void onNumSavedSubscriptionsChanged() { + //Do nothing + } + + @Override + public void onWifiStateChanged() { + update(); + } + + @Override + public void onWifiEntriesChanged() { + update(); } @VisibleForTesting diff --git a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java index 58a3f3a1d85..c443b230f5f 100644 --- a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java @@ -165,7 +165,7 @@ public class SubscriptionsPreferenceControllerTest { mController = new FakeSubscriptionsPreferenceController(mContext, mLifecycle, mUpdateListener, KEY, 5); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0); - mController.setWifiPickerTrackerHelper(mWifiPickerTrackerHelper); + mController.mWifiPickerTrackerHelper = mWifiPickerTrackerHelper; } @After From 8b36ebf0a156c2ab34bb604131fb328014bf12f2 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Tue, 9 Apr 2024 17:20:41 +0800 Subject: [PATCH 12/12] Set Wi-Fi password typeface to monospace Instead of input type, which turns this TextView into editable, which is not expected. Fix: 318621629 Test: manual - on Wi-Fi Share Change-Id: Ie1ab0f3f3f12583fc0b0c6eea9880e24364660de --- res/layout/wifi_dpp_qrcode_generator_fragment.xml | 3 ++- .../settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/res/layout/wifi_dpp_qrcode_generator_fragment.xml b/res/layout/wifi_dpp_qrcode_generator_fragment.xml index f70abd54697..6df56c62692 100644 --- a/res/layout/wifi_dpp_qrcode_generator_fragment.xml +++ b/res/layout/wifi_dpp_qrcode_generator_fragment.xml @@ -62,7 +62,8 @@ android:focusable="true" android:longClickable="true" android:textAppearance="@android:style/TextAppearance.Material.Body1" - android:textColor="?android:attr/textColorSecondary"/> + android:textColor="?android:attr/textColorSecondary" + android:typeface="monospace" /> diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java index 210e94cb13b..3d437e22e7d 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java +++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java @@ -26,7 +26,6 @@ import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.provider.Settings; -import android.text.InputType; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; @@ -120,8 +119,6 @@ public class WifiDppQrCodeGeneratorFragment extends WifiDppQrCodeBaseFragment { final String password = wifiNetworkConfig.getPreSharedKey(); TextView passwordView = view.findViewById(R.id.password); - passwordView.setInputType( - InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); if (TextUtils.isEmpty(password)) { mSummary.setText(getString( R.string.wifi_dpp_scan_open_network_qr_code_with_another_device,