Loading core/java/android/preference/SeekBarVolumizer.java +34 −10 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.preference; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading @@ -31,6 +32,7 @@ import android.os.HandlerThread; import android.os.Message; import android.preference.VolumePreference.VolumeStore; import android.provider.Settings; import android.provider.Settings.Global; import android.provider.Settings.System; import android.util.Log; import android.widget.SeekBar; Loading @@ -46,7 +48,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba public interface Callback { void onSampleStarting(SeekBarVolumizer sbv); void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch); void onMuted(boolean muted); void onMuted(boolean muted, boolean zenMuted); } private final Context mContext; Loading @@ -54,6 +56,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba private final Callback mCallback; private final Uri mDefaultUri; private final AudioManager mAudioManager; private final NotificationManager mNotificationManager; private final int mStreamType; private final int mMaxStreamVolume; private boolean mAffectedByRingerMode; Loading @@ -63,12 +66,14 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba private Handler mHandler; private Observer mVolumeObserver; private int mOriginalStreamVolume; private int mLastAudibleStreamVolume; private Ringtone mRingtone; private int mLastProgress = -1; private boolean mMuted; private SeekBar mSeekBar; private int mVolumeBeforeMute = -1; private int mRingerMode; private int mZenMode; private static final int MSG_SET_STREAM_VOLUME = 0; private static final int MSG_START_SAMPLE = 1; Loading @@ -78,19 +83,22 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba public SeekBarVolumizer(Context context, int streamType, Uri defaultUri, Callback callback) { mContext = context; mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); mAudioManager = context.getSystemService(AudioManager.class); mNotificationManager = context.getSystemService(NotificationManager.class); mStreamType = streamType; mAffectedByRingerMode = mAudioManager.isStreamAffectedByRingerMode(mStreamType); mNotificationOrRing = isNotificationOrRing(mStreamType); if (mNotificationOrRing) { mRingerMode = mAudioManager.getRingerModeInternal(); } mZenMode = mNotificationManager.getZenMode(); mMaxStreamVolume = mAudioManager.getStreamMaxVolume(mStreamType); mCallback = callback; mOriginalStreamVolume = mAudioManager.getStreamVolume(mStreamType); mLastAudibleStreamVolume = mAudioManager.getLastAudibleStreamVolume(mStreamType); mMuted = mAudioManager.isStreamMute(mStreamType); if (mCallback != null) { mCallback.onMuted(mMuted); mCallback.onMuted(mMuted, isZenMuted()); } if (defaultUri == null) { if (mStreamType == AudioManager.STREAM_RING) { Loading Loading @@ -119,8 +127,17 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba mSeekBar.setOnSeekBarChangeListener(this); } private boolean isZenMuted() { return mNotificationOrRing && mZenMode == Global.ZEN_MODE_ALARMS || mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS; } protected void updateSeekBar() { if (mNotificationOrRing && mRingerMode == AudioManager.RINGER_MODE_VIBRATE) { final boolean zenMuted = isZenMuted(); mSeekBar.setEnabled(!zenMuted); if (zenMuted) { mSeekBar.setProgress(mLastAudibleStreamVolume); } else if (mNotificationOrRing && mRingerMode == AudioManager.RINGER_MODE_VIBRATE) { mSeekBar.setProgress(0); } else if (mMuted) { mSeekBar.setProgress(0); Loading Loading @@ -316,11 +333,12 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba if (msg.what == UPDATE_SLIDER) { if (mSeekBar != null) { mLastProgress = msg.arg1; final boolean muted = msg.arg2 != 0; mLastAudibleStreamVolume = Math.abs(msg.arg2); final boolean muted = msg.arg2 < 0; if (muted != mMuted) { mMuted = muted; if (mCallback != null) { mCallback.onMuted(mMuted); mCallback.onMuted(mMuted, isZenMuted()); } } updateSeekBar(); Loading @@ -328,16 +346,18 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba } } public void postUpdateSlider(int volume, boolean mute) { obtainMessage(UPDATE_SLIDER, volume, mute ? 1 : 0).sendToTarget(); public void postUpdateSlider(int volume, int lastAudibleVolume, boolean mute) { final int arg2 = lastAudibleVolume * (mute ? -1 : 1); obtainMessage(UPDATE_SLIDER, volume, arg2).sendToTarget(); } } private void updateSlider() { if (mSeekBar != null && mAudioManager != null) { final int volume = mAudioManager.getStreamVolume(mStreamType); final int lastAudibleVolume = mAudioManager.getLastAudibleStreamVolume(mStreamType); final boolean mute = mAudioManager.isStreamMute(mStreamType); mUiHandler.postUpdateSlider(volume, mute); mUiHandler.postUpdateSlider(volume, lastAudibleVolume, mute); } } Loading @@ -362,6 +382,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba if (listening) { final IntentFilter filter = new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION); filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION); filter.addAction(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED); mContext.registerReceiver(this, filter); } else { mContext.unregisterReceiver(this); Loading @@ -379,7 +400,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba if (mSeekBar != null && streamMatch && streamValue != -1) { final boolean muted = mAudioManager.isStreamMute(mStreamType) || streamValue == 0; mUiHandler.postUpdateSlider(streamValue, muted); mUiHandler.postUpdateSlider(streamValue, mLastAudibleStreamVolume, muted); } } else if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) { if (mNotificationOrRing) { Loading @@ -388,6 +409,9 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba if (mAffectedByRingerMode) { updateSlider(); } } else if (NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED.equals(action)) { mZenMode = mNotificationManager.getZenMode(); updateSlider(); } } } Loading core/java/android/preference/VolumePreference.java +1 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ public class VolumePreference extends SeekBarDialogPreference implements } @Override public void onMuted(boolean muted) { public void onMuted(boolean muted, boolean zenMuted) { // noop } Loading Loading
core/java/android/preference/SeekBarVolumizer.java +34 −10 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.preference; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading @@ -31,6 +32,7 @@ import android.os.HandlerThread; import android.os.Message; import android.preference.VolumePreference.VolumeStore; import android.provider.Settings; import android.provider.Settings.Global; import android.provider.Settings.System; import android.util.Log; import android.widget.SeekBar; Loading @@ -46,7 +48,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba public interface Callback { void onSampleStarting(SeekBarVolumizer sbv); void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch); void onMuted(boolean muted); void onMuted(boolean muted, boolean zenMuted); } private final Context mContext; Loading @@ -54,6 +56,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba private final Callback mCallback; private final Uri mDefaultUri; private final AudioManager mAudioManager; private final NotificationManager mNotificationManager; private final int mStreamType; private final int mMaxStreamVolume; private boolean mAffectedByRingerMode; Loading @@ -63,12 +66,14 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba private Handler mHandler; private Observer mVolumeObserver; private int mOriginalStreamVolume; private int mLastAudibleStreamVolume; private Ringtone mRingtone; private int mLastProgress = -1; private boolean mMuted; private SeekBar mSeekBar; private int mVolumeBeforeMute = -1; private int mRingerMode; private int mZenMode; private static final int MSG_SET_STREAM_VOLUME = 0; private static final int MSG_START_SAMPLE = 1; Loading @@ -78,19 +83,22 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba public SeekBarVolumizer(Context context, int streamType, Uri defaultUri, Callback callback) { mContext = context; mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); mAudioManager = context.getSystemService(AudioManager.class); mNotificationManager = context.getSystemService(NotificationManager.class); mStreamType = streamType; mAffectedByRingerMode = mAudioManager.isStreamAffectedByRingerMode(mStreamType); mNotificationOrRing = isNotificationOrRing(mStreamType); if (mNotificationOrRing) { mRingerMode = mAudioManager.getRingerModeInternal(); } mZenMode = mNotificationManager.getZenMode(); mMaxStreamVolume = mAudioManager.getStreamMaxVolume(mStreamType); mCallback = callback; mOriginalStreamVolume = mAudioManager.getStreamVolume(mStreamType); mLastAudibleStreamVolume = mAudioManager.getLastAudibleStreamVolume(mStreamType); mMuted = mAudioManager.isStreamMute(mStreamType); if (mCallback != null) { mCallback.onMuted(mMuted); mCallback.onMuted(mMuted, isZenMuted()); } if (defaultUri == null) { if (mStreamType == AudioManager.STREAM_RING) { Loading Loading @@ -119,8 +127,17 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba mSeekBar.setOnSeekBarChangeListener(this); } private boolean isZenMuted() { return mNotificationOrRing && mZenMode == Global.ZEN_MODE_ALARMS || mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS; } protected void updateSeekBar() { if (mNotificationOrRing && mRingerMode == AudioManager.RINGER_MODE_VIBRATE) { final boolean zenMuted = isZenMuted(); mSeekBar.setEnabled(!zenMuted); if (zenMuted) { mSeekBar.setProgress(mLastAudibleStreamVolume); } else if (mNotificationOrRing && mRingerMode == AudioManager.RINGER_MODE_VIBRATE) { mSeekBar.setProgress(0); } else if (mMuted) { mSeekBar.setProgress(0); Loading Loading @@ -316,11 +333,12 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba if (msg.what == UPDATE_SLIDER) { if (mSeekBar != null) { mLastProgress = msg.arg1; final boolean muted = msg.arg2 != 0; mLastAudibleStreamVolume = Math.abs(msg.arg2); final boolean muted = msg.arg2 < 0; if (muted != mMuted) { mMuted = muted; if (mCallback != null) { mCallback.onMuted(mMuted); mCallback.onMuted(mMuted, isZenMuted()); } } updateSeekBar(); Loading @@ -328,16 +346,18 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba } } public void postUpdateSlider(int volume, boolean mute) { obtainMessage(UPDATE_SLIDER, volume, mute ? 1 : 0).sendToTarget(); public void postUpdateSlider(int volume, int lastAudibleVolume, boolean mute) { final int arg2 = lastAudibleVolume * (mute ? -1 : 1); obtainMessage(UPDATE_SLIDER, volume, arg2).sendToTarget(); } } private void updateSlider() { if (mSeekBar != null && mAudioManager != null) { final int volume = mAudioManager.getStreamVolume(mStreamType); final int lastAudibleVolume = mAudioManager.getLastAudibleStreamVolume(mStreamType); final boolean mute = mAudioManager.isStreamMute(mStreamType); mUiHandler.postUpdateSlider(volume, mute); mUiHandler.postUpdateSlider(volume, lastAudibleVolume, mute); } } Loading @@ -362,6 +382,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba if (listening) { final IntentFilter filter = new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION); filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION); filter.addAction(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED); mContext.registerReceiver(this, filter); } else { mContext.unregisterReceiver(this); Loading @@ -379,7 +400,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba if (mSeekBar != null && streamMatch && streamValue != -1) { final boolean muted = mAudioManager.isStreamMute(mStreamType) || streamValue == 0; mUiHandler.postUpdateSlider(streamValue, muted); mUiHandler.postUpdateSlider(streamValue, mLastAudibleStreamVolume, muted); } } else if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) { if (mNotificationOrRing) { Loading @@ -388,6 +409,9 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba if (mAffectedByRingerMode) { updateSlider(); } } else if (NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED.equals(action)) { mZenMode = mNotificationManager.getZenMode(); updateSlider(); } } } Loading
core/java/android/preference/VolumePreference.java +1 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ public class VolumePreference extends SeekBarDialogPreference implements } @Override public void onMuted(boolean muted) { public void onMuted(boolean muted, boolean zenMuted) { // noop } Loading