aboutsummaryrefslogtreecommitdiff
path: root/mediarouter
diff options
context:
space:
mode:
authorjiwon <shinjiwon@google.com>2018-08-27 21:52:37 +0900
committerjiwon <shinjiwon@google.com>2018-08-29 14:39:26 +0900
commit3612eff5659fd2f7ea435a933988435fe751068a (patch)
tree95a9cbd44206fbae48027f062c1a75d4a1dd51c3 /mediarouter
parentf7d7fab3ef2994ec25ad222abead0b20c94a2f41 (diff)
downloadsupport-3612eff5659fd2f7ea435a933988435fe751068a.tar.gz
Add animation to volume slider layout of MediaRouteCastDialog
This CL adds animation with easing to volume slider layout. Volume slider layout is expanded with standard easing and collapsed with decelerate easing. Bug: 113248552 Test: Manual test with support-v7-demos Change-Id: If0514141d26409769920df0e81e5a91544c4cbf0
Diffstat (limited to 'mediarouter')
-rw-r--r--mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteCastDialog.java61
-rw-r--r--mediarouter/src/main/res/layout/mr_cast_group_item.xml2
-rw-r--r--mediarouter/src/main/res/layout/mr_cast_group_volume_item.xml2
-rw-r--r--mediarouter/src/main/res/layout/mr_cast_route_item.xml4
-rw-r--r--mediarouter/src/main/res/layout/mr_dialog_header_item.xml2
-rw-r--r--mediarouter/src/main/res/layout/mr_picker_dialog.xml2
-rw-r--r--mediarouter/src/main/res/layout/mr_picker_route_item.xml2
-rw-r--r--mediarouter/src/main/res/values/dimens.xml7
8 files changed, 64 insertions, 18 deletions
diff --git a/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteCastDialog.java b/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteCastDialog.java
index 8c84ff3f0e6..5e983349e47 100644
--- a/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteCastDialog.java
+++ b/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteCastDialog.java
@@ -38,10 +38,16 @@ import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.text.TextUtils;
+import android.util.DisplayMetrics;
import android.util.Log;
+import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.AccelerateDecelerateInterpolator;
+import android.view.animation.Animation;
+import android.view.animation.Interpolator;
+import android.view.animation.Transformation;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageButton;
@@ -478,6 +484,12 @@ public class MediaRouteCastDialog extends AppCompatDialog {
}
}
+ static void setLayoutHeight(View view, int height) {
+ ViewGroup.LayoutParams lp = view.getLayoutParams();
+ lp.height = height;
+ view.setLayoutParams(lp);
+ }
+
private class VolumeChangeListener implements SeekBar.OnSeekBarChangeListener {
VolumeChangeListener() {
}
@@ -893,13 +905,19 @@ public class MediaRouteCastDialog extends AppCompatDialog {
final TextView mTextView;
final RelativeLayout mVolumeSliderLayout;
final CheckBox mCheckBox;
+
+ final int mExpandedLayoutHeight;
+ final int mCollapsedLayoutHeight;
+ private final int mLayoutAnimationDurationMs;
+ private Interpolator mAccelerateDecelerateInterpolator;
+
final Runnable mSelectRoute = new Runnable() {
@Override
public void run() {
mImageView.setVisibility(View.VISIBLE);
mProgressBar.setVisibility(View.INVISIBLE);
mCheckBox.setEnabled(true);
- mVolumeSliderLayout.setVisibility(View.VISIBLE);
+ animateLayoutHeight(mVolumeSliderLayout, mExpandedLayoutHeight);
}
};
final View.OnClickListener mCheckBoxClickListener = new View.OnClickListener() {
@@ -908,14 +926,31 @@ public class MediaRouteCastDialog extends AppCompatDialog {
if (((CheckBox) v).isChecked()) {
mImageView.setVisibility(View.INVISIBLE);
mProgressBar.setVisibility(View.VISIBLE);
+ mCheckBox.setEnabled(false);
mCheckBox.postDelayed(mSelectRoute, PROGRESS_BAR_DISPLAY_MS);
} else {
- mVolumeSliderLayout.setVisibility(View.GONE);
mCheckBox.removeCallbacks(mSelectRoute);
+ animateLayoutHeight(mVolumeSliderLayout, mCollapsedLayoutHeight);
}
}
};
+ void animateLayoutHeight(final View view, int targetHeight) {
+ final int startValue = view.getLayoutParams().height;
+ final int endValue = targetHeight;
+ Animation anim = new Animation() {
+ @Override
+ protected void applyTransformation(float interpolatedTime, Transformation t) {
+ int deltaHeight = (int) ((endValue - startValue) * interpolatedTime);
+ setLayoutHeight(view, startValue + deltaHeight);
+ }
+ };
+
+ anim.setDuration(mLayoutAnimationDurationMs);
+ anim.setInterpolator(mAccelerateDecelerateInterpolator);
+ view.startAnimation(anim);
+ }
+
RouteViewHolder(View itemView) {
super(itemView, (ImageButton) itemView.findViewById(R.id.mr_cast_mute_button),
(MediaRouteVolumeSlider) itemView.findViewById(R.id.mr_cast_volume_slider));
@@ -928,6 +963,16 @@ public class MediaRouteCastDialog extends AppCompatDialog {
Drawable checkBoxIcon = MediaRouterThemeHelper.getCheckBoxDrawableIcon(mContext);
MediaRouterThemeHelper.setIndeterminateProgressBarColor(mContext, mProgressBar);
mCheckBox.setButtonDrawable(checkBoxIcon);
+
+ Resources res = mContext.getResources();
+ DisplayMetrics metrics = res.getDisplayMetrics();
+ TypedValue value = new TypedValue();
+ res.getValue(R.dimen.mr_dynamic_dialog_row_height, value, true);
+ mExpandedLayoutHeight = (int) value.getDimension(metrics);
+ mCollapsedLayoutHeight = 0;
+ mLayoutAnimationDurationMs = res.getInteger(
+ R.integer.mr_cast_volume_slider_layout_animation_duration_ms);
+ mAccelerateDecelerateInterpolator = new AccelerateDecelerateInterpolator();
}
public void bindRouteViewHolder(Item item) {
@@ -937,16 +982,10 @@ public class MediaRouteCastDialog extends AppCompatDialog {
super.bindRouteVolumeSliderHolder(route);
mImageView.setImageDrawable(getIconDrawable(route));
mTextView.setText(route.getName());
- mVolumeSliderLayout.setVisibility(selected ? View.VISIBLE : View.GONE);
+ setLayoutHeight(mVolumeSliderLayout, selected
+ ? mExpandedLayoutHeight : mCollapsedLayoutHeight);
+ mCheckBox.setChecked(selected);
mCheckBox.setOnClickListener(mCheckBoxClickListener);
- // TODO(b/111624415): Make CheckBox works for both selected and unselected routes.
- if (selected) {
- mCheckBox.setChecked(true);
- mCheckBox.setEnabled(true);
- } else {
- mCheckBox.setChecked(false);
- mCheckBox.setEnabled(false);
- }
}
}
diff --git a/mediarouter/src/main/res/layout/mr_cast_group_item.xml b/mediarouter/src/main/res/layout/mr_cast_group_item.xml
index be9ab42d85c..404ac5c6085 100644
--- a/mediarouter/src/main/res/layout/mr_cast_group_item.xml
+++ b/mediarouter/src/main/res/layout/mr_cast_group_item.xml
@@ -17,7 +17,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="48dp"
+ android:layout_height="@dimen/mr_dynamic_dialog_row_height"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:gravity="center_vertical"
diff --git a/mediarouter/src/main/res/layout/mr_cast_group_volume_item.xml b/mediarouter/src/main/res/layout/mr_cast_group_volume_item.xml
index 6ab426eb4b5..eaba35ee092 100644
--- a/mediarouter/src/main/res/layout/mr_cast_group_volume_item.xml
+++ b/mediarouter/src/main/res/layout/mr_cast_group_volume_item.xml
@@ -30,7 +30,7 @@
android:textColor="#80868B" />
<RelativeLayout android:id="@+id/mr_cast_volume_layout"
android:layout_width="match_parent"
- android:layout_height="48dp">
+ android:layout_height="@dimen/mr_dynamic_dialog_row_height">
<ImageButton android:id="@+id/mr_cast_mute_button"
android:layout_width="24dp"
android:layout_height="24dp"
diff --git a/mediarouter/src/main/res/layout/mr_cast_route_item.xml b/mediarouter/src/main/res/layout/mr_cast_route_item.xml
index 50eae086fff..7623496c7f5 100644
--- a/mediarouter/src/main/res/layout/mr_cast_route_item.xml
+++ b/mediarouter/src/main/res/layout/mr_cast_route_item.xml
@@ -20,7 +20,7 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout android:layout_width="match_parent"
- android:layout_height="48dp"
+ android:layout_height="@dimen/mr_dynamic_dialog_row_height"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:gravity="center_vertical"
@@ -52,7 +52,7 @@
</LinearLayout>
<RelativeLayout android:id="@+id/mr_cast_volume_layout"
android:layout_width="match_parent"
- android:layout_height="48dp">
+ android:layout_height="@dimen/mr_dynamic_dialog_row_height">
<ImageButton android:id="@+id/mr_cast_mute_button"
android:layout_width="24dp"
android:layout_height="24dp"
diff --git a/mediarouter/src/main/res/layout/mr_dialog_header_item.xml b/mediarouter/src/main/res/layout/mr_dialog_header_item.xml
index 95c5e36eca7..bb245bd10bb 100644
--- a/mediarouter/src/main/res/layout/mr_dialog_header_item.xml
+++ b/mediarouter/src/main/res/layout/mr_dialog_header_item.xml
@@ -18,7 +18,7 @@
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mr_dialog_header_name"
android:layout_width="match_parent"
- android:layout_height="48dp"
+ android:layout_height="@dimen/mr_dynamic_dialog_row_height"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingTop="24dp"
diff --git a/mediarouter/src/main/res/layout/mr_picker_dialog.xml b/mediarouter/src/main/res/layout/mr_picker_dialog.xml
index f7ab377c951..d9b4e8c06ac 100644
--- a/mediarouter/src/main/res/layout/mr_picker_dialog.xml
+++ b/mediarouter/src/main/res/layout/mr_picker_dialog.xml
@@ -20,7 +20,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout android:layout_width="match_parent"
- android:layout_height="48dp"
+ android:layout_height="@dimen/mr_dynamic_dialog_row_height"
android:gravity="start"
android:paddingStart="24dp"
android:orientation="horizontal">
diff --git a/mediarouter/src/main/res/layout/mr_picker_route_item.xml b/mediarouter/src/main/res/layout/mr_picker_route_item.xml
index 5263d809bd1..4c8d16d6b60 100644
--- a/mediarouter/src/main/res/layout/mr_picker_route_item.xml
+++ b/mediarouter/src/main/res/layout/mr_picker_route_item.xml
@@ -17,7 +17,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="48dp"
+ android:layout_height="@dimen/mr_dynamic_dialog_row_height"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:gravity="center_vertical"
diff --git a/mediarouter/src/main/res/values/dimens.xml b/mediarouter/src/main/res/values/dimens.xml
index 5ae9d5eef20..729a9945436 100644
--- a/mediarouter/src/main/res/values/dimens.xml
+++ b/mediarouter/src/main/res/values/dimens.xml
@@ -46,6 +46,11 @@
<!-- Group list fade out animation duration. -->
<integer name="mr_controller_volume_group_list_fade_out_duration_ms">200</integer>
+ <!-- MediaRouteDevicePickerDialog/MediaRouteCastDialog's common dimensions. -->
+ <eat-comment />
+ <!-- Height of row. -->
+ <dimen name="mr_dynamic_dialog_row_height">48dp</dimen>
+
<!-- MediaRouteCastDialog's seekbar -->
<eat-comment />
<!-- Height of seekbar for route volume. -->
@@ -54,4 +59,6 @@
<dimen name="mr_cast_group_volume_seekbar_height">4dp</dimen>
<!-- Size of a seekbar thumb for both route volume and group volume. -->
<dimen name="mr_cast_seekbar_thumb_size">8dp</dimen>
+ <!-- Volume slider layout expand/collapse animation duration. -->
+ <integer name="mr_cast_volume_slider_layout_animation_duration_ms">400</integer>
</resources>