aboutsummaryrefslogtreecommitdiff
path: root/src/java/com/android/ims
diff options
context:
space:
mode:
authordonaldahn <donaldahn@google.com>2022-02-24 05:24:57 +0000
committerdonaldahn <donaldahn@google.com>2022-04-08 05:55:33 +0000
commit7e286ec2d1af7a21ed0a928ba1f449637500a4a8 (patch)
tree3e3335e7064847ab3e7335af7a8f340560d991b7 /src/java/com/android/ims
parent37f7d39687325e17155a7204b8d07387dc593f4a (diff)
downloadims-7e286ec2d1af7a21ed0a928ba1f449637500a4a8.tar.gz
[Telephony] support TTY Call on VoWifi
Bug: b/202966224 Test: TMUS-TTY Call on wifi with O6(oriole) device in Kansas Test: Volte/WFC dial and disconnect basic test Test: ATest ImsManagerTest testTtyStats Change-Id: If165cd18d9ed9ae75f7c8a3732948cc9f3df45fd
Diffstat (limited to 'src/java/com/android/ims')
-rw-r--r--src/java/com/android/ims/ImsManager.java42
1 files changed, 36 insertions, 6 deletions
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index b00f58c4..e212ee0b 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -699,6 +699,28 @@ public class ImsManager implements FeatureUpdates {
}
/**
+ * @return true if we are either not on TTY or TTY over VoWiFi is enabled. If we
+ * are on TTY and TTY over VoWiFi is not allowed, this method will return false.
+ */
+ public boolean isNonTtyOrTtyOnVoWifiEnabled() {
+
+ if (isTtyOnVoWifiCapable()) {
+ return true;
+ }
+
+ TelecomManager tm = mContext.getSystemService(TelecomManager.class);
+ if (tm == null) {
+ logw("isNonTtyOrTtyOnVoWifiEnabled: telecom not available");
+ return true;
+ }
+ return tm.getCurrentTtyMode() == TelecomManager.TTY_MODE_OFF;
+ }
+
+ public boolean isTtyOnVoWifiCapable() {
+ return getBooleanCarrierConfig(CarrierConfigManager.KEY_CARRIER_VOWIFI_TTY_SUPPORTED_BOOL);
+ }
+
+ /**
* Returns a platform configuration for VoLTE which may override the user setting.
* @deprecated Does not support MSIM devices. Please use
* {@link #isVolteEnabledByPlatform()} instead.
@@ -1149,8 +1171,9 @@ public class ImsManager implements FeatureUpdates {
try {
if (enabled) {
+ boolean isNonTtyWifi = isNonTtyOrTtyOnVoWifiEnabled();
CapabilityChangeRequest request = new CapabilityChangeRequest();
- updateVoiceWifiFeatureAndProvisionedValues(request);
+ updateVoiceWifiFeatureAndProvisionedValues(request, isNonTtyWifi);
changeMmTelCapability(request);
// Ensure IMS is on if this setting is updated.
turnOnIms();
@@ -1693,8 +1716,9 @@ public class ImsManager implements FeatureUpdates {
logi("reevaluateCapabilities");
CapabilityChangeRequest request = new CapabilityChangeRequest();
boolean isNonTty = isNonTtyOrTtyOnVolteEnabled();
+ boolean isNonTtyWifi = isNonTtyOrTtyOnVoWifiEnabled();
updateVoiceCellFeatureValue(request, isNonTty);
- updateVoiceWifiFeatureAndProvisionedValues(request);
+ updateVoiceWifiFeatureAndProvisionedValues(request, isNonTtyWifi);
updateCrossSimFeatureAndProvisionedValues(request);
updateVideoCallFeatureValue(request, isNonTty);
updateCallComposerFeatureValue(request);
@@ -1832,7 +1856,8 @@ public class ImsManager implements FeatureUpdates {
/**
* Update WFC config
*/
- private void updateVoiceWifiFeatureAndProvisionedValues(CapabilityChangeRequest request) {
+ private void updateVoiceWifiFeatureAndProvisionedValues(CapabilityChangeRequest request,
+ boolean isNonTty) {
TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
boolean isNetworkRoaming = false;
if (tm == null) {
@@ -1855,9 +1880,10 @@ public class ImsManager implements FeatureUpdates {
+ ", mode = " + mode
+ ", provisioned = " + isProvisioned
+ ", roaming = " + roaming
- + ", isFeatureOn = " + isFeatureOn);
+ + ", isFeatureOn = " + isFeatureOn
+ + ", isNonTtyWifi = " + isNonTty);
- if (isFeatureOn) {
+ if (isFeatureOn && isNonTty) {
request.addCapabilitiesToEnableForTech(
MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN);
@@ -2642,10 +2668,14 @@ public class ImsManager implements FeatureUpdates {
public void setTtyMode(int ttyMode) throws ImsException {
boolean isNonTtyOrTtyOnVolteEnabled = isTtyOnVoLteCapable() ||
(ttyMode == TelecomManager.TTY_MODE_OFF);
- logi("setTtyMode: isNonTtyOrTtyOnVolteEnabled=" + isNonTtyOrTtyOnVolteEnabled);
+
+ boolean isNonTtyOrTtyOnWifiEnabled = isTtyOnVoWifiCapable() ||
+ (ttyMode == TelecomManager.TTY_MODE_OFF);
+
CapabilityChangeRequest request = new CapabilityChangeRequest();
updateVoiceCellFeatureValue(request, isNonTtyOrTtyOnVolteEnabled);
updateVideoCallFeatureValue(request, isNonTtyOrTtyOnVolteEnabled);
+ updateVoiceWifiFeatureAndProvisionedValues(request, isNonTtyOrTtyOnWifiEnabled);
// update MMTEL caps for the new configuration.
changeMmTelCapability(request);
if (isImsNeeded(request)) {