OSDN Git Service

Sound settings screen and volumes dialog reconfiguration.
authorAmith Yamasani <yamasani@google.com>
Mon, 1 Aug 2011 22:55:06 +0000 (15:55 -0700)
committerAmith Yamasani <yamasani@google.com>
Wed, 3 Aug 2011 01:59:43 +0000 (18:59 -0700)
Removed the "Notifications use ring volume" checkbox.

Show the current ringtones in the summary area.

Bug: 5032308
Change-Id: I17e63f32c1775dd2097904df1aa6aaf699bd8ae2

res/layout/preference_dialog_ringervolume.xml
res/values/strings.xml
res/xml/sound_settings.xml
src/com/android/settings/RingerVolumePreference.java
src/com/android/settings/SoundSettings.java

index 5aebedc..4944f91 100644 (file)
                 android:paddingTop="20dip"
                 android:visibility="gone"/>
 
-        <TextView
-                android:id="@+id/ringtone_label"
-                android:layout_width="match_parent"
+        <!-- Dummy -->
+        <SeekBar android:id="@*android:id/seekbar"
+                android:layout_width="0dip"
                 android:layout_height="wrap_content"
-                android:text="@string/incoming_call_volume_title"
-                android:paddingTop="10dip"
-                android:paddingLeft="20dip"
-                android:paddingRight="20dip" />
+                android:layout_weight="1"
+                android:visibility="gone" />
 
-        <!-- Used for the ring volume.  This is what the superclass VolumePreference uses. -->
-        <!-- TODO - is this used? -->
-        <SeekBar android:id="@*android:id/seekbar"
-                android:layout_width="match_parent"
+        <TextView
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:paddingTop="2dip"
-                android:paddingLeft="20dip"
-                android:paddingRight="20dip" />
+                android:paddingLeft="16dip"
+                android:layout_gravity="left"
+                android:text="@string/volume_media_description"
+            />
 
         <!-- Used for the media volume -->
         <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:paddingLeft="8dip"
                 android:orientation="horizontal"
                 android:gravity="center_vertical">
 
-                <ImageView android:id="@+id/volume_mute_button"
+                <ImageView android:id="@+id/media_mute_button"
                         android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"/>
+                        android:layout_height="wrap_content"
+                        android:padding="8dip"
+                        android:background="?android:attr/selectableItemBackground"
+                    />
 
                 <SeekBar android:id="@+id/media_volume_seekbar"
                         android:layout_width="0dip"
                         android:paddingRight="20dip" />
         </LinearLayout>
 
-        <!-- TODO - is this used? -->
-        <CheckBox android:id="@+id/same_notification_volume"
+        <!-- Used for the ringer/notification volume -->
+        <LinearLayout
+                android:id="@+id/ringer_section"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:text="@string/checkbox_notification_same_as_incoming_call"
-                android:textAppearance="?android:attr/textAppearanceSmall"
-                android:layout_marginTop="6dip"
-                android:layout_marginLeft="20dip"
-                android:layout_marginRight="20dip" />
+                android:orientation="vertical">
+
+            <TextView
+                    android:id="@+id/ringer_description_text"
+                    android:textAppearance="?android:attr/textAppearanceSmall"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="16dip"
+                    android:paddingLeft="16dip"
+                    android:layout_gravity="left"
+                    android:text="@string/volume_ring_description"
+                />
+
+            <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:paddingLeft="8dip"
+                    android:orientation="horizontal"
+                    android:gravity="center_vertical">
+
+                    <ImageView android:id="@+id/ringer_mute_button"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:padding="8dip"
+                            android:background="?android:attr/selectableItemBackground"
+                        />
+
+                    <SeekBar android:id="@+id/ringer_volume_seekbar"
+                            android:layout_width="0dip"
+                            android:layout_height="wrap_content"
+                            android:layout_weight="1"
+                            android:paddingTop="2dip"
+                            android:paddingLeft="20dip"
+                            android:paddingRight="20dip" />
+            </LinearLayout>
 
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="1px"
-            android:background="#1bffffff"
-            android:layout_marginTop="16dip"
-            android:layout_marginBottom="16dip"/>
+        </LinearLayout>
 
         <!-- Used for the notification volume -->
         <LinearLayout
