[Output Switcher] UI polish and A11y bug fix

1. update radius to match rounded corners
2. update seekbar update to cover cases icon corner erea not update
3. ignore update action on icon and replace with icon area, which is
   bigger

Bug: 282119404
Bug: 282125409
Bug: 282192631
Bug: 282192967
Test: atest MediaOutputAdapterTest MediaOutputControllerTest MediaOutputBaseDialogTest MediaOutputDialogTest
Change-Id: I8b5e6463acaf406cdfc29e11fd40cb306af7a3ef
This commit is contained in:
shaoweishen
2023-05-15 14:43:23 +00:00
committed by Shaowei Shen
parent fe5a1dc8c4
commit 4a3b08d909
5 changed files with 41 additions and 33 deletions

View File

@@ -18,8 +18,8 @@
<item android:id="@android:id/background">
<shape>
<corners
android:bottomRightRadius="28dp"
android:topRightRadius="28dp"
android:bottomRightRadius="@dimen/media_output_dialog_active_background_radius"
android:topRightRadius="@dimen/media_output_dialog_active_background_radius"
/>
<solid android:color="@android:color/transparent" />
<size

View File

@@ -17,6 +17,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="28dp"/>
android:radius="@dimen/media_output_dialog_active_background_radius"/>
<solid android:color="@color/media_dialog_item_background" />
</shape>

View File

@@ -50,12 +50,16 @@
android:id="@+id/icon_area"
android:layout_width="64dp"
android:layout_height="64dp"
android:focusable="false"
android:importantForAccessibility="no"
android:background="@drawable/media_output_title_icon_area"
android:layout_gravity="center_vertical|start">
<ImageView
android:id="@+id/title_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:focusable="false"
android:importantForAccessibility="no"
android:animateLayoutChanges="true"
android:layout_gravity="center"/>
<TextView

View File

@@ -1319,7 +1319,7 @@
<dimen name="media_output_dialog_title_anim_y_delta">12.5dp</dimen>
<dimen name="media_output_dialog_app_tier_icon_size">20dp</dimen>
<dimen name="media_output_dialog_background_radius">16dp</dimen>
<dimen name="media_output_dialog_active_background_radius">28dp</dimen>
<dimen name="media_output_dialog_active_background_radius">30dp</dimen>
<dimen name="media_output_dialog_default_margin_end">16dp</dimen>
<dimen name="media_output_dialog_selectable_margin_end">80dp</dimen>
<dimen name="media_output_dialog_list_padding_top">8dp</dimen>

View File

