add mark as read action

This commit is contained in:
Stefano Sansone
2024-02-05 19:05:27 +00:00
parent 2b24e24cf3
commit f798adfe5c
10 changed files with 616 additions and 475 deletions

View File

@ -86,7 +86,7 @@ android {
dependencies { dependencies {
def nav_version = "2.5.3" def nav_version = "2.5.3"
implementation 'androidx.core:core-ktx:1.9.0' implementation("androidx.core:core-ktx:1.12.0")
implementation "androidx.compose.ui:ui:$compose_version" implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.material:material:$compose_version" implementation "androidx.compose.material:material:$compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
@ -111,6 +111,7 @@ dependencies {
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
// ViewModel utilities for Compose // ViewModel utilities for Compose
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version")
// LiveData // LiveData
implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
implementation("androidx.compose.runtime:runtime-livedata:1.3.2") implementation("androidx.compose.runtime:runtime-livedata:1.3.2")
@ -131,13 +132,13 @@ dependencies {
implementation "androidx.security:security-crypto:1.0.0" implementation "androidx.security:security-crypto:1.0.0"
implementation "androidx.datastore:datastore-preferences:1.0.0" implementation "androidx.datastore:datastore-preferences:1.0.0"
//Dagger - Hilt // Dagger - Hilt
implementation "com.google.dagger:hilt-android:$hilt_version" implementation("com.google.dagger:hilt-android:$hilt_version")
kapt "com.google.dagger:hilt-compiler:$hilt_version" kapt("com.google.dagger:hilt-compiler:$hilt_version")
implementation("com.apollographql.apollo3:apollo-runtime:3.8.2") implementation("com.apollographql.apollo3:apollo-runtime:3.8.2")
implementation 'androidx.compose.material3:material3:1.1.2' implementation("androidx.compose.material3:material3:1.1.2")
implementation 'androidx.compose.material3:material3-window-size-class:1.1.2' implementation 'androidx.compose.material3:material3-window-size-class:1.1.2'
implementation 'com.google.android.gms:play-services-auth:20.4.0' implementation 'com.google.android.gms:play-services-auth:20.4.0'

View File

@ -3,18 +3,41 @@ package app.omnivore.omnivore.ui.library
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.lifecycle.* import androidx.lifecycle.MediatorLiveData
import app.omnivore.omnivore.* import androidx.lifecycle.MutableLiveData
import app.omnivore.omnivore.dataService.* import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import app.omnivore.omnivore.DatastoreKeys
import app.omnivore.omnivore.DatastoreRepository
import app.omnivore.omnivore.R
import app.omnivore.omnivore.dataService.DataService
import app.omnivore.omnivore.dataService.archiveSavedItem
import app.omnivore.omnivore.dataService.deleteSavedItem
import app.omnivore.omnivore.dataService.fetchSavedItemContent
import app.omnivore.omnivore.dataService.isSavedItemContentStoredInDB
import app.omnivore.omnivore.dataService.librarySearch
import app.omnivore.omnivore.dataService.sync
import app.omnivore.omnivore.dataService.syncLabels
import app.omnivore.omnivore.dataService.syncOfflineItemsWithServerIfNeeded
import app.omnivore.omnivore.dataService.unarchiveSavedItem
import app.omnivore.omnivore.dataService.updateWebReadingProgress
import app.omnivore.omnivore.graphql.generated.type.CreateLabelInput import app.omnivore.omnivore.graphql.generated.type.CreateLabelInput
import app.omnivore.omnivore.network.* import app.omnivore.omnivore.network.Networker
import app.omnivore.omnivore.persistence.entities.* import app.omnivore.omnivore.network.createNewLabel
import app.omnivore.omnivore.persistence.entities.SavedItemLabel
import app.omnivore.omnivore.persistence.entities.SavedItemWithLabelsAndHighlights
import app.omnivore.omnivore.ui.ResourceProvider import app.omnivore.omnivore.ui.ResourceProvider
import app.omnivore.omnivore.ui.setSavedItemLabels import app.omnivore.omnivore.ui.setSavedItemLabels
import com.apollographql.apollo3.api.Optional import com.apollographql.apollo3.api.Optional
import com.google.gson.Gson
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.* import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import java.time.Instant import java.time.Instant
import javax.inject.Inject import javax.inject.Inject
@ -307,6 +330,20 @@ class LibraryViewModel @Inject constructor(
currentItemLiveData.value = itemID currentItemLiveData.value = itemID
bottomSheetState.value = LibraryBottomSheetState.EDIT bottomSheetState.value = LibraryBottomSheetState.EDIT
} }
SavedItemAction.MarkRead -> {
viewModelScope.launch {
dataService.updateWebReadingProgress(
jsonString = Gson().toJson(
mapOf(
"id" to itemID,
"readingProgressPercent" to 100.0,
"readingProgressAnchorIndex" to 0
)
)
)
}
}
} }
actionsMenuItemLiveData.postValue(null) actionsMenuItemLiveData.postValue(null)
} }
@ -405,4 +442,5 @@ enum class SavedItemAction {
Unarchive, Unarchive,
EditLabels, EditLabels,
EditInfo, EditInfo,
MarkRead
} }

