Allow RTT while roaming but on WFC
Let RTT work if the device is roaming but registered to wifi calling --
the capability in this case doesn't depend on the roaming carrier's
RTT capability.
Fixes: 147125554
Test: manual
Change-Id: Ib3047cb4d1a218a94aa8620f3bbcbc68c841cb5b
diff --git a/src/com/android/phone/settings/AccessibilitySettingsFragment.java b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
index e31de64..37212cf 100644
--- a/src/com/android/phone/settings/AccessibilitySettingsFragment.java
+++ b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
@@ -25,6 +25,7 @@
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.provider.Settings;
+import android.telephony.AccessNetworkConstants;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
@@ -39,6 +40,11 @@
import com.android.phone.PhoneGlobals;
import com.android.phone.R;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
public class AccessibilitySettingsFragment extends PreferenceFragment {
private static final String LOG_TAG = AccessibilitySettingsFragment.class.getSimpleName();
private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
@@ -48,6 +54,8 @@
private static final String BUTTON_RTT_KEY = "button_rtt_key";
private static final String RTT_INFO_PREF = "button_rtt_more_information_key";
+ private static final int WFC_QUERY_TIMEOUT_MILLIS = 20;
+
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
/**
* Disable the TTY setting when in/out of a call (and if carrier doesn't
@@ -110,10 +118,13 @@
}
if (shouldShowRttSetting()) {
- // TODO: this is going to be a on/off switch for now. Ask UX about how to integrate
- // this settings with TTY
- if (TelephonyManager.getDefault().isNetworkRoaming(
- SubscriptionManager.getDefaultVoiceSubscriptionId())) {
+ TelephonyManager tm =
+ (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ boolean isRoaming = tm.isNetworkRoaming(
+ SubscriptionManager.getDefaultVoiceSubscriptionId());
+
+ boolean shouldDisableBecauseRoamingOffWfc = isRoaming && !isOnWfc();
+ if (shouldDisableBecauseRoamingOffWfc) {
mButtonRtt.setSummary(TextUtils.concat(getText(R.string.rtt_mode_summary), "\n",
getText(R.string.no_rtt_when_roaming)));
}
@@ -230,6 +241,21 @@
return false;
}
+ private boolean isOnWfc() {
+ LinkedBlockingQueue<Integer> result = new LinkedBlockingQueue<>(1);
+ Executor executor = Executors.newSingleThreadExecutor();
+ mContext.getSystemService(android.telephony.ims.ImsManager.class)
+ .getImsMmTelManager(SubscriptionManager.getDefaultSubscriptionId())
+ .getRegistrationTransportType(executor, result::offer);
+ try {
+ Integer transportType = result.poll(WFC_QUERY_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
+ return transportType != null
+ && transportType == AccessNetworkConstants.TRANSPORT_TYPE_WLAN;
+ } catch (InterruptedException e) {
+ return false;
+ }
+ }
+
private boolean shouldShowRttSetting() {
// Go through all the subs -- if we want to display the RTT setting for any of them, do
// display it.
diff --git a/src/com/android/services/telephony/TelecomAccountRegistry.java b/src/com/android/services/telephony/TelecomAccountRegistry.java
index 2975d06..2dbf0b1 100644
--- a/src/com/android/services/telephony/TelecomAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecomAccountRegistry.java
@@ -779,8 +779,11 @@
.isRttEnabled(mPhone.getSubId());
boolean isRoaming = mTelephonyManager.isNetworkRoaming(mPhone.getSubId());
+ boolean isOnWfc = mPhone.getImsRegistrationTech()
+ == ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN;
- return hasVoiceAvailability && isRttSupported && !isRoaming;
+ boolean shouldDisableBecauseRoamingOffWfc = isRoaming && !isOnWfc;
+ return hasVoiceAvailability && isRttSupported && !shouldDisableBecauseRoamingOffWfc;
}
/**