+                android:id="@+id/notification_section"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:orientation="horizontal">
+                android:orientation="vertical">
+
+            <TextView
+                    android:id="@+id/notification_description_text"
+                    android:textAppearance="?android:attr/textAppearanceSmall"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="16dip"
+                    android:paddingLeft="16dip"
+                    android:layout_gravity="left"
+                    android:text="@string/volume_notification_description"
+                />
+
+            <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:paddingLeft="8dip"
+                    android:orientation="horizontal"
+                    android:gravity="center_vertical">
+
+                    <ImageView android:id="@+id/notification_mute_button"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:padding="8dip"
+                            android:background="?android:attr/selectableItemBackground"
+                        />
+
+                    <SeekBar android:id="@+id/notification_volume_seekbar"
+                            android:layout_width="0dip"
+                            android:layout_height="wrap_content"
+                            android:layout_weight="1"
+                            android:paddingTop="2dip"
+                            android:paddingLeft="20dip"
+                            android:paddingRight="20dip" />
+            </LinearLayout>
 
-                <ImageView android:id="@+id/notification_mute_button"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"/>
-
-                <SeekBar android:id="@+id/notification_volume_seekbar"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:paddingTop="2dip"
-                        android:paddingLeft="20dip"
-                        android:paddingRight="20dip" />
         </LinearLayout>
 
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="1px"
-            android:background="#1bffffff"
-            android:layout_marginTop="16dip"
-            android:layout_marginBottom="16dip"/>
+        <TextView
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="16dip"
+                android:paddingLeft="16dip"
+                android:layout_gravity="left"
+                android:text="@string/volume_alarm_description"
+            />
 
         <!-- Used for the alarm volume -->
         <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:paddingLeft="8dip"
                 android:orientation="horizontal">
 
                 <ImageView android:id="@+id/alarm_mute_button"
                         android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"/>
-
+                        android:layout_height="wrap_content"
+                        android:padding="8dip"
+                        android:background="?android:attr/selectableItemBackground"
+                    />
                 <SeekBar android:id="@+id/alarm_volume_seekbar"
-                        android:layout_width="match_parent"
+                        android:layout_width="0dip"
                         android:layout_height="wrap_content"
+                        android:layout_weight="1"
                         android:paddingTop="2dip"
                         android:paddingLeft="20dip"
                         android:paddingRight="20dip" />
 
     </LinearLayout>
 
-</ScrollView>
\ No newline at end of file
+</ScrollView>
index 2302dcb..a750bd9 100644 (file)
     <string name="sound_settings">Sound</string>
     <!-- Sound settings screen, setting option name checkbox -->
     <string name="silent_mode_title">Silent mode</string>
-    <!-- Sound settings screen, setting option summary text when going into silent mode.  Media and alarms sounds WILL NOT be silenced in silent mode. -->
-    <string name="silent_mode_summary">Silence all sounds except media &amp; alarms</string>
-    <!-- Sound settings screen, setting option summary text when going into silent mode.  Media WILL NOT be silenced in silent mode, but alarms WILL be silenced. -->
-    <string name="silent_mode_incl_alarm_summary">All sounds except media are silenced</string>
     <!-- Sound settings screen, setting option name to pick ringtone (a list dialog comes up)-->
-    <string name="ringtone_title">Incoming call ringtone</string>
+    <string name="ringtone_title">Phone ringtone</string>
     <!-- Sound settings screen, setting option summary text -->
     <string name="ringtone_summary">""</string>
     <!-- Sound settings screen, volume title -->
