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).
This commit is contained in:
Amith Yamasani
2010-01-14 16:12:21 -08:00
parent 01a868d73b
commit 0e2ab4f884
8 changed files with 198 additions and 60 deletions

View File

@@ -232,6 +232,19 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name="DockSettings"
android:label="@string/dock_settings_title"
android:clearTaskOnLaunch="true"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="com.android.settings.DOCK_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
</activity>
<activity android:name="DeviceInfoSettings" android:label="@string/device_info_settings" <activity android:name="DeviceInfoSettings" android:label="@string/device_info_settings"
> >
<intent-filter> <intent-filter>

View File

@@ -953,8 +953,8 @@
<!-- Dock not found dialog title --> <!-- Dock not found dialog title -->
<string name="dock_not_found_title">Dock not found</string> <string name="dock_not_found_title">Dock not found</string>
<!-- Dock not found dialog text --> <!-- Dock not found dialog text -->
<string name="dock_not_found_text">You must dock the phone to configure audio settings for that dock</string> <string name="dock_not_found_text">The phone must be docked to configure dock audio</string>
<!-- Acounts & Sync settings screen setting option name to go into the screen for data sync settings--> <!-- Acounts & Sync settings screen setting option name to go into the screen for data sync settings-->
<string name="sync_settings">Accounts &amp; sync</string> <string name="sync_settings">Accounts &amp; sync</string>
<!-- Main Settings screen setting option summary text for the itme to go into the screen with data sync settings--> <!-- Main Settings screen setting option summary text for the itme to go into the screen with data sync settings-->

29
res/xml/dock_settings.xml Normal file
View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:title="@string/dock_settings_title"
android:key="parent">
<PreferenceScreen
android:key="dock_audio"
android:title="@string/dock_audio_settings_title"
android:summary="@string/dock_settings_summary"
android:widgetLayout="@*android:layout/preference_dialog" />
</PreferenceScreen>

View File

@@ -133,6 +133,17 @@
android:targetClass="com.android.settings.LanguageSettings" /> android:targetClass="com.android.settings.LanguageSettings" />
</com.android.settings.IconPreferenceScreen> </com.android.settings.IconPreferenceScreen>
<!-- Dock -->
<com.android.settings.IconPreferenceScreen
android:key="dock_settings"
android:title="@string/dock_settings">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.android.settings"
android:targetClass="com.android.settings.DockSettings" />
</com.android.settings.IconPreferenceScreen>
<!-- Accessibility feedback --> <!-- Accessibility feedback -->
<com.android.settings.IconPreferenceScreen <com.android.settings.IconPreferenceScreen

View File

@@ -47,13 +47,6 @@
android:order="3" android:order="3"
android:streamType="music" /> android:streamType="music" />
<PreferenceScreen
android:key="dock_settings"
android:order="4"
android:title="@string/dock_settings_title"
android:summary="@string/dock_settings_summary"
android:widgetLayout="@*android:layout/preference_dialog" />
<com.android.settings.DefaultRingtonePreference <com.android.settings.DefaultRingtonePreference
android:key="ringtone" android:key="ringtone"
android:title="@string/ringtone_title" android:title="@string/ringtone_title"

View File

@@ -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();
}
}

View File

@@ -17,9 +17,9 @@
package com.android.settings; package com.android.settings;
import android.os.Bundle; import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity; import android.preference.PreferenceActivity;
import android.preference.PreferenceGroup; import android.preference.PreferenceGroup;
import android.provider.Settings.System;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
public class Settings extends PreferenceActivity { 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_CALL_SETTINGS = "call_settings";
private static final String KEY_SYNC_SETTINGS = "sync_settings"; private static final String KEY_SYNC_SETTINGS = "sync_settings";
private static final String KEY_SEARCH_SETTINGS = "search_settings"; private static final String KEY_SEARCH_SETTINGS = "search_settings";
private static final String KEY_DOCK_SETTINGS = "dock_settings";
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@@ -40,6 +41,11 @@ public class Settings extends PreferenceActivity {
PreferenceGroup parent = (PreferenceGroup) findPreference(KEY_PARENT); PreferenceGroup parent = (PreferenceGroup) findPreference(KEY_PARENT);
Utils.updatePreferenceToSpecificActivityOrRemove(this, parent, KEY_SYNC_SETTINGS, 0); Utils.updatePreferenceToSpecificActivityOrRemove(this, parent, KEY_SYNC_SETTINGS, 0);
Utils.updatePreferenceToSpecificActivityOrRemove(this, parent, KEY_SEARCH_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 @Override

View File

@@ -18,8 +18,6 @@ package com.android.settings;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
import com.android.settings.bluetooth.DockEventReceiver;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; 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_EMERGENCY_TONE = "emergency_tone";
private static final String KEY_SOUND_SETTINGS = "sound_settings"; private static final String KEY_SOUND_SETTINGS = "sound_settings";
private static final String KEY_NOTIFICATION_PULSE = "notification_pulse"; private static final String KEY_NOTIFICATION_PULSE = "notification_pulse";
private static final String KEY_DOCK_SETTINGS = "dock_settings";
private CheckBoxPreference mSilent; private CheckBoxPreference mSilent;
private CheckBoxPreference mPlayMediaNotificationSounds; private CheckBoxPreference mPlayMediaNotificationSounds;
private Preference mDockSettings;
private boolean mHasDockSettings;
private IMountService mMountService = null; private IMountService mMountService = null;
/* /*
@@ -99,16 +93,12 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) { if (intent.getAction().equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) {
updateState(false); updateState(false);
} else if (intent.getAction().equals(Intent.ACTION_DOCK_EVENT)) {
handleDockChange(intent);
} }
} }
}; };
private PreferenceGroup mSoundSettings; private PreferenceGroup mSoundSettings;
private Intent mDockIntent;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -178,7 +168,6 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements
} }
} }
initDockSettings();
} }
@Override @Override
@@ -188,12 +177,6 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements
updateState(true); updateState(true);
IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION); 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); registerReceiver(mReceiver, filter);
} }
@@ -204,34 +187,6 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements
unregisterReceiver(mReceiver); 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) { private void updateState(boolean force) {
final int ringerMode = mAudioManager.getRingerMode(); final int ringerMode = mAudioManager.getRingerMode();
final boolean silentOrVibrateMode = final boolean silentOrVibrateMode =
@@ -354,11 +309,6 @@ public class SoundAndDisplaySettings extends PreferenceActivity implements
boolean value = mNotificationPulse.isChecked(); boolean value = mNotificationPulse.isChecked();
Settings.System.putInt(getContentResolver(), Settings.System.putInt(getContentResolver(),
Settings.System.NOTIFICATION_LIGHT_PULSE, value ? 1 : 0); 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; return true;