LocaleActivity: Handle unexpected MCC strings

Don't crash if MCC string is empty or not a number.

Issue: calyxos#2269
Change-Id: I5efee6e826600869efe133a8a097d9d24337602c
This commit is contained in:
Tommy Webb
2024-04-15 18:34:09 +00:00
committed by Michael Bestas
parent 1bbf009729
commit ac47a02936

View File

@@ -17,6 +17,7 @@ import android.os.Looper;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.NumberPicker;
@@ -36,6 +37,8 @@ import java.util.concurrent.Executors;
public class LocaleActivity extends BaseSetupWizardActivity {
private static final String TAG = LocaleActivity.class.getSimpleName();
private ArrayAdapter<com.android.internal.app.LocalePicker.LocaleInfo> mLocaleAdapter;
private Locale mCurrentLocale;
private int[] mAdapterIndices;
@@ -173,7 +176,7 @@ public class LocaleActivity extends BaseSetupWizardActivity {
}
mFetchUpdateSimLocaleTask = Executors.newSingleThreadExecutor();
mFetchUpdateSimLocaleTask.execute(() -> {
Locale locale;
Locale locale = null;
Activity activity = LocaleActivity.this;
if (!activity.isFinishing() || !activity.isDestroyed()) {
// If the sim is currently pin locked, return
@@ -194,8 +197,17 @@ public class LocaleActivity extends BaseSetupWizardActivity {
}
// Fetch locale for active sim's MCC
int mcc = Integer.parseInt(activeSubs.get(0).getMccString());
final String mccString = activeSubs.get(0).getMccString();
try {
if (mccString != null && !mccString.isEmpty()) {
int mcc = Integer.parseInt(mccString);
locale = LocaleUtils.getLocaleFromMcc(activity, mcc, null);
} else {
Log.w(TAG, "Unexpected mccString: '" + mccString + "'");
}
} catch (NumberFormatException e) {
Log.w(TAG, "mccString not a number: '" + mccString + "'", e);
}
// If that fails, fall back to preferred languages reported
// by the sim