-    <string name="all_volume_title">Volume</string>
+    <string name="all_volume_title">Volumes</string>
     <!-- Sound settings screen, music effects title [CHAR LIMIT=30]-->
     <string name="musicfx_title">Music Effects</string>
     <!-- Sound settings screen, setting option name -->
     <string name="ring_volume_title">Ringer volume</string>
-    <!-- Sound settings screen, setting option summary text -->
-    <string name="ring_volume_summary">""</string>
     <!-- Sound settings screen, setting option name checkbox -->
     <string name="vibrate_in_silent_title">Vibrate when silent</string>
-    <!-- Sound settings screen, setting option summary text -->
-    <string name="vibrate_in_silent_summary">Allow vibration feedback in silent mode</string>
     <!-- Sound settings screen, setting option name checkbox -->
     <string name="vibrate_title">Vibrate</string>
-    <!-- Sound settings screen, setting option summary text -->
-    <string name="vibrate_summary">Vibration feedback for calls and notifications</string>
     <!-- Sound settings screen, setting option name -->
-    <string name="notification_sound_title">Notification ringtone</string>
-    <!-- Sound settings screen, setting option summary text -->
-    <string name="notification_sound_summary">""</string>
+    <string name="notification_sound_title">Default notification</string>
     <!-- Sound settings screen, notification light repeat pulsing title -->
     <string name="notification_pulse_title">Pulse notification light</string>
-    <!-- Sound settings screen, notification light repeat pulsing summary -->
-    <string name="notification_pulse_summary">Pulse trackball light repeatedly for new notifications</string>
     <!-- Sound settings screen, the title of the volume bar to adjust the incoming call volume -->
     <string name="incoming_call_volume_title">Ringtone</string>
     <!-- Sound settings screen, the title of the volume bar to adjust the notification volume -->
     <!-- Sound settings screen, dock settings summary-->
     <string name="dock_settings_summary">Audio settings for the attached dock</string>
     <!-- Sound settings screen, setting check box label -->
-    <string name="dtmf_tone_enable_title">Audible touch tones</string>
-    <!-- Sound settings screen, setting option summary text when check box is selected -->
-    <string name="dtmf_tone_enable_summary_on">Play tones when using dial pad</string>
-    <!-- Sound settings screen, setting option summary text when check box is clear -->
-    <string name="dtmf_tone_enable_summary_off">Play tones when using dial pad</string>
+    <string name="dtmf_tone_enable_title">Dial pad touch tones</string>
     <!-- Sound settings screen, setting check box label -->
-    <string name="sound_effects_enable_title">Audible selection</string>
-    <!-- Sound settings screen, setting option summary text when check box is selected -->
-    <string name="sound_effects_enable_summary_on">Play sound when making screen selection</string>
-    <!-- Sound settings screen, setting option summary text when check box is clear -->
-    <string name="sound_effects_enable_summary_off">Play sound when making screen selection</string>
+    <string name="sound_effects_enable_title">Touch sounds</string>
     <!-- Sound settings screen, setting check box label -->
-    <string name="lock_sounds_enable_title">Screen lock sounds</string>
-    <!-- Sound settings screen, setting option summary text when check box is selected -->
-    <string name="lock_sounds_enable_summary_on">Play sounds when locking and unlocking the screen</string>
-    <!-- Sound settings screen, setting option summary text when check box is clear -->
-    <string name="lock_sounds_enable_summary_off">Play sounds when locking and unlocking the screen</string>
+    <string name="lock_sounds_enable_title">Screen lock sound</string>
     <!-- Sound settings screen, setting check box label -->
-    <string name="haptic_feedback_enable_title">Haptic feedback</string>
-    <!-- Sound settings screen, setting option summary text when check box is selected -->
-    <string name="haptic_feedback_enable_summary_on">Vibrate when pressing soft keys and on certain UI interactions</string>
-    <!-- Sound settings screen, setting option summary text when check box is clear -->
-    <string name="haptic_feedback_enable_summary_off">Vibrate when pressing soft keys and on certain UI interactions</string>
+    <string name="haptic_feedback_enable_title">Vibrate on touch</string>
     <!-- Sound settings screen, setting option name checkbox to enable/disable audio recording features that improve audio recording in noisy environments -->
     <string name="audio_record_proc_title">Noise cancellation</string>