@@ -186,7 +186,6 @@ public abstract class MediaOutputBaseAdapter extends
mEndTouchArea.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
mContainerLayout.setOnClickListener(null);
mContainerLayout.setContentDescription(null);
mTitleIcon.setOnClickListener(null);
mTitleText.setTextColor(mController.getColorItemContent());
mSubTitleText.setTextColor(mController.getColorItemContent());
mTwoLineTitleText.setTextColor(mController.getColorItemContent());
@@ -313,32 +312,35 @@ public abstract class MediaOutputBaseAdapter extends
}
mSeekBar.setMaxVolume(device.getMaxVolume());
final int currentVolume = device.getCurrentVolume();
if (mSeekBar.getVolume() != currentVolume) {
if (isCurrentSeekbarInvisible && !mIsInitVolumeFirstTime) {
updateTitleIcon(currentVolume == 0 ? R.drawable.media_output_icon_volume_off
: R.drawable.media_output_icon_volume,
mController.getColorItemContent());
} else {
if (!mVolumeAnimator.isStarted()) {
int percentage =
(int) ((double) currentVolume * VOLUME_PERCENTAGE_SCALE_SIZE
/ (double) mSeekBar.getMax());
if (percentage == 0) {
updateMutedVolumeIcon();
} else {
updateUnmutedVolumeIcon();
if (!mIsDragging) {
if (mSeekBar.getVolume() != currentVolume) {
if (isCurrentSeekbarInvisible && !mIsInitVolumeFirstTime) {
updateTitleIcon(currentVolume == 0 ? R.drawable.media_output_icon_volume_off
: R.drawable.media_output_icon_volume,
mController.getColorItemContent());
} else {
if (!mVolumeAnimator.isStarted()) {
int percentage =
(int) ((double) currentVolume * VOLUME_PERCENTAGE_SCALE_SIZE
/ (double) mSeekBar.getMax());
if (percentage == 0) {
updateMutedVolumeIcon();
} else {
updateUnmutedVolumeIcon();
}
mSeekBar.setVolume(currentVolume);
}
mSeekBar.setVolume(currentVolume);
}
} else if (currentVolume == 0) {
mSeekBar.resetVolume();
updateMutedVolumeIcon();
}
} else if (currentVolume == 0) {
mSeekBar.resetVolume();
updateMutedVolumeIcon();
}
if (mIsInitVolumeFirstTime) {
mIsInitVolumeFirstTime = false;
}
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
boolean mStartFromMute = false;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (device == null || !fromUser) {
@@ -352,11 +354,12 @@ public abstract class MediaOutputBaseAdapter extends
mVolumeValueText.setText(mContext.getResources().getString(
R.string.media_output_dialog_volume_percentage, percentage));
mVolumeValueText.setVisibility(View.VISIBLE);
if (mStartFromMute) {
updateUnmutedVolumeIcon();
mStartFromMute = false;
}
if (progressToVolume != deviceVolume) {
mController.adjustVolume(device, progressToVolume);
if (deviceVolume == 0) {
updateUnmutedVolumeIcon();
}
}
}
@@ -364,6 +367,9 @@ public abstract class MediaOutputBaseAdapter extends
public void onStartTrackingTouch(SeekBar seekBar) {
mTitleIcon.setVisibility(View.INVISIBLE);
mVolumeValueText.setVisibility(View.VISIBLE);
int currentVolume = MediaOutputSeekbar.scaleProgressToVolume(
seekBar.getProgress());
mStartFromMute = (currentVolume == 0);
mIsDragging = true;
}
@@ -371,10 +377,7 @@ public abstract class MediaOutputBaseAdapter extends
public void onStopTrackingTouch(SeekBar seekBar) {
int currentVolume = MediaOutputSeekbar.scaleProgressToVolume(
seekBar.getProgress());
int percentage =
(int) ((double) currentVolume * VOLUME_PERCENTAGE_SCALE_SIZE
/ (double) seekBar.getMax());
if (percentage == 0) {
if (currentVolume == 0) {
seekBar.setProgress(0);
updateMutedVolumeIcon();
} else {
@@ -411,7 +414,7 @@ public abstract class MediaOutputBaseAdapter extends
}
void updateIconAreaClickListener(View.OnClickListener listener) {
mTitleIcon.setOnClickListener(listener);
mIconAreaLayout.setOnClickListener(listener);
}
void initMutingExpectedDevice() {
@@ -501,14 +504,15 @@ public abstract class MediaOutputBaseAdapter extends
mSeekBar.setOnTouchListener((v, event) -> false);
updateIconAreaClickListener((v) -> {
if (device.getCurrentVolume() == 0) {
mSeekBar.setVolume(UNMUTE_DEFAULT_VOLUME);
mController.adjustVolume(device, UNMUTE_DEFAULT_VOLUME);
updateUnmutedVolumeIcon();
mTitleIcon.setOnTouchListener(((iconV, event) -> false));
mIconAreaLayout.setOnTouchListener(((iconV, event) -> false));
} else {
mSeekBar.resetVolume();
mController.adjustVolume(device, 0);
updateMutedVolumeIcon();
mTitleIcon.setOnTouchListener(((iconV, event) -> {
mIconAreaLayout.setOnTouchListener(((iconV, event) -> {
mSeekBar.dispatchTouchEvent(event);
return false;
}));