View File

@ -162,6 +162,8 @@ class SearchViewModel @Inject constructor(
SavedItemAction.EditInfo -> { SavedItemAction.EditInfo -> {
// TODO // TODO
} }
SavedItemAction.MarkRead -> TODO()
} }
actionsMenuItemLiveData.postValue(null) actionsMenuItemLiveData.postValue(null)
} }

View File

@ -2,6 +2,7 @@ package app.omnivore.omnivore.ui.savedItemViews
import android.content.Context import android.content.Context
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Check
import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Info
import androidx.compose.material.icons.outlined.Share import androidx.compose.material.icons.outlined.Share
@ -101,5 +102,18 @@ fun SavedItemContextMenu(
) )
} }
) )
DropdownMenuItem(
text = { Text(stringResource(R.string.saved_item_context_menu_action_mark_read)) },
onClick = {
actionHandler(SavedItemAction.MarkRead)
onDismiss()
},
leadingIcon = {
Icon(
Icons.Outlined.Check,
contentDescription = null
)
}
)
} }
} }

View File

@ -186,6 +186,7 @@
<string name="saved_item_context_menu_action_unarchive">Unarchive</string> <string name="saved_item_context_menu_action_unarchive">Unarchive</string>
<string name="saved_item_context_menu_action_share_original">Share Original</string> <string name="saved_item_context_menu_action_share_original">Share Original</string>
<string name="saved_item_context_menu_action_remove_item">Remove Item</string> <string name="saved_item_context_menu_action_remove_item">Remove Item</string>
<string name="saved_item_context_menu_action_mark_read">Mark read</string>
<!-- LogoutDialog --> <!-- LogoutDialog -->
<string name="logout_dialog_title">Logout</string> <string name="logout_dialog_title">Logout</string>

View File

@ -3,7 +3,7 @@ buildscript {
compose_version = '1.6.0' compose_version = '1.6.0'
lifecycle_version = '2.5.1' lifecycle_version = '2.5.1'
hilt_version = '2.44.2' hilt_version = '2.44.2'
gradle_plugin_version = '7.4.2' gradle_plugin_version = '8.2.2'
room_version = '2.4.3' room_version = '2.4.3'
kotlin_version = '1.7.10' kotlin_version = '1.7.10'
} }

View File

@ -22,3 +22,5 @@ kotlin.code.style=official
# resources declared in the library itself and none from the library's dependencies, # resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library # thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true android.nonTransitiveRClass=true
android.defaults.buildfeatures.buildconfig=true
android.nonFinalResIds=false

View File

@ -1,6 +1,6 @@
#Wed Aug 10 17:39:47 PDT 2022 #Thu Feb 01 13:22:21 GMT 2024
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -13,8 +13,8 @@ dependencyResolutionManagement {
maven { maven {
url = uri("https://customers.pspdfkit.com/maven") url = uri("https://customers.pspdfkit.com/maven")
} }
maven { url 'https://jitpack.io' } maven(url = "https://jitpack.io")
} }
} }
rootProject.name = "Omnivore" rootProject.name = "Omnivore"
include ':app' include(":app")