From fef34dfe82a10ff8942f885116c714e822d477c8 Mon Sep 17 00:00:00 2001 From: arkon Date: Tue, 18 Feb 2020 13:41:15 -0500 Subject: [PATCH] Tweak new chapters notification wording --- .../data/library/LibraryUpdateService.kt | 49 +++++++++++++------ app/src/main/res/values/strings.xml | 16 ++++-- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index c68777400b..5b14921bc4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -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): String { + private fun getNewChaptersDescription(chapters: Array): 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(", ") - } else { - chapterNumbers.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 { + // "Chapter 2.5 and 10 more" + resources.getString(R.string.notification_chapters_single_and_more, displayableChapterNumbers.first(), remaining) + } + } + // Everything else (i.e. multiple parsed chapter numbers) + else -> { + val shouldTruncate = displayableChapterNumbers.size > NOTIF_MAX_CHAPTERS + if (shouldTruncate) { + // "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(",")) + } + } } - - var description = resources.getQuantityString(R.plurals.notification_chapters, chapters.size, chaptersDescription) - if (shouldTruncate) { - description += " ${resources.getString(R.string.notification_and_n_more, (chapterNumbers.size - (NOTIF_MAX_CHAPTERS - 1)))}" - } - - return description } /** diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index af4586c1d6..f53f59c483 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -507,14 +507,20 @@ Update progress: %1$d/%2$d New chapters found - For %d title + For 1 title For %d titles - - Chapter %1$s - Chapters %1$s + + 1 new chapter + %1$d new chapters + + Chapter %1$s + Chapter %1$s and %2$d more + Chapters %1$s + + Chapter %1$s and 1 more + Chapters %1$s and %2$d more - and %1$d more Failed to update cover Please add the manga to your library before doing this Sync canceled