From c901b0b863d591721772fb8d8cbadd8cee699af9 Mon Sep 17 00:00:00 2001 From: Ling Ma Date: Tue, 1 Mar 2022 13:10:49 -0800 Subject: Truncate operator name to fit into SystemProp size Test: manual Bug: 210502588 Change-Id: I59a87fa256a9be54755199034e138a63d89f0885 --- .../java/android/telephony/TelephonyManager.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index a5adf52051b9..b4825153bf0a 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -11487,7 +11487,25 @@ public class TelephonyManager { if (SubscriptionManager.isValidPhoneId(phoneId)) { List newList = updateTelephonyProperty( TelephonyProperties.operator_alpha(), phoneId, name); - TelephonyProperties.operator_alpha(newList); + try { + TelephonyProperties.operator_alpha(newList); + } catch (IllegalArgumentException e) { //property value is longer than the byte limit + Log.e(TAG, "setNetworkOperatorNameForPhone: ", e); + + int numberOfEntries = newList.size(); + int maxOperatorLength = //save 1 byte for joiner " , " + (SystemProperties.PROP_VALUE_MAX - numberOfEntries) / numberOfEntries; + + //examine and truncate every operator and retry + for (int i = 0; i < newList.size(); i++) { + if (newList.get(i) != null) { + newList.set(i, TextUtils + .truncateStringForUtf8Storage(newList.get(i), maxOperatorLength)); + } + } + TelephonyProperties.operator_alpha(newList); + Log.e(TAG, "successfully truncated operator_alpha: " + newList); + } } } -- cgit v1.2.3-59-g8ed1b