[Catalyst] Fix restriction issue on sound settings

After ag/31443354, sliders on sound settings are not disabled when
"no_adjust_volume" restriction is set. The root cause is that
`SeekBarVolumizer.setSeekBar` updates the SeekBar enabled state.

Bug: 386162594
Flag: EXEMPT bugfix
Test: atest&manual
Change-Id: I5d37c9958a693a26717a8e2d9a62ec5ef225e28f
This commit is contained in:
Jacky Wang
2025-02-11 10:59:58 +08:00
parent 30af231cc4
commit e9afa7c7c6
2 changed files with 19 additions and 10 deletions

View File

@@ -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();
}
}

View File

@@ -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;