Merge "Migrate mobile settings to SwitchPreferenceCompat" into main
diff --git a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
index 03cc23f..0a0b41f 100644
--- a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
@@ -61,6 +61,7 @@
PhoneAccountHandle mSimCallManager;
private PhoneTelephonyCallback mTelephonyCallback;
private Preference mPreference;
+ private boolean mHasException;
public WifiCallingPreferenceController(Context context, String key) {
super(context, key);
@@ -103,6 +104,7 @@
Log.d(TAG, "Skip update under mCallState=" + mCallState);
return;
}
+ mHasException = false;
CharSequence summaryText = null;
if (mSimCallManager != null) {
final Intent intent = MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext,
@@ -122,7 +124,7 @@
summaryText = getResourceIdForWfcMode(mSubId);
}
preference.setSummary(summaryText);
- preference.setEnabled(mCallState == TelephonyManager.CALL_STATE_IDLE);
+ preference.setEnabled(mCallState == TelephonyManager.CALL_STATE_IDLE && !mHasException);
}
private CharSequence getResourceIdForWfcMode(int subId) {
@@ -140,9 +142,16 @@
}
final boolean isRoaming = getTelephonyManager(mContext, subId)
.isNetworkRoaming();
- final int wfcMode = (isRoaming && !useWfcHomeModeForRoaming)
- ? mImsMmTelManager.getVoWiFiRoamingModeSetting() :
- mImsMmTelManager.getVoWiFiModeSetting();
+ int wfcMode = ImsMmTelManager.WIFI_MODE_UNKNOWN;
+ try {
+ wfcMode = (isRoaming && !useWfcHomeModeForRoaming)
+ ? mImsMmTelManager.getVoWiFiRoamingModeSetting() :
+ mImsMmTelManager.getVoWiFiModeSetting();
+ } catch (IllegalArgumentException e) {
+ mHasException = true;
+ Log.e(TAG, "getResourceIdForWfcMode: Exception", e);
+ }
+
switch (wfcMode) {
case ImsMmTelManager.WIFI_MODE_WIFI_ONLY:
resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index 098787c..650536e 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -409,11 +409,19 @@
final boolean wfcEnabled = queryIms.isEnabledByUser()
&& queryIms.isAllowUserControl();
mSwitchBar.setChecked(wfcEnabled);
- final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
- final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting();
+ int wfcMode = ImsMmTelManager.WIFI_MODE_UNKNOWN;
+ int wfcRoamingMode = ImsMmTelManager.WIFI_MODE_UNKNOWN;
+ boolean hasException = false;
+ try {
+ wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
+ wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting();
+ } catch (IllegalArgumentException e) {
+ hasException = true;
+ Log.e(TAG, "getResourceIdForWfcMode: Exception", e);
+ }
mButtonWfcMode.setValue(Integer.toString(wfcMode));
mButtonWfcRoamingMode.setValue(Integer.toString(wfcRoamingMode));
- updateButtonWfcMode(wfcEnabled, wfcMode, wfcRoamingMode);
+ updateButtonWfcMode(wfcEnabled && !hasException, wfcMode, wfcRoamingMode);
}
@Override
@@ -508,11 +516,26 @@
*/
private void updateWfcMode(boolean wfcEnabled) {
Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")");
- mImsMmTelManager.setVoWiFiSettingEnabled(wfcEnabled);
+ boolean hasException = false;
+ try {
+ mImsMmTelManager.setVoWiFiSettingEnabled(wfcEnabled);
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "updateWfcMode: Exception", e);
+ hasException = true;
+ }
- final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
- final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting();
- updateButtonWfcMode(wfcEnabled, wfcMode, wfcRoamingMode);
+ int wfcMode = ImsMmTelManager.WIFI_MODE_UNKNOWN;
+ int wfcRoamingMode = ImsMmTelManager.WIFI_MODE_UNKNOWN;
+ if (!hasException) {
+ try {
+ wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
+ wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting();
+ } catch (IllegalArgumentException e) {
+ hasException = true;
+ Log.e(TAG, "updateWfcMode: Exception", e);
+ }
+ }
+ updateButtonWfcMode(wfcEnabled && !hasException, wfcMode, wfcRoamingMode);
if (wfcEnabled) {
mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), wfcMode);
} else {
@@ -523,9 +546,7 @@
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
-
Log.d(TAG, "WFC activity request = " + requestCode + " result = " + resultCode);
-
switch (requestCode) {
case REQUEST_CHECK_WFC_EMERGENCY_ADDRESS:
if (resultCode == Activity.RESULT_OK) {
@@ -594,29 +615,52 @@
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean hasException = false;
+
if (preference == mButtonWfcMode) {
Log.d(TAG, "onPreferenceChange mButtonWfcMode " + newValue);
mButtonWfcMode.setValue((String) newValue);
final int buttonMode = Integer.valueOf((String) newValue);
- final int currentWfcMode = mImsMmTelManager.getVoWiFiModeSetting();
- if (buttonMode != currentWfcMode) {
- mImsMmTelManager.setVoWiFiModeSetting(buttonMode);
- mButtonWfcMode.setSummary(getWfcModeSummary(buttonMode));
- mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
+ int currentWfcMode = ImsMmTelManager.WIFI_MODE_UNKNOWN;
+ try {
+ currentWfcMode = mImsMmTelManager.getVoWiFiModeSetting();
+ } catch (IllegalArgumentException e) {
+ hasException = true;
+ Log.e(TAG, "onPreferenceChange: Exception", e);
+ }
+ if (buttonMode != currentWfcMode && !hasException) {
+ try {
+ mImsMmTelManager.setVoWiFiModeSetting(buttonMode);
+ mButtonWfcMode.setSummary(getWfcModeSummary(buttonMode));
+ mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
- if (mUseWfcHomeModeForRoaming) {
- mImsMmTelManager.setVoWiFiRoamingModeSetting(buttonMode);
- // mButtonWfcRoamingMode.setSummary is not needed; summary is selected value
+ if (mUseWfcHomeModeForRoaming) {
+ mImsMmTelManager.setVoWiFiRoamingModeSetting(buttonMode);
+ // mButtonWfcRoamingMode.setSummary is not needed; summary is selected value
+ }
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "onPreferenceChange: Exception", e);
}
}
} else if (preference == mButtonWfcRoamingMode) {
mButtonWfcRoamingMode.setValue((String) newValue);
final int buttonMode = Integer.valueOf((String) newValue);
- final int currentMode = mImsMmTelManager.getVoWiFiRoamingModeSetting();
- if (buttonMode != currentMode) {
- mImsMmTelManager.setVoWiFiRoamingModeSetting(buttonMode);
- // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected value.
- mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
+ int currentMode = ImsMmTelManager.WIFI_MODE_UNKNOWN;
+ try {
+ currentMode = mImsMmTelManager.getVoWiFiRoamingModeSetting();
+ } catch (IllegalArgumentException e) {
+ hasException = true;
+ Log.e(TAG, "updateWfcMode: Exception", e);
+ }
+ if (buttonMode != currentMode && !hasException) {
+ try {
+ mImsMmTelManager.setVoWiFiRoamingModeSetting(buttonMode);
+ // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected
+ // value.
+ mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "onPreferenceChange: Exception", e);
+ }
}
}
return true;
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
index bc472d9..4272ab7 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
@@ -349,7 +349,13 @@
final FutureTask<Integer> wfcModeTask = new FutureTask<>(new Callable<Integer>() {
@Override
public Integer call() {
- return imsMmTelManager.getVoWiFiModeSetting();
+ int wfcMode = ImsMmTelManager.WIFI_MODE_UNKNOWN;
+ try {
+ wfcMode = imsMmTelManager.getVoWiFiModeSetting();
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "getResourceIdForWfcMode: Exception", e);
+ }
+ return wfcMode;
}
});
final ExecutorService executor = Executors.newSingleThreadExecutor();
@@ -381,7 +387,11 @@
// If either the action is to turn off wifi calling setting
// or there is no activation involved - Update the setting
final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
- imsMmTelManager.setVoWiFiSettingEnabled(newValue);
+ try {
+ imsMmTelManager.setVoWiFiSettingEnabled(newValue);
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "handleWifiCallingChanged: Exception", e);
+ }
} else {
Log.w(TAG, "action not taken: subId " + subId
+ " from " + currentValue + " to " + newValue);
@@ -425,7 +435,14 @@
// Change the preference only when wifi calling is enabled
// And when wifi calling preference is editable for the current carrier
final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
- final int currentValue = imsMmTelManager.getVoWiFiModeSetting();
+ int currentValue = ImsMmTelManager.WIFI_MODE_UNKNOWN;
+ try {
+ currentValue = imsMmTelManager.getVoWiFiModeSetting();
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "handleWifiCallingPreferenceChanged: Exception", e);
+ return;
+ }
+
int newValue = errorValue;
switch (intent.getAction()) {
case ACTION_WIFI_CALLING_PREFERENCE_WIFI_ONLY:
@@ -443,7 +460,11 @@
}
if (newValue != errorValue && newValue != currentValue) {
// Update the setting only when there is a valid update
- imsMmTelManager.setVoWiFiModeSetting(newValue);
+ try {
+ imsMmTelManager.setVoWiFiModeSetting(newValue);
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "handleWifiCallingPreferenceChanged: Exception", e);
+ }
}
}
}