diff --git a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java index 1b9103f93e2..4f4c35d62c9 100644 --- a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java +++ b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java @@ -23,6 +23,7 @@ import static com.android.settings.network.telephony.TelephonyConstants.Telephon import android.content.Context; import android.provider.Settings; import android.telephony.TelephonyManager; +import android.util.Log; import androidx.preference.ListPreference; import androidx.preference.Preference; @@ -34,6 +35,7 @@ import com.android.settings.network.telephony.MobileNetworkUtils; */ public class CdmaSystemSelectPreferenceController extends CdmaBasePreferenceController implements ListPreference.OnPreferenceChangeListener { + private static final String TAG = "CdmaSystemSelectPreferenceController"; public CdmaSystemSelectPreferenceController(Context context, String key) { super(context, key); @@ -43,28 +45,36 @@ public class CdmaSystemSelectPreferenceController extends CdmaBasePreferenceCont public void updateState(Preference preference) { super.updateState(preference); final ListPreference listPreference = (ListPreference) preference; - listPreference.setVisible(getAvailabilityStatus() == AVAILABLE); - boolean hasTelephonyMgr = mTelephonyManager != null; - final int mode = - hasTelephonyMgr ? mTelephonyManager.getCdmaRoamingMode() - : TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT; - if (mode != TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT) { - if (mode == TelephonyManager.CDMA_ROAMING_MODE_HOME - || mode == TelephonyManager.CDMA_ROAMING_MODE_ANY) { - listPreference.setValue(Integer.toString(mode)); - } else { - resetCdmaRoamingModeToDefault(); - } + boolean isVisible = (getAvailabilityStatus() == AVAILABLE); + listPreference.setVisible(isVisible); + if (!isVisible) { + return; } + boolean hasTelephonyMgr = mTelephonyManager != null; + try { + final int mode = + hasTelephonyMgr ? mTelephonyManager.getCdmaRoamingMode() + : TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT; + if (mode != TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT) { + if (mode == TelephonyManager.CDMA_ROAMING_MODE_HOME + || mode == TelephonyManager.CDMA_ROAMING_MODE_ANY) { + listPreference.setValue(Integer.toString(mode)); + } else { + resetCdmaRoamingModeToDefault(); + } + } - final int settingsNetworkMode = - hasTelephonyMgr ? MobileNetworkUtils.getNetworkTypeFromRaf( - (int) mTelephonyManager.getAllowedNetworkTypesForReason( - TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER)) - : NETWORK_MODE_UNKNOWN; - final boolean enableList = settingsNetworkMode != NETWORK_MODE_LTE_GSM_WCDMA - && settingsNetworkMode != NETWORK_MODE_NR_LTE_GSM_WCDMA; - listPreference.setEnabled(enableList); + final int settingsNetworkMode = + hasTelephonyMgr ? MobileNetworkUtils.getNetworkTypeFromRaf( + (int) mTelephonyManager.getAllowedNetworkTypesForReason( + TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER)) + : NETWORK_MODE_UNKNOWN; + final boolean enableList = settingsNetworkMode != NETWORK_MODE_LTE_GSM_WCDMA + && settingsNetworkMode != NETWORK_MODE_NR_LTE_GSM_WCDMA; + listPreference.setEnabled(enableList); + } catch (Exception exception) { + Log.e(TAG, "Fail to access framework API", exception); + } } @Override