[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:
committed by
Shaowei Shen
parent
fe5a1dc8c4
commit
4a3b08d909
@@ -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
|
||||
|
||||
@@ -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>
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user