-    <!-- Sound settings screen, setting option summary text -->
-    <string name="audio_record_proc_summary">Suppress background noise when speaking or recording.</string>
+    <!-- Volume description for media volume -->
+    <string name="volume_media_description">Music, video, games &amp; other media</string>
+    <!-- Volume description for ringtone and notification volume -->
+    <string name="volume_ring_description">Ringtone &amp; notifications</string>
+    <!-- Volume description for notification volume -->
+    <string name="volume_notification_description">Notifications</string>
+    <!-- Volume description for alarm volume -->
+    <string name="volume_alarm_description">Alarms</string>
 
     <!-- Dock settings title, top level -->
     <string name="dock_settings">Dock</string>
@@ -3126,9 +3102,9 @@ found in the list of installed applications.</string>
     <string name="untitled_apn">Untitled</string>
 
     <string name="sound_category_sound_title">General</string>
-    <string name="sound_category_calls_title">Incoming calls</string>
+    <string name="sound_category_calls_and_notification_title">Ringtone &amp; notifications</string>
     <string name="sound_category_notification_title">Notifications</string>
-    <string name="sound_category_feedback_title">Feedback</string>
+    <string name="sound_category_feedback_title">System</string>
 
     <!-- Wifi Setup For Setup Wizard with XL screen -->
     <!-- Title shown in Wifi Setup Wizard with XL screen -->
index ecc4af2..c0bca2e 100644 (file)
         android:key="sound_settings"
         xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
 
-    <PreferenceCategory
-            android:title="@string/sound_category_sound_title"/>
-
-    <CheckBoxPreference
-            android:key="silent"
-            android:title="@string/silent_mode_title"
-            android:summary="@string/silent_mode_summary"
+    <com.android.settings.RingerVolumePreference
+            android:key="ring_volume"
+            android:dependency="silent"
+            android:title="@string/all_volume_title"
+            android:dialogTitle="@string/all_volume_title"
             android:persistent="false"
-            android:disableDependentsState="true" />
+            android:streamType="ring" />
 
     <ListPreference
             android:key="vibrate"
             android:entries="@array/vibrate_entries"
             android:entryValues="@array/vibrate_values" />
 
-    <com.android.settings.RingerVolumePreference
-            android:key="ring_volume"
-            android:dependency="silent"
-            android:title="@string/all_volume_title"
-            android:summary="@string/ring_volume_summary"
-            android:dialogTitle="@string/all_volume_title"
+    <CheckBoxPreference
+            android:key="silent"
+            android:title="@string/silent_mode_title"
             android:persistent="false"
-            android:streamType="ring" />
+            android:disableDependentsState="true" />
 
     <Preference
             android:key="musicfx"
     </Preference>
 
     <PreferenceCategory
-            android:key="category_calls"
-            android:title="@string/sound_category_calls_title"/>
+            android:key="category_calls_and_notification"
+            android:title="@string/sound_category_calls_and_notification_title"/>
 
+    <!-- Do not nest these, or removals in code will break -->
     <com.android.settings.DefaultRingtonePreference
             android:key="ringtone"
             android:title="@string/ringtone_title"
-            android:summary="@string/ringtone_summary"
             android:dialogTitle="@string/ringtone_title"
             android:persistent="false"
             android:ringtoneType="ringtone" />
 
-    <PreferenceCategory
-            android:key="category_notification"
-            android:title="@string/sound_category_notification_title"/>
-
-    <!-- Do not nest these, or removals in code will break -->
-
     <com.android.settings.DefaultRingtonePreference
             android:key="notification_sound"
             android:title="@string/notification_sound_title"
