am c110887c: Merge "Volume: Disable seekbar prefs when zen muted." into mnc-dev
* commit 'c110887c2ad9de1de5154ac67740c6a0860fa016': Volume: Disable seekbar prefs when zen muted.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ public class VolumePreference extends SeekBarDialogPreference implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMuted(boolean muted) {
|
||||
public void onMuted(boolean muted, boolean zenMuted) {
|
||||
// noop
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user