1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 192bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wrenimport com.android.settings.bluetooth.DockEventReceiver; 202bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 212bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wrenimport android.app.AlertDialog; 222bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wrenimport android.app.Dialog; 232bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wrenimport android.bluetooth.BluetoothDevice; 242bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wrenimport android.content.BroadcastReceiver; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.ContentResolver; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 282bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wrenimport android.content.IntentFilter; 296eca4b3b927611795910908532fa927c9eea6fafMarco Nelissenimport android.content.pm.PackageManager; 306eca4b3b927611795910908532fa927c9eea6fafMarco Nelissenimport android.content.pm.ResolveInfo; 31823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasaniimport android.database.Cursor; 32823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasaniimport android.database.sqlite.SQLiteException; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.media.AudioManager; 34823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasaniimport android.media.RingtoneManager; 356eca4b3b927611795910908532fa927c9eea6fafMarco Nelissenimport android.media.audiofx.AudioEffect; 36823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasaniimport android.net.Uri; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 38823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasaniimport android.os.Handler; 39823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasaniimport android.os.Message; 400a115aae82ea96bd9079bbb024e99330ea99df0aDianne Hackbornimport android.os.Vibrator; 418f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasaniimport android.preference.CheckBoxPreference; 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.ListPreference; 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 448f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasaniimport android.preference.PreferenceGroup; 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 46823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasaniimport android.provider.MediaStore; 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 488f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasaniimport android.telephony.TelephonyManager; 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log; 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 516eca4b3b927611795910908532fa927c9eea6fafMarco Nelissenimport java.util.List; 526eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen 53d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasanipublic class SoundSettings extends SettingsPreferenceFragment implements 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Preference.OnPreferenceChangeListener { 55823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani private static final String TAG = "SoundSettings"; 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 572bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private static final int DIALOG_NOT_DOCKED = 1; 582bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** If there is no setting in the provider, use this. */ 60386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang private static final int FALLBACK_EMERGENCY_TONE_VALUE = 0; 61df9504ef58e8dafdd80ca9cd780510f9444943e2Michael Chan 628b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa private static final String KEY_VIBRATE = "vibrate_when_ringing"; 63057f181f3715e7340bf1618e86fdce118bbf952bJoe Onorato private static final String KEY_RING_VOLUME = "ring_volume"; 646eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen private static final String KEY_MUSICFX = "musicfx"; 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_DTMF_TONE = "dtmf_tone"; 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_SOUND_EFFECTS = "sound_effects"; 6722e186898e47cf35a49e73494bf11695c854d284Dan Murphy private static final String KEY_HAPTIC_FEEDBACK = "haptic_feedback"; 688f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasani private static final String KEY_EMERGENCY_TONE = "emergency_tone"; 698f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasani private static final String KEY_SOUND_SETTINGS = "sound_settings"; 70231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler private static final String KEY_LOCK_SOUNDS = "lock_sounds"; 7160133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani private static final String KEY_RINGTONE = "ringtone"; 7260133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani private static final String KEY_NOTIFICATION_SOUND = "notification_sound"; 73dba00b6097f04a4923169bd891a5d70c729b5d86Daisuke Miyakawa private static final String KEY_CATEGORY_CALLS = "category_calls_and_notification"; 742bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private static final String KEY_DOCK_CATEGORY = "dock_category"; 75e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent private static final String KEY_DOCK_AUDIO_SETTINGS = "dock_audio"; 762bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private static final String KEY_DOCK_SOUNDS = "dock_sounds"; 77e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent private static final String KEY_DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled"; 788f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasani 7960133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani private static final String[] NEED_VOICE_CAPABILITY = { 8060133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani KEY_RINGTONE, KEY_DTMF_TONE, KEY_CATEGORY_CALLS, 812ac8da37d8cc21d34e4232ea7ff0984d5d0e8c1dHenrik Baard KEY_EMERGENCY_TONE, KEY_VIBRATE 8260133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani }; 8360133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani 84823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani private static final int MSG_UPDATE_RINGTONE_SUMMARY = 1; 85823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani private static final int MSG_UPDATE_NOTIFICATION_SUMMARY = 2; 86823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani 878b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa private CheckBoxPreference mVibrateWhenRinging; 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mDtmfTone; 89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mSoundEffects; 9022e186898e47cf35a49e73494bf11695c854d284Dan Murphy private CheckBoxPreference mHapticFeedback; 916eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen private Preference mMusicFx; 92231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler private CheckBoxPreference mLockSounds; 93823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani private Preference mRingtonePreference; 94823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani private Preference mNotificationPreference; 95823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani 96823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani private Runnable mRingtoneLookupRunnable; 97df9504ef58e8dafdd80ca9cd780510f9444943e2Michael Chan 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private AudioManager mAudioManager; 99df9504ef58e8dafdd80ca9cd780510f9444943e2Michael Chan 1002bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private Preference mDockAudioSettings; 1012bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private CheckBoxPreference mDockSounds; 1022bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private Intent mDockIntent; 103e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent private CheckBoxPreference mDockAudioMediaEnabled; 1042bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 105823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani private Handler mHandler = new Handler() { 106823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani public void handleMessage(Message msg) { 107823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani switch (msg.what) { 108823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani case MSG_UPDATE_RINGTONE_SUMMARY: 109823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani mRingtonePreference.setSummary((CharSequence) msg.obj); 110823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani break; 111823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani case MSG_UPDATE_NOTIFICATION_SUMMARY: 112823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani mNotificationPreference.setSummary((CharSequence) msg.obj); 113823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani break; 114823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 115823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 116823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani }; 117823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani 1182bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 1192bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren @Override 1202bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren public void onReceive(Context context, Intent intent) { 1212bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren if (intent.getAction().equals(Intent.ACTION_DOCK_EVENT)) { 1222bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren handleDockChange(intent); 1232bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 1242bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 1252bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren }; 1262bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 127d2b3ab088f49e3451b703b50f07366795c50f674Amith Yamasani private PreferenceGroup mSoundSettings; 128d2b3ab088f49e3451b703b50f07366795c50f674Amith Yamasani 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 130d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle savedInstanceState) { 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project ContentResolver resolver = getContentResolver(); 133327147eb062a25ecab40d66ea14559070e0ecef3Wink Saville int activePhoneType = TelephonyManager.getDefault().getCurrentPhoneType(); 134df9504ef58e8dafdd80ca9cd780510f9444943e2Michael Chan 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 137992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani addPreferencesFromResource(R.xml.sound_settings); 1388f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasani 139386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang if (TelephonyManager.PHONE_TYPE_CDMA != activePhoneType) { 140386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang // device is not CDMA, do not display CDMA emergency_tone 141386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang getPreferenceScreen().removePreference(findPreference(KEY_EMERGENCY_TONE)); 1428f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasani } 143386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 144057f181f3715e7340bf1618e86fdce118bbf952bJoe Onorato if (!getResources().getBoolean(R.bool.has_silent_mode)) { 145057f181f3715e7340bf1618e86fdce118bbf952bJoe Onorato findPreference(KEY_RING_VOLUME).setDependency(null); 146057f181f3715e7340bf1618e86fdce118bbf952bJoe Onorato } 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 148296d9bb61257ef84fbfae23dd594ba1a6f823eb5Eric Laurent if (getResources().getBoolean(com.android.internal.R.bool.config_useFixedVolume)) { 149296d9bb61257ef84fbfae23dd594ba1a6f823eb5Eric Laurent // device with fixed volume policy, do not display volumes submenu 150296d9bb61257ef84fbfae23dd594ba1a6f823eb5Eric Laurent getPreferenceScreen().removePreference(findPreference(KEY_RING_VOLUME)); 151296d9bb61257ef84fbfae23dd594ba1a6f823eb5Eric Laurent } 152296d9bb61257ef84fbfae23dd594ba1a6f823eb5Eric Laurent 1538b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa mVibrateWhenRinging = (CheckBoxPreference) findPreference(KEY_VIBRATE); 1548b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa mVibrateWhenRinging.setPersistent(false); 1558b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa mVibrateWhenRinging.setChecked(Settings.System.getInt(resolver, 1568b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa Settings.System.VIBRATE_WHEN_RINGING, 0) != 0); 1578b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa 158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDtmfTone = (CheckBoxPreference) findPreference(KEY_DTMF_TONE); 159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDtmfTone.setPersistent(false); 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDtmfTone.setChecked(Settings.System.getInt(resolver, 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.DTMF_TONE_WHEN_DIALING, 1) != 0); 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mSoundEffects = (CheckBoxPreference) findPreference(KEY_SOUND_EFFECTS); 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mSoundEffects.setPersistent(false); 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mSoundEffects.setChecked(Settings.System.getInt(resolver, 165823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani Settings.System.SOUND_EFFECTS_ENABLED, 1) != 0); 16622e186898e47cf35a49e73494bf11695c854d284Dan Murphy mHapticFeedback = (CheckBoxPreference) findPreference(KEY_HAPTIC_FEEDBACK); 16722e186898e47cf35a49e73494bf11695c854d284Dan Murphy mHapticFeedback.setPersistent(false); 16822e186898e47cf35a49e73494bf11695c854d284Dan Murphy mHapticFeedback.setChecked(Settings.System.getInt(resolver, 169823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani Settings.System.HAPTIC_FEEDBACK_ENABLED, 1) != 0); 170231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler mLockSounds = (CheckBoxPreference) findPreference(KEY_LOCK_SOUNDS); 171231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler mLockSounds.setPersistent(false); 172231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler mLockSounds.setChecked(Settings.System.getInt(resolver, 173231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler Settings.System.LOCKSCREEN_SOUNDS_ENABLED, 1) != 0); 174386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 175823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani mRingtonePreference = findPreference(KEY_RINGTONE); 176823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani mNotificationPreference = findPreference(KEY_NOTIFICATION_SOUND); 177823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani 1788b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 1798b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa if (vibrator == null || !vibrator.hasVibrator()) { 180c861cf84479d2bb289546e8c4f116beb794842c0Amith Yamasani removePreference(KEY_VIBRATE); 181c861cf84479d2bb289546e8c4f116beb794842c0Amith Yamasani removePreference(KEY_HAPTIC_FEEDBACK); 182c861cf84479d2bb289546e8c4f116beb794842c0Amith Yamasani } 183edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani 184386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang if (TelephonyManager.PHONE_TYPE_CDMA == activePhoneType) { 185386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang ListPreference emergencyTonePreference = 186386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang (ListPreference) findPreference(KEY_EMERGENCY_TONE); 187a2c12a61ded1bad366fa1c23ae69302573df400dJeff Sharkey emergencyTonePreference.setValue(String.valueOf(Settings.Global.getInt( 188a2c12a61ded1bad366fa1c23ae69302573df400dJeff Sharkey resolver, Settings.Global.EMERGENCY_TONE, FALLBACK_EMERGENCY_TONE_VALUE))); 189386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang emergencyTonePreference.setOnPreferenceChangeListener(this); 190386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } 1918f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasani 192d2b3ab088f49e3451b703b50f07366795c50f674Amith Yamasani mSoundSettings = (PreferenceGroup) findPreference(KEY_SOUND_SETTINGS); 193d2b3ab088f49e3451b703b50f07366795c50f674Amith Yamasani 1946eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen mMusicFx = mSoundSettings.findPreference(KEY_MUSICFX); 1956eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen Intent i = new Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL); 1966eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen PackageManager p = getPackageManager(); 1976eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen List<ResolveInfo> ris = p.queryIntentActivities(i, PackageManager.GET_DISABLED_COMPONENTS); 1986eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen if (ris.size() <= 2) { 1996eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen // no need to show the item if there is no choice for the user to make 2006eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen // note: the built in musicfx panel has two activities (one being a 2016eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen // compatibility shim that launches either the other activity, or a 2026eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen // third party one), hence the check for <=2. If the implementation 2036eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen // of the compatbility layer changes, this check may need to be updated. 2046eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen mSoundSettings.removePreference(mMusicFx); 2056eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen } 2066eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen 20760133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani if (!Utils.isVoiceCapable(getActivity())) { 20860133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani for (String prefKey : NEED_VOICE_CAPABILITY) { 20960133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani Preference pref = findPreference(prefKey); 21060133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani if (pref != null) { 21160133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani getPreferenceScreen().removePreference(pref); 21260133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani } 21360133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani } 21460133dd03657354e06fa3aa7e6041862f8ce20a8Amith Yamasani } 215823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani 216823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani mRingtoneLookupRunnable = new Runnable() { 217823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani public void run() { 218823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani if (mRingtonePreference != null) { 219823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani updateRingtoneName(RingtoneManager.TYPE_RINGTONE, mRingtonePreference, 220823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani MSG_UPDATE_RINGTONE_SUMMARY); 221823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 222823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani if (mNotificationPreference != null) { 223823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani updateRingtoneName(RingtoneManager.TYPE_NOTIFICATION, mNotificationPreference, 224823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani MSG_UPDATE_NOTIFICATION_SUMMARY); 225823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 226823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 227823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani }; 2282bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 2292bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren initDockSettings(); 230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 2318f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasani 232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 233d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 235df9504ef58e8dafdd80ca9cd780510f9444943e2Michael Chan 236823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani lookupRingtoneNames(); 2372bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 2382bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren IntentFilter filter = new IntentFilter(Intent.ACTION_DOCK_EVENT); 2392bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren getActivity().registerReceiver(mReceiver, filter); 2402bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 2412bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 2422bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren @Override 2432bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren public void onPause() { 2442bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren super.onPause(); 2452bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 2462bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren getActivity().unregisterReceiver(mReceiver); 247823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 248823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani 249823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani private void updateRingtoneName(int type, Preference preference, int msg) { 250823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani if (preference == null) return; 251823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani Context context = getActivity(); 252823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani if (context == null) return; 253823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); 254823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani CharSequence summary = context.getString(com.android.internal.R.string.ringtone_unknown); 255823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani // Is it a silent ringtone? 256823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani if (ringtoneUri == null) { 257823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani summary = context.getString(com.android.internal.R.string.ringtone_silent); 258823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } else { 259823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani // Fetch the ringtone title from the media provider 260823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani try { 261823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani Cursor cursor = context.getContentResolver().query(ringtoneUri, 262823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani new String[] { MediaStore.Audio.Media.TITLE }, null, null, null); 263c86755bfd56ff620e740e7a99303b54350ebf164Amith Yamasani if (cursor != null) { 264c86755bfd56ff620e740e7a99303b54350ebf164Amith Yamasani if (cursor.moveToFirst()) { 265c86755bfd56ff620e740e7a99303b54350ebf164Amith Yamasani summary = cursor.getString(0); 266c86755bfd56ff620e740e7a99303b54350ebf164Amith Yamasani } 267c86755bfd56ff620e740e7a99303b54350ebf164Amith Yamasani cursor.close(); 268823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 269823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } catch (SQLiteException sqle) { 270823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani // Unknown title for the ringtone 271823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 272823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 273823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani mHandler.sendMessage(mHandler.obtainMessage(msg, summary)); 274823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani } 275df9504ef58e8dafdd80ca9cd780510f9444943e2Michael Chan 276823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani private void lookupRingtoneNames() { 277823bf0c155fb481476cc3f755bdc12943ed5d4b8Amith Yamasani new Thread(mRingtoneLookupRunnable).start(); 27876315391f07d022e31c176633ae3aeaee5bb14ecDianne Hackborn } 279df9504ef58e8dafdd80ca9cd780510f9444943e2Michael Chan 280afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 281afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 2828b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa if (preference == mVibrateWhenRinging) { 2838b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa Settings.System.putInt(getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, 2848b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa mVibrateWhenRinging.isChecked() ? 1 : 0); 2858b878db49d4631552b8279500549a7f7b59a3dd2Daisuke Miyakawa } else if (preference == mDtmfTone) { 286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putInt(getContentResolver(), Settings.System.DTMF_TONE_WHEN_DIALING, 287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDtmfTone.isChecked() ? 1 : 0); 288df9504ef58e8dafdd80ca9cd780510f9444943e2Michael Chan 289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mSoundEffects) { 290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (mSoundEffects.isChecked()) { 291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mAudioManager.loadSoundEffects(); 292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mAudioManager.unloadSoundEffects(); 294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 295afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putInt(getContentResolver(), Settings.System.SOUND_EFFECTS_ENABLED, 296afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mSoundEffects.isChecked() ? 1 : 0); 29722e186898e47cf35a49e73494bf11695c854d284Dan Murphy 29822e186898e47cf35a49e73494bf11695c854d284Dan Murphy } else if (preference == mHapticFeedback) { 29922e186898e47cf35a49e73494bf11695c854d284Dan Murphy Settings.System.putInt(getContentResolver(), Settings.System.HAPTIC_FEEDBACK_ENABLED, 30022e186898e47cf35a49e73494bf11695c854d284Dan Murphy mHapticFeedback.isChecked() ? 1 : 0); 301df9504ef58e8dafdd80ca9cd780510f9444943e2Michael Chan 302231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler } else if (preference == mLockSounds) { 303231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler Settings.System.putInt(getContentResolver(), Settings.System.LOCKSCREEN_SOUNDS_ENABLED, 304231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler mLockSounds.isChecked() ? 1 : 0); 305231d880df31ea4817dc0c5f1acd66f12417f2044Daniel Sandler 3066eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen } else if (preference == mMusicFx) { 3076eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen // let the framework fire off the intent 3086eca4b3b927611795910908532fa927c9eea6fafMarco Nelissen return false; 3092bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } else if (preference == mDockAudioSettings) { 3102bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren int dockState = mDockIntent != null 3112bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren ? mDockIntent.getIntExtra(Intent.EXTRA_DOCK_STATE, 0) 3122bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren : Intent.EXTRA_DOCK_STATE_UNDOCKED; 313e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent 3142bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren if (dockState == Intent.EXTRA_DOCK_STATE_UNDOCKED) { 3152bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren showDialog(DIALOG_NOT_DOCKED); 3162bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } else { 317e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent boolean isBluetooth = mDockIntent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE) != null; 318e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent 319e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent if (isBluetooth) { 320e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Intent i = new Intent(mDockIntent); 321e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent i.setAction(DockEventReceiver.ACTION_DOCK_SHOW_UI); 322e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent i.setClass(getActivity(), DockEventReceiver.class); 323e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent getActivity().sendBroadcast(i); 324e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent } else { 325e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent PreferenceScreen ps = (PreferenceScreen)mDockAudioSettings; 326e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Bundle extras = ps.getExtras(); 327e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent extras.putBoolean("checked", 328e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Settings.Global.getInt(getContentResolver(), 329e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Settings.Global.DOCK_AUDIO_MEDIA_ENABLED, 0) == 1); 330e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent super.onPreferenceTreeClick(ps, ps); 331e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent } 3322bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 3332bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } else if (preference == mDockSounds) { 334860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey Settings.Global.putInt(getContentResolver(), Settings.Global.DOCK_SOUNDS_ENABLED, 3352bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren mDockSounds.isChecked() ? 1 : 0); 336e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent } else if (preference == mDockAudioMediaEnabled) { 337e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Settings.Global.putInt(getContentResolver(), Settings.Global.DOCK_AUDIO_MEDIA_ENABLED, 338e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioMediaEnabled.isChecked() ? 1 : 0); 339afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 340afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return true; 341afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 342afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 343afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceChange(Preference preference, Object objValue) { 3448f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasani final String key = preference.getKey(); 345992f10240d0bfd78bb99855fe23ec7a1b61a2551Amith Yamasani if (KEY_EMERGENCY_TONE.equals(key)) { 346386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang try { 347378b6f674064e373f1be4d230608be4d0bddbb4fPeter Kuterna int value = Integer.parseInt((String) objValue); 348a2c12a61ded1bad366fa1c23ae69302573df400dJeff Sharkey Settings.Global.putInt(getContentResolver(), 349a2c12a61ded1bad366fa1c23ae69302573df400dJeff Sharkey Settings.Global.EMERGENCY_TONE, value); 350386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } catch (NumberFormatException e) { 351386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang Log.e(TAG, "could not persist emergency tone setting", e); 352386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } 353afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3548f2fb65b360ebc7ed71ddbc884451536e5e99c03Amith Yamasani 355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return true; 356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 357b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 358b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani @Override 359b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani protected int getHelpResource() { 360b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani return R.string.help_url_sound; 361b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani } 3622bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 3632bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private boolean needsDockSettings() { 3642bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren return getResources().getBoolean(R.bool.has_dock_settings); 3652bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 3662bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 3672bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private void initDockSettings() { 368e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent ContentResolver resolver = getContentResolver(); 3692bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 370e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent if (needsDockSettings()) { 3712bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren mDockSounds = (CheckBoxPreference) findPreference(KEY_DOCK_SOUNDS); 3722bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren mDockSounds.setPersistent(false); 373860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey mDockSounds.setChecked(Settings.Global.getInt(resolver, 374860eceba2c1e5aea13eafb0d60b64abe9f7c700dJeff Sharkey Settings.Global.DOCK_SOUNDS_ENABLED, 0) != 0); 375e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioSettings = findPreference(KEY_DOCK_AUDIO_SETTINGS); 376e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioSettings.setEnabled(false); 3772bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } else { 3782bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren getPreferenceScreen().removePreference(findPreference(KEY_DOCK_CATEGORY)); 379e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent getPreferenceScreen().removePreference(findPreference(KEY_DOCK_AUDIO_SETTINGS)); 3802bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren getPreferenceScreen().removePreference(findPreference(KEY_DOCK_SOUNDS)); 381e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Settings.Global.putInt(resolver, Settings.Global.DOCK_AUDIO_MEDIA_ENABLED, 1); 3822bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 3832bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 3842bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 3852bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private void handleDockChange(Intent intent) { 3862bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren if (mDockAudioSettings != null) { 3872bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren int dockState = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, 0); 3882bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 389e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent boolean isBluetooth = 390e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE) != null; 3912bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 392e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockIntent = intent; 3932bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 3942bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren if (dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) { 3952bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren // remove undocked dialog if currently showing. 3962bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren try { 3972bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren removeDialog(DIALOG_NOT_DOCKED); 3982bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } catch (IllegalArgumentException iae) { 3992bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren // Maybe it was already dismissed 4002bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 401e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent 402e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent if (isBluetooth) { 403e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioSettings.setEnabled(true); 404e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent } else { 405e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent if (dockState == Intent.EXTRA_DOCK_STATE_LE_DESK) { 406e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent ContentResolver resolver = getContentResolver(); 407e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioSettings.setEnabled(true); 408e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent if (Settings.Global.getInt(resolver, 409e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Settings.Global.DOCK_AUDIO_MEDIA_ENABLED, -1) == -1) { 410e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Settings.Global.putInt(resolver, 411e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Settings.Global.DOCK_AUDIO_MEDIA_ENABLED, 0); 412e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent } 413e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioMediaEnabled = 414e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent (CheckBoxPreference) findPreference(KEY_DOCK_AUDIO_MEDIA_ENABLED); 415e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioMediaEnabled.setPersistent(false); 416e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioMediaEnabled.setChecked( 417e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Settings.Global.getInt(resolver, 418e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent Settings.Global.DOCK_AUDIO_MEDIA_ENABLED, 0) != 0); 419e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent } else { 420e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioSettings.setEnabled(false); 421e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent } 422e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent } 423e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent } else { 424e00cd9ff60ee5c5769902c0e1d85764d17eccc03Eric Laurent mDockAudioSettings.setEnabled(false); 4252bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 4262bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 4272bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 4282bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 4292bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren @Override 4302bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren public Dialog onCreateDialog(int id) { 4312bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren if (id == DIALOG_NOT_DOCKED) { 4322bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren return createUndockedMessage(); 4332bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 4342bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren return null; 4352bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 4362bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 4372bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren private Dialog createUndockedMessage() { 4382bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren final AlertDialog.Builder ab = new AlertDialog.Builder(getActivity()); 4392bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren ab.setTitle(R.string.dock_not_found_title); 4402bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren ab.setMessage(R.string.dock_not_found_text); 4412bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren ab.setPositiveButton(android.R.string.ok, null); 4422bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren return ab.create(); 4432bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren } 444afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 4452bc32ae8088f6ae759668a0515b4fb418d99d967Chris Wren 446