-            android:summary="@string/notification_sound_summary"
             android:dialogTitle="@string/notification_sound_dialog_title"
             android:persistent="false"
             android:ringtoneType="notification" />
@@ -81,7 +69,6 @@
     <CheckBoxPreference
             android:key="notification_pulse"
             android:title="@string/notification_pulse_title"
-            android:summary="@string/notification_pulse_summary"
             android:persistent="false" />
 
     <PreferenceCategory
     <CheckBoxPreference
             android:key="dtmf_tone"
             android:title="@string/dtmf_tone_enable_title"
-            android:summaryOn="@string/dtmf_tone_enable_summary_on"
-            android:summaryOff="@string/dtmf_tone_enable_summary_off"
             android:defaultValue="true" />
 
     <CheckBoxPreference
             android:key="sound_effects"
             android:title="@string/sound_effects_enable_title"
-            android:summaryOn="@string/sound_effects_enable_summary_on"
-            android:summaryOff="@string/sound_effects_enable_summary_off"
             android:defaultValue="true" />
 
     <CheckBoxPreference
             android:key="lock_sounds"
             android:title="@string/lock_sounds_enable_title"
-            android:summaryOn="@string/lock_sounds_enable_summary_on"
-            android:summaryOff="@string/lock_sounds_enable_summary_off"
             android:defaultValue="true" />
 
     <CheckBoxPreference
             android:key="haptic_feedback"
             android:title="@string/haptic_feedback_enable_title"
-            android:summaryOn="@string/haptic_feedback_enable_summary_on"
-            android:summaryOff="@string/haptic_feedback_enable_summary_off"
             android:defaultValue="true" />
 
     <ListPreference
             android:key="emergency_tone"
             android:title="@string/emergency_tone_title"
-            android:summary="@string/emergency_tone_summary"
             android:entries="@array/emergency_tone_entries"
             android:entryValues="@array/emergency_tone_values" />
 
index f850b08..129edee 100644 (file)
@@ -51,49 +51,46 @@ import android.widget.TextView;
  * Special preference type that allows configuration of both the ring volume and
  * notification volume.
  */
-public class RingerVolumePreference extends VolumePreference implements
-        CheckBox.OnCheckedChangeListener, OnClickListener {
+public class RingerVolumePreference extends VolumePreference implements OnClickListener {
     private static final String TAG = "RingerVolumePreference";
     private static final int MSG_RINGER_MODE_CHANGED = 101;
 
-    private CheckBox mNotificationsUseRingVolumeCheckbox;
     private SeekBarVolumizer [] mSeekBarVolumizer;
     private boolean mIgnoreVolumeKeys;
 
     // These arrays must all match in length and order
     private static final int[] SEEKBAR_ID = new int[] {
-        R.id.notification_volume_seekbar,
         R.id.media_volume_seekbar,
+        R.id.ringer_volume_seekbar,
+        R.id.notification_volume_seekbar,
         R.id.alarm_volume_seekbar
     };
 
-    private static final int[] NEED_VOICE_CAPABILITY_ID = new int[] {
-        R.id.ringtone_label,
-        com.android.internal.R.id.seekbar,
-        R.id.same_notification_volume
-    };
-
     private static final int[] SEEKBAR_TYPE = new int[] {
-        AudioManager.STREAM_NOTIFICATION,
         AudioManager.STREAM_MUSIC,
+        AudioManager.STREAM_RING,
+        AudioManager.STREAM_NOTIFICATION,
         AudioManager.STREAM_ALARM
     };
 
     private static final int[] CHECKBOX_VIEW_ID = new int[] {
+        R.id.media_mute_button,
+        R.id.ringer_mute_button,
         R.id.notification_mute_button,
-        R.id.volume_mute_button,
         R.id.alarm_mute_button
     };
 
     private static final int[] SEEKBAR_MUTED_RES_ID = new int[] {
-        com.android.internal.R.drawable.ic_audio_notification_mute,
         com.android.internal.R.drawable.ic_audio_vol_mute,
+        com.android.internal.R.drawable.ic_audio_ring_notif_mute,
+        com.android.internal.R.drawable.ic_audio_notification_mute,
         com.android.internal.R.drawable.ic_audio_alarm_mute
     };
 
     private static final int[] SEEKBAR_UNMUTED_RES_ID = new int[] {
-        com.android.internal.R.drawable.ic_audio_notification,
         com.android.internal.R.drawable.ic_audio_vol,
+        com.android.internal.R.drawable.ic_audio_ring_notif,
+        com.android.internal.R.drawable.ic_audio_notification,
         com.android.internal.R.drawable.ic_audio_alarm
     };
 
@@ -167,21 +164,6 @@ public class RingerVolumePreference extends VolumePreference implements
             }
         }
 
