Merge "Disable some settings if TTY over VoLTE not supported" into lmp-mr1-dev
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index fbaddbd..a97f5d0 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -41,6 +41,7 @@
import android.provider.Settings;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
+import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
@@ -278,6 +279,13 @@
public void onPause() {
super.onPause();
mForeground = false;
+
+ if (ImsManager.isVolteEnabledByPlatform(this) &&
+ !mPhone.getContext().getResources().getBoolean(
+ com.android.internal.R.bool.config_carrier_volte_tty_supported)) {
+ TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+ tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+ }
}
/**
@@ -298,6 +306,23 @@
*/
private boolean mSetupVoicemail = false;
+ private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
+ /**
+ * Enable/disable the TTY setting when in/out of a call (and if carrier doesn't
+ * support VoLTE with TTY).
+ * @see android.telephony.PhoneStateListener#onCallStateChanged(int,
+ * java.lang.String)
+ */
+ @Override
+ public void onCallStateChanged(int state, String incomingNumber) {
+ if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
+ Preference pref = getPreferenceScreen().findPreference(BUTTON_TTY_KEY);
+ if (pref != null) {
+ pref.setEnabled(state == TelephonyManager.CALL_STATE_IDLE);
+ }
+ }
+ };
+
/*
* Click Listeners, handle click based on objects attached to UI.
*/
@@ -1300,6 +1325,13 @@
} else {
prefSet.removePreference(mEnableVideoCalling);
}
+
+ if (ImsManager.isVolteEnabledByPlatform(this) &&
+ !mPhone.getContext().getResources().getBoolean(
+ com.android.internal.R.bool.config_carrier_volte_tty_supported)) {
+ TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+ tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
+ }
}
@Override
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index 58aa511..48865ff 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -50,6 +50,7 @@
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
+import android.telecom.TelecomManager;
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
@@ -136,7 +137,8 @@
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
/*
- * Enable/disable the 'Enhanced 4G LTE Mode' when in/out of a call.
+ * Enable/disable the 'Enhanced 4G LTE Mode' when in/out of a call
+ * and depending on TTY mode and TTY support over VoLTE.
* @see android.telephony.PhoneStateListener#onCallStateChanged(int,
* java.lang.String)
*/
@@ -145,7 +147,8 @@
if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
Preference pref = getPreferenceScreen().findPreference(BUTTON_4G_LTE_KEY);
if (pref != null) {
- pref.setEnabled(state == TelephonyManager.CALL_STATE_IDLE);
+ pref.setEnabled((state == TelephonyManager.CALL_STATE_IDLE) &&
+ ImsManager.isNonTtyOrTtyOnVolteEnabled(getApplicationContext()));
}
}
};
@@ -253,13 +256,6 @@
}
}
- private void setIMS(boolean turnOn) {
- int value = (turnOn) ? 1:0;
- android.provider.Settings.Global.putInt(
- mPhone.getContext().getContentResolver(),
- android.provider.Settings.Global.ENHANCED_4G_MODE_ENABLED, value);
- }
-
private OnTabChangeListener mTabListener = new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
@@ -319,7 +315,6 @@
mButton4glte = (SwitchPreference)findPreference(BUTTON_4G_LTE_KEY);
mButton4glte.setOnPreferenceChangeListener(this);
- mButton4glte.setChecked(ImsManager.isEnhanced4gLteModeSettingEnabledByUser(this));
try {
Context con = createPackageContext("com.android.systemui", 0);
@@ -398,6 +393,10 @@
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
+
+ mButton4glte.setChecked(ImsManager.isEnhanced4gLteModeSettingEnabledByUser(this)
+ && ImsManager.isNonTtyOrTtyOnVolteEnabled(this));
+ // NOTE: The button will be enabled/disabled in mPhoneStateListener
}
private void updateBody() {
@@ -679,18 +678,7 @@
} else if (preference == mButton4glte) {
SwitchPreference ltePref = (SwitchPreference)preference;
ltePref.setChecked(!ltePref.isChecked());
- setIMS(ltePref.isChecked());
-
- ImsManager imsMan = ImsManager.getInstance(getBaseContext(),
- SubscriptionManager.getDefaultVoicePhoneId());
- if (imsMan != null) {
-
- try {
- imsMan.setAdvanced4GMode(ltePref.isChecked());
- } catch (ImsException ie) {
- // do nothing
- }
- }
+ ImsManager.setEnhanced4gLteModeSetting(this, ltePref.isChecked());
} else if (preference == mButtonDataRoam) {
if (DBG) log("onPreferenceTreeClick: preference == mButtonDataRoam.");