feat: Add Chinese calendar to smartspace

This commit is contained in:
Pun Butrach
2025-12-07 21:54:05 +07:00
parent e1c3a63211
commit 8aa9edf2e1
3 changed files with 34 additions and 2 deletions
+1 -1
View File
@@ -410,7 +410,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorian</string>
<string name="smartspace_calendar_persian">Persian</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<string name="smartspace_icu_date_pattern_gregorian_wday_month_day_no_year" translatable="false">EEEMMMd</string>
@@ -93,12 +93,39 @@ class IcuDateTextView @JvmOverloads constructor(
}
val formatter = when (calendar) {
SmartspaceCalendar.Persian -> createPersianFormatter()
SmartspaceCalendar.Chinese -> createChineseLunarFormatter()
else -> createGregorianFormatter()
}
formatterFunction = formatter
return formatter
}
private fun createChineseLunarFormatter(): FormatterFunction {
var format: String
if (dateTimeOptions.showTime) {
format = context.getString(
when {
dateTimeOptions.timeFormat is SmartspaceTimeFormat.TwelveHourFormat -> R.string.smartspace_icu_date_pattern_gregorian_time_12h
dateTimeOptions.timeFormat is SmartspaceTimeFormat.TwentyFourHourFormat -> R.string.smartspace_icu_date_pattern_gregorian_time
is24HourFormat(context) -> R.string.smartspace_icu_date_pattern_gregorian_time
else -> R.string.smartspace_icu_date_pattern_gregorian_time_12h
},
)
if (dateTimeOptions.showDate) format += context.getString(R.string.smartspace_icu_date_pattern_gregorian_date)
} else {
format = context.getString(R.string.smartspace_icu_date_pattern_gregorian_wday_month_day_no_year)
}
val chineseLocale = Locale.Builder()
.setLocale(Locale.CHINESE)
.setUnicodeLocaleKeyword("ca", "chinese")
.build()
val formatter = DateFormat.getInstanceForSkeleton(format, chineseLocale)
formatter.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE)
return { formatter.format(it) }
}
private fun createPersianFormatter(): FormatterFunction {
var format: String
if (dateTimeOptions.showTime) {
@@ -14,13 +14,14 @@ sealed class SmartspaceCalendar(@StringRes val nameResourceId: Int, val formatCu
fun fromString(value: String): SmartspaceCalendar = when (value) {
"persian" -> Persian
"chinese" -> Chinese
else -> Gregorian
}
/**
* @return The list of all calendars.
*/
fun values() = listOf(Gregorian, Persian)
fun values() = listOf(Gregorian, Persian, Chinese)
}
object Gregorian : SmartspaceCalendar(nameResourceId = R.string.smartspace_calendar_gregorian) {
@@ -30,4 +31,8 @@ sealed class SmartspaceCalendar(@StringRes val nameResourceId: Int, val formatCu
// Officially known as Solar Hijri
override fun toString() = "persian"
}
object Chinese : SmartspaceCalendar(nameResourceId = R.string.smartspace_calendar_chinese) {
override fun toString() = "chinese"
}
}