summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/preference/VolumePreference.java54
1 files changed, 33 insertions, 21 deletions
diff --git a/core/java/android/preference/VolumePreference.java b/core/java/android/preference/VolumePreference.java
index 66c9ba136b81..50ca71e826b9 100644
--- a/core/java/android/preference/VolumePreference.java
+++ b/core/java/android/preference/VolumePreference.java
@@ -54,7 +54,7 @@ public class VolumePreference extends SeekBarPreference implements
TypedArray a = context.obtainStyledAttributes(attrs,
com.android.internal.R.styleable.VolumePreference, 0, 0);
mStreamType = a.getInt(android.R.styleable.VolumePreference_streamType, 0);
- a.recycle();
+ a.recycle();
}
public void setStreamType(int streamType) {
@@ -249,15 +249,19 @@ public class VolumePreference extends SeekBarPreference implements
};
public SeekBarVolumizer(Context context, SeekBar seekBar, int streamType) {
+ this(context, seekBar, streamType, null);
+ }
+
+ public SeekBarVolumizer(Context context, SeekBar seekBar, int streamType, Uri defaultUri) {
mContext = context;
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
mStreamType = streamType;
mSeekBar = seekBar;
-
- initSeekBar(seekBar);
+
+ initSeekBar(seekBar, defaultUri);
}
- private void initSeekBar(SeekBar seekBar) {
+ private void initSeekBar(SeekBar seekBar, Uri defaultUri) {
seekBar.setMax(mAudioManager.getStreamMaxVolume(mStreamType));
mOriginalStreamVolume = mAudioManager.getStreamVolume(mStreamType);
seekBar.setProgress(mOriginalStreamVolume);
@@ -266,22 +270,24 @@ public class VolumePreference extends SeekBarPreference implements
mContext.getContentResolver().registerContentObserver(
System.getUriFor(System.VOLUME_SETTINGS[mStreamType]),
false, mVolumeObserver);
-
- Uri defaultUri = null;
- if (mStreamType == AudioManager.STREAM_RING) {
- defaultUri = Settings.System.DEFAULT_RINGTONE_URI;
- } else if (mStreamType == AudioManager.STREAM_NOTIFICATION) {
- defaultUri = Settings.System.DEFAULT_NOTIFICATION_URI;
- } else {
- defaultUri = Settings.System.DEFAULT_ALARM_ALERT_URI;
+
+ if (defaultUri == null) {
+ if (mStreamType == AudioManager.STREAM_RING) {
+ defaultUri = Settings.System.DEFAULT_RINGTONE_URI;
+ } else if (mStreamType == AudioManager.STREAM_NOTIFICATION) {
+ defaultUri = Settings.System.DEFAULT_NOTIFICATION_URI;
+ } else {
+ defaultUri = Settings.System.DEFAULT_ALARM_ALERT_URI;
+ }
}
mRingtone = RingtoneManager.getRingtone(mContext, defaultUri);
+
if (mRingtone != null) {
mRingtone.setStreamType(mStreamType);
}
}
-
+
public void stop() {
stopSample();
mContext.getContentResolver().unregisterContentObserver(mVolumeObserver);
@@ -312,18 +318,24 @@ public class VolumePreference extends SeekBarPreference implements
}
public void onStopTrackingTouch(SeekBar seekBar) {
- if (mRingtone != null && !mRingtone.isPlaying()) {
- sample();
+ if (!isSamplePlaying()) {
+ startSample();
}
}
public void run() {
mAudioManager.setStreamVolume(mStreamType, mLastProgress, 0);
}
-
- private void sample() {
+
+ public boolean isSamplePlaying() {
+ return mRingtone != null && mRingtone.isPlaying();
+ }
+
+ public void startSample() {
onSampleStarting(this);
- mRingtone.play();
+ if (mRingtone != null) {
+ mRingtone.play();
+ }
}
public void stopSample() {
@@ -338,8 +350,8 @@ public class VolumePreference extends SeekBarPreference implements
public void changeVolumeBy(int amount) {
mSeekBar.incrementProgressBy(amount);
- if (mRingtone != null && !mRingtone.isPlaying()) {
- sample();
+ if (!isSamplePlaying()) {
+ startSample();
}
postSetVolume(mSeekBar.getProgress());
mVolumeBeforeMute = -1;
@@ -348,7 +360,7 @@ public class VolumePreference extends SeekBarPreference implements
public void muteVolume() {
if (mVolumeBeforeMute != -1) {
mSeekBar.setProgress(mVolumeBeforeMute);
- sample();
+ startSample();
postSetVolume(mVolumeBeforeMute);
mVolumeBeforeMute = -1;
} else {