diff --git a/src/com/android/settings/notification/VolumeSeekBarPreference.java b/src/com/android/settings/notification/VolumeSeekBarPreference.java index 836962875b8..cd16940402e 100644 --- a/src/com/android/settings/notification/VolumeSeekBarPreference.java +++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java @@ -47,7 +47,6 @@ public class VolumeSeekBarPreference extends SeekBarPreference { private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance(); - protected SeekBar mSeekBar; private int mStream; private SeekBarVolumizer mVolumizer; @VisibleForTesting @@ -115,17 +114,20 @@ public class VolumeSeekBarPreference extends SeekBarPreference { @Override public void onDetached() { + destroyVolumizer(); + super.onDetached(); + } + + private void destroyVolumizer() { if (mVolumizer != null) { mVolumizer.stop(); mVolumizer = null; } - super.onDetached(); } @Override public void onBindViewHolder(PreferenceViewHolder view) { super.onBindViewHolder(view); - mSeekBar = (SeekBar) view.findViewById(com.android.internal.R.id.seekbar); mIconView = (ImageView) view.findViewById(com.android.internal.R.id.icon); mSuppressionTextView = (TextView) view.findViewById(R.id.suppression_text); mTitle = (TextView) view.findViewById(com.android.internal.R.id.title); @@ -133,15 +135,20 @@ public class VolumeSeekBarPreference extends SeekBarPreference { } protected void onBindViewHolder() { - boolean isEnabled = isEnabled(); - mSeekBar.setEnabled(isEnabled); - if (mVolumizer == null) { - createSeekBarVolumizer(); + if (isEnabled()) { + if (mVolumizer == null) { + createSeekBarVolumizer(); + } + // note that setSeekBar will update enabled state! + mVolumizer.setSeekBar(mSeekBar); + } else { + // destroy volumizer to avoid updateSeekBar reset enabled state + destroyVolumizer(); + mSeekBar.setEnabled(false); } - mVolumizer.setSeekBar(mSeekBar); updateIconView(); updateSuppressionText(); - if (isEnabled && mListener != null) { + if (mListener != null) { mListener.onUpdateMuteState(); } } diff --git a/src/com/android/settings/widget/SeekBarPreference.java b/src/com/android/settings/widget/SeekBarPreference.java index 78f2fa5fe2a..b671a64af4f 100644 --- a/src/com/android/settings/widget/SeekBarPreference.java +++ b/src/com/android/settings/widget/SeekBarPreference.java @@ -33,6 +33,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; +import androidx.annotation.VisibleForTesting; import androidx.core.content.res.TypedArrayUtils; import androidx.preference.PreferenceViewHolder; @@ -59,7 +60,8 @@ public class SeekBarPreference extends RestrictedPreference private int mHapticFeedbackMode = HAPTIC_FEEDBACK_MODE_NONE; private int mDefaultProgress = -1; - private SeekBar mSeekBar; + @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) + public SeekBar mSeekBar; private boolean mShouldBlink; private int mAccessibilityRangeInfoType = AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_INT; private CharSequence mOverrideSeekBarStateDescription;