summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2014-11-28 15:39:11 -0500
committerJohn Spurlock <jspurlock@google.com>2014-12-01 11:58:25 -0500
commitc868f7035a6d05332b3d8afcde2ae27ad0413e79 (patch)
treef09a134bb57c64cc5dc56aa4bc4379d3fe356e84 /src/com
parent7da7c2220d3a30fb3a1b57ee95caa9aec860a132 (diff)
downloadpackages_apps_Settings-c868f7035a6d05332b3d8afcde2ae27ad0413e79.zip
packages_apps_Settings-c868f7035a6d05332b3d8afcde2ae27ad0413e79.tar.gz
packages_apps_Settings-c868f7035a6d05332b3d8afcde2ae27ad0413e79.tar.bz2
Settings: Improve inline volume sliders.
- Track framework changes to show mute states for non-ringer streams - Update vibrate icon in sync with other system components. Depends on: Ie2df52edb070055ef59c74039162a0e785d2fdbb Bug: 17899613 Change-Id: Ib38c86600693e0f36fe72deb231ea751e0486af7
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/settings/notification/NotificationSettings.java70
-rw-r--r--src/com/android/settings/notification/VolumeSeekBarPreference.java49
2 files changed, 81 insertions, 38 deletions
diff --git a/src/com/android/settings/notification/NotificationSettings.java b/src/com/android/settings/notification/NotificationSettings.java
index c9bc80d..b392484 100644
--- a/src/com/android/settings/notification/NotificationSettings.java
+++ b/src/com/android/settings/notification/NotificationSettings.java
@@ -88,6 +88,7 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
private PackageManager mPM;
private boolean mVoiceCapable;
private Vibrator mVibrator;
+ private AudioManager mAudioManager;
private VolumeSeekBarPreference mRingOrNotificationPreference;
private Preference mPhoneRingtonePreference;
@@ -99,7 +100,7 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
private boolean mSecure;
private int mLockscreenSelectedValue;
private ComponentName mSuppressor;
- private int mRingOrNotificationProgress;
+ private int mRingerMode = -1;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -109,6 +110,7 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
mVoiceCapable = Utils.isVoiceCapable(mContext);
mSecure = new LockPatternUtils(getActivity()).isSecure();
+ mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
mVibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
if (mVibrator != null && !mVibrator.hasVibrator()) {
mVibrator = null;
@@ -117,15 +119,19 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
addPreferencesFromResource(R.xml.notification_settings);
final PreferenceCategory sound = (PreferenceCategory) findPreference(KEY_SOUND);
- initVolumePreference(KEY_MEDIA_VOLUME, AudioManager.STREAM_MUSIC);
- initVolumePreference(KEY_ALARM_VOLUME, AudioManager.STREAM_ALARM);
+ initVolumePreference(KEY_MEDIA_VOLUME, AudioManager.STREAM_MUSIC,
+ com.android.internal.R.drawable.ic_audio_vol_mute);
+ initVolumePreference(KEY_ALARM_VOLUME, AudioManager.STREAM_ALARM,
+ com.android.internal.R.drawable.ic_audio_alarm_mute);
if (mVoiceCapable) {
mRingOrNotificationPreference =
- initVolumePreference(KEY_RING_VOLUME, AudioManager.STREAM_RING);
+ initVolumePreference(KEY_RING_VOLUME, AudioManager.STREAM_RING,
+ com.android.internal.R.drawable.ic_audio_ring_notif_mute);
sound.removePreference(sound.findPreference(KEY_NOTIFICATION_VOLUME));
} else {
mRingOrNotificationPreference =
- initVolumePreference(KEY_NOTIFICATION_VOLUME, AudioManager.STREAM_NOTIFICATION);
+ initVolumePreference(KEY_NOTIFICATION_VOLUME, AudioManager.STREAM_NOTIFICATION,
+ com.android.internal.R.drawable.ic_audio_ring_notif_mute);
sound.removePreference(sound.findPreference(KEY_RING_VOLUME));
}
initRingtones(sound);
@@ -138,6 +144,7 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
mNotificationAccess = findPreference(KEY_NOTIFICATION_ACCESS);
refreshNotificationListeners();
+ updateRingerMode();
updateEffectsSuppressor();
}
@@ -148,6 +155,7 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
lookupRingtoneNames();
mSettingsObserver.register(true);
mReceiver.register(true);
+ updateRingOrNotificationPreference();
updateEffectsSuppressor();
for (VolumeSeekBarPreference volumePref : mVolumePrefs) {
volumePref.onActivityResume();
@@ -163,22 +171,29 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
}
// === Volumes ===
- private VolumeSeekBarPreference initVolumePreference(String key, int stream) {
+
+ private VolumeSeekBarPreference initVolumePreference(String key, int stream, int muteIcon) {
final VolumeSeekBarPreference volumePref = (VolumeSeekBarPreference) findPreference(key);
volumePref.setCallback(mVolumeCallback);
volumePref.setStream(stream);
mVolumePrefs.add(volumePref);
+ volumePref.setMuteIcon(muteIcon);
return volumePref;
}
- private void updateRingOrNotificationIcon() {
+ private void updateRingOrNotificationPreference() {
mRingOrNotificationPreference.showIcon(mSuppressor != null
? com.android.internal.R.drawable.ic_audio_ring_notif_mute
- : mRingOrNotificationProgress > 0
- ? com.android.internal.R.drawable.ic_audio_ring_notif
- : (mVibrator == null
- ? com.android.internal.R.drawable.ic_audio_ring_notif_mute
- : com.android.internal.R.drawable.ic_audio_ring_notif_vibrate));
+ : mRingerMode == AudioManager.RINGER_MODE_VIBRATE
+ ? com.android.internal.R.drawable.ic_audio_ring_notif_vibrate
+ : com.android.internal.R.drawable.ic_audio_ring_notif);
+ }
+
+ private void updateRingerMode() {
+ final int ringerMode = mAudioManager.getRingerModeInternal();
+ if (mRingerMode == ringerMode) return;
+ mRingerMode = ringerMode;
+ updateRingOrNotificationPreference();
}
private void updateEffectsSuppressor() {
@@ -191,7 +206,7 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
getSuppressorCaption(suppressor)) : null;
mRingOrNotificationPreference.setSuppressionText(text);
}
- updateRingOrNotificationIcon();
+ updateRingOrNotificationPreference();
}
private String getSuppressorCaption(ComponentName suppressor) {
@@ -230,10 +245,7 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
@Override
public void onStreamValueChanged(int stream, int progress) {
- if (stream == AudioManager.STREAM_RING) {
- mHandler.removeMessages(H.UPDATE_RINGER_ICON);
- mHandler.obtainMessage(H.UPDATE_RINGER_ICON, progress, 0).sendToTarget();
- }
+ // noop
}
public void stopSample() {
@@ -514,8 +526,8 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
private static final int UPDATE_PHONE_RINGTONE = 1;
private static final int UPDATE_NOTIFICATION_RINGTONE = 2;
private static final int STOP_SAMPLE = 3;
- private static final int UPDATE_RINGER_ICON = 4;
- private static final int UPDATE_EFFECTS_SUPPRESSOR = 5;
+ private static final int UPDATE_EFFECTS_SUPPRESSOR = 4;
+ private static final int UPDATE_RINGER_MODE = 5;
private H() {
super(Looper.getMainLooper());
@@ -533,13 +545,12 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
case STOP_SAMPLE:
mVolumeCallback.stopSample();
break;
- case UPDATE_RINGER_ICON:
- mRingOrNotificationProgress = msg.arg1;
- updateRingOrNotificationIcon();
- break;
case UPDATE_EFFECTS_SUPPRESSOR:
updateEffectsSuppressor();
break;
+ case UPDATE_RINGER_MODE:
+ updateRingerMode();
+ break;
}
}
}
@@ -550,8 +561,10 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
public void register(boolean register) {
if (mRegistered == register) return;
if (register) {
- mContext.registerReceiver(this,
- new IntentFilter(NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED));
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED);
+ filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION);
+ mContext.registerReceiver(this, filter);
} else {
mContext.unregisterReceiver(this);
}
@@ -560,7 +573,12 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
@Override
public void onReceive(Context context, Intent intent) {
- mHandler.sendEmptyMessage(H.UPDATE_EFFECTS_SUPPRESSOR);
+ final String action = intent.getAction();
+ if (NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED.equals(action)) {
+ mHandler.sendEmptyMessage(H.UPDATE_EFFECTS_SUPPRESSOR);
+ } else if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) {
+ mHandler.sendEmptyMessage(H.UPDATE_RINGER_MODE);
+ }
}
}
diff --git a/src/com/android/settings/notification/VolumeSeekBarPreference.java b/src/com/android/settings/notification/VolumeSeekBarPreference.java
index 6050aec..9a892b8 100644
--- a/src/com/android/settings/notification/VolumeSeekBarPreference.java
+++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java
@@ -47,6 +47,9 @@ public class VolumeSeekBarPreference extends SeekBarPreference
private ImageView mIconView;
private TextView mSuppressionTextView;
private String mSuppressionText;
+ private boolean mMuted;
+ private int mIconResId;
+ private int mMuteIconResId;
public VolumeSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
@@ -99,22 +102,27 @@ public class VolumeSeekBarPreference extends SeekBarPreference
mCallback.onSampleStarting(sbv);
}
}
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
+ if (mCallback != null) {
+ mCallback.onStreamValueChanged(mStream, progress);
+ }
+ }
+ @Override
+ public void onMuted(boolean muted) {
+ if (mMuted == muted) return;
+ mMuted = muted;
+ updateIconView();
+ }
};
final Uri sampleUri = mStream == AudioManager.STREAM_MUSIC ? getMediaVolumeUri() : null;
if (mVolumizer == null) {
- mVolumizer = new SeekBarVolumizer(getContext(), mStream, sampleUri, sbvc) {
- // we need to piggyback on SBV's SeekBar listener to update our icon
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress,
- boolean fromTouch) {
- super.onProgressChanged(seekBar, progress, fromTouch);
- mCallback.onStreamValueChanged(mStream, progress);
- }
- };
+ mVolumizer = new SeekBarVolumizer(getContext(), mStream, sampleUri, sbvc);
}
mVolumizer.start();
mVolumizer.setSeekBar(mSeekBar);
mIconView = (ImageView) view.findViewById(com.android.internal.R.id.icon);
+ updateIconView();
mSuppressionTextView = (TextView) view.findViewById(R.id.suppression_text);
mCallback.onStreamValueChanged(mStream, mSeekBar.getProgress());
updateSuppressionText();
@@ -133,12 +141,29 @@ public class VolumeSeekBarPreference extends SeekBarPreference
mCallback.onStreamValueChanged(mStream, progress);
}
+ private void updateIconView() {
+ if (mIconView == null) return;
+ if (mIconResId != 0) {
+ mIconView.setImageResource(mIconResId);
+ } else if (mMuteIconResId != 0 && mMuted) {
+ mIconView.setImageResource(mMuteIconResId);
+ } else {
+ mIconView.setImageDrawable(getIcon());
+ }
+ }
+
public void showIcon(int resId) {
// Instead of using setIcon, which will trigger listeners, this just decorates the
// preference temporarily with a new icon.
- if (mIconView != null) {
- mIconView.setImageResource(resId);
- }
+ if (mIconResId == resId) return;
+ mIconResId = resId;
+ updateIconView();
+ }
+
+ public void setMuteIcon(int resId) {
+ if (mMuteIconResId == resId) return;
+ mMuteIconResId = resId;
+ updateIconView();
}
private Uri getMediaVolumeUri() {