Loading core/java/android/preference/VolumePreference.java +106 −12 Original line number Diff line number Diff line Loading @@ -16,15 +16,17 @@ package android.preference; import android.app.Dialog; import android.content.Context; import android.content.res.TypedArray; import android.database.ContentObserver; import android.media.AudioManager; import android.media.Ringtone; import android.media.RingtoneManager; import android.media.AudioManager; import android.net.Uri; import android.os.Handler; import android.preference.PreferenceManager; import android.os.Parcel; import android.os.Parcelable; import android.provider.Settings; import android.provider.Settings.System; import android.util.AttributeSet; Loading Loading @@ -115,9 +117,15 @@ public class VolumePreference extends SeekBarPreference implements getPreferenceManager().unregisterOnActivityStopListener(this); if (mSeekBarVolumizer != null) { Dialog dialog = getDialog(); if (dialog != null && dialog.isShowing()) { // Stopped while dialog was showing, revert changes mSeekBarVolumizer.revertVolume(); } mSeekBarVolumizer.stop(); mSeekBarVolumizer = null; } } protected void onSampleStarting(SeekBarVolumizer volumizer) { Loading @@ -126,6 +134,77 @@ public class VolumePreference extends SeekBarPreference implements } } @Override protected Parcelable onSaveInstanceState() { final Parcelable superState = super.onSaveInstanceState(); if (isPersistent()) { // No need to save instance state since it's persistent return superState; } final SavedState myState = new SavedState(superState); if (mSeekBarVolumizer != null) { mSeekBarVolumizer.onSaveInstanceState(myState.getVolumeStore()); } return myState; } @Override protected void onRestoreInstanceState(Parcelable state) { if (state == null || !state.getClass().equals(SavedState.class)) { // Didn't save state for us in onSaveInstanceState super.onRestoreInstanceState(state); return; } SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); if (mSeekBarVolumizer != null) { mSeekBarVolumizer.onRestoreInstanceState(myState.getVolumeStore()); } } public static class VolumeStore { public int volume = -1; public int originalVolume = -1; } private static class SavedState extends BaseSavedState { VolumeStore mVolumeStore = new VolumeStore(); public SavedState(Parcel source) { super(source); mVolumeStore.volume = source.readInt(); mVolumeStore.originalVolume = source.readInt(); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(mVolumeStore.volume); dest.writeInt(mVolumeStore.originalVolume); } VolumeStore getVolumeStore() { return mVolumeStore; } public SavedState(Parcelable superState) { super(superState); } public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); } public SavedState[] newArray(int size) { return new SavedState[size]; } }; } /** * Turns a {@link SeekBar} into a volume control. */ Loading @@ -139,7 +218,7 @@ public class VolumePreference extends SeekBarPreference implements private int mOriginalStreamVolume; private Ringtone mRingtone; private int mLastProgress; private int mLastProgress = -1; private SeekBar mSeekBar; private ContentObserver mVolumeObserver = new ContentObserver(mHandler) { Loading Loading @@ -207,7 +286,7 @@ public class VolumePreference extends SeekBarPreference implements postSetVolume(progress); } private void postSetVolume(int progress) { void postSetVolume(int progress) { // Do the volume changing separately to give responsive UI mLastProgress = progress; mHandler.removeCallbacks(this); Loading Loading @@ -249,5 +328,20 @@ public class VolumePreference extends SeekBarPreference implements } postSetVolume(mSeekBar.getProgress()); } public void onSaveInstanceState(VolumeStore volumeStore) { if (mLastProgress >= 0) { volumeStore.volume = mLastProgress; volumeStore.originalVolume = mOriginalStreamVolume; } } public void onRestoreInstanceState(VolumeStore volumeStore) { if (volumeStore.volume != -1) { mOriginalStreamVolume = volumeStore.originalVolume; mLastProgress = volumeStore.volume; postSetVolume(mLastProgress); } } } } Loading
core/java/android/preference/VolumePreference.java +106 −12 Original line number Diff line number Diff line Loading @@ -16,15 +16,17 @@ package android.preference; import android.app.Dialog; import android.content.Context; import android.content.res.TypedArray; import android.database.ContentObserver; import android.media.AudioManager; import android.media.Ringtone; import android.media.RingtoneManager; import android.media.AudioManager; import android.net.Uri; import android.os.Handler; import android.preference.PreferenceManager; import android.os.Parcel; import android.os.Parcelable; import android.provider.Settings; import android.provider.Settings.System; import android.util.AttributeSet; Loading Loading @@ -115,9 +117,15 @@ public class VolumePreference extends SeekBarPreference implements getPreferenceManager().unregisterOnActivityStopListener(this); if (mSeekBarVolumizer != null) { Dialog dialog = getDialog(); if (dialog != null && dialog.isShowing()) { // Stopped while dialog was showing, revert changes mSeekBarVolumizer.revertVolume(); } mSeekBarVolumizer.stop(); mSeekBarVolumizer = null; } } protected void onSampleStarting(SeekBarVolumizer volumizer) { Loading @@ -126,6 +134,77 @@ public class VolumePreference extends SeekBarPreference implements } } @Override protected Parcelable onSaveInstanceState() { final Parcelable superState = super.onSaveInstanceState(); if (isPersistent()) { // No need to save instance state since it's persistent return superState; } final SavedState myState = new SavedState(superState); if (mSeekBarVolumizer != null) { mSeekBarVolumizer.onSaveInstanceState(myState.getVolumeStore()); } return myState; } @Override protected void onRestoreInstanceState(Parcelable state) { if (state == null || !state.getClass().equals(SavedState.class)) { // Didn't save state for us in onSaveInstanceState super.onRestoreInstanceState(state); return; } SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); if (mSeekBarVolumizer != null) { mSeekBarVolumizer.onRestoreInstanceState(myState.getVolumeStore()); } } public static class VolumeStore { public int volume = -1; public int originalVolume = -1; } private static class SavedState extends BaseSavedState { VolumeStore mVolumeStore = new VolumeStore(); public SavedState(Parcel source) { super(source); mVolumeStore.volume = source.readInt(); mVolumeStore.originalVolume = source.readInt(); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(mVolumeStore.volume); dest.writeInt(mVolumeStore.originalVolume); } VolumeStore getVolumeStore() { return mVolumeStore; } public SavedState(Parcelable superState) { super(superState); } public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); } public SavedState[] newArray(int size) { return new SavedState[size]; } }; } /** * Turns a {@link SeekBar} into a volume control. */ Loading @@ -139,7 +218,7 @@ public class VolumePreference extends SeekBarPreference implements private int mOriginalStreamVolume; private Ringtone mRingtone; private int mLastProgress; private int mLastProgress = -1; private SeekBar mSeekBar; private ContentObserver mVolumeObserver = new ContentObserver(mHandler) { Loading Loading @@ -207,7 +286,7 @@ public class VolumePreference extends SeekBarPreference implements postSetVolume(progress); } private void postSetVolume(int progress) { void postSetVolume(int progress) { // Do the volume changing separately to give responsive UI mLastProgress = progress; mHandler.removeCallbacks(this); Loading Loading @@ -249,5 +328,20 @@ public class VolumePreference extends SeekBarPreference implements } postSetVolume(mSeekBar.getProgress()); } public void onSaveInstanceState(VolumeStore volumeStore) { if (mLastProgress >= 0) { volumeStore.volume = mLastProgress; volumeStore.originalVolume = mOriginalStreamVolume; } } public void onRestoreInstanceState(VolumeStore volumeStore) { if (volumeStore.volume != -1) { mOriginalStreamVolume = volumeStore.originalVolume; mLastProgress = volumeStore.volume; postSetVolume(mLastProgress); } } } }