-        //mNotificationVolumeTitle = (TextView) view.findViewById(R.id.notification_volume_title);
-        mNotificationsUseRingVolumeCheckbox =
-                (CheckBox) view.findViewById(R.id.same_notification_volume);
-        mNotificationsUseRingVolumeCheckbox.setOnCheckedChangeListener(this);
-        mNotificationsUseRingVolumeCheckbox.setChecked(Settings.System.getInt(
-                        getContext().getContentResolver(),
-                        Settings.System.NOTIFICATIONS_USE_RING_VOLUME, 1) == 1);
-        // Notification volume always visible for non voice capable devices
-        if (Utils.isVoiceCapable(getContext())) {
-            setNotificationVolumeVisibility(!mNotificationsUseRingVolumeCheckbox.isChecked());
-        } else {
-            setNotificationVolumeVisibility(true);
-        }
-        disableSettingsThatNeedVoice(view);
-
         // Register callbacks for mute/unmute buttons
         for (int i = 0; i < mCheckBoxes.length; i++) {
             ImageView checkbox = (ImageView) view.findViewById(CHECKBOX_VIEW_ID[i]);
@@ -207,6 +189,16 @@ public class RingerVolumePreference extends VolumePreference implements
             };
             getContext().registerReceiver(mRingModeChangedReceiver, filter);
         }
+
+        // Disable either ringer+notifications or notifications
+        int id;
+        if (!Utils.isVoiceCapable(getContext())) {
+            id = R.id.ringer_section;
+        } else {
+            id = R.id.notification_section;
+        }
+        View hideSection = view.findViewById(id);
+        hideSection.setVisibility(View.GONE);
     }
 
     private Uri getMediaVolumeUri(Context context) {
@@ -215,15 +207,6 @@ public class RingerVolumePreference extends VolumePreference implements
                 + "/" + R.raw.media_volume);
     }
 
-    private void disableSettingsThatNeedVoice(View parent) {
-        final boolean voiceCapable = Utils.isVoiceCapable(getContext());
-        if (!voiceCapable) {
-            for (int id : NEED_VOICE_CAPABILITY_ID) {
-                parent.findViewById(id).setVisibility(View.GONE);
-            }
-        }
-    }
-
     @Override
     protected void onDialogClosed(boolean positiveResult) {
         super.onDialogClosed(positiveResult);
@@ -242,23 +225,6 @@ public class RingerVolumePreference extends VolumePreference implements
         cleanup();
     }
 
-    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-        // ignore R.id.same_notification_volume checkbox for non voice capable devices
-        if (Utils.isVoiceCapable(getContext())) {
-            setNotificationVolumeVisibility(!isChecked);
-
-            Settings.System.putInt(getContext().getContentResolver(),
-                    Settings.System.NOTIFICATIONS_USE_RING_VOLUME, isChecked ? 1 : 0);
-
-            if (isChecked) {
-                // The user wants the notification to be same as ring, so do a
-                // one-time sync right now
-                mAudioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION,
-                        mAudioManager.getStreamVolume(AudioManager.STREAM_RING), 0);
-            }
-        }
-    }
-
     @Override
     public boolean onKey(View v, int keyCode, KeyEvent event) {
         boolean isdown = (event.getAction() == KeyEvent.ACTION_DOWN);
@@ -284,14 +250,6 @@ public class RingerVolumePreference extends VolumePreference implements
         }
     }
 
