diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/ReadingProgressMutations.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/ReadingProgressMutations.kt index f6670efe3..b3f7419ca 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/ReadingProgressMutations.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/ReadingProgressMutations.kt @@ -19,8 +19,13 @@ data class ReadingProgressParams( ) } -suspend fun Networker.updateReadingProgress(jsonString: String): Boolean { - val input = Gson().fromJson(jsonString, ReadingProgressParams::class.java).asSaveReadingProgressInput() +suspend fun Networker.updateWebReadingProgress(jsonString: String): Boolean { + val params = Gson().fromJson(jsonString, ReadingProgressParams::class.java) + return updateReadingProgress(params) +} + +suspend fun Networker.updateReadingProgress(params: ReadingProgressParams): Boolean { + val input = params.asSaveReadingProgressInput() Log.d("Loggo", "created reading progress input: $input") diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReader.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReader.kt index 5fd2755b1..2233ec4dc 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReader.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReader.kt @@ -260,6 +260,11 @@ class PDFReaderActivity: AppCompatActivity(), DocumentListener, TextSelectionMan return super.onPageClick(document, pageIndex, event, pagePosition, clickedAnnotation) } + override fun onPageChanged(document: PdfDocument, pageIndex: Int) { + viewModel.syncPageChange(pageIndex, document.pageCount) + super.onPageChanged(document, pageIndex) + } + private fun showHighlightSelectionPopover(clickedAnnotation: Annotation) { // TODO: anchor popover at exact position of tap (maybe add an empty view at tap loc and anchor to that?) val popupMenu = PopupMenu(this, fragment.view, Gravity.CENTER, androidx.appcompat.R.attr.actionOverflowMenuStyle, 0) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt index 0fb7f630b..20affa1f0 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt @@ -22,6 +22,8 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import org.json.JSONObject import java.io.File +import java.lang.Double.max +import java.lang.Double.min import java.util.* import javax.inject.Inject @@ -38,6 +40,7 @@ class PDFReaderViewModel @Inject constructor( ): ViewModel() { var annotationUnderNoteEdit: Annotation? = null val pdfReaderParamsLiveData = MutableLiveData(null) + private var currentReadingProgress = 0.0 fun loadItem(slug: String, context: Context) { viewModelScope.launch { @@ -66,6 +69,7 @@ class PDFReaderViewModel @Inject constructor( labelsJSONString = Gson().toJson(articleQueryResult.labels) ) + currentReadingProgress = article.readingProgress pdfReaderParamsLiveData.postValue(PDFReaderParams(article, articleContent, Uri.fromFile(output))) } @@ -80,6 +84,22 @@ class PDFReaderViewModel @Inject constructor( pdfReaderParamsLiveData.postValue(null) } + fun syncPageChange(currentPageIndex: Int, totalPages: Int) { + val rawProgress = ((currentPageIndex + 1).toDouble() / totalPages.toDouble()) * 100 + val percent = min(100.0, max(0.0, rawProgress)) + if (percent > currentReadingProgress) { + currentReadingProgress = percent + viewModelScope.launch { + val params = ReadingProgressParams( + id = pdfReaderParamsLiveData.value?.item?.id, + readingProgressPercent = percent, + readingProgressAnchorIndex = currentPageIndex + ) + networker.updateReadingProgress(params) + } + } + } + fun syncHighlightUpdates(newAnnotation: Annotation, quote: String, overlapIds: List) { val itemID = pdfReaderParamsLiveData.value?.item?.id ?: return val highlightID = UUID.randomUUID().toString() diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt index c30c036ff..7bec12af3 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt @@ -75,7 +75,7 @@ class WebReaderViewModel @Inject constructor( } "articleReadingProgress" -> { viewModelScope.launch { - val isReadingProgressSynced = networker.updateReadingProgress(jsonString) + val isReadingProgressSynced = networker.updateWebReadingProgress(jsonString) Log.d("Network", "isReadingProgressSynced = $isReadingProgressSynced") } }