Merge "[Output Switcher] UI polish and A11y bug fix" into udc-dev

This commit is contained in:
Shaowei Shen
2023-05-17 16:24:28 +00:00
committed by Android (Google) Code Review
5 changed files with 41 additions and 33 deletions

View File

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

View File

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

View File

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

View File

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