-    private void setNotificationVolumeVisibility(boolean visible) {
-        if (mSeekBarVolumizer[0] != null) {
-            mSeekBarVolumizer[0].getSeekBar().setVisibility(
-                    visible ? View.VISIBLE : View.GONE);
-        }
-        // mNotificationVolumeTitle.setVisibility(visible ? View.VISIBLE : View.GONE);
-    }
-
     private void cleanup() {
         for (int i = 0; i < SEEKBAR_ID.length; i++) {
             if (mSeekBarVolumizer[i] != null) {
index f6090c2..d1f8247 100644 (file)
@@ -23,16 +23,25 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteException;
 import android.media.AudioManager;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
 import android.media.audiofx.AudioEffect;
+import android.net.Uri;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.os.Vibrator;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
+import android.provider.MediaStore;
 import android.provider.Settings;
+import android.provider.MediaStore.Images.Media;
 import android.provider.Settings.SettingNotFoundException;
 import android.telephony.TelephonyManager;
 import android.util.Log;
@@ -41,7 +50,7 @@ import java.util.List;
 
 public class SoundSettings extends SettingsPreferenceFragment implements
         Preference.OnPreferenceChangeListener {
-    private static final String TAG = "SoundAndDisplaysSettings";
+    private static final String TAG = "SoundSettings";
 
     /** If there is no setting in the provider, use this. */
     private static final int FALLBACK_EMERGENCY_TONE_VALUE = 0;
@@ -60,7 +69,6 @@ public class SoundSettings extends SettingsPreferenceFragment implements
     private static final String KEY_RINGTONE = "ringtone";
     private static final String KEY_NOTIFICATION_SOUND = "notification_sound";
     private static final String KEY_CATEGORY_CALLS = "category_calls";
-    private static final String KEY_CATEGORY_NOTIFICATION = "category_notification";
 
     private static final String VALUE_VIBRATE_NEVER = "never";
     private static final String VALUE_VIBRATE_ALWAYS = "always";
@@ -72,6 +80,9 @@ public class SoundSettings extends SettingsPreferenceFragment implements
             KEY_EMERGENCY_TONE
     };
 
+    private static final int MSG_UPDATE_RINGTONE_SUMMARY = 1;
+    private static final int MSG_UPDATE_NOTIFICATION_SUMMARY = 2;
+
     private CheckBoxPreference mSilent;
 
     /*
@@ -88,6 +99,10 @@ public class SoundSettings extends SettingsPreferenceFragment implements
     private CheckBoxPreference mNotificationPulse;
     private Preference mMusicFx;
     private CheckBoxPreference mLockSounds;
+    private Preference mRingtonePreference;
+    private Preference mNotificationPreference;
+
+    private Runnable mRingtoneLookupRunnable;
 
     private AudioManager mAudioManager;
 
@@ -100,6 +115,19 @@ public class SoundSettings extends SettingsPreferenceFragment implements
         }
     };
 
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+            case MSG_UPDATE_RINGTONE_SUMMARY:
+                mRingtonePreference.setSummary((CharSequence) msg.obj);
+                break;
+            case MSG_UPDATE_NOTIFICATION_SUMMARY:
+                mNotificationPreference.setSummary((CharSequence) msg.obj);
+                break;
+            }
+        }
+    };
+
     private PreferenceGroup mSoundSettings;
 
     @Override
@@ -133,16 +161,19 @@ public class SoundSettings extends SettingsPreferenceFragment implements
         mSoundEffects = (CheckBoxPreference) findPreference(KEY_SOUND_EFFECTS);
         mSoundEffects.setPersistent(false);
         mSoundEffects.setChecked(Settings.System.getInt(resolver,
-                Settings.System.SOUND_EFFECTS_ENABLED, 0) != 0);
+                Settings.System.SOUND_EFFECTS_ENABLED, 1) != 0);
         mHapticFeedback = (CheckBoxPreference) findPreference(KEY_HAPTIC_FEEDBACK);
         mHapticFeedback.setPersistent(false);
         mHapticFeedback.setChecked(Settings.System.getInt(resolver,
-                Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) != 0);
+                Settings.System.HAPTIC_FEEDBACK_ENABLED, 1) != 0);
         mLockSounds = (CheckBoxPreference) findPreference(KEY_LOCK_SOUNDS);
         mLockSounds.setPersistent(false);
         mLockSounds.setChecked(Settings.System.getInt(resolver,
                 Settings.System.LOCKSCREEN_SOUNDS_ENABLED, 1) != 0);
 
+        mRingtonePreference = findPreference(KEY_RINGTONE);
+        mNotificationPreference = findPreference(KEY_NOTIFICATION_SOUND);
+
         if (!((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).hasVibrator()) {
             getPreferenceScreen().removePreference(mVibrate);
             getPreferenceScreen().removePreference(mHapticFeedback);
@@ -193,6 +224,19 @@ public class SoundSettings extends SettingsPreferenceFragment implements
                 }
             }
         }
+
+        mRingtoneLookupRunnable = new Runnable() {
+            public void run() {
+                if (mRingtonePreference != null) {
+                    updateRingtoneName(RingtoneManager.TYPE_RINGTONE, mRingtonePreference,
+                            MSG_UPDATE_RINGTONE_SUMMARY);
+                }
+                if (mNotificationPreference != null) {
+                    updateRingtoneName(RingtoneManager.TYPE_NOTIFICATION, mNotificationPreference,
+                            MSG_UPDATE_NOTIFICATION_SUMMARY);
+                }
+            }
+        };
     }
 
     @Override
@@ -200,6 +244,7 @@ public class SoundSettings extends SettingsPreferenceFragment implements
         super.onResume();
 
         updateState(true);
+        lookupRingtoneNames();
 
         IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
         getActivity().registerReceiver(mReceiver, filter);
@@ -306,13 +351,34 @@ public class SoundSettings extends SettingsPreferenceFragment implements
             mVibrate.setValue(phoneVibrateSetting);
         }
         mVibrate.setSummary(mVibrate.getEntry());
+    }
+
+    private void updateRingtoneName(int type, Preference preference, int msg) {
+        if (preference == null) return;
+        Context context = getActivity();
+        if (context == null) return;
+        Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type);
+        CharSequence summary = context.getString(com.android.internal.R.string.ringtone_unknown);
+        // Is it a silent ringtone?
+        if (ringtoneUri == null) {
+            summary = context.getString(com.android.internal.R.string.ringtone_silent);
+        } else {
+            // Fetch the ringtone title from the media provider
+            try {
+                Cursor cursor = context.getContentResolver().query(ringtoneUri,
+                        new String[] { MediaStore.Audio.Media.TITLE }, null, null, null);
+                if (cursor.moveToFirst()) {
+                    summary = cursor.getString(0);
+                }
+            } catch (SQLiteException sqle) {
+                // Unknown title for the ringtone
+            }
+        }
+        mHandler.sendMessage(mHandler.obtainMessage(msg, summary));
+    }
 
-        int silentModeStreams = Settings.System.getInt(getContentResolver(),
-                Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0);
-        boolean isAlarmInclSilentMode = (silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0;
-        mSilent.setSummary(isAlarmInclSilentMode ?
-                R.string.silent_mode_incl_alarm_summary :
-                R.string.silent_mode_summary);
+    private void lookupRingtoneNames() {
+        new Thread(mRingtoneLookupRunnable).start();
     }
 
     @Override