From 02eb0aa9805c37ea0d0865846f4bb4d193eb5b58 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Mon, 23 May 2022 17:38:16 +0800 Subject: [PATCH] Fix crash when operator name contains % Currently, cannot use ListPreference.setSummary() when the summary contains user generated string, because ListPreference.getSummary() is using String.format() to format the summary when the summary is set by ListPreference.setSummary(). Use preference.setSummaryProvider() instead, which is recommended for ListPreference. Fix: 233295254 Test: manual Change-Id: Ia24d88817c99db7ed3fc264dbc9c10e0a09d8a39 --- .../telephony/DefaultSubscriptionController.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java index 168e69df2b2..5511829a61a 100644 --- a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java +++ b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java @@ -37,7 +37,6 @@ import androidx.preference.PreferenceScreen; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; -import com.android.settings.Utils; import com.android.settings.network.SubscriptionUtil; import com.android.settings.network.SubscriptionsChangeListener; @@ -115,6 +114,16 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere updateEntries(); } + @Override + protected void refreshSummary(Preference preference) { + // Currently, cannot use ListPreference.setSummary() when the summary contains user + // generated string, because ListPreference.getSummary() is using String.format() to format + // the summary when the summary is set by ListPreference.setSummary(). + if (preference != null) { + preference.setSummaryProvider(pref -> getSummary()); + } + } + @Override public CharSequence getSummary() { final PhoneAccountHandle handle = getDefaultCallingAccountHandle();