Merge "[Output Switcher] Fix volume adjustment metric logging" into tm-qpr-dev am: 34539f9279

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20962423

Change-Id: I4989fc0e9ed9cc69f6afdaff2b9efa36f0478283
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Shaowei Shen
2023-01-30 07:38:41 +00:00
committed by Automerger Merge Worker
4 changed files with 48 additions and 8 deletions

View File

@@ -45,6 +45,7 @@ import android.widget.SeekBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
@@ -142,11 +143,12 @@ public abstract class MediaOutputBaseAdapter extends
final TextView mVolumeValueText; final TextView mVolumeValueText;
final ImageView mTitleIcon; final ImageView mTitleIcon;
final ProgressBar mProgressBar; final ProgressBar mProgressBar;
final MediaOutputSeekbar mSeekBar;
final LinearLayout mTwoLineLayout; final LinearLayout mTwoLineLayout;
final ImageView mStatusIcon; final ImageView mStatusIcon;
final CheckBox mCheckBox; final CheckBox mCheckBox;
final ViewGroup mEndTouchArea; final ViewGroup mEndTouchArea;
@VisibleForTesting
MediaOutputSeekbar mSeekBar;
private String mDeviceId; private String mDeviceId;
private ValueAnimator mCornerAnimator; private ValueAnimator mCornerAnimator;
private ValueAnimator mVolumeAnimator; private ValueAnimator mVolumeAnimator;
@@ -390,6 +392,7 @@ public abstract class MediaOutputBaseAdapter extends
mTitleIcon.setVisibility(View.VISIBLE); mTitleIcon.setVisibility(View.VISIBLE);
mVolumeValueText.setVisibility(View.GONE); mVolumeValueText.setVisibility(View.GONE);
} }
mController.logInteractionAdjustVolume(device);
mIsDragging = false; mIsDragging = false;
} }
}); });

View File

@@ -141,7 +141,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
@VisibleForTesting @VisibleForTesting
LocalMediaManager mLocalMediaManager; LocalMediaManager mLocalMediaManager;
@VisibleForTesting @VisibleForTesting
private MediaOutputMetricLogger mMetricLogger; MediaOutputMetricLogger mMetricLogger;
private int mCurrentState; private int mCurrentState;
private int mColorItemContent; private int mColorItemContent;
@@ -870,12 +870,15 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
} }
void adjustVolume(MediaDevice device, int volume) { void adjustVolume(MediaDevice device, int volume) {
mMetricLogger.logInteractionAdjustVolume(device);
ThreadUtils.postOnBackgroundThread(() -> { ThreadUtils.postOnBackgroundThread(() -> {
device.requestSetVolume(volume); device.requestSetVolume(volume);
}); });
} }
void logInteractionAdjustVolume(MediaDevice device) {
mMetricLogger.logInteractionAdjustVolume(device);
}
String getPackageName() { String getPackageName() {
return mPackageName; return mPackageName;
} }

View File

@@ -29,6 +29,7 @@ import android.graphics.drawable.Icon;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.SeekBar;
import androidx.core.graphics.drawable.IconCompat; import androidx.core.graphics.drawable.IconCompat;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
@@ -43,6 +44,8 @@ import com.google.common.collect.ImmutableList;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -70,6 +73,8 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
private IconCompat mIconCompat = mock(IconCompat.class); private IconCompat mIconCompat = mock(IconCompat.class);
private View mDialogLaunchView = mock(View.class); private View mDialogLaunchView = mock(View.class);
@Captor
private ArgumentCaptor<SeekBar.OnSeekBarChangeListener> mOnSeekBarChangeListenerCaptor;
private MediaOutputAdapter mMediaOutputAdapter; private MediaOutputAdapter mMediaOutputAdapter;
private MediaOutputAdapter.MediaDeviceViewHolder mViewHolder; private MediaOutputAdapter.MediaDeviceViewHolder mViewHolder;
private List<MediaDevice> mMediaDevices = new ArrayList<>(); private List<MediaDevice> mMediaDevices = new ArrayList<>();
@@ -349,6 +354,24 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
assertThat(mViewHolder.mSeekBar.getVolume()).isEqualTo(TEST_CURRENT_VOLUME); 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 @Test
public void onBindViewHolder_bindSelectableDevice_verifyView() { public void onBindViewHolder_bindSelectableDevice_verifyView() {
List<MediaDevice> selectableDevices = new ArrayList<>(); List<MediaDevice> selectableDevices = new ArrayList<>();

View File

@@ -93,6 +93,11 @@ public class MediaOutputControllerTest extends SysuiTestCase {
private static final String TEST_SONG = "test_song"; private static final String TEST_SONG = "test_song";
private static final String TEST_SESSION_ID = "test_session_id"; private static final String TEST_SESSION_ID = "test_session_id";
private static final String TEST_SESSION_NAME = "test_session_name"; 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 // Mock
private MediaController mMediaController = mock(MediaController.class); private MediaController mMediaController = mock(MediaController.class);
private MediaSessionManager mMediaSessionManager = mock(MediaSessionManager.class); private MediaSessionManager mMediaSessionManager = mock(MediaSessionManager.class);
@@ -111,12 +116,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
private KeyguardManager mKeyguardManager = mock(KeyguardManager.class); private KeyguardManager mKeyguardManager = mock(KeyguardManager.class);
private PowerExemptionManager mPowerExemptionManager = mock(PowerExemptionManager.class); private PowerExemptionManager mPowerExemptionManager = mock(PowerExemptionManager.class);
private CommonNotifCollection mNotifCollection = mock(CommonNotifCollection.class); private CommonNotifCollection mNotifCollection = mock(CommonNotifCollection.class);
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
private FeatureFlags mFlags = mock(FeatureFlags.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 View mDialogLaunchView = mock(View.class);
private MediaOutputController.Callback mCallback = mock(MediaOutputController.Callback.class); private MediaOutputController.Callback mCallback = mock(MediaOutputController.Callback.class);
@@ -521,6 +521,17 @@ public class MediaOutputControllerTest extends SysuiTestCase {
verify(mLocalMediaManager).adjustSessionVolume(testVolume); 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 @Test
public void getSessionVolumeMax_triggersFromLocalMediaManager() { public void getSessionVolumeMax_triggersFromLocalMediaManager() {
mMediaOutputController.getSessionVolumeMax(); mMediaOutputController.getSessionVolumeMax();