WiFiCallingSettings: show roaming preferrence
Bug: 31492826
Change-Id: I45cd8455e84802d690d074099d6a8e9c9398e157
diff --git a/src/com/android/settings/WifiCallingSettings.java b/src/com/android/settings/WifiCallingSettings.java
index 0af6ffa..3e9da17 100644
--- a/src/com/android/settings/WifiCallingSettings.java
+++ b/src/com/android/settings/WifiCallingSettings.java
@@ -56,6 +56,7 @@
//String keys for preference lookup
private static final String BUTTON_WFC_MODE = "wifi_calling_mode";
+ private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode";
private static final String PREFERENCE_EMERGENCY_ADDRESS = "emergency_address_key";
private static final int REQUEST_CHECK_WFC_EMERGENCY_ADDRESS = 1;
@@ -69,11 +70,13 @@
private SwitchBar mSwitchBar;
private Switch mSwitch;
private ListPreference mButtonWfcMode;
+ private ListPreference mButtonWfcRoamingMode;
private Preference mUpdateAddress;
private TextView mEmptyView;
private boolean mValidListener = false;
private boolean mEditableWfcMode = true;
+ private boolean mEditableWfcRoamingMode = true;
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
/*
@@ -94,26 +97,33 @@
switchBar.setEnabled((state == TelephonyManager.CALL_STATE_IDLE)
&& isNonTtyOrTtyOnVolteEnabled);
+ boolean isWfcModeEditable = true;
+ boolean isWfcRoamingModeEditable = false;
+ final CarrierConfigManager configManager = (CarrierConfigManager)
+ activity.getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ if (configManager != null) {
+ PersistableBundle b = configManager.getConfig();
+ if (b != null) {
+ isWfcModeEditable = b.getBoolean(
+ CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
+ isWfcRoamingModeEditable = b.getBoolean(
+ CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
+ }
+ }
+
Preference pref = getPreferenceScreen().findPreference(BUTTON_WFC_MODE);
if (pref != null) {
- pref.setEnabled(isWfcEnabled && getEditableWfcMode(activity)
+ pref.setEnabled(isWfcEnabled && isWfcModeEditable
+ && (state == TelephonyManager.CALL_STATE_IDLE));
+ }
+ Preference pref_roam = getPreferenceScreen().findPreference(BUTTON_WFC_ROAMING_MODE);
+ if (pref_roam != null) {
+ pref_roam.setEnabled(isWfcEnabled && isWfcRoamingModeEditable
&& (state == TelephonyManager.CALL_STATE_IDLE));
}
}
};
- private static boolean getEditableWfcMode(Context context) {
- CarrierConfigManager configManager = (CarrierConfigManager)
- context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
- if (configManager != null) {
- PersistableBundle b = configManager.getConfig();
- if (b != null) {
- return b.getBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
- }
- }
- return true;
- }
-
private final OnPreferenceClickListener mUpdateAddressListener =
new OnPreferenceClickListener() {
/*
@@ -204,6 +214,9 @@
mButtonWfcMode = (ListPreference) findPreference(BUTTON_WFC_MODE);
mButtonWfcMode.setOnPreferenceChangeListener(this);
+ mButtonWfcRoamingMode = (ListPreference) findPreference(BUTTON_WFC_ROAMING_MODE);
+ mButtonWfcRoamingMode.setOnPreferenceChangeListener(this);
+
mUpdateAddress = (Preference) findPreference(PREFERENCE_EMERGENCY_ADDRESS);
mUpdateAddress.setOnPreferenceClickListener(mUpdateAddressListener);
@@ -217,6 +230,8 @@
PersistableBundle b = configManager.getConfig();
if (b != null) {
mEditableWfcMode = b.getBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
+ mEditableWfcRoamingMode = b.getBoolean(
+ CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
isWifiOnlySupported = b.getBoolean(
CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, true);
}
@@ -225,6 +240,10 @@
if (!isWifiOnlySupported) {
mButtonWfcMode.setEntries(R.array.wifi_calling_mode_choices_without_wifi_only);
mButtonWfcMode.setEntryValues(R.array.wifi_calling_mode_values_without_wifi_only);
+ mButtonWfcRoamingMode.setEntries(
+ R.array.wifi_calling_mode_choices_v2_without_wifi_only);
+ mButtonWfcRoamingMode.setEntryValues(
+ R.array.wifi_calling_mode_values_without_wifi_only);
}
}
@@ -247,9 +266,11 @@
boolean wfcEnabled = ImsManager.isWfcEnabledByUser(context)
&& ImsManager.isNonTtyOrTtyOnVolteEnabled(context);
mSwitch.setChecked(wfcEnabled);
- int wfcMode = ImsManager.getWfcMode(context);
+ int wfcMode = ImsManager.getWfcMode(context, false);
+ int wfcRoamingMode = ImsManager.getWfcMode(context, true);
mButtonWfcMode.setValue(Integer.toString(wfcMode));
- updateButtonWfcMode(context, wfcEnabled, wfcMode);
+ mButtonWfcRoamingMode.setValue(Integer.toString(wfcRoamingMode));
+ updateButtonWfcMode(context, wfcEnabled, wfcMode, wfcRoamingMode);
context.registerReceiver(mIntentReceiver, mIntentFilter);
@@ -332,8 +353,9 @@
Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")");
ImsManager.setWfcSetting(context, wfcEnabled);
- int wfcMode = ImsManager.getWfcMode(context);
- updateButtonWfcMode(context, wfcEnabled, wfcMode);
+ int wfcMode = ImsManager.getWfcMode(context, false);
+ int wfcRoamingMode = ImsManager.getWfcMode(context, true);
+ updateButtonWfcMode(context, wfcEnabled, wfcMode, wfcRoamingMode);
if (wfcEnabled) {
MetricsLogger.action(getActivity(), getMetricsCategory(), wfcMode);
} else {
@@ -356,9 +378,12 @@
}
}
- private void updateButtonWfcMode(Context context, boolean wfcEnabled, int wfcMode) {
+ private void updateButtonWfcMode(Context context, boolean wfcEnabled,
+ int wfcMode, int wfcRoamingMode) {
mButtonWfcMode.setSummary(getWfcModeSummary(context, wfcMode));
mButtonWfcMode.setEnabled(wfcEnabled && mEditableWfcMode);
+ // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected value.
+ mButtonWfcRoamingMode.setEnabled(wfcEnabled && mEditableWfcRoamingMode);
final PreferenceScreen preferenceScreen = getPreferenceScreen();
boolean updateAddressEnabled = (getCarrierActivityIntent(context) != null);
@@ -366,9 +391,15 @@
if (mEditableWfcMode) {
preferenceScreen.addPreference(mButtonWfcMode);
} else {
- // Don't show WFC mode preference if it's not editable.
+ // Don't show WFC (home) preference if it's not editable.
preferenceScreen.removePreference(mButtonWfcMode);
}
+ if (mEditableWfcRoamingMode) {
+ preferenceScreen.addPreference(mButtonWfcRoamingMode);
+ } else {
+ // Don't show WFC roaming preference if it's not editable.
+ preferenceScreen.removePreference(mButtonWfcRoamingMode);
+ }
if (updateAddressEnabled) {
preferenceScreen.addPreference(mUpdateAddress);
} else {
@@ -376,6 +407,7 @@
}
} else {
preferenceScreen.removePreference(mButtonWfcMode);
+ preferenceScreen.removePreference(mButtonWfcRoamingMode);
preferenceScreen.removePreference(mUpdateAddress);
}
}
@@ -386,12 +418,28 @@
if (preference == mButtonWfcMode) {
mButtonWfcMode.setValue((String) newValue);
int buttonMode = Integer.valueOf((String) newValue);
- int currentMode = ImsManager.getWfcMode(context);
- if (buttonMode != currentMode) {
- ImsManager.setWfcMode(context, buttonMode);
+ int currentWfcMode = ImsManager.getWfcMode(context, false);
+ if (buttonMode != currentWfcMode) {
+ ImsManager.setWfcMode(context, buttonMode, false);
mButtonWfcMode.setSummary(getWfcModeSummary(context, buttonMode));
MetricsLogger.action(getActivity(), getMetricsCategory(), buttonMode);
}
+ if (!mEditableWfcRoamingMode) {
+ int currentWfcRoamingMode = ImsManager.getWfcMode(context, true);
+ if (buttonMode != currentWfcRoamingMode) {
+ ImsManager.setWfcMode(context, buttonMode, true);
+ // mButtonWfcRoamingMode.setSummary is not needed; summary is selected value
+ }
+ }
+ } else if (preference == mButtonWfcRoamingMode) {
+ mButtonWfcRoamingMode.setValue((String) newValue);
+ int buttonMode = Integer.valueOf((String) newValue);
+ int currentMode = ImsManager.getWfcMode(context, true);
+ if (buttonMode != currentMode) {
+ ImsManager.setWfcMode(context, buttonMode, true);
+ // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected value.
+ MetricsLogger.action(getActivity(), getMetricsCategory(), buttonMode);
+ }
}
return true;
}
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 7e3b8d8..7434e67 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -362,7 +362,7 @@
getPreferenceScreen().addPreference(mButtonWfc);
mButtonWfc.setSummary(WifiCallingSettings.getWfcModeSummary(
- context, ImsManager.getWfcMode(context)));
+ context, ImsManager.getWfcMode(context, mTm.isNetworkRoaming())));
} else {
removePreference(KEY_WFC_SETTINGS);
}