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
This commit is contained in:
Chaohui Wang
2022-05-23 17:38:16 +08:00
parent 750cea242e
commit 02eb0aa980

View File

@@ -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();