Skip to content

Commit bf0d11b

Browse files
ymarianikim24
authored andcommitted
[TimePicker] Changed clock face size to be dynamic
PiperOrigin-RevId: 352024053
1 parent 655caed commit bf0d11b

File tree

10 files changed

+42
-32
lines changed

10 files changed

+42
-32
lines changed

lib/java/com/google/android/material/timepicker/ClockFaceView.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat;
3939
import androidx.appcompat.content.res.AppCompatResources;
4040
import android.util.AttributeSet;
41+
import android.util.DisplayMetrics;
4142
import android.util.SparseArray;
4243
import android.view.LayoutInflater;
4344
import android.view.View;
@@ -74,6 +75,9 @@ class ClockFaceView extends RadialViewGroup implements OnRotateListener {
7475
private final int[] gradientColors;
7576
private final float[] gradientPositions = new float[] {0f, 0.9f, 1f};
7677
private final int clockHandPadding;
78+
private final int minimumHeight;
79+
private final int minimumWidth;
80+
private final int clockSize;
7781

7882
private String[] values;
7983

@@ -167,6 +171,10 @@ public void onInitializeAccessibilityNodeInfo(
167171
String[] initialValues = new String[INITIAL_CAPACITY];
168172
Arrays.fill(initialValues, VALUE_PLACEHOLDER);
169173
setValues(initialValues, /* contentDescription= */ 0);
174+
175+
minimumHeight = res.getDimensionPixelSize(R.dimen.material_time_picker_minimum_screen_height);
176+
minimumWidth = res.getDimensionPixelSize(R.dimen.material_time_picker_minimum_screen_width);
177+
clockSize = res.getDimensionPixelSize(R.dimen.material_clock_size);
170178
}
171179

172180
/**
@@ -278,4 +286,25 @@ public void onRotate(float rotation, boolean animating) {
278286
findIntersectingTextView();
279287
}
280288
}
289+
290+
@Override
291+
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
292+
Resources r = getResources();
293+
DisplayMetrics displayMetrics = r.getDisplayMetrics();
294+
295+
float height = displayMetrics.heightPixels;
296+
float width = displayMetrics.widthPixels;
297+
298+
// If the screen is smaller than our defined values. Scale the clock face
299+
// proportionally to the smaller size
300+
int size = (int) (clockSize / max3(minimumHeight / height, minimumWidth / width, 1f));
301+
302+
int spec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
303+
setMeasuredDimension(size, size);
304+
super.onMeasure(spec, spec);
305+
}
306+
307+
private static float max3(float a, float b, float c) {
308+
return max(max(a, b), c);
309+
}
281310
}

lib/java/com/google/android/material/timepicker/res/layout-land/material_timepicker.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@
5252

5353
<com.google.android.material.timepicker.ClockFaceView
5454
android:id="@+id/material_clock_face"
55-
android:layout_width="@dimen/material_clock_size"
56-
android:layout_height="@dimen/material_clock_size"
55+
android:layout_width="wrap_content"
56+
android:layout_height="wrap_content"
5757
android:layout_marginStart="@dimen/clock_face_margin_start"
5858
app:layout_constraintStart_toEndOf="@+id/material_clock_display"
5959
app:layout_constraintTop_toTopOf="parent" />

lib/java/com/google/android/material/timepicker/res/layout/material_timepicker.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030

3131
<com.google.android.material.timepicker.ClockFaceView
3232
android:id="@+id/material_clock_face"
33-
android:layout_width="@dimen/material_clock_size"
34-
android:layout_height="@dimen/material_clock_size"
33+
android:layout_width="wrap_content"
34+
android:layout_height="wrap_content"
3535
android:layout_marginTop="36dp"
3636
android:layout_gravity="center"
3737
app:layout_constraintStart_toStartOf="parent"

lib/java/com/google/android/material/timepicker/res/values-h320dp-port/dimens.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,5 @@
1616
-->
1717

1818
<resources>
19-
<dimen name="material_clock_size">210dp</dimen>
2019
<dimen name="material_timepicker_dialog_buttons_margin_top">8dp</dimen>
2120
</resources>

lib/java/com/google/android/material/timepicker/res/values-h550dp-port/dimens.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,5 @@
1616
-->
1717

1818
<resources>
19-
<dimen name="material_clock_size">230dp</dimen>
2019
<dimen name="material_timepicker_dialog_buttons_margin_top">24dp</dimen>
2120
</resources>

lib/java/com/google/android/material/timepicker/res/values-h600dp-port/dimens.xml renamed to lib/java/com/google/android/material/timepicker/res/values-land/dimens.xml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!--
3-
Copyright 2020 The Android Open Source Project
3+
Copyright 2021 The Android Open Source Project
44
55
Licensed under the Apache License, Version 2.0 (the "License");
66
you may not use this file except in compliance with the License.
@@ -14,7 +14,9 @@
1414
See the License for the specific language governing permissions and
1515
limitations under the License.
1616
-->
17-
1817
<resources>
19-
<dimen name="material_clock_size">256dp</dimen>
18+
19+
<dimen name="material_time_picker_minimum_screen_height">450dp</dimen>
20+
<dimen name="material_time_picker_minimum_screen_width">600dp</dimen>
21+
2022
</resources>

lib/java/com/google/android/material/timepicker/res/values-w320dp-land/dimens.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
-->
1717

1818
<resources>
19-
<dimen name="material_clock_size">170dp</dimen>
2019
<dimen name="clock_face_margin_start">24dp</dimen>
2120
<dimen name="material_clock_face_margin_top">36dp</dimen>
2221
</resources>

lib/java/com/google/android/material/timepicker/res/values-w550dp-land/dimens.xml

Lines changed: 0 additions & 20 deletions
This file was deleted.

lib/java/com/google/android/material/timepicker/res/values-w600dp-land/dimens.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,5 @@
1616
-->
1717

1818
<resources>
19-
<dimen name="material_clock_size">240dp</dimen>
2019
<dimen name="clock_face_margin_start">64dp</dimen>
2120
</resources>

lib/java/com/google/android/material/timepicker/res/values/dimens.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
<dimen name="material_clock_period_toggle_width">52dp</dimen>
2222
<dimen name="material_clock_period_toggle_margin_left">12dp</dimen>
2323
<dimen name="material_clock_face_margin_top">44dp</dimen>
24-
<dimen name="material_clock_size">256dp</dimen>
2524
<dimen name="clock_face_margin_start">64dp</dimen>
2625
<dimen name="material_timepicker_dialog_buttons_margin_top">24dp</dimen>
2726
<dimen name="material_clock_hand_stroke_width">2dp</dimen>
@@ -35,4 +34,8 @@
3534
<dimen name="material_cursor_inset_top">-12dp</dimen>
3635
<dimen name="material_cursor_width">2dp</dimen>
3736

37+
<dimen name="material_clock_size">256dp</dimen>
38+
39+
<dimen name="material_time_picker_minimum_screen_height">560dp</dimen>
40+
<dimen name="material_time_picker_minimum_screen_width">340dp</dimen>
3841
</resources>

0 commit comments

Comments
 (0)