diff options
| author | John Spurlock <jspurlock@google.com> | 2015-06-11 14:08:44 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-11 14:08:48 +0000 |
| commit | c110887c2ad9de1de5154ac67740c6a0860fa016 (patch) | |
| tree | 114057bbe282c8098f82bd032d11b71dac75c2c8 | |
| parent | 2dd827ae06e969baf9f4a34d89030e5f24cbfebd (diff) | |
| parent | 96d4a9ec394975818b073b537ccb6220ef0949ba (diff) | |
| download | frameworks_base-c110887c2ad9de1de5154ac67740c6a0860fa016.zip frameworks_base-c110887c2ad9de1de5154ac67740c6a0860fa016.tar.gz frameworks_base-c110887c2ad9de1de5154ac67740c6a0860fa016.tar.bz2 | |
Merge "Volume: Disable seekbar prefs when zen muted." into mnc-dev
| -rw-r--r-- | core/java/android/preference/SeekBarVolumizer.java | 44 | ||||
| -rw-r--r-- | core/java/android/preference/VolumePreference.java | 2 |
2 files changed, 35 insertions, 11 deletions
diff --git a/core/java/android/preference/SeekBarVolumizer.java b/core/java/android/preference/SeekBarVolumizer.java index 4bd085f..979c828 100644 --- a/core/java/android/preference/SeekBarVolumizer.java +++ b/core/java/android/preference/SeekBarVolumizer.java @@ -16,6 +16,7 @@ package android.preference; +import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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) { @@ -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); @@ -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(); @@ -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); } } @@ -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); @@ -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) { @@ -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(); } } } diff --git a/core/java/android/preference/VolumePreference.java b/core/java/android/preference/VolumePreference.java index 573499a..8a66c24 100644 --- a/core/java/android/preference/VolumePreference.java +++ b/core/java/android/preference/VolumePreference.java @@ -161,7 +161,7 @@ public class VolumePreference extends SeekBarDialogPreference implements } @Override - public void onMuted(boolean muted) { + public void onMuted(boolean muted, boolean zenMuted) { // noop } |
