Move TtyMode into its own ListPreference class.
This allows the class and behaviors to be reused in
CallFeaturesSetting and PhoneAccountSettingsActivity.
Adjust logic so that for MSIM devices, TTY appers in the
PhoneAccountSettingsFragment instead of CallFeaturesSetting.
Bug: 16844188
Change-Id: Ifcc70d674a59f0195b00155ca346f03677ade8d2
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 1d054a6..322976e 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -55,6 +55,7 @@
import com.android.phone.common.util.SettingsUtil;
import com.android.phone.settings.AccountSelectionPreference;
import com.android.phone.settings.CallForwardInfoUtil;
+import com.android.phone.settings.TtyModeListPreference;
import com.android.phone.settings.VoicemailDialogUtil;
import com.android.phone.settings.VoicemailNotificationSettingsUtil;
import com.android.phone.settings.VoicemailProviderListPreference;
@@ -191,8 +192,7 @@
private CheckBoxPreference mButtonAutoRetry;
private CheckBoxPreference mButtonHAC;
private ListPreference mButtonDTMF;
- private ListPreference mButtonTTY;
- private Preference mPhoneAccountSettingsPreference;
+ private TtyModeListPreference mButtonTTY;
private VoicemailProviderListPreference mVoicemailProviders;
private PreferenceScreen mVoicemailSettingsScreen;
private PreferenceScreen mVoicemailSettings;
@@ -376,8 +376,6 @@
int index = mButtonDTMF.findIndexOfValue((String) objValue);
Settings.System.putInt(mPhone.getContext().getContentResolver(),
Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, index);
- } else if (preference == mButtonTTY) {
- handleTTYChange(preference, objValue);
} else if (preference == mVoicemailProviders) {
final String newProviderKey = (String) objValue;
@@ -1128,19 +1126,6 @@
mSubscriptionInfoHelper.setActionBarTitle(
getActionBar(), getResources(), R.string.call_settings_with_label);
mPhone = mSubscriptionInfoHelper.getPhone();
- }
-
- private void initPhoneAccountPreferences() {
- mPhoneAccountSettingsPreference = findPreference(PHONE_ACCOUNT_SETTINGS_KEY);
-
- TelecomManager telecomManager = TelecomManager.from(this);
- TelephonyManager telephonyManager =
- (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
-
- if ((telecomManager.getSimCallManagers().isEmpty() && !SipUtil.isVoipSupported(this))
- || telephonyManager.getPhoneCount() > 1) {
- getPreferenceScreen().removePreference(mPhoneAccountSettingsPreference);
- }
}
@Override
@@ -1155,7 +1140,15 @@
addPreferencesFromResource(R.xml.call_feature_setting);
- initPhoneAccountPreferences();
+ TelecomManager telecomManager = TelecomManager.from(this);
+ TelephonyManager telephonyManager =
+ (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+
+ Preference phoneAccountSettingsPreference = findPreference(PHONE_ACCOUNT_SETTINGS_KEY);
+ if (telephonyManager.isMultiSimEnabled() || (telecomManager.getSimCallManagers().isEmpty()
+ && !SipUtil.isVoipSupported(mPhone.getContext()))) {
+ getPreferenceScreen().removePreference(phoneAccountSettingsPreference);
+ }
PreferenceScreen prefSet = getPreferenceScreen();
mSubMenuVoicemailSettings = (EditPhoneNumberPreference) findPreference(BUTTON_VOICEMAIL_KEY);
@@ -1166,7 +1159,8 @@
mButtonDTMF = (ListPreference) findPreference(BUTTON_DTMF_KEY);
mButtonAutoRetry = (CheckBoxPreference) findPreference(BUTTON_RETRY_KEY);
mButtonHAC = (CheckBoxPreference) findPreference(BUTTON_HAC_KEY);
- mButtonTTY = (ListPreference) findPreference(BUTTON_TTY_KEY);
+ mButtonTTY = (TtyModeListPreference) findPreference(
+ getResources().getString(R.string.tty_mode_key));
mVoicemailProviders = (VoicemailProviderListPreference) findPreference(
BUTTON_VOICEMAIL_PROVIDER_KEY);
@@ -1219,14 +1213,8 @@
mButtonHAC = null;
}
- TelecomManager telecomManager = TelecomManager.from(this);
- if (telecomManager != null && telecomManager.isTtySupported()) {
- mButtonTTY.setOnPreferenceChangeListener(this);
- int settingsTtyMode = Settings.Secure.getInt(getContentResolver(),
- Settings.Secure.PREFERRED_TTY_MODE,
- TelecomManager.TTY_MODE_OFF);
- mButtonTTY.setValue(Integer.toString(settingsTtyMode));
- updatePreferredTtyModeSummary(settingsTtyMode);
+ if (!telephonyManager.isMultiSimEnabled() && telecomManager.isTtySupported()) {
+ mButtonTTY.init();
} else {
prefSet.removePreference(mButtonTTY);
mButtonTTY = null;
@@ -1314,53 +1302,6 @@
}
}
- private void handleTTYChange(Preference preference, Object objValue) {
- int buttonTtyMode;
- buttonTtyMode = Integer.valueOf((String) objValue).intValue();
- int settingsTtyMode = android.provider.Settings.Secure.getInt(
- getContentResolver(),
- android.provider.Settings.Secure.PREFERRED_TTY_MODE,
- TelecomManager.TTY_MODE_OFF);
- if (DBG) log("handleTTYChange: requesting set TTY mode enable (TTY) to" +
- Integer.toString(buttonTtyMode));
-
- if (buttonTtyMode != settingsTtyMode) {
- switch(buttonTtyMode) {
- case TelecomManager.TTY_MODE_OFF:
- case TelecomManager.TTY_MODE_FULL:
- case TelecomManager.TTY_MODE_HCO:
- case TelecomManager.TTY_MODE_VCO:
- android.provider.Settings.Secure.putInt(getContentResolver(),
- android.provider.Settings.Secure.PREFERRED_TTY_MODE, buttonTtyMode);
- break;
- default:
- buttonTtyMode = TelecomManager.TTY_MODE_OFF;
- }
-
- mButtonTTY.setValue(Integer.toString(buttonTtyMode));
- updatePreferredTtyModeSummary(buttonTtyMode);
- Intent ttyModeChanged = new Intent(TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
- ttyModeChanged.putExtra(TelecomManager.EXTRA_TTY_PREFERRED_MODE, buttonTtyMode);
- sendBroadcastAsUser(ttyModeChanged, UserHandle.ALL);
- }
- }
-
- private void updatePreferredTtyModeSummary(int TtyMode) {
- String [] txts = getResources().getStringArray(R.array.tty_mode_entries);
- switch(TtyMode) {
- case TelecomManager.TTY_MODE_OFF:
- case TelecomManager.TTY_MODE_HCO:
- case TelecomManager.TTY_MODE_VCO:
- case TelecomManager.TTY_MODE_FULL:
- mButtonTTY.setSummary(txts[TtyMode]);
- break;
- default:
- mButtonTTY.setEnabled(false);
- mButtonTTY.setSummary(txts[TelecomManager.TTY_MODE_OFF]);
- break;
- }
- }
-
private static void log(String msg) {
Log.d(LOG_TAG, msg);
}
diff --git a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
index 83fa5da..56cd0cb 100644
--- a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
+++ b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
@@ -85,15 +85,20 @@
(TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
mAccountList = (PreferenceCategory) getPreferenceScreen().findPreference(
ACCOUNTS_LIST_CATEGORY_KEY);
- if (telephonyManager.getPhoneCount() > 1) {
+ TtyModeListPreference ttyModeListPreference =
+ (TtyModeListPreference) getPreferenceScreen().findPreference(
+ getResources().getString(R.string.tty_mode_key));
+ if (telephonyManager.isMultiSimEnabled()) {
initAccountList();
+ ttyModeListPreference.init();
} else {
getPreferenceScreen().removePreference(mAccountList);
+ getPreferenceScreen().removePreference(ttyModeListPreference);
}
mDefaultOutgoingAccount = (AccountSelectionPreference)
getPreferenceScreen().findPreference(DEFAULT_OUTGOING_ACCOUNT_KEY);
- if (mTelecomManager.getCallCapablePhoneAccounts().size() > 1) {
+ if (mTelecomManager.hasMultipleCallCapableAccounts()) {
mDefaultOutgoingAccount.setListener(this);
updateDefaultOutgoingAccountsModel();
} else {
diff --git a/src/com/android/phone/settings/TtyModeListPreference.java b/src/com/android/phone/settings/TtyModeListPreference.java
new file mode 100644
index 0000000..e8ef099
--- /dev/null
+++ b/src/com/android/phone/settings/TtyModeListPreference.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.settings;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.UserHandle;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.provider.Settings;
+import android.telecom.TelecomManager;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import com.android.phone.PhoneGlobals;
+import com.android.phone.R;
+
+public class TtyModeListPreference extends ListPreference
+ implements Preference.OnPreferenceChangeListener {
+ private static final String LOG_TAG = TtyModeListPreference.class.getSimpleName();
+ private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
+
+ public TtyModeListPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public void init() {
+ setOnPreferenceChangeListener(this);
+
+ int settingsTtyMode = Settings.Secure.getInt(getContext().getContentResolver(),
+ Settings.Secure.PREFERRED_TTY_MODE,
+ TelecomManager.TTY_MODE_OFF);
+ setValue(Integer.toString(settingsTtyMode));
+ updatePreferredTtyModeSummary(settingsTtyMode);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object objValue) {
+ if (preference == this) {
+ int buttonTtyMode;
+ buttonTtyMode = Integer.valueOf((String) objValue).intValue();
+ int settingsTtyMode = android.provider.Settings.Secure.getInt(
+ getContext().getContentResolver(),
+ Settings.Secure.PREFERRED_TTY_MODE,
+ TelecomManager.TTY_MODE_OFF);
+ if (DBG) log("handleTTYChange: requesting set TTY mode enable (TTY) to" +
+ Integer.toString(buttonTtyMode));
+
+ if (buttonTtyMode != settingsTtyMode) {
+ switch(buttonTtyMode) {
+ case TelecomManager.TTY_MODE_OFF:
+ case TelecomManager.TTY_MODE_FULL:
+ case TelecomManager.TTY_MODE_HCO:
+ case TelecomManager.TTY_MODE_VCO:
+ Settings.Secure.putInt(
+ getContext().getContentResolver(),
+ Settings.Secure.PREFERRED_TTY_MODE,
+ buttonTtyMode);
+ break;
+ default:
+ buttonTtyMode = TelecomManager.TTY_MODE_OFF;
+ }
+
+ setValue(Integer.toString(buttonTtyMode));
+ updatePreferredTtyModeSummary(buttonTtyMode);
+ Intent ttyModeChanged =
+ new Intent(TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
+ ttyModeChanged.putExtra(TelecomManager.EXTRA_TTY_PREFERRED_MODE, buttonTtyMode);
+ getContext().sendBroadcastAsUser(ttyModeChanged, UserHandle.ALL);
+ }
+ }
+ return true;
+ }
+
+ private void updatePreferredTtyModeSummary(int TtyMode) {
+ String [] txts = getContext().getResources().getStringArray(R.array.tty_mode_entries);
+ switch(TtyMode) {
+ case TelecomManager.TTY_MODE_OFF:
+ case TelecomManager.TTY_MODE_HCO:
+ case TelecomManager.TTY_MODE_VCO:
+ case TelecomManager.TTY_MODE_FULL:
+ setSummary(txts[TtyMode]);
+ break;
+ default:
+ setEnabled(false);
+ setSummary(txts[TelecomManager.TTY_MODE_OFF]);
+ break;
+ }
+ }
+
+ private static void log(String msg) {
+ Log.d(LOG_TAG, msg);
+ }
+}