/* * 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; } }