[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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user