From f2ea1cde46e0d013690351a02282a0429a076e1e Mon Sep 17 00:00:00 2001 From: Koitharu Date: Tue, 28 Jun 2022 12:10:39 +0300 Subject: [PATCH] Reading progress indicator on details screen --- .../koitharu/kotatsu/details/ui/DetailsFragment.kt | 2 ++ .../history/ui/util/ReadingProgressDrawable.kt | 3 +-- .../koitharu/kotatsu/reader/ui/ReaderViewModel.kt | 13 +++++++------ app/src/main/res/layout-w600dp/fragment_details.xml | 8 ++++++++ app/src/main/res/layout/fragment_details.xml | 8 ++++++++ 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt index dfc427d99..acae5f2c4 100644 --- a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt @@ -32,6 +32,7 @@ import org.koitharu.kotatsu.bookmarks.ui.BookmarksAdapter import org.koitharu.kotatsu.core.model.MangaHistory import org.koitharu.kotatsu.databinding.FragmentDetailsBinding import org.koitharu.kotatsu.favourites.ui.categories.select.FavouriteCategoriesBottomSheet +import org.koitharu.kotatsu.history.domain.PROGRESS_NONE import org.koitharu.kotatsu.image.ui.ImageActivity import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaSource @@ -176,6 +177,7 @@ class DetailsFragment : setIconResource(R.drawable.ic_play) } } + binding.progressView.setPercent(history?.percent ?: PROGRESS_NONE, animate = true) } private fun onFavouriteChanged(isFavourite: Boolean) { diff --git a/app/src/main/java/org/koitharu/kotatsu/history/ui/util/ReadingProgressDrawable.kt b/app/src/main/java/org/koitharu/kotatsu/history/ui/util/ReadingProgressDrawable.kt index 531615c03..3500d9398 100644 --- a/app/src/main/java/org/koitharu/kotatsu/history/ui/util/ReadingProgressDrawable.kt +++ b/app/src/main/java/org/koitharu/kotatsu/history/ui/util/ReadingProgressDrawable.kt @@ -7,7 +7,6 @@ import androidx.annotation.StyleRes import androidx.core.graphics.ColorUtils import org.koitharu.kotatsu.R import org.koitharu.kotatsu.history.domain.PROGRESS_NONE -import kotlin.math.roundToInt class ReadingProgressDrawable( context: Context, @@ -31,7 +30,7 @@ class ReadingProgressDrawable( var progress: Float = PROGRESS_NONE set(value) { field = value - text = textPattern.format((value * 100f).roundToInt().toString()) + text = textPattern.format((value * 100f).toInt().toString()) paint.getTextBounds(text, 0, text.length, textBounds) invalidateSelf() } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt index 1fe633456..3ef07926b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt @@ -20,6 +20,7 @@ import org.koitharu.kotatsu.core.os.ShortcutsRepository import org.koitharu.kotatsu.core.parser.MangaRepository import org.koitharu.kotatsu.core.prefs.* import org.koitharu.kotatsu.history.domain.HistoryRepository +import org.koitharu.kotatsu.history.domain.PROGRESS_NONE import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaPage @@ -144,7 +145,7 @@ class ReaderViewModel( historyRepository.saveStateAsync( manga = mangaData.value ?: return, state = readerState, - percent = computePercent(readerState.chapterId, readerState.page) + percent = computePercent(readerState.chapterId, readerState.page), ) } @@ -371,17 +372,17 @@ class ReaderViewModel( } private fun computePercent(chapterId: Long, pageIndex: Int): Float { - val chapters = manga?.chapters ?: return -1f + val chapters = manga?.chapters ?: return PROGRESS_NONE val chaptersCount = chapters.size val chapterIndex = chapters.indexOfFirst { x -> x.id == chapterId } - val pages = content.value?.pages ?: return -1f + val pages = content.value?.pages ?: return PROGRESS_NONE val pagesCount = pages.count { x -> x.chapterId == chapterId } if (chaptersCount == 0 || pagesCount == 0) { - return -1f + return PROGRESS_NONE } - val chapterPercent = (chapterIndex + 1) / chaptersCount.toFloat() val pagePercent = (pageIndex + 1) / pagesCount.toFloat() - return pagePercent * chapterPercent // FIXME + val ppc = 1f / chaptersCount + return ppc * chapterIndex + ppc * pagePercent } } diff --git a/app/src/main/res/layout-w600dp/fragment_details.xml b/app/src/main/res/layout-w600dp/fragment_details.xml index c691b4ea1..16eab6a18 100644 --- a/app/src/main/res/layout-w600dp/fragment_details.xml +++ b/app/src/main/res/layout-w600dp/fragment_details.xml @@ -31,6 +31,14 @@ tools:background="@tools:sample/backgrounds/scenic" tools:ignore="ContentDescription,UnusedAttribute" /> + + + +