feat: Add Chinese calendar to smartspace
This commit is contained in:
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user