diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml
index bad6185574..273d1676ee 100644
--- a/lawnchair/res/values/strings.xml
+++ b/lawnchair/res/values/strings.xml
@@ -410,7 +410,7 @@
Gregorian
Persian
- Buddhist
+ Chinese
%1$s, %2$s
EEEMMMd
diff --git a/lawnchair/src/app/lawnchair/smartspace/IcuDateTextView.kt b/lawnchair/src/app/lawnchair/smartspace/IcuDateTextView.kt
index 724f2fb396..3b3717ce3d 100644
--- a/lawnchair/src/app/lawnchair/smartspace/IcuDateTextView.kt
+++ b/lawnchair/src/app/lawnchair/smartspace/IcuDateTextView.kt
@@ -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) {
diff --git a/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceCalendar.kt b/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceCalendar.kt
index e10e873b1a..7a93b89284 100644
--- a/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceCalendar.kt
+++ b/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceCalendar.kt
@@ -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"
+ }
}