Use CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE...

Use CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE in place of
CAPITALIZATION_FOR_STANDALONE for date formats, since ICU does not
capitalize (at least) month names correctly today according to
https://unicode-org.atlassian.net/browse/ICU-21631. The motivating
example is the DatePicker/SimpleMonthView for Vietnam with "{month}
{year}" (as used in the manual date selection in the Date & Time screen
of the System settings): it does not capitalize the month without this
change.

It's difficult to know which formats will be affected, so this change
modifies all the formats found in frameworks/base/ that currently
express a preference for STANDALONE. The fix may be available by ICU 72,
at which point this change can presumably be reverted as signified in
the TODOs.

Bug: 229287642
Test: Inspection of Date & Time settings + compilation only
Change-Id: Iea753d0318aef55c6dd4f7e09068a0362ac970d8
This commit is contained in:
Neil Fuller
2022-06-08 14:28:55 +01:00
parent 4a56099b5d
commit 8fc8607cb7
5 changed files with 26 additions and 6 deletions

View File

@@ -302,7 +302,11 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate {
// Update the date formatter.
mMonthDayFormat = DateFormat.getInstanceForSkeleton("EMMMd", locale);
mMonthDayFormat.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
// The use of CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE instead of
// CAPITALIZATION_FOR_STANDALONE is to address
// https://unicode-org.atlassian.net/browse/ICU-21631
// TODO(b/229287642): Switch back to CAPITALIZATION_FOR_STANDALONE
mMonthDayFormat.setContext(DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE);
mYearFormat = DateFormat.getInstanceForSkeleton("y", locale);
// Update the header text.

View File

@@ -186,7 +186,11 @@ class SimpleMonthView extends View {
private void updateMonthYearLabel() {
final String format = DateFormat.getBestDateTimePattern(mLocale, MONTH_YEAR_FORMAT);
final SimpleDateFormat formatter = new SimpleDateFormat(format, mLocale);
formatter.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
// The use of CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE instead of
// CAPITALIZATION_FOR_STANDALONE is to address
// https://unicode-org.atlassian.net/browse/ICU-21631
// TODO(b/229287642): Switch back to CAPITALIZATION_FOR_STANDALONE
formatter.setContext(DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE);
mMonthYearLabel = formatter.format(mCalendar.getTime());
}

View File

@@ -414,7 +414,11 @@ public class KeyguardSliceProvider extends SliceProvider implements
if (mDateFormat == null) {
final Locale l = Locale.getDefault();
DateFormat format = DateFormat.getInstanceForSkeleton(mDatePattern, l);
format.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
// The use of CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE instead of
// CAPITALIZATION_FOR_STANDALONE is to address
// https://unicode-org.atlassian.net/browse/ICU-21631
// TODO(b/229287642): Switch back to CAPITALIZATION_FOR_STANDALONE
format.setContext(DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE);
mDateFormat = format;
}
mCurrentTime.setTime(System.currentTimeMillis());

View File

@@ -114,7 +114,11 @@ public class DateView extends TextView {
if (mDateFormat == null) {
final Locale l = Locale.getDefault();
DateFormat format = DateFormat.getInstanceForSkeleton(mDatePattern, l);
format.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
// The use of CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE instead of
// CAPITALIZATION_FOR_STANDALONE is to address
// https://unicode-org.atlassian.net/browse/ICU-21631
// TODO(b/229287642): Switch back to CAPITALIZATION_FOR_STANDALONE
format.setContext(DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE);
mDateFormat = format;
}

View File

@@ -54,7 +54,11 @@ internal fun getFormatFromPattern(pattern: String?): DateFormat {
}
val l = Locale.getDefault()
val format = DateFormat.getInstanceForSkeleton(pattern, l)
format.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE)
// The use of CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE instead of
// CAPITALIZATION_FOR_STANDALONE is to address
// https://unicode-org.atlassian.net/browse/ICU-21631
// TODO(b/229287642): Switch back to CAPITALIZATION_FOR_STANDALONE
format.setContext(DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE)
return format
}
@@ -218,4 +222,4 @@ class VariableDateViewController(
)
}
}
}
}