blob: ea19f7562d311a7d3d1ddc2b4fa7d2feedf0456f [file] [log] [blame]
Andrew Leefb7f92e2015-02-26 16:23:32 -08001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16
17package com.android.phone.settings;
18
19import android.content.Context;
20import android.media.AudioManager;
21import android.os.Bundle;
22import android.preference.CheckBoxPreference;
23import android.preference.Preference;
24import android.preference.PreferenceFragment;
25import android.preference.PreferenceScreen;
26import android.provider.Settings;
27import android.telecom.TelecomManager;
Junda Liu08a208a2015-06-23 15:06:00 -070028import android.telephony.CarrierConfigManager;
Andrew Leefb7f92e2015-02-26 16:23:32 -080029import android.telephony.PhoneStateListener;
30import android.telephony.TelephonyManager;
31import android.util.Log;
32
33import com.android.ims.ImsManager;
Omkar Kolangade90773502015-10-21 17:06:01 -070034import com.android.internal.telephony.Phone;
35import com.android.internal.telephony.PhoneFactory;
Andrew Leefb7f92e2015-02-26 16:23:32 -080036import com.android.phone.PhoneGlobals;
37import com.android.phone.R;
38import com.android.phone.settings.TtyModeListPreference;
39
Omkar Kolangade90773502015-10-21 17:06:01 -070040import java.util.List;
41
Andrew Leefb7f92e2015-02-26 16:23:32 -080042public class AccessibilitySettingsFragment extends PreferenceFragment {
43 private static final String LOG_TAG = AccessibilitySettingsFragment.class.getSimpleName();
44 private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
45
46 private static final String BUTTON_TTY_KEY = "button_tty_mode_key";
47 private static final String BUTTON_HAC_KEY = "button_hac_key";
48
49 private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
50 /**
Andrew Lee9431b832015-03-09 18:46:45 -070051 * Disable the TTY setting when in/out of a call (and if carrier doesn't
Andrew Leefb7f92e2015-02-26 16:23:32 -080052 * support VoLTE with TTY).
53 * @see android.telephony.PhoneStateListener#onCallStateChanged(int,
54 * java.lang.String)
55 */
56 @Override
57 public void onCallStateChanged(int state, String incomingNumber) {
58 if (DBG) Log.d(LOG_TAG, "PhoneStateListener.onCallStateChanged: state=" + state);
59 Preference pref = getPreferenceScreen().findPreference(BUTTON_TTY_KEY);
60 if (pref != null) {
Omkar Kolangade90773502015-10-21 17:06:01 -070061 final boolean isVolteTtySupported = ImsManager.isVolteEnabledByPlatform(mContext)
62 && getVolteTtySupported();
63 pref.setEnabled((isVolteTtySupported && !isVideoCallInProgress()) ||
64 (state == TelephonyManager.CALL_STATE_IDLE));
Andrew Leefb7f92e2015-02-26 16:23:32 -080065 }
66 }
67 };
68
69 private Context mContext;
70 private AudioManager mAudioManager;
71
Andrew Lee9431b832015-03-09 18:46:45 -070072 private TtyModeListPreference mButtonTty;
73 private CheckBoxPreference mButtonHac;
Andrew Leefb7f92e2015-02-26 16:23:32 -080074
75 @Override
76 public void onCreate(Bundle savedInstanceState) {
77 super.onCreate(savedInstanceState);
78
79 mContext = getActivity().getApplicationContext();
80 mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
81
82 addPreferencesFromResource(R.xml.accessibility_settings);
83
Andrew Lee9431b832015-03-09 18:46:45 -070084 mButtonTty = (TtyModeListPreference) findPreference(
Andrew Leefb7f92e2015-02-26 16:23:32 -080085 getResources().getString(R.string.tty_mode_key));
Andrew Lee9431b832015-03-09 18:46:45 -070086 mButtonHac = (CheckBoxPreference) findPreference(BUTTON_HAC_KEY);
Andrew Leefb7f92e2015-02-26 16:23:32 -080087
Andrew Lee9431b832015-03-09 18:46:45 -070088 if (PhoneGlobals.getInstance().phoneMgr.isTtyModeSupported()) {
89 mButtonTty.init();
Andrew Leefb7f92e2015-02-26 16:23:32 -080090 } else {
Andrew Lee9431b832015-03-09 18:46:45 -070091 getPreferenceScreen().removePreference(mButtonTty);
92 mButtonTty = null;
Andrew Leefb7f92e2015-02-26 16:23:32 -080093 }
94
Andrew Lee9431b832015-03-09 18:46:45 -070095 if (PhoneGlobals.getInstance().phoneMgr.isHearingAidCompatibilitySupported()) {
Andrew Leefb7f92e2015-02-26 16:23:32 -080096 int hac = Settings.System.getInt(mContext.getContentResolver(),
97 Settings.System.HEARING_AID, SettingsConstants.HAC_DISABLED);
Andrew Lee9431b832015-03-09 18:46:45 -070098 mButtonHac.setChecked(hac == SettingsConstants.HAC_ENABLED);
Andrew Leefb7f92e2015-02-26 16:23:32 -080099 } else {
Andrew Lee9431b832015-03-09 18:46:45 -0700100 getPreferenceScreen().removePreference(mButtonHac);
101 mButtonHac = null;
Andrew Leefb7f92e2015-02-26 16:23:32 -0800102 }
103 }
104
105 @Override
106 public void onResume() {
107 super.onResume();
Omkar Kolangade90773502015-10-21 17:06:01 -0700108 TelephonyManager tm =
109 (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
110 tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
Andrew Leefb7f92e2015-02-26 16:23:32 -0800111 }
112
113 @Override
114 public void onPause() {
115 super.onPause();
Omkar Kolangade90773502015-10-21 17:06:01 -0700116 TelephonyManager tm =
117 (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
118 tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
Andrew Leefb7f92e2015-02-26 16:23:32 -0800119 }
120
121 @Override
122 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
Andrew Lee9431b832015-03-09 18:46:45 -0700123 if (preference == mButtonTty) {
Andrew Leefb7f92e2015-02-26 16:23:32 -0800124 return true;
Andrew Lee9431b832015-03-09 18:46:45 -0700125 } else if (preference == mButtonHac) {
126 int hac = mButtonHac.isChecked()
Andrew Leefb7f92e2015-02-26 16:23:32 -0800127 ? SettingsConstants.HAC_ENABLED : SettingsConstants.HAC_DISABLED;
128 // Update HAC value in Settings database.
129 Settings.System.putInt(mContext.getContentResolver(), Settings.System.HEARING_AID, hac);
130
131 // Update HAC Value in AudioManager.
132 mAudioManager.setParameter(SettingsConstants.HAC_KEY,
133 hac == SettingsConstants.HAC_ENABLED
134 ? SettingsConstants.HAC_VAL_ON : SettingsConstants.HAC_VAL_OFF);
135 return true;
136 }
137 return false;
138 }
Junda Liu08a208a2015-06-23 15:06:00 -0700139
140 private boolean getVolteTtySupported() {
141 CarrierConfigManager configManager =
142 (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
143 return configManager.getConfig().getBoolean(
144 CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL);
145 }
Omkar Kolangade90773502015-10-21 17:06:01 -0700146
147 private boolean isVideoCallInProgress() {
148 final Phone[] phones = PhoneFactory.getPhones();
149 if (phones == null) {
150 if (DBG) Log.d(LOG_TAG, "isVideoCallInProgress: No phones found. Return false");
151 return false;
152 }
153
154 for (Phone phone : phones) {
155 if (phone.isVideoCallPresent()) {
156 return true;
157 }
158 }
159 return false;
160 }
Andrew Leefb7f92e2015-02-26 16:23:32 -0800161}