From 7ac19ff4063ea9e0f617ced2cbaef2942a1246ad Mon Sep 17 00:00:00 2001 From: olly Date: Tue, 15 Dec 2020 17:42:24 +0000 Subject: [PATCH] StyledPlayerView: Fix calculations to account for margins Also make some related naming improvements. PiperOrigin-RevId: 347631916 --- .../StyledPlayerControlViewLayoutManager.java | 48 ++++++++++++++----- .../layout/exo_styled_player_control_view.xml | 9 ++-- library/ui/src/main/res/values/dimens.xml | 3 +- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlViewLayoutManager.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlViewLayoutManager.java index 75139bf39d..976b59ef60 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlViewLayoutManager.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlViewLayoutManager.java @@ -24,6 +24,7 @@ import android.content.res.Resources; import android.view.View; import android.view.View.OnLayoutChangeListener; import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.MarginLayoutParams; import android.view.animation.LinearInterpolator; import androidx.annotation.Nullable; @@ -477,9 +478,9 @@ import java.util.List; int oldRight, int oldBottom) { - boolean shouldBeMinimalMode = shouldBeMinimalMode(); - if (isMinimalMode != shouldBeMinimalMode) { - isMinimalMode = shouldBeMinimalMode; + boolean useMinimalMode = useMinimalMode(); + if (isMinimalMode != useMinimalMode) { + isMinimalMode = useMinimalMode; v.post(this::updateLayoutForSizeChange); } boolean widthChanged = (right - left) != (oldRight - oldLeft); @@ -564,7 +565,7 @@ import java.util.List; } } - private boolean shouldBeMinimalMode() { + private boolean useMinimalMode() { int width = styledPlayerControlView.getWidth() - styledPlayerControlView.getPaddingLeft() @@ -573,11 +574,14 @@ import java.util.List; styledPlayerControlView.getHeight() - styledPlayerControlView.getPaddingBottom() - styledPlayerControlView.getPaddingTop(); - int defaultModeWidth = - Math.max(getWidth(centerControls), getWidth(timeView) + getWidth(overflowShowButton)); - int defaultModeHeight = getHeight(centerControls) + getHeight(timeBar) + getHeight(bottomBar); + int defaultModeMinimumWidth = + Math.max( + getWidthWithMargins(centerControls), + getWidthWithMargins(timeView) + getWidthWithMargins(overflowShowButton)); + int defaultModeMinimumHeight = + getHeightWithMargins(centerControls) + 2 * getHeightWithMargins(bottomBar); - return (width <= defaultModeWidth || height <= defaultModeHeight); + return width <= defaultModeMinimumWidth || height <= defaultModeMinimumHeight; } private void updateLayoutForSizeChange() { @@ -644,7 +648,7 @@ import java.util.List; styledPlayerControlView.getWidth() - styledPlayerControlView.getPaddingLeft() - styledPlayerControlView.getPaddingRight(); - int bottomBarWidth = getWidth(timeView); + int bottomBarWidth = getWidthWithMargins(timeView); for (int i = 0; i < basicControls.getChildCount(); ++i) { bottomBarWidth += basicControls.getChildAt(i).getWidth(); } @@ -707,11 +711,29 @@ import java.util.List; } } - private static int getWidth(@Nullable View v) { - return (v != null ? v.getWidth() : 0); + private static int getWidthWithMargins(@Nullable View v) { + if (v == null) { + return 0; + } + int width = v.getWidth(); + LayoutParams layoutParams = v.getLayoutParams(); + if (layoutParams instanceof MarginLayoutParams) { + MarginLayoutParams marginLayoutParams = (MarginLayoutParams) layoutParams; + width += marginLayoutParams.leftMargin + marginLayoutParams.rightMargin; + } + return width; } - private static int getHeight(@Nullable View v) { - return (v != null ? v.getHeight() : 0); + private static int getHeightWithMargins(@Nullable View v) { + if (v == null) { + return 0; + } + int height = v.getHeight(); + LayoutParams layoutParams = v.getLayoutParams(); + if (layoutParams instanceof MarginLayoutParams) { + MarginLayoutParams marginLayoutParams = (MarginLayoutParams) layoutParams; + height += marginLayoutParams.topMargin + marginLayoutParams.bottomMargin; + } + return height; } } diff --git a/library/ui/src/main/res/layout/exo_styled_player_control_view.xml b/library/ui/src/main/res/layout/exo_styled_player_control_view.xml index 244323379d..9b30043588 100644 --- a/library/ui/src/main/res/layout/exo_styled_player_control_view.xml +++ b/library/ui/src/main/res/layout/exo_styled_player_control_view.xml @@ -24,6 +24,7 @@ @@ -31,10 +32,10 @@ diff --git a/library/ui/src/main/res/values/dimens.xml b/library/ui/src/main/res/values/dimens.xml index da151715df..1dd966605a 100644 --- a/library/ui/src/main/res/values/dimens.xml +++ b/library/ui/src/main/res/values/dimens.xml @@ -42,7 +42,8 @@ 48dp 52dp 60dp - 10dp + 10dp + 10dp 4dp 32dp