From 5aff626c84c08a80cf33dbcfee5976100684c824 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 12 Oct 2023 15:11:07 +0800 Subject: [PATCH] Send highlight positions on Android --- android/Omnivore/app/build.gradle | 4 ++-- .../src/main/graphql/ArticleContent.graphql | 2 ++ .../dataService/HighlightActionHandlers.kt | 10 +++++--- .../omnivore/dataService/LibrarySync.kt | 5 ++-- .../omnivore/networking/HighlightMutations.kt | 14 +++++++---- .../omnivore/networking/SavedItemQuery.kt | 4 +++- .../omnivore/networking/SearchQuery.kt | 6 ++--- .../omnivore/persistence/AppDatabase.kt | 2 +- .../persistence/entities/Highlight.kt | 5 ++-- .../omnivore/omnivore/ui/reader/WebReader.kt | 24 +++++++++---------- 10 files changed, 46 insertions(+), 30 deletions(-) diff --git a/android/Omnivore/app/build.gradle b/android/Omnivore/app/build.gradle index 0b03709cc..e525d3c63 100644 --- a/android/Omnivore/app/build.gradle +++ b/android/Omnivore/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.omnivore.omnivore" minSdk 26 targetSdk 33 - versionCode 102 - versionName "0.0.102" + versionCode 110 + versionName "0.0.110" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/android/Omnivore/app/src/main/graphql/ArticleContent.graphql b/android/Omnivore/app/src/main/graphql/ArticleContent.graphql index 83ed8da7b..3070ab101 100644 --- a/android/Omnivore/app/src/main/graphql/ArticleContent.graphql +++ b/android/Omnivore/app/src/main/graphql/ArticleContent.graphql @@ -57,6 +57,8 @@ fragment HighlightFields on Highlight { updatedAt sharedAt color + highlightPositionPercent + highlightPositionAnchorIndex } fragment LabelFields on Label { diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/HighlightActionHandlers.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/HighlightActionHandlers.kt index d92975f89..6e9492aea 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/HighlightActionHandlers.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/HighlightActionHandlers.kt @@ -1,12 +1,10 @@ package app.omnivore.omnivore.dataService -import app.omnivore.omnivore.graphql.generated.type.CreateHighlightInput import app.omnivore.omnivore.graphql.generated.type.HighlightType import app.omnivore.omnivore.models.ServerSyncStatus import app.omnivore.omnivore.networking.* import app.omnivore.omnivore.persistence.entities.Highlight import app.omnivore.omnivore.persistence.entities.SavedItemAndHighlightCrossRef -import com.apollographql.apollo3.api.Optional import com.google.gson.Gson import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -29,6 +27,8 @@ suspend fun DataService.createWebHighlight(jsonString: String, colorName: String updatedAt = null, createdByMe = false, color = colorName ?: createHighlightInput.color.getOrNull(), + highlightPositionPercent = createHighlightInput.highlightPositionPercent.getOrNull() ?: 0.0, + highlightPositionAnchorIndex = createHighlightInput.highlightPositionAnchorIndex.getOrNull() ?: 0 ) highlight.serverSyncStatus = ServerSyncStatus.NEEDS_CREATION.rawValue @@ -66,7 +66,9 @@ suspend fun DataService.createNoteHighlight(savedItemId: String, note: String): createdAt = null, updatedAt = null, createdByMe = true, - color = null + color = null, + highlightPositionAnchorIndex = 0, + highlightPositionPercent = 0.0 ) highlight.serverSyncStatus = ServerSyncStatus.NEEDS_CREATION.rawValue @@ -87,6 +89,8 @@ suspend fun DataService.createNoteHighlight(savedItemId: String, note: String): quote = null, patch = null, annotation = note, + highlightPositionAnchorIndex = 0, + highlightPositionPercent = 0.0 ).asCreateHighlightInput()) newHighlight?.let { diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/LibrarySync.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/LibrarySync.kt index f914190ba..44a0dbaf4 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/LibrarySync.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/LibrarySync.kt @@ -1,7 +1,6 @@ package app.omnivore.omnivore.dataService import android.util.Log -import androidx.room.PrimaryKey import app.omnivore.omnivore.models.ServerSyncStatus import app.omnivore.omnivore.networking.* import app.omnivore.omnivore.persistence.entities.* @@ -85,7 +84,9 @@ suspend fun DataService.sync(since: String, cursor: String?, limit: Int = 20): S suffix = highlight.highlightFields.suffix, createdAt = null, updatedAt = highlight.highlightFields.updatedAt as String?, - color = highlight.highlightFields.color + color = highlight.highlightFields.color, + highlightPositionPercent = highlight.highlightFields.highlightPositionPercent, + highlightPositionAnchorIndex = highlight.highlightFields.highlightPositionAnchorIndex, ) } ?: listOf() SavedItemWithLabelsAndHighlights( diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/HighlightMutations.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/HighlightMutations.kt index b90f1708c..2bc7033d4 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/HighlightMutations.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/HighlightMutations.kt @@ -20,7 +20,9 @@ data class CreateHighlightParams( val quote: String?, val patch: String?, val articleId: String?, - val `annotation`: String? + val `annotation`: String?, + val highlightPositionAnchorIndex: Int, + val highlightPositionPercent: Double ) { fun asCreateHighlightInput() = CreateHighlightInput( type = Optional.presentIfNotNull(type), @@ -29,7 +31,9 @@ data class CreateHighlightParams( id = id ?: "", patch = Optional.presentIfNotNull(patch), quote = Optional.presentIfNotNull(quote), - shortId = shortId ?: "" + shortId = shortId ?: "", + highlightPositionAnchorIndex = Optional.presentIfNotNull(highlightPositionAnchorIndex), + highlightPositionPercent = Optional.presentIfNotNull(highlightPositionPercent) ) } @@ -151,8 +155,10 @@ suspend fun Networker.createHighlight(input: CreateHighlightInput): Highlight? { createdAt = createdHighlight.highlightFields.createdAt.toString(), updatedAt = createdHighlight.highlightFields.updatedAt.toString(), createdByMe = createdHighlight.highlightFields.createdByMe, - color = createdHighlight.highlightFields.color - ) + color = createdHighlight.highlightFields.color, + highlightPositionPercent = createdHighlight.highlightFields.highlightPositionPercent, + highlightPositionAnchorIndex = createdHighlight.highlightFields.highlightPositionAnchorIndex + ) } else { return null } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemQuery.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemQuery.kt index 30016cfcb..2fd8e9298 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemQuery.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemQuery.kt @@ -54,7 +54,9 @@ suspend fun Networker.savedItem(slug: String): SavedItemQueryResponse { createdAt = it.highlightFields.createdAt as String?, updatedAt = it.highlightFields.updatedAt as String?, createdByMe = it.highlightFields.createdByMe, - color = it.highlightFields.color + color = it.highlightFields.color, + highlightPositionPercent = it.highlightFields.highlightPositionPercent, + highlightPositionAnchorIndex = it.highlightFields.highlightPositionAnchorIndex ) } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SearchQuery.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SearchQuery.kt index 52cfbd19a..018dce283 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SearchQuery.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SearchQuery.kt @@ -1,8 +1,6 @@ package app.omnivore.omnivore.networking -import androidx.room.PrimaryKey import app.omnivore.omnivore.graphql.generated.SearchQuery -import app.omnivore.omnivore.graphql.generated.TypeaheadSearchQuery import app.omnivore.omnivore.models.ServerSyncStatus import app.omnivore.omnivore.persistence.entities.* import com.apollographql.apollo3.api.Optional @@ -82,7 +80,9 @@ suspend fun Networker.search( suffix = highlight.highlightFields.suffix, updatedAt = highlight.highlightFields.updatedAt as String?, createdAt = highlight.highlightFields.createdAt as String?, - color = highlight.highlightFields.color + color = highlight.highlightFields.color, + highlightPositionPercent = highlight.highlightFields.highlightPositionPercent, + highlightPositionAnchorIndex = highlight.highlightFields.highlightPositionAnchorIndex ) } ) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt index ac39dbbc4..07202993f 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt @@ -13,7 +13,7 @@ import app.omnivore.omnivore.persistence.entities.* SavedItemAndSavedItemLabelCrossRef::class, SavedItemAndHighlightCrossRef::class ], - version = 9 + version = 11 ) abstract class AppDatabase : RoomDatabase() { abstract fun viewerDao(): ViewerDao diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/Highlight.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/Highlight.kt index c26d5224b..8d133ad89 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/Highlight.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/Highlight.kt @@ -1,6 +1,5 @@ package app.omnivore.omnivore.persistence.entities -import androidx.lifecycle.LiveData import androidx.room.* import app.omnivore.omnivore.models.ServerSyncStatus import com.google.gson.annotations.SerializedName @@ -22,7 +21,9 @@ data class Highlight( var shortId: String, val suffix: String?, val updatedAt: String?, - val color: String? + val color: String?, + val highlightPositionPercent: Double?, + val highlightPositionAnchorIndex: Int? ) @Entity( diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt index 8a1372802..1387f57bb 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt @@ -152,18 +152,18 @@ fun WebReader( webReaderViewModel.resetJavascriptDispatchQueue() } }) - if (showHighlightColorPalette.value == true) { - HighlightColorPalette( - mode = if (isDarkMode) HighlightColorPaletteMode.Dark else HighlightColorPaletteMode.Light, - selectedColorName = highlightColor.value?.name ?: "yellow", - onColorSelected = { - webReaderViewModel.setHighlightColor(it) - }, - modifier = Modifier - .align(Alignment.BottomCenter) - .padding(12.dp, 12.dp, 12.dp, 36.dp) - ) - } +// if (showHighlightColorPalette.value == true) { +// HighlightColorPalette( +// mode = if (isDarkMode) HighlightColorPaletteMode.Dark else HighlightColorPaletteMode.Light, +// selectedColorName = highlightColor.value?.name ?: "yellow", +// onColorSelected = { +// webReaderViewModel.setHighlightColor(it) +// }, +// modifier = Modifier +// .align(Alignment.BottomCenter) +// .padding(12.dp, 12.dp, 12.dp, 36.dp) +// ) +// } } }