From bf0d11b4e7970c8a600de5fa670034edffa81df2 Mon Sep 17 00:00:00 2001 From: marianomartin Date: Fri, 15 Jan 2021 12:27:35 -0500 Subject: [PATCH] [TimePicker] Changed clock face size to be dynamic PiperOrigin-RevId: 352024053 --- .../material/timepicker/ClockFaceView.java | 29 +++++++++++++++++++ .../res/layout-land/material_timepicker.xml | 4 +-- .../res/layout/material_timepicker.xml | 4 +-- .../res/values-h320dp-port/dimens.xml | 1 - .../res/values-h550dp-port/dimens.xml | 1 - .../dimens.xml | 8 +++-- .../res/values-w320dp-land/dimens.xml | 1 - .../res/values-w550dp-land/dimens.xml | 20 ------------- .../res/values-w600dp-land/dimens.xml | 1 - .../material/timepicker/res/values/dimens.xml | 5 +++- 10 files changed, 42 insertions(+), 32 deletions(-) rename lib/java/com/google/android/material/timepicker/res/{values-h600dp-port => values-land}/dimens.xml (76%) delete mode 100644 lib/java/com/google/android/material/timepicker/res/values-w550dp-land/dimens.xml diff --git a/lib/java/com/google/android/material/timepicker/ClockFaceView.java b/lib/java/com/google/android/material/timepicker/ClockFaceView.java index 3cc513d39..11c9f7d17 100644 --- a/lib/java/com/google/android/material/timepicker/ClockFaceView.java +++ b/lib/java/com/google/android/material/timepicker/ClockFaceView.java @@ -38,6 +38,7 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionIn import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat; import androidx.appcompat.content.res.AppCompatResources; import android.util.AttributeSet; +import android.util.DisplayMetrics; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; @@ -74,6 +75,9 @@ class ClockFaceView extends RadialViewGroup implements OnRotateListener { private final int[] gradientColors; private final float[] gradientPositions = new float[] {0f, 0.9f, 1f}; private final int clockHandPadding; + private final int minimumHeight; + private final int minimumWidth; + private final int clockSize; private String[] values; @@ -167,6 +171,10 @@ class ClockFaceView extends RadialViewGroup implements OnRotateListener { String[] initialValues = new String[INITIAL_CAPACITY]; Arrays.fill(initialValues, VALUE_PLACEHOLDER); setValues(initialValues, /* contentDescription= */ 0); + + minimumHeight = res.getDimensionPixelSize(R.dimen.material_time_picker_minimum_screen_height); + minimumWidth = res.getDimensionPixelSize(R.dimen.material_time_picker_minimum_screen_width); + clockSize = res.getDimensionPixelSize(R.dimen.material_clock_size); } /** @@ -278,4 +286,25 @@ class ClockFaceView extends RadialViewGroup implements OnRotateListener { findIntersectingTextView(); } } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + Resources r = getResources(); + DisplayMetrics displayMetrics = r.getDisplayMetrics(); + + float height = displayMetrics.heightPixels; + float width = displayMetrics.widthPixels; + + // If the screen is smaller than our defined values. Scale the clock face + // proportionally to the smaller size + int size = (int) (clockSize / max3(minimumHeight / height, minimumWidth / width, 1f)); + + int spec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY); + setMeasuredDimension(size, size); + super.onMeasure(spec, spec); + } + + private static float max3(float a, float b, float c) { + return max(max(a, b), c); + } } diff --git a/lib/java/com/google/android/material/timepicker/res/layout-land/material_timepicker.xml b/lib/java/com/google/android/material/timepicker/res/layout-land/material_timepicker.xml index 2124915df..f703571aa 100644 --- a/lib/java/com/google/android/material/timepicker/res/layout-land/material_timepicker.xml +++ b/lib/java/com/google/android/material/timepicker/res/layout-land/material_timepicker.xml @@ -52,8 +52,8 @@ diff --git a/lib/java/com/google/android/material/timepicker/res/layout/material_timepicker.xml b/lib/java/com/google/android/material/timepicker/res/layout/material_timepicker.xml index 86a21744d..d056a6edf 100644 --- a/lib/java/com/google/android/material/timepicker/res/layout/material_timepicker.xml +++ b/lib/java/com/google/android/material/timepicker/res/layout/material_timepicker.xml @@ -30,8 +30,8 @@ - 210dp 8dp diff --git a/lib/java/com/google/android/material/timepicker/res/values-h550dp-port/dimens.xml b/lib/java/com/google/android/material/timepicker/res/values-h550dp-port/dimens.xml index 3c5206fc3..30610cfba 100644 --- a/lib/java/com/google/android/material/timepicker/res/values-h550dp-port/dimens.xml +++ b/lib/java/com/google/android/material/timepicker/res/values-h550dp-port/dimens.xml @@ -16,6 +16,5 @@ --> - 230dp 24dp diff --git a/lib/java/com/google/android/material/timepicker/res/values-h600dp-port/dimens.xml b/lib/java/com/google/android/material/timepicker/res/values-land/dimens.xml similarity index 76% rename from lib/java/com/google/android/material/timepicker/res/values-h600dp-port/dimens.xml rename to lib/java/com/google/android/material/timepicker/res/values-land/dimens.xml index 457e5c353..21ac6accd 100644 --- a/lib/java/com/google/android/material/timepicker/res/values-h600dp-port/dimens.xml +++ b/lib/java/com/google/android/material/timepicker/res/values-land/dimens.xml @@ -1,6 +1,6 @@ - - 256dp + + 450dp + 600dp + diff --git a/lib/java/com/google/android/material/timepicker/res/values-w320dp-land/dimens.xml b/lib/java/com/google/android/material/timepicker/res/values-w320dp-land/dimens.xml index eb48df34e..a9d5e50bb 100644 --- a/lib/java/com/google/android/material/timepicker/res/values-w320dp-land/dimens.xml +++ b/lib/java/com/google/android/material/timepicker/res/values-w320dp-land/dimens.xml @@ -16,7 +16,6 @@ --> - 170dp 24dp 36dp diff --git a/lib/java/com/google/android/material/timepicker/res/values-w550dp-land/dimens.xml b/lib/java/com/google/android/material/timepicker/res/values-w550dp-land/dimens.xml deleted file mode 100644 index c16385b63..000000000 --- a/lib/java/com/google/android/material/timepicker/res/values-w550dp-land/dimens.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - 200dp - diff --git a/lib/java/com/google/android/material/timepicker/res/values-w600dp-land/dimens.xml b/lib/java/com/google/android/material/timepicker/res/values-w600dp-land/dimens.xml index c956ede12..59d29cc25 100644 --- a/lib/java/com/google/android/material/timepicker/res/values-w600dp-land/dimens.xml +++ b/lib/java/com/google/android/material/timepicker/res/values-w600dp-land/dimens.xml @@ -16,6 +16,5 @@ --> - 240dp 64dp diff --git a/lib/java/com/google/android/material/timepicker/res/values/dimens.xml b/lib/java/com/google/android/material/timepicker/res/values/dimens.xml index 6773ac459..a3ab6080d 100644 --- a/lib/java/com/google/android/material/timepicker/res/values/dimens.xml +++ b/lib/java/com/google/android/material/timepicker/res/values/dimens.xml @@ -21,7 +21,6 @@ 52dp 12dp 44dp - 256dp 64dp 24dp 2dp @@ -35,4 +34,8 @@ -12dp 2dp + 256dp + + 560dp + 340dp