diff --git a/android/Omnivore/app/build.gradle b/android/Omnivore/app/build.gradle index ce2126bbc..b53fa8a6c 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 25 - versionName "0.0.25" + versionCode 26 + versionName "0.0.26" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/LibraryLiveData.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/LibraryLiveData.kt index c9332b16b..8a198b9fd 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/LibraryLiveData.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/LibraryLiveData.kt @@ -1,7 +1,7 @@ package app.omnivore.omnivore.dataService -import android.util.Log import androidx.lifecycle.LiveData +import androidx.lifecycle.MediatorLiveData import app.omnivore.omnivore.persistence.entities.SavedItemCardDataWithLabels import app.omnivore.omnivore.persistence.entities.SavedItemLabel import app.omnivore.omnivore.ui.library.SavedItemFilter @@ -12,11 +12,10 @@ fun DataService.libraryLiveData( sortFilter: SavedItemSortFilter, labels: List ): LiveData> { - Log.d("lld", "primaryFilter: $primaryFilter, labels: $labels") - + val mediatorLiveData = MediatorLiveData>() val queryParams = LibraryLiveDataQueryParams.make(primaryFilter) - return when (sortFilter) { + val libraryLiveData = when (sortFilter) { SavedItemSortFilter.NEWEST -> db.savedItemDao().getLibraryLiveData( archiveFilter = queryParams.archiveFilter ) @@ -30,6 +29,43 @@ fun DataService.libraryLiveData( archiveFilter = queryParams.archiveFilter ) } + + mediatorLiveData.addSource(libraryLiveData) { result -> + when (primaryFilter) { + SavedItemFilter.INBOX -> { + mediatorLiveData.value = result + } + SavedItemFilter.READ_LATER -> { + mediatorLiveData.value = result.filter { item -> + !item.labels.any { it.name.lowercase() == "newsletter" } + } + } + SavedItemFilter.NEWSLETTERS -> { + mediatorLiveData.value = result.filter { item -> + item.labels.any { it.name.lowercase() == "newsletter" } + } + } + SavedItemFilter.RECOMMENDED -> { + mediatorLiveData.value = result // TODO: "recommendations.@count > 0" + } + SavedItemFilter.ALL -> { + mediatorLiveData.value = result + } + SavedItemFilter.ARCHIVED -> { + mediatorLiveData.value = result + } + SavedItemFilter.HAS_HIGHLIGHTS -> { + mediatorLiveData.value = result // TODO: "highlights.@count > 0" + } + SavedItemFilter.FILES -> { + mediatorLiveData.value = result.filter { item -> + item.cardData.contentReader == "PDF" + } + } + } + } + + return mediatorLiveData } private data class LibraryLiveDataQueryParams( @@ -82,53 +118,3 @@ private data class LibraryLiveDataQueryParams( } } } - -//switch self { -// case .inbox: -// // non-archived items -// return NSCompoundPredicate(andPredicateWithSubpredicates: [undeletedPredicate, notInArchivePredicate]) - -// case .readlater: -// // non-archived or deleted items without the Newsletter label -// let nonNewsletterLabelPredicate = NSPredicate( -// format: "NOT SUBQUERY(labels, $label, $label.name == \"Newsletter\") .@count > 0" -// ) -// return NSCompoundPredicate(andPredicateWithSubpredicates: [ -// undeletedPredicate, notInArchivePredicate, nonNewsletterLabelPredicate -// ]) -// case .newsletters: -// // non-archived or deleted items with the Newsletter label -// let newsletterLabelPredicate = NSPredicate( -// format: "SUBQUERY(labels, $label, $label.name == \"Newsletter\").@count > 0" -// ) -// return NSCompoundPredicate(andPredicateWithSubpredicates: [notInArchivePredicate, newsletterLabelPredicate]) -// case .recommended: -// // non-archived or deleted items with the Newsletter label -// let recommendedPredicate = NSPredicate( -// format: "recommendations.@count > 0" -// ) -// return NSCompoundPredicate(andPredicateWithSubpredicates: [notInArchivePredicate, recommendedPredicate]) -// case .all: -// // include everything undeleted -// return undeletedPredicate -// case .archived: -// let inArchivePredicate = NSPredicate( -// format: "%K == %@", #keyPath(LinkedItem.isArchived), Int(truncating: true) as NSNumber -// ) -// return NSCompoundPredicate(andPredicateWithSubpredicates: [undeletedPredicate, inArchivePredicate]) -// case .files: -// // include pdf only -// let isPDFPredicate = NSPredicate( -// format: "%K == %@", #keyPath(LinkedItem.contentReader), "PDF" -// ) -// return NSCompoundPredicate(andPredicateWithSubpredicates: [undeletedPredicate, isPDFPredicate]) -// case .hasHighlights: -// let hasHighlightsPredicate = NSPredicate( -// format: "highlights.@count > 0" -// ) -// return NSCompoundPredicate(andPredicateWithSubpredicates: [ -// hasHighlightsPredicate -// ]) -//} -//} -//} diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SavedItemFilter.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SavedItemFilter.kt index 6655d1ca7..e9ed148a9 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SavedItemFilter.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SavedItemFilter.kt @@ -28,7 +28,14 @@ fun SavedItemFilterContextMenu( ) { // Displaying only a subset of filters until we figure out the Room DB queries (and labels) // SavedItemFilter.values().forEach { - listOf(SavedItemFilter.INBOX, SavedItemFilter.ARCHIVED, SavedItemFilter.ALL).forEach { + listOf( + SavedItemFilter.INBOX, + SavedItemFilter.READ_LATER, + SavedItemFilter.NEWSLETTERS, + SavedItemFilter.ALL, + SavedItemFilter.ARCHIVED, + SavedItemFilter.FILES + ).forEach { DropdownMenuItem( text = { Text(it.displayText) }, onClick = {