[Output Switcher] Disable icon clicklistener for volume fixed

when device's volume is disabled, we should also disable click for
volume icon.
Also add safety check for getItemViewType.

Test: atest MediaOutputAdapterTest MediaOutputControllerTest MediaOutputBaseDialogTest MediaOutputDialogTest
Bug: 268063427
Change-Id: Ib19c84d624829620b206a3374c32ea1d5f5124cf
This commit is contained in:
shaoweishen
2023-02-07 11:27:43 +00:00
parent 49079f3b9d
commit 64b1a3cb71
2 changed files with 17 additions and 9 deletions

View File

@@ -146,6 +146,11 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
@Override
public int getItemViewType(int position) {
if (mController.isAdvancedLayoutSupported()
&& position >= mController.getMediaItemList().size()) {
Log.d(TAG, "Incorrect position for item type: " + position);
return MediaItem.MediaItemType.TYPE_GROUP_DIVIDER;
}
return mController.isAdvancedLayoutSupported()
? mController.getMediaItemList().get(position).getMediaItemType()
: super.getItemViewType(position);

View File

@@ -333,7 +333,7 @@ public abstract class MediaOutputBaseAdapter extends
if (!mController.isVolumeControlEnabled(device)) {
disableSeekBar();
} else {
enableSeekBar();
enableSeekBar(device);
}
mSeekBar.setMaxVolume(device.getMaxVolume());
final int currentVolume = device.getCurrentVolume();
@@ -369,13 +369,6 @@ public abstract class MediaOutputBaseAdapter extends
if (mIsInitVolumeFirstTime) {
mIsInitVolumeFirstTime = false;
}
if (mController.isAdvancedLayoutSupported()) {
updateIconAreaClickListener((v) -> {
mSeekBar.resetVolume();
mController.adjustVolume(device, 0);
updateMutedVolumeIcon();
});
}
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
@@ -556,11 +549,21 @@ public abstract class MediaOutputBaseAdapter extends
protected void disableSeekBar() {
mSeekBar.setEnabled(false);
mSeekBar.setOnTouchListener((v, event) -> true);
if (mController.isAdvancedLayoutSupported()) {
updateIconAreaClickListener(null);
}
}
private void enableSeekBar() {
private void enableSeekBar(MediaDevice device) {
mSeekBar.setEnabled(true);
mSeekBar.setOnTouchListener((v, event) -> false);
if (mController.isAdvancedLayoutSupported()) {
updateIconAreaClickListener((v) -> {
mSeekBar.resetVolume();
mController.adjustVolume(device, 0);
updateMutedVolumeIcon();
});
}
}
protected void setUpDeviceIcon(MediaDevice device) {