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