diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java index 4e08050a6f65f..dc75538c5d290 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java @@ -45,6 +45,7 @@ import android.widget.SeekBar; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import androidx.recyclerview.widget.RecyclerView; import com.android.settingslib.Utils; @@ -142,11 +143,12 @@ public abstract class MediaOutputBaseAdapter extends final TextView mVolumeValueText; final ImageView mTitleIcon; final ProgressBar mProgressBar; - final MediaOutputSeekbar mSeekBar; final LinearLayout mTwoLineLayout; final ImageView mStatusIcon; final CheckBox mCheckBox; final ViewGroup mEndTouchArea; + @VisibleForTesting + MediaOutputSeekbar mSeekBar; private String mDeviceId; private ValueAnimator mCornerAnimator; private ValueAnimator mVolumeAnimator; @@ -390,6 +392,7 @@ public abstract class MediaOutputBaseAdapter extends mTitleIcon.setVisibility(View.VISIBLE); mVolumeValueText.setVisibility(View.GONE); } + mController.logInteractionAdjustVolume(device); mIsDragging = false; } }); diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index 1587e6248595c..5f5c686e36e25 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -141,7 +141,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, @VisibleForTesting LocalMediaManager mLocalMediaManager; @VisibleForTesting - private MediaOutputMetricLogger mMetricLogger; + MediaOutputMetricLogger mMetricLogger; private int mCurrentState; private int mColorItemContent; @@ -870,12 +870,15 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, } void adjustVolume(MediaDevice device, int volume) { - mMetricLogger.logInteractionAdjustVolume(device); ThreadUtils.postOnBackgroundThread(() -> { device.requestSetVolume(volume); }); } + void logInteractionAdjustVolume(MediaDevice device) { + mMetricLogger.logInteractionAdjustVolume(device); + } + String getPackageName() { return mPackageName; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java index 77daa3f1c2072..5564774d2b70e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java @@ -31,6 +31,7 @@ import android.graphics.drawable.Icon; import android.testing.AndroidTestingRunner; import android.view.View; import android.widget.LinearLayout; +import android.widget.SeekBar; import androidx.core.graphics.drawable.IconCompat; import androidx.test.filters.SmallTest; @@ -45,6 +46,8 @@ import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import java.util.ArrayList; import java.util.List; @@ -72,6 +75,8 @@ public class MediaOutputAdapterTest extends SysuiTestCase { private IconCompat mIconCompat = mock(IconCompat.class); private View mDialogLaunchView = mock(View.class); + @Captor + private ArgumentCaptor mOnSeekBarChangeListenerCaptor; private MediaOutputAdapter mMediaOutputAdapter; private MediaOutputAdapter.MediaDeviceViewHolder mViewHolder; private List mMediaDevices = new ArrayList<>(); @@ -351,6 +356,24 @@ public class MediaOutputAdapterTest extends SysuiTestCase { assertThat(mViewHolder.mSeekBar.getVolume()).isEqualTo(TEST_CURRENT_VOLUME); } + @Test + public void onBindViewHolder_dragSeekbar_setsVolume() { + mOnSeekBarChangeListenerCaptor = ArgumentCaptor.forClass( + SeekBar.OnSeekBarChangeListener.class); + MediaOutputSeekbar mSpySeekbar = spy(mViewHolder.mSeekBar); + mViewHolder.mSeekBar = mSpySeekbar; + when(mMediaDevice1.getMaxVolume()).thenReturn(TEST_MAX_VOLUME); + when(mMediaDevice1.getCurrentVolume()).thenReturn(TEST_MAX_VOLUME); + mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0); + + verify(mViewHolder.mSeekBar).setOnSeekBarChangeListener( + mOnSeekBarChangeListenerCaptor.capture()); + + mOnSeekBarChangeListenerCaptor.getValue().onStopTrackingTouch(mViewHolder.mSeekBar); + assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE); + verify(mMediaOutputController).logInteractionAdjustVolume(mMediaDevice1); + } + @Test public void onBindViewHolder_bindSelectableDevice_verifyView() { List selectableDevices = new ArrayList<>(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java index 117751c470047..7c36e4680a721 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java @@ -93,6 +93,11 @@ public class MediaOutputControllerTest extends SysuiTestCase { private static final String TEST_SONG = "test_song"; private static final String TEST_SESSION_ID = "test_session_id"; private static final String TEST_SESSION_NAME = "test_session_name"; + private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class); + private final ActivityLaunchAnimator.Controller mActivityLaunchAnimatorController = mock( + ActivityLaunchAnimator.Controller.class); + private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock( + NearbyMediaDevicesManager.class); // Mock private MediaController mMediaController = mock(MediaController.class); private MediaSessionManager mMediaSessionManager = mock(MediaSessionManager.class); @@ -111,12 +116,7 @@ public class MediaOutputControllerTest extends SysuiTestCase { private KeyguardManager mKeyguardManager = mock(KeyguardManager.class); private PowerExemptionManager mPowerExemptionManager = mock(PowerExemptionManager.class); private CommonNotifCollection mNotifCollection = mock(CommonNotifCollection.class); - private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class); private FeatureFlags mFlags = mock(FeatureFlags.class); - private final ActivityLaunchAnimator.Controller mActivityLaunchAnimatorController = mock( - ActivityLaunchAnimator.Controller.class); - private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock( - NearbyMediaDevicesManager.class); private View mDialogLaunchView = mock(View.class); private MediaOutputController.Callback mCallback = mock(MediaOutputController.Callback.class); @@ -521,6 +521,17 @@ public class MediaOutputControllerTest extends SysuiTestCase { verify(mLocalMediaManager).adjustSessionVolume(testVolume); } + @Test + public void logInteractionAdjustVolume_triggersFromMetricLogger() { + MediaOutputMetricLogger spyMediaOutputMetricLogger = spy( + mMediaOutputController.mMetricLogger); + mMediaOutputController.mMetricLogger = spyMediaOutputMetricLogger; + + mMediaOutputController.logInteractionAdjustVolume(mMediaDevice1); + + verify(spyMediaOutputMetricLogger).logInteractionAdjustVolume(mMediaDevice1); + } + @Test public void getSessionVolumeMax_triggersFromLocalMediaManager() { mMediaOutputController.getSessionVolumeMax();