From d2b3ab088f49e3451b703b50f07366795c50f674 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Wed, 2 Dec 2009 13:56:05 -0800 Subject: [PATCH] Feature #2296147 Settings for Car/Desk Dock on certain devices This inserts a launcher for the Dock settings dialog, if the device supports it and is currently docked. The menu item disappears if the phone is not docked in the car/desk dock. --- res/values/bools.xml | 2 + res/values/strings.xml | 2 + res/xml/sound_and_display_settings.xml | 29 ++++++++-- .../settings/SoundAndDisplaySettings.java | 53 +++++++++++++++++-- 4 files changed, 77 insertions(+), 9 deletions(-) diff --git a/res/values/bools.xml b/res/values/bools.xml index cc816c0df06..61cc79e97c0 100644 --- a/res/values/bools.xml +++ b/res/values/bools.xml @@ -18,4 +18,6 @@ false + + false diff --git a/res/values/strings.xml b/res/values/strings.xml index 8ae9209b375..85ca4d40830 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -894,6 +894,8 @@ Media volume Set volume for music and videos + + Dock settings Audible touch tones diff --git a/res/xml/sound_and_display_settings.xml b/res/xml/sound_and_display_settings.xml index c597a0ae559..151b0fb7556 100644 --- a/res/xml/sound_and_display_settings.xml +++ b/res/xml/sound_and_display_settings.xml @@ -19,14 +19,15 @@ - + - + - + - + + + + + diff --git a/src/com/android/settings/SoundAndDisplaySettings.java b/src/com/android/settings/SoundAndDisplaySettings.java index 8c70c915ff4..67fc533b61a 100644 --- a/src/com/android/settings/SoundAndDisplaySettings.java +++ b/src/com/android/settings/SoundAndDisplaySettings.java @@ -60,11 +60,15 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements private static final String KEY_EMERGENCY_TONE = "emergency_tone"; private static final String KEY_SOUND_SETTINGS = "sound_settings"; private static final String KEY_NOTIFICATION_PULSE = "notification_pulse"; + private static final String KEY_DOCK_SETTINGS = "dock_settings"; private CheckBoxPreference mSilent; private CheckBoxPreference mPlayMediaNotificationSounds; + private Preference mDockSettings; + private boolean mHasDockSettings; + private IMountService mMountService = null; /* @@ -90,10 +94,16 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - updateState(false); + if (intent.getAction().equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) { + updateState(false); + } else if (intent.getAction().equals(Intent.ACTION_DOCK_EVENT)) { + handleDockChange(intent); + } } }; + private PreferenceGroup mSoundSettings; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -147,12 +157,12 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements emergencyTonePreference.setOnPreferenceChangeListener(this); } - PreferenceGroup soundSettings = (PreferenceGroup) findPreference(KEY_SOUND_SETTINGS); + mSoundSettings = (PreferenceGroup) findPreference(KEY_SOUND_SETTINGS); mNotificationPulse = (CheckBoxPreference) - soundSettings.findPreference(KEY_NOTIFICATION_PULSE); - if (mNotificationPulse != null && soundSettings != null && + mSoundSettings.findPreference(KEY_NOTIFICATION_PULSE); + if (mNotificationPulse != null && getResources().getBoolean(R.bool.has_intrusive_led) == false) { - soundSettings.removePreference(mNotificationPulse); + mSoundSettings.removePreference(mNotificationPulse); } else { try { mNotificationPulse.setChecked(Settings.System.getInt(resolver, @@ -162,6 +172,8 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found"); } } + + initDockSettings(); } @Override @@ -171,6 +183,12 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements updateState(true); IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION); + if (mHasDockSettings) { + if (mDockSettings != null) { + mSoundSettings.removePreference(mDockSettings); + } + filter.addAction(Intent.ACTION_DOCK_EVENT); + } registerReceiver(mReceiver, filter); } @@ -181,6 +199,31 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements unregisterReceiver(mReceiver); } + private void initDockSettings() { + mDockSettings = mSoundSettings.findPreference(KEY_DOCK_SETTINGS); + mHasDockSettings = getResources().getBoolean(R.bool.has_dock_settings); + if (mDockSettings != null) { + mSoundSettings.removePreference(mDockSettings); + // Don't care even if we dock + if (getResources().getBoolean(R.bool.has_dock_settings) == false) { + mDockSettings = null; + } + } + } + + private void handleDockChange(Intent intent) { + if (mHasDockSettings && mDockSettings != null) { + int dockState = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, 0); + if (dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) { + // Show dock settings item + mSoundSettings.addPreference(mDockSettings); + } else { + // Remove dock settings item + mSoundSettings.removePreference(mDockSettings); + } + } + } + private void updateState(boolean force) { final int ringerMode = mAudioManager.getRingerMode(); final boolean silentOrVibrateMode =