Loading core/java/android/content/res/ColorStateList.java +1 −1 Original line number Diff line number Diff line Loading @@ -353,7 +353,7 @@ public class ColorStateList implements Parcelable { for (int i = 0; i < inputStates.length; i++) { final int[] inputState = inputStates[i]; for (int j = 0; j < inputState.length; j++) { if (inputState[i] == state) { if (inputState[j] == state) { return colorStateList; } } Loading core/java/android/widget/TimePickerClockDelegate.java +31 −41 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.text.format.DateFormat; import android.text.format.DateUtils; import android.util.AttributeSet; Loading Loading @@ -100,9 +99,7 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl private int mPmKeyCode; // Accessibility strings. private String mHourPickerDescription; private String mSelectHours; private String mMinutePickerDescription; private String mSelectMinutes; // Most recent time announcement values for accessibility. Loading @@ -122,9 +119,7 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl Context.LAYOUT_INFLATER_SERVICE); final Resources res = mContext.getResources(); mHourPickerDescription = res.getString(R.string.hour_picker_description); mSelectHours = res.getString(R.string.select_hours); mMinutePickerDescription = res.getString(R.string.minute_picker_description); mSelectMinutes = res.getString(R.string.select_minutes); String[] amPmStrings = TimePickerSpinnerDelegate.getAmPmStrings(context); Loading Loading @@ -153,6 +148,11 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl mMinuteView.setTextAppearance(context, headerTimeTextAppearance); } // Now that we have text appearances out of the way, make sure the hour // and minute views are correctly sized. mHourView.setMinWidth(computeStableWidth(mHourView, 24)); mMinuteView.setMinWidth(computeStableWidth(mMinuteView, 60)); // TODO: This can be removed once we support themed color state lists. final int headerSelectedTextColor = a.getColor( R.styleable.TimePicker_headerSelectedTextColor, Loading Loading @@ -206,6 +206,23 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl initialize(currentHour, currentMinute, false /* 12h */, HOUR_INDEX); } private int computeStableWidth(TextView v, int maxNumber) { int maxWidth = 0; for (int i = 0; i < maxNumber; i++) { final String text = String.format("%02d", i); v.setText(text); v.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); final int width = v.getMeasuredWidth(); if (width > maxWidth) { maxWidth = width; } } return maxWidth; } private void initialize(int hourOfDay, int minute, boolean is24HourView, int index) { mInitialHourOfDay = hourOfDay; mInitialMinute = minute; Loading Loading @@ -242,48 +259,21 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl setCurrentItemShowing(index, false, true); } private int computeMaxWidthOfNumbers(int max) { TextView tempView = new TextView(mContext); tempView.setTextAppearance(mContext, R.style.TextAppearance_Material_TimePicker_TimeLabel); ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); tempView.setLayoutParams(lp); int maxWidth = 0; for (int minutes = 0; minutes < max; minutes++) { final String text = String.format("%02d", minutes); tempView.setText(text); tempView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); maxWidth = Math.max(maxWidth, tempView.getMeasuredWidth()); } return maxWidth; } private void updateHeaderAmPm() { if (mIs24HourView) { mAmPmLayout.setVisibility(View.GONE); } else { final String bestDateTimePattern = DateFormat.getBestDateTimePattern( mCurrentLocale, "hm"); boolean amPmOnLeft = bestDateTimePattern.startsWith("a"); if (TextUtils.getLayoutDirectionFromLocale(mCurrentLocale) == View.LAYOUT_DIRECTION_RTL) { amPmOnLeft = !amPmOnLeft; // Ensure that AM/PM layout is in the correct position. final String dateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, "hm"); final boolean amPmAtStart = dateTimePattern.startsWith("a"); final ViewGroup parent = (ViewGroup) mAmPmLayout.getParent(); final int targetIndex = amPmAtStart ? 0 : parent.getChildCount() - 1; final int currentIndex = parent.indexOfChild(mAmPmLayout); if (targetIndex != currentIndex) { parent.removeView(mAmPmLayout); parent.addView(mAmPmLayout, targetIndex); } final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mAmPmLayout.getLayoutParams(); if (amPmOnLeft) { params.leftMargin = 0; params.rightMargin = computeMaxWidthOfNumbers(12 /* for hours */); } else { params.leftMargin = computeMaxWidthOfNumbers(60 /* for minutes */); params.rightMargin = 0; } mAmPmLayout.setLayoutParams(params); mAmPmLayout.setVisibility(View.VISIBLE); updateAmPmLabelStates(mInitialHourOfDay < 12 ? AM : PM); } } Loading core/res/res/layout-land/time_picker_holo.xml +1 −5 Original line number Diff line number Diff line Loading @@ -20,11 +20,7 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:layout_marginLeft="@dimen/timepicker_minimum_margin_sides" android:layout_marginRight="@dimen/timepicker_minimum_margin_sides" android:layout_marginTop="@dimen/timepicker_minimum_margin_top_bottom" android:layout_marginBottom="@dimen/timepicker_minimum_margin_top_bottom"> android:orientation="horizontal"> <FrameLayout android:layout_width="0dp" android:layout_height="match_parent" Loading core/res/res/layout/time_header_label.xml +23 −20 Original line number Diff line number Diff line Loading @@ -17,46 +17,50 @@ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/time_header" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> android:layout_height="match_parent" android:padding="@dimen/timepicker_separator_padding" android:gravity="center"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="bottom" android:orientation="horizontal"> <TextView android:id="@+id/hours" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@+id/separator" android:layout_centerVertical="true" /> android:gravity="end" /> <TextView android:id="@+id/separator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="@dimen/timepicker_separator_padding" android:paddingRight="@dimen/timepicker_separator_padding" android:layout_centerInParent="true" android:layout_marginLeft="@dimen/timepicker_separator_padding" android:layout_marginRight="@dimen/timepicker_separator_padding" android:importantForAccessibility="no" /> <TextView android:id="@+id/minutes" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/separator" android:layout_centerVertical="true" /> android:gravity="start" /> <LinearLayout android:id="@+id/ampm_layout" android:layout_alignBaseline="@+id/minutes" android:layout_toEndOf="@+id/separator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:baselineAlignedChildIndex="1" android:orientation="vertical"> android:orientation="vertical" android:baselineAlignedChildIndex="1"> <CheckedTextView android:id="@+id/am_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="@dimen/timepicker_ampm_horizontal_padding" android:paddingTop="@dimen/timepicker_ampm_vertical_padding" android:paddingEnd="@dimen/timepicker_ampm_horizontal_padding" android:paddingBottom="@dimen/timepicker_am_bottom_padding" android:paddingTop="@dimen/timepicker_ampm_vertical_padding" android:lines="1" android:ellipsize="none" /> <CheckedTextView Loading @@ -64,11 +68,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="@dimen/timepicker_ampm_horizontal_padding" android:paddingTop="@dimen/timepicker_pm_top_padding" android:paddingEnd="@dimen/timepicker_ampm_horizontal_padding" android:paddingBottom="@dimen/timepicker_ampm_vertical_padding" android:paddingTop="@dimen/timepicker_pm_top_padding" android:lines="1" android:ellipsize="none" /> </LinearLayout> </RelativeLayout> </LinearLayout> </FrameLayout> core/res/res/layout/time_picker_holo.xml +1 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include Loading Loading
core/java/android/content/res/ColorStateList.java +1 −1 Original line number Diff line number Diff line Loading @@ -353,7 +353,7 @@ public class ColorStateList implements Parcelable { for (int i = 0; i < inputStates.length; i++) { final int[] inputState = inputStates[i]; for (int j = 0; j < inputState.length; j++) { if (inputState[i] == state) { if (inputState[j] == state) { return colorStateList; } } Loading
core/java/android/widget/TimePickerClockDelegate.java +31 −41 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.text.format.DateFormat; import android.text.format.DateUtils; import android.util.AttributeSet; Loading Loading @@ -100,9 +99,7 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl private int mPmKeyCode; // Accessibility strings. private String mHourPickerDescription; private String mSelectHours; private String mMinutePickerDescription; private String mSelectMinutes; // Most recent time announcement values for accessibility. Loading @@ -122,9 +119,7 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl Context.LAYOUT_INFLATER_SERVICE); final Resources res = mContext.getResources(); mHourPickerDescription = res.getString(R.string.hour_picker_description); mSelectHours = res.getString(R.string.select_hours); mMinutePickerDescription = res.getString(R.string.minute_picker_description); mSelectMinutes = res.getString(R.string.select_minutes); String[] amPmStrings = TimePickerSpinnerDelegate.getAmPmStrings(context); Loading Loading @@ -153,6 +148,11 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl mMinuteView.setTextAppearance(context, headerTimeTextAppearance); } // Now that we have text appearances out of the way, make sure the hour // and minute views are correctly sized. mHourView.setMinWidth(computeStableWidth(mHourView, 24)); mMinuteView.setMinWidth(computeStableWidth(mMinuteView, 60)); // TODO: This can be removed once we support themed color state lists. final int headerSelectedTextColor = a.getColor( R.styleable.TimePicker_headerSelectedTextColor, Loading Loading @@ -206,6 +206,23 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl initialize(currentHour, currentMinute, false /* 12h */, HOUR_INDEX); } private int computeStableWidth(TextView v, int maxNumber) { int maxWidth = 0; for (int i = 0; i < maxNumber; i++) { final String text = String.format("%02d", i); v.setText(text); v.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); final int width = v.getMeasuredWidth(); if (width > maxWidth) { maxWidth = width; } } return maxWidth; } private void initialize(int hourOfDay, int minute, boolean is24HourView, int index) { mInitialHourOfDay = hourOfDay; mInitialMinute = minute; Loading Loading @@ -242,48 +259,21 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl setCurrentItemShowing(index, false, true); } private int computeMaxWidthOfNumbers(int max) { TextView tempView = new TextView(mContext); tempView.setTextAppearance(mContext, R.style.TextAppearance_Material_TimePicker_TimeLabel); ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); tempView.setLayoutParams(lp); int maxWidth = 0; for (int minutes = 0; minutes < max; minutes++) { final String text = String.format("%02d", minutes); tempView.setText(text); tempView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); maxWidth = Math.max(maxWidth, tempView.getMeasuredWidth()); } return maxWidth; } private void updateHeaderAmPm() { if (mIs24HourView) { mAmPmLayout.setVisibility(View.GONE); } else { final String bestDateTimePattern = DateFormat.getBestDateTimePattern( mCurrentLocale, "hm"); boolean amPmOnLeft = bestDateTimePattern.startsWith("a"); if (TextUtils.getLayoutDirectionFromLocale(mCurrentLocale) == View.LAYOUT_DIRECTION_RTL) { amPmOnLeft = !amPmOnLeft; // Ensure that AM/PM layout is in the correct position. final String dateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, "hm"); final boolean amPmAtStart = dateTimePattern.startsWith("a"); final ViewGroup parent = (ViewGroup) mAmPmLayout.getParent(); final int targetIndex = amPmAtStart ? 0 : parent.getChildCount() - 1; final int currentIndex = parent.indexOfChild(mAmPmLayout); if (targetIndex != currentIndex) { parent.removeView(mAmPmLayout); parent.addView(mAmPmLayout, targetIndex); } final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mAmPmLayout.getLayoutParams(); if (amPmOnLeft) { params.leftMargin = 0; params.rightMargin = computeMaxWidthOfNumbers(12 /* for hours */); } else { params.leftMargin = computeMaxWidthOfNumbers(60 /* for minutes */); params.rightMargin = 0; } mAmPmLayout.setLayoutParams(params); mAmPmLayout.setVisibility(View.VISIBLE); updateAmPmLabelStates(mInitialHourOfDay < 12 ? AM : PM); } } Loading
core/res/res/layout-land/time_picker_holo.xml +1 −5 Original line number Diff line number Diff line Loading @@ -20,11 +20,7 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:layout_marginLeft="@dimen/timepicker_minimum_margin_sides" android:layout_marginRight="@dimen/timepicker_minimum_margin_sides" android:layout_marginTop="@dimen/timepicker_minimum_margin_top_bottom" android:layout_marginBottom="@dimen/timepicker_minimum_margin_top_bottom"> android:orientation="horizontal"> <FrameLayout android:layout_width="0dp" android:layout_height="match_parent" Loading
core/res/res/layout/time_header_label.xml +23 −20 Original line number Diff line number Diff line Loading @@ -17,46 +17,50 @@ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/time_header" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> android:layout_height="match_parent" android:padding="@dimen/timepicker_separator_padding" android:gravity="center"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="bottom" android:orientation="horizontal"> <TextView android:id="@+id/hours" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@+id/separator" android:layout_centerVertical="true" /> android:gravity="end" /> <TextView android:id="@+id/separator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="@dimen/timepicker_separator_padding" android:paddingRight="@dimen/timepicker_separator_padding" android:layout_centerInParent="true" android:layout_marginLeft="@dimen/timepicker_separator_padding" android:layout_marginRight="@dimen/timepicker_separator_padding" android:importantForAccessibility="no" /> <TextView android:id="@+id/minutes" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/separator" android:layout_centerVertical="true" /> android:gravity="start" /> <LinearLayout android:id="@+id/ampm_layout" android:layout_alignBaseline="@+id/minutes" android:layout_toEndOf="@+id/separator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:baselineAlignedChildIndex="1" android:orientation="vertical"> android:orientation="vertical" android:baselineAlignedChildIndex="1"> <CheckedTextView android:id="@+id/am_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="@dimen/timepicker_ampm_horizontal_padding" android:paddingTop="@dimen/timepicker_ampm_vertical_padding" android:paddingEnd="@dimen/timepicker_ampm_horizontal_padding" android:paddingBottom="@dimen/timepicker_am_bottom_padding" android:paddingTop="@dimen/timepicker_ampm_vertical_padding" android:lines="1" android:ellipsize="none" /> <CheckedTextView Loading @@ -64,11 +68,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="@dimen/timepicker_ampm_horizontal_padding" android:paddingTop="@dimen/timepicker_pm_top_padding" android:paddingEnd="@dimen/timepicker_ampm_horizontal_padding" android:paddingBottom="@dimen/timepicker_ampm_vertical_padding" android:paddingTop="@dimen/timepicker_pm_top_padding" android:lines="1" android:ellipsize="none" /> </LinearLayout> </RelativeLayout> </LinearLayout> </FrameLayout>
core/res/res/layout/time_picker_holo.xml +1 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include Loading