Tweak new chapters notification wording

This commit is contained in:
arkon 2020-02-18 13:41:15 -05:00
parent a3dd5c1e92
commit fef34dfe82
2 changed files with 45 additions and 20 deletions

View File

@ -501,7 +501,7 @@ class LibraryUpdateService(
return notification(Notifications.CHANNEL_NEW_CHAPTERS) {
setContentTitle(manga.title)
val description = getChaptersDescriptionString(chapters)
val description = getNewChaptersDescription(chapters)
setContentText(description)
setStyle(NotificationCompat.BigTextStyle().bigText(description))
@ -554,28 +554,47 @@ class LibraryUpdateService(
}
}
private fun getChaptersDescriptionString(chapters: Array<Chapter>): String {
private fun getNewChaptersDescription(chapters: Array<Chapter>): String {
val formatter = DecimalFormat("#.###", DecimalFormatSymbols()
.apply { decimalSeparator = '.' })
val chapterNumbers = chapters
val displayableChapterNumbers = chapters
.filter { it.chapter_number >= 0 }
.sortedBy { it.chapter_number }
.map { formatter.format(it.chapter_number) }
.toSet()
val shouldTruncate = chapterNumbers.size > NOTIF_MAX_CHAPTERS
val chaptersDescription = if (shouldTruncate) {
chapterNumbers.take(NOTIF_MAX_CHAPTERS - 1).joinToString(", ")
return when (displayableChapterNumbers.size) {
// No sensible chapter numbers to show (i.e. no chapters have parsed chapter number)
0 -> {
// "1 new chapter" or "5 new chapters"
resources.getQuantityString(R.plurals.notification_chapters_generic, chapters.size, chapters.size)
}
// Only 1 chapter has a parsed chapter number
1 -> {
val remaining = chapters.size - displayableChapterNumbers.size
if (remaining == 0) {
// "Chapter 2.5"
resources.getString(R.string.notification_chapters_single, displayableChapterNumbers.first())
} else {
chapterNumbers.joinToString(", ")
// "Chapter 2.5 and 10 more"
resources.getString(R.string.notification_chapters_single_and_more, displayableChapterNumbers.first(), remaining)
}
var description = resources.getQuantityString(R.plurals.notification_chapters, chapters.size, chaptersDescription)
}
// Everything else (i.e. multiple parsed chapter numbers)
else -> {
val shouldTruncate = displayableChapterNumbers.size > NOTIF_MAX_CHAPTERS
if (shouldTruncate) {
description += " ${resources.getString(R.string.notification_and_n_more, (chapterNumbers.size - (NOTIF_MAX_CHAPTERS - 1)))}"
// "Chapters 1, 2.5, 3, 4, 5 and 10 more"
val remaining = displayableChapterNumbers.size - NOTIF_MAX_CHAPTERS
val joinedChapterNumbers = displayableChapterNumbers.take(NOTIF_MAX_CHAPTERS).joinToString(", ")
resources.getQuantityString(R.plurals.notification_chapters_multiple_and_more, remaining, joinedChapterNumbers, remaining)
} else {
// "Chapters 1, 2.5, 3"
resources.getString(R.string.notification_chapters_multiple, displayableChapterNumbers.joinToString(","))
}
}
}
return description
}
/**

View File

@ -507,14 +507,20 @@
<string name="notification_update_progress">Update progress: %1$d/%2$d</string>
<string name="notification_new_chapters">New chapters found</string>
<plurals name="notification_new_chapters_text">
<item quantity="one">For %d title</item>
<item quantity="one">For 1 title</item>
<item quantity="other">For %d titles</item>
</plurals>
<plurals name="notification_chapters">
<item quantity="one">Chapter %1$s</item>
<item quantity="other">Chapters %1$s</item>
<plurals name="notification_chapters_generic">
<item quantity="one">1 new chapter</item>
<item quantity="other">%1$d new chapters</item>
</plurals>
<string name="notification_chapters_single">Chapter %1$s</string>
<string name="notification_chapters_single_and_more">Chapter %1$s and %2$d more</string>
<string name="notification_chapters_multiple">Chapters %1$s</string>
<plurals name="notification_chapters_multiple_and_more">
<item quantity="one">Chapter %1$s and 1 more</item>
<item quantity="other">Chapters %1$s and %2$d more</item>
</plurals>
<string name="notification_and_n_more">and %1$d more</string>
<string name="notification_cover_update_failed">Failed to update cover</string>
<string name="notification_first_add_to_library">Please add the manga to your library before doing this</string>
<string name="notification_not_connected_to_ac_title">Sync canceled</string>