diff options
author | Amith Yamasani <yamasani@google.com> | 2010-01-14 16:12:21 -0800 |
---|---|---|
committer | Amith Yamasani <yamasani@google.com> | 2010-01-15 11:53:42 -0800 |
commit | 0e2ab4f884e549d7fb21d0227bf5ee61f9f7958a (patch) | |
tree | ba4117ff044fe0e68532f8c006b824234e616250 /src/com | |
parent | 01a868d73b2c0a8c969a4ad37af0e0a98a9eb156 (diff) | |
download | packages_apps_Settings-0e2ab4f884e549d7fb21d0227bf5ee61f9f7958a.zip packages_apps_Settings-0e2ab4f884e549d7fb21d0227bf5ee61f9f7958a.tar.gz packages_apps_Settings-0e2ab4f884e549d7fb21d0227bf5ee61f9f7958a.tar.bz2 |
New top-level Dock in Settings and a Dock Settings screen with Audio item. #2367275
Add a new top-level setting for car/desktop dock settings.
Sub menu contains one item - Audio (settings)
Sub text for Audio shows current docked status and launches either the
audio settings or a dialog saying that you're not docked and you need to
buy a new dock from Google (kidding).
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/settings/DockSettings.java | 136 | ||||
-rw-r--r-- | src/com/android/settings/Settings.java | 8 | ||||
-rw-r--r-- | src/com/android/settings/SoundAndDisplaySettings.java | 50 |
3 files changed, 143 insertions, 51 deletions
diff --git a/src/com/android/settings/DockSettings.java b/src/com/android/settings/DockSettings.java new file mode 100644 index 0000000..5cf8a7e --- /dev/null +++ b/src/com/android/settings/DockSettings.java @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.BroadcastReceiver; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceScreen; + +import com.android.settings.bluetooth.DockEventReceiver; + +public class DockSettings extends PreferenceActivity { + + private static final int DIALOG_NOT_DOCKED = 1; + private static final String KEY_AUDIO_SETTINGS = "dock_audio"; + private Preference mAudioSettings; + private Intent mDockIntent; + + private BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(Intent.ACTION_DOCK_EVENT)) { + handleDockChange(intent); + } + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ContentResolver resolver = getContentResolver(); + addPreferencesFromResource(R.xml.dock_settings); + + initDockSettings(); + } + + @Override + protected void onResume() { + super.onResume(); + + IntentFilter filter = new IntentFilter(Intent.ACTION_DOCK_EVENT); + registerReceiver(mReceiver, filter); + } + + @Override + protected void onPause() { + super.onPause(); + + unregisterReceiver(mReceiver); + } + + private void initDockSettings() { + mAudioSettings = findPreference(KEY_AUDIO_SETTINGS); + } + + private void handleDockChange(Intent intent) { + if (mAudioSettings != null) { + int dockState = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, 0); + mDockIntent = intent; + int resId = R.string.dock_audio_summary_unknown; + switch (dockState) { + case Intent.EXTRA_DOCK_STATE_CAR: + resId = R.string.dock_audio_summary_car; + break; + case Intent.EXTRA_DOCK_STATE_DESK: + resId = R.string.dock_audio_summary_desk; + break; + case Intent.EXTRA_DOCK_STATE_UNDOCKED: + resId = R.string.dock_audio_summary_none; + } + mAudioSettings.setSummary(resId); + if (dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) { + // remove undocked dialog if currently showing. + try { + dismissDialog(DIALOG_NOT_DOCKED); + } catch (IllegalArgumentException iae) { + // Maybe it was already dismissed + } + } + } + } + + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + if (preference == mAudioSettings) { + int dockState = mDockIntent.getIntExtra(Intent.EXTRA_DOCK_STATE, 0); + if (dockState == Intent.EXTRA_DOCK_STATE_UNDOCKED) { + showDialog(DIALOG_NOT_DOCKED); + } else { + Intent i = new Intent(mDockIntent); + i.setAction(DockEventReceiver.ACTION_DOCK_SHOW_UI); + i.setClass(this, DockEventReceiver.class); + sendBroadcast(i); + } + } + + return true; + } + + @Override + public Dialog onCreateDialog(int id) { + if (id == DIALOG_NOT_DOCKED) { + return createUndockedMessage(); + } + return null; + } + + private Dialog createUndockedMessage() { + final AlertDialog.Builder ab = new AlertDialog.Builder(this); + ab.setTitle(R.string.dock_not_found_title); + ab.setMessage(R.string.dock_not_found_text); + ab.setPositiveButton(android.R.string.ok, null); + return ab.create(); + } +} diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index c0a8613..5309cf5 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -17,9 +17,9 @@ package com.android.settings; import android.os.Bundle; +import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceGroup; -import android.provider.Settings.System; import android.telephony.TelephonyManager; public class Settings extends PreferenceActivity { @@ -28,6 +28,7 @@ public class Settings extends PreferenceActivity { private static final String KEY_CALL_SETTINGS = "call_settings"; private static final String KEY_SYNC_SETTINGS = "sync_settings"; private static final String KEY_SEARCH_SETTINGS = "search_settings"; + private static final String KEY_DOCK_SETTINGS = "dock_settings"; @Override protected void onCreate(Bundle savedInstanceState) { @@ -40,6 +41,11 @@ public class Settings extends PreferenceActivity { PreferenceGroup parent = (PreferenceGroup) findPreference(KEY_PARENT); Utils.updatePreferenceToSpecificActivityOrRemove(this, parent, KEY_SYNC_SETTINGS, 0); Utils.updatePreferenceToSpecificActivityOrRemove(this, parent, KEY_SEARCH_SETTINGS, 0); + + Preference dockSettings = parent.findPreference(KEY_DOCK_SETTINGS); + if (getResources().getBoolean(R.bool.has_dock_settings) == false && dockSettings != null) { + parent.removePreference(dockSettings); + } } @Override diff --git a/src/com/android/settings/SoundAndDisplaySettings.java b/src/com/android/settings/SoundAndDisplaySettings.java index e01f7c3..29eb878 100644 --- a/src/com/android/settings/SoundAndDisplaySettings.java +++ b/src/com/android/settings/SoundAndDisplaySettings.java @@ -18,8 +18,6 @@ package com.android.settings; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; -import com.android.settings.bluetooth.DockEventReceiver; - import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; @@ -63,15 +61,11 @@ 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; /* @@ -99,16 +93,12 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements public void onReceive(Context context, Intent intent) { 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; - private Intent mDockIntent; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -178,7 +168,6 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements } } - initDockSettings(); } @Override @@ -188,12 +177,6 @@ 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); } @@ -204,34 +187,6 @@ 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); - - // Save the intent to send to the activity - mDockIntent = intent; - } else { - // Remove dock settings item - mSoundSettings.removePreference(mDockSettings); - } - } - } - private void updateState(boolean force) { final int ringerMode = mAudioManager.getRingerMode(); final boolean silentOrVibrateMode = @@ -354,11 +309,6 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements boolean value = mNotificationPulse.isChecked(); Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_LIGHT_PULSE, value ? 1 : 0); - } else if (preference == mDockSettings) { - Intent i = new Intent(mDockIntent); - i.setAction(DockEventReceiver.ACTION_DOCK_SHOW_UI); - i.setClass(this, DockEventReceiver.class); - sendBroadcast(i); } return true; |