WiFiCallingSettings: show roaming preferrence
Bug: 31492826
Change-Id: I45cd8455e84802d690d074099d6a8e9c9398e157
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4cca39e..1b6dfa0 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1983,15 +1983,26 @@
<string name="wifi_calling_suggestion_title">Turn on Wi-Fi Calling</string>
<!-- Summary of suggestion to turn on wifi calling [CHAR LIMIT=60] -->
<string name="wifi_calling_suggestion_summary">Use Wi-Fi instead of mobile network</string>
- <!-- WFC mode [CHAR LIMIT=30] -->
+ <!-- Title of WFC preference item [CHAR LIMIT=30] -->
<string name="wifi_calling_mode_title">Calling preference</string>
- <!-- WFC mode dialog [CHAR LIMIT=30] -->
+ <!-- Title of WFC preference selection dialog [CHAR LIMIT=30] -->
<string name="wifi_calling_mode_dialog_title">Wi-Fi calling mode</string>
+ <!-- Title of WFC roaming preference item [CHAR LIMIT=45] -->
+ <string name="wifi_calling_roaming_mode_title">Roaming preference</string>
+ <!-- Summary of WFC roaming preference item [CHAR LIMIT=NONE]-->
+ <string name="wifi_calling_roaming_mode_summary"><xliff:g id="wfc_roaming_preference" example="Wi-Fi">%1$s</xliff:g></string>
+ <!-- WFC mode dialog [CHAR LIMIT=45] -->
+ <string name="wifi_calling_roaming_mode_dialog_title">Roaming preference</string>
<string-array name="wifi_calling_mode_choices">
<item>Wi-Fi preferred</item>
<item>Cellular preferred</item>
<item>Wi-Fi only</item>
</string-array>
+ <string-array name="wifi_calling_mode_choices_v2">
+ <item>Wi-Fi</item>
+ <item>Cellular</item>
+ <item>Wi-Fi only</item>
+ </string-array>
<string-array name="wifi_calling_mode_values">
<item>"2"</item>
<item>"1"</item>
@@ -2001,13 +2012,19 @@
<item>Wi-Fi preferred</item>
<item>Cellular preferred</item>
</string-array>
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item>Wi-Fi</item>
+ <item>Cellular</item>
+ </string-array>
<string-array name="wifi_calling_mode_values_without_wifi_only">
<item>"2"</item>
<item>"1"</item>
</string-array>
<!-- Wi-Fi Calling settings. Text displayed when Wi-Fi Calling is off -->
<string name="wifi_calling_off_explanation">When Wi-Fi calling is on, your phone can route calls via Wi-Fi networks or your carrier\u2019s network, depending on your preference and which signal is stronger. Before turning on this feature, check with your carrier regarding fees and other details.</string>
+ <!-- Title of a preference for updating emergency address [CHAR LIMIT=40] -->
<string name="emergency_address_title">Update Emergency Address</string>
+ <!-- Summary of Update Emergency Address preference, explaining usage of emergency address [CHAR LIMIT=NONE] -->
<string name="emergency_address_summary">Address used by emergency services as your location if you make a 911 call using WiFi</string>
diff --git a/res/xml/wifi_calling_settings.xml b/res/xml/wifi_calling_settings.xml
index c32582c..0adb1e8 100644
--- a/res/xml/wifi_calling_settings.xml
+++ b/res/xml/wifi_calling_settings.xml
@@ -26,10 +26,17 @@
android:entryValues="@array/wifi_calling_mode_values"
android:dialogTitle="@string/wifi_calling_mode_dialog_title" />
+ <ListPreference
+ android:key="wifi_calling_roaming_mode"
+ android:title="@string/wifi_calling_roaming_mode_title"
+ android:summary="@string/wifi_calling_roaming_mode_summary"
+ android:entries="@array/wifi_calling_mode_choices_v2"
+ android:entryValues="@array/wifi_calling_mode_values"
+ android:dialogTitle="@string/wifi_calling_roaming_mode_dialog_title" />
+
<Preference
- android:key="emergency_address_key"
- android:title="@string/emergency_address_title"
- android:summary="@string/emergency_address_summary">
- </Preference>
+ android:key="emergency_address_key"
+ android:title="@string/emergency_address_title"
+ android:summary="@string/emergency_address_summary" />
</PreferenceScreen>
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);
}