1e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee/* 2e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * Copyright (C) 2014 The Android Open Source Project 3e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * 4e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * Licensed under the Apache License, Version 2.0 (the "License"); 5e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * you may not use this file except in compliance with the License. 6e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * You may obtain a copy of the License at 7e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * 8e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * http://www.apache.org/licenses/LICENSE-2.0 9e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * 10e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * Unless required by applicable law or agreed to in writing, software 11e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * distributed under the License is distributed on an "AS IS" BASIS, 12e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * See the License for the specific language governing permissions and 14e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * limitations under the License 15e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee */ 16e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 17e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leepackage com.android.dialer.settings; 18e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 19e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.content.Context; 20e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.media.RingtoneManager; 21dc1806ee3b840a16ec28fb9c4bea1ae848bd1939Brandon Maxwellimport android.os.Build; 22e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.os.Bundle; 23e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.os.Handler; 24e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.os.Message; 25e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.os.Vibrator; 26e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.preference.CheckBoxPreference; 27c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Leeimport android.preference.ListPreference; 28e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.preference.Preference; 29e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.preference.PreferenceFragment; 30e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.preference.PreferenceScreen; 31e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.provider.Settings; 326088576aa518e2d0e158bc035723cd84ed0f4717Junda Liuimport android.telephony.CarrierConfigManager; 33c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Leeimport android.telephony.TelephonyManager; 345f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Leeimport android.widget.Toast; 35e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 36dc1806ee3b840a16ec28fb9c4bea1ae848bd1939Brandon Maxwellimport com.android.contacts.common.compat.SdkVersionOverride; 37e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport com.android.dialer.R; 38d909e728c6778723f6dc04d49d30e0f6e38f7e74Brandon Maxwellimport com.android.dialer.compat.SettingsCompat; 39e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport com.android.phone.common.util.SettingsUtil; 40e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 41e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Leepublic class SoundSettingsFragment extends PreferenceFragment 42e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee implements Preference.OnPreferenceChangeListener { 43e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee 44e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee private static final int NO_DTMF_TONE = 0; 45e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee private static final int PLAY_DTMF_TONE = 1; 46e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee 47e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee private static final int NO_VIBRATION_FOR_CALLS = 0; 48e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee private static final int DO_VIBRATION_FOR_CALLS = 1; 49e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 50191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius 51191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius private static final int DTMF_TONE_TYPE_NORMAL = 0; 52191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius 53c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee private static final int SHOW_CARRIER_SETTINGS = 0; 54c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee private static final int HIDE_CARRIER_SETTINGS = 1; 55e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 56c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee private static final int MSG_UPDATE_RINGTONE_SUMMARY = 1; 57e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 58e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee private Preference mRingtonePreference; 59e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee private CheckBoxPreference mVibrateWhenRinging; 60e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee private CheckBoxPreference mPlayDtmfTone; 61c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee private ListPreference mDtmfToneLength; 62e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 63e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee private final Runnable mRingtoneLookupRunnable = new Runnable() { 64e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee @Override 65e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee public void run() { 66e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee updateRingtonePreferenceSummary(); 67e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee } 68e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee }; 69e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee 70e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee private final Handler mRingtoneLookupComplete = new Handler() { 71e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee @Override 72e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee public void handleMessage(Message msg) { 73e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee switch (msg.what) { 74e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee case MSG_UPDATE_RINGTONE_SUMMARY: 75e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee mRingtonePreference.setSummary((CharSequence) msg.obj); 76e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee break; 77e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee } 78e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee } 79e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee }; 80e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 81e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee @Override 82bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen public Context getContext() { 83bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen return getActivity(); 84bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen } 85bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen 86bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen @Override 87e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee public void onCreate(Bundle savedInstanceState) { 88e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee super.onCreate(savedInstanceState); 89e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 90e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee addPreferencesFromResource(R.xml.sound_settings); 91e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 92c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee Context context = getActivity(); 93c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee 94c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee mRingtonePreference = findPreference(context.getString(R.string.ringtone_preference_key)); 95e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mVibrateWhenRinging = (CheckBoxPreference) findPreference( 96c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee context.getString(R.string.vibrate_on_preference_key)); 97e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mPlayDtmfTone = (CheckBoxPreference) findPreference( 98c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee context.getString(R.string.play_dtmf_preference_key)); 99c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee mDtmfToneLength = (ListPreference) findPreference( 100c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee context.getString(R.string.dtmf_tone_length_preference_key)); 101e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee 102e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee if (hasVibrator()) { 103e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mVibrateWhenRinging.setOnPreferenceChangeListener(this); 104e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee } else { 105e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee getPreferenceScreen().removePreference(mVibrateWhenRinging); 106e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mVibrateWhenRinging = null; 107e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee } 108e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 109e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mPlayDtmfTone.setOnPreferenceChangeListener(this); 110e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mPlayDtmfTone.setChecked(shouldPlayDtmfTone()); 111c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee 112c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee TelephonyManager telephonyManager = 113c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE); 114dc1806ee3b840a16ec28fb9c4bea1ae848bd1939Brandon Maxwell if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M 115dc1806ee3b840a16ec28fb9c4bea1ae848bd1939Brandon Maxwell && telephonyManager.canChangeDtmfToneLength() 116c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee && (telephonyManager.isWorldPhone() || !shouldHideCarrierSettings())) { 117c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee mDtmfToneLength.setOnPreferenceChangeListener(this); 118c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee mDtmfToneLength.setValueIndex( 119c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee Settings.System.getInt(context.getContentResolver(), 120191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 121191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius DTMF_TONE_TYPE_NORMAL)); 122c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee } else { 123c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee getPreferenceScreen().removePreference(mDtmfToneLength); 124c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee mDtmfToneLength = null; 125c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee } 126e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee } 127e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 128e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee @Override 129e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee public void onResume() { 130e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee super.onResume(); 131e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee 132d909e728c6778723f6dc04d49d30e0f6e38f7e74Brandon Maxwell if (!SettingsCompat.System.canWrite(getContext())) { 1335f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee // If the user launches this setting fragment, then toggles the WRITE_SYSTEM_SETTINGS 1345f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee // AppOp, then close the fragment since there is nothing useful to do. 1355f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee getActivity().onBackPressed(); 1365f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee return; 1375f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee } 1385f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee 139e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee if (mVibrateWhenRinging != null) { 140e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mVibrateWhenRinging.setChecked(shouldVibrateWhenRinging()); 141e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee } 142e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee 143e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee // Lookup the ringtone name asynchronously. 144e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee new Thread(mRingtoneLookupRunnable).start(); 145e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee } 146e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee 147e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee /** 148e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * Supports onPreferenceChangeListener to look for preference changes. 149e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * 150e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * @param preference The preference to be changed 151e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * @param objValue The value of the selection, NOT its localized display value. 152e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee */ 153e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee @Override 154e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee public boolean onPreferenceChange(Preference preference, Object objValue) { 155d909e728c6778723f6dc04d49d30e0f6e38f7e74Brandon Maxwell if (!SettingsCompat.System.canWrite(getContext())) { 1565f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee // A user shouldn't be able to get here, but this protects against monkey crashes. 1575f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee Toast.makeText( 1585f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee getContext(), 1595f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee getResources().getString(R.string.toast_cannot_write_system_settings), 1605f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee Toast.LENGTH_SHORT).show(); 1615f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee return true; 1625f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee } 163e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee if (preference == mVibrateWhenRinging) { 164e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee boolean doVibrate = (Boolean) objValue; 165c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee Settings.System.putInt(getActivity().getContentResolver(), 166e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee Settings.System.VIBRATE_WHEN_RINGING, 167e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee doVibrate ? DO_VIBRATION_FOR_CALLS : NO_VIBRATION_FOR_CALLS); 168c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee } else if (preference == mDtmfToneLength) { 169c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee int index = mDtmfToneLength.findIndexOfValue((String) objValue); 170c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee Settings.System.putInt(getActivity().getContentResolver(), 171c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, index); 172e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee } 173e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee return true; 174e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee } 175e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 176e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee /** 177e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * Click listener for toggle events. 178e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee */ 179e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee @Override 180e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 181d909e728c6778723f6dc04d49d30e0f6e38f7e74Brandon Maxwell if (!SettingsCompat.System.canWrite(getContext())) { 1825f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee Toast.makeText( 1835f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee getContext(), 1845f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee getResources().getString(R.string.toast_cannot_write_system_settings), 1855f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee Toast.LENGTH_SHORT).show(); 1865f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee return true; 1875f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee } 188e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee if (preference == mPlayDtmfTone) { 189c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee Settings.System.putInt(getActivity().getContentResolver(), 190e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee Settings.System.DTMF_TONE_WHEN_DIALING, 191e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mPlayDtmfTone.isChecked() ? PLAY_DTMF_TONE : NO_DTMF_TONE); 192e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee } 193e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee return true; 194e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee } 195e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee 196e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee /** 197e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee * Updates the summary text on the ringtone preference with the name of the ringtone. 198e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee */ 199e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee private void updateRingtonePreferenceSummary() { 200e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee SettingsUtil.updateRingtoneName( 201c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee getActivity(), 202e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mRingtoneLookupComplete, 203e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee RingtoneManager.TYPE_RINGTONE, 204e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee mRingtonePreference.getKey(), 205e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee MSG_UPDATE_RINGTONE_SUMMARY); 206e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee } 207fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell 208fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell /** 209e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee * Obtain the value for "vibrate when ringing" setting. The default value is false. 210fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell * 211fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell * Watch out: if the setting is missing in the device, this will try obtaining the old 212fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell * "vibrate on ring" setting from AudioManager, and save the previous setting to the new one. 213fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell */ 214e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee private boolean shouldVibrateWhenRinging() { 215c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee int vibrateWhenRingingSetting = Settings.System.getInt(getActivity().getContentResolver(), 216e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee Settings.System.VIBRATE_WHEN_RINGING, 217e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee NO_VIBRATION_FOR_CALLS); 218e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee return hasVibrator() && (vibrateWhenRingingSetting == DO_VIBRATION_FOR_CALLS); 219e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee } 220e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee 221e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee /** 222e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee * Obtains the value for dialpad/DTMF tones. The default value is true. 223e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee */ 224e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee private boolean shouldPlayDtmfTone() { 225c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee int dtmfToneSetting = Settings.System.getInt(getActivity().getContentResolver(), 226e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee Settings.System.DTMF_TONE_WHEN_DIALING, 227e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee PLAY_DTMF_TONE); 228e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee return dtmfToneSetting == PLAY_DTMF_TONE; 229e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee } 230e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee 231e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee /** 232e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee * Whether the device hardware has a vibrator. 233e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee */ 234e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee private boolean hasVibrator() { 235c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee Vibrator vibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE); 236e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee return vibrator != null && vibrator.hasVibrator(); 237fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell } 238c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee 239c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee private boolean shouldHideCarrierSettings() { 2406088576aa518e2d0e158bc035723cd84ed0f4717Junda Liu CarrierConfigManager configManager = (CarrierConfigManager) getActivity().getSystemService( 2416088576aa518e2d0e158bc035723cd84ed0f4717Junda Liu Context.CARRIER_CONFIG_SERVICE); 2426088576aa518e2d0e158bc035723cd84ed0f4717Junda Liu return configManager.getConfig().getBoolean( 2436088576aa518e2d0e158bc035723cd84ed0f4717Junda Liu CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL); 244c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee } 245e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee} 246