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

Commit 60d6189e authored by Alex Shabalin's avatar Alex Shabalin
Browse files

Fix the click listener for the mute/unumte button.

- Previously, the mute button (icon area) click listener had to be added
after the container click listener. This order was changed in
 ag/31519152, and, as a result broke the mute button behavior. The
 current CL makes allows to assign click listeners in any order without
 the risk of behavior change.
- Additionally, fixed the mute/unmute click analytics event logging
 broken by ag/31194237.

Flag: Exempt bugfix
Bug: b/396361630
Fix: b/396361630
Test: atest SystemUiRoboTests:MediaOutputAdapterLegacyTest,
 on a physical device, accessibility with Talkback.
Change-Id: Ic773665120524a745d1eccba31210982aef2a89d
parent f60b0713
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -368,6 +368,37 @@ public class MediaOutputAdapterLegacyTest extends SysuiTestCase {
        assertThat(mViewHolder.mSeekBar.getVolume()).isEqualTo(TEST_CURRENT_VOLUME);
    }

    @Test
    public void onBindViewHolder_initSeekbarWithUnmutedVolume_displaysMuteIcon() {
        when(mMediaSwitchingController.isVolumeControlEnabled(mMediaDevice1)).thenReturn(true);
        when(mMediaDevice1.getMaxVolume()).thenReturn(TEST_MAX_VOLUME);
        when(mMediaDevice1.getCurrentVolume()).thenReturn(TEST_CURRENT_VOLUME);
        mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);

        assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mIconAreaLayout.getVisibility()).isEqualTo(View.VISIBLE);

        mViewHolder.mIconAreaLayout.performClick();
        verify(mMediaSwitchingController).adjustVolume(mMediaDevice1, 0);
        verify(mMediaSwitchingController).logInteractionMuteDevice(mMediaDevice1);
    }

    @Test
    public void onBindViewHolder_initSeekbarWithMutedVolume_displaysUnmuteIcon() {
        when(mMediaSwitchingController.isVolumeControlEnabled(mMediaDevice1)).thenReturn(true);
        when(mMediaDevice1.getMaxVolume()).thenReturn(TEST_MAX_VOLUME);
        when(mMediaDevice1.getCurrentVolume()).thenReturn(0); // muted.
        mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);

        assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mIconAreaLayout.getVisibility()).isEqualTo(View.VISIBLE);

        mViewHolder.mIconAreaLayout.performClick();
        // Default unmute volume is 2.
        verify(mMediaSwitchingController).adjustVolume(mMediaDevice1, 2);
        verify(mMediaSwitchingController).logInteractionUnmuteDevice(mMediaDevice1);
    }

    @Test
    public void onBindViewHolder_dragSeekbar_setsVolume() {
        mOnSeekBarChangeListenerCaptor = ArgumentCaptor.forClass(
+14 −1
Original line number Diff line number Diff line
@@ -185,6 +185,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
            mSubTitleText.setTextColor(mController.getColorItemContent());
            mVolumeValueText.setTextColor(mController.getColorItemContent());
            mIconAreaLayout.setBackground(null);
            updateIconAreaClickListener(null);
            mSeekBar.setProgressTintList(
                    ColorStateList.valueOf(mController.getColorSeekbarProgress()));
            enableFocusPropertyForView(mContainerLayout);
@@ -392,6 +393,11 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {

                @Override
                public void onMute() {
                    mController.logInteractionMuteDevice(device);
                }

                @Override
                public void onUnmute() {
                    mController.logInteractionUnmuteDevice(device);
                }
            };
@@ -430,6 +436,9 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {

                @Override
                public void onMute() {}

                @Override
                public void onUnmute() {}
            };

            if (!mController.isVolumeControlEnabledForSession()) {
@@ -622,11 +631,13 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {

        private void updateFullItemClickListener(@Nullable View.OnClickListener listener) {
            mContainerLayout.setOnClickListener(listener);
            updateIconAreaClickListener(listener);
        }

        void updateIconAreaClickListener(@Nullable View.OnClickListener listener) {
            mIconAreaLayout.setOnClickListener(listener);
            if (listener == null) {
                mIconAreaLayout.setClickable(false); // clickable is not removed automatically.
            }
        }

        private void initAnimator() {
@@ -677,6 +688,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
            mSeekBar.setOnTouchListener((v, event) -> false);
            updateIconAreaClickListener((v) -> {
                if (volumeControl.getVolume() == 0) {
                    volumeControl.onUnmute();
                    mSeekBar.setVolume(UNMUTE_DEFAULT_VOLUME);
                    volumeControl.setVolume(UNMUTE_DEFAULT_VOLUME);
                    updateUnmutedVolumeIcon(null);
@@ -713,6 +725,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
            int getVolume();
            void setVolume(int volume);
            void onMute();
            void onUnmute();
        }

        private abstract class MediaSeekBarChangedListener