Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b971c1c2 authored by Angela Wang's avatar Angela Wang
Browse files

Fix onValueChange() not correctly called issue

The slider value can be changed via swipe gesture when TalkBack is on.
The previous implmentation only consider the change when dragging on the
slider.

Flag: EXEMPT bugfix
Test: manually check the behavior when Talkback is on
Bug: 385086133
Change-Id: If84d1b1424b6a35bd9318df8ae52db9aace57d3d
parent 3fe892f0
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -45,16 +45,31 @@ public class AmbientVolumeSlider extends LinearLayout {
            new Slider.OnSliderTouchListener() {
                @Override
                public void onStartTrackingTouch(@NonNull Slider slider) {
                    mTrackingTouch = true;
                }

                @Override
                public void onStopTrackingTouch(@NonNull Slider slider) {
                    mTrackingTouch = false;
                    final int value = Math.round(slider.getValue());
                    for (OnChangeListener listener : mChangeListeners) {
                        listener.onValueChange(AmbientVolumeSlider.this, value);
                    }
                }
            };
    private final Slider.OnChangeListener mSliderChangeListener = new Slider.OnChangeListener() {
        @Override
        public void onValueChange(@NonNull Slider slider, float value, boolean fromUser) {
            if (fromUser && !mTrackingTouch) {
                final int roundedValue = Math.round(value);
                for (OnChangeListener listener : mChangeListeners) {
                    listener.onValueChange(AmbientVolumeSlider.this, roundedValue);
                }
            }
        }
    };
    private boolean mTrackingTouch = false;

    public AmbientVolumeSlider(@Nullable Context context) {
        this(context, /* attrs= */ null);
    }
@@ -76,6 +91,7 @@ public class AmbientVolumeSlider extends LinearLayout {
        mTitle = requireViewById(R.id.ambient_volume_slider_title);
        mSlider = requireViewById(R.id.ambient_volume_slider);
        mSlider.addOnSliderTouchListener(mSliderTouchListener);
        mSlider.addOnChangeListener(mSliderChangeListener);
    }

    /**