blob: ea19f7562d311a7d3d1ddc2b4fa7d2feedf0456f [file] [log] [blame]
/*
* Copyright (C) 2015 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.media.AudioManager;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.provider.Settings;
import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import com.android.ims.ImsManager;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.phone.PhoneGlobals;
import com.android.phone.R;
import com.android.phone.settings.TtyModeListPreference;
import java.util.List;
public class AccessibilitySettingsFragment extends PreferenceFragment {
private static final String LOG_TAG = AccessibilitySettingsFragment.class.getSimpleName();
private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
private static final String BUTTON_TTY_KEY = "button_tty_mode_key";
private static final String BUTTON_HAC_KEY = "button_hac_key";
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
/**
* 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.d(LOG_TAG, "PhoneStateListener.onCallStateChanged: state=" + state);
Preference pref = getPreferenceScreen().findPreference(BUTTON_TTY_KEY);
if (pref != null) {
final boolean isVolteTtySupported = ImsManager.isVolteEnabledByPlatform(mContext)
&& getVolteTtySupported();
pref.setEnabled((isVolteTtySupported && !isVideoCallInProgress()) ||
(state == TelephonyManager.CALL_STATE_IDLE));
}
}
};
private Context mContext;
private AudioManager mAudioManager;
private TtyModeListPreference mButtonTty;
private CheckBoxPreference mButtonHac;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity().getApplicationContext();
mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
addPreferencesFromResource(R.xml.accessibility_settings);
mButtonTty = (TtyModeListPreference) findPreference(
getResources().getString(R.string.tty_mode_key));
mButtonHac = (CheckBoxPreference) findPreference(BUTTON_HAC_KEY);
if (PhoneGlobals.getInstance().phoneMgr.isTtyModeSupported()) {
mButtonTty.init();
} else {
getPreferenceScreen().removePreference(mButtonTty);
mButtonTty = null;
}
if (PhoneGlobals.getInstance().phoneMgr.isHearingAidCompatibilitySupported()) {
int hac = Settings.System.getInt(mContext.getContentResolver(),
Settings.System.HEARING_AID, SettingsConstants.HAC_DISABLED);
mButtonHac.setChecked(hac == SettingsConstants.HAC_ENABLED);
} else {
getPreferenceScreen().removePreference(mButtonHac);
mButtonHac = null;
}
}
@Override
public void onResume() {
super.onResume();
TelephonyManager tm =
(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
@Override
public void onPause() {
super.onPause();
TelephonyManager tm =
(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (preference == mButtonTty) {
return true;
} else if (preference == mButtonHac) {
int hac = mButtonHac.isChecked()
? SettingsConstants.HAC_ENABLED : SettingsConstants.HAC_DISABLED;
// Update HAC value in Settings database.
Settings.System.putInt(mContext.getContentResolver(), Settings.System.HEARING_AID, hac);
// Update HAC Value in AudioManager.
mAudioManager.setParameter(SettingsConstants.HAC_KEY,
hac == SettingsConstants.HAC_ENABLED
? SettingsConstants.HAC_VAL_ON : SettingsConstants.HAC_VAL_OFF);
return true;
}
return false;
}
private boolean getVolteTtySupported() {
CarrierConfigManager configManager =
(CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
return configManager.getConfig().getBoolean(
CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL);
}
private boolean isVideoCallInProgress() {
final Phone[] phones = PhoneFactory.getPhones();
if (phones == null) {
if (DBG) Log.d(LOG_TAG, "isVideoCallInProgress: No phones found. Return false");
return false;
}
for (Phone phone : phones) {
if (phone.isVideoCallPresent()) {
return true;
}
}
return false;
}
}