Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upstream tag 0.10.1 (revision 48438e7) #3

Open
wants to merge 89 commits into
base: gestalt
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
349603b
build(deps): bump up dependencies, compile sdk, and gradle version (#…
JunkFood02 Jan 30, 2024
77fd5b9
fix(i18n): configuration loss when switching locale (#541)
JunkFood02 Jan 30, 2024
2ead25a
feat(i18n): add languages to in-app language picker (#571)
JunkFood02 Jan 31, 2024
a2f8496
fix(ui): ProgressIndicator crashes in m3 1.1.2
JunkFood02 Jan 31, 2024
1dc906b
fix(ui): NavigationBarItem color
JunkFood02 Jan 31, 2024
92f994f
fix(ui): accessing listState on io thread causes app to crash
JunkFood02 Feb 1, 2024
57c1d3a
fix(ui): NavigationBar text color
JunkFood02 Feb 1, 2024
802b149
feat(ui): show full screen image viewer when clicking on images (#578)
JunkFood02 Feb 3, 2024
3165aac
feat(ui): add crash report activity to handle uncaught exceptions (#576)
JunkFood02 Feb 3, 2024
e62c0f6
style(settings): add subhead in interaction (#581)
Ashinch Feb 5, 2024
80f335a
refactor(ui): revert "article item line number adaptive"
Ashinch Feb 6, 2024
1b758df
feat(ui): swipe up and down to switch between articles (#589)
JunkFood02 Feb 6, 2024
38ab828
fix(ui): prefetch articleid before mark as read
JunkFood02 Feb 7, 2024
0545723
feat(ui): set maxZoomFactor to 4x & add edge detection
JunkFood02 Feb 8, 2024
a5846d2
fix(ui): prefetch articleId when using Unread filter
JunkFood02 Feb 8, 2024
c21e22d
fix(ui): add paddings to article item & fix ripple
JunkFood02 Feb 9, 2024
8c11757
feat(ui): swipe to star/unstar, swipe to unread (#594)
JunkFood02 Feb 11, 2024
5b51e0b
fix: fix alignment of search bar placeholder text (#608)
lazzzis Feb 12, 2024
44752b8
feat(ui): format time with system locale default (#617)
JunkFood02 Feb 13, 2024
6ed42a2
fix(ui): RTL workaround for `SwipeToDismissBox`
JunkFood02 Feb 13, 2024
8f4d241
fix(worker): remove observer after leaving composition
JunkFood02 Feb 13, 2024
4c7bea9
feat(ui): add feed via system share sheet (#618)
JunkFood02 Feb 14, 2024
733c8d0
fix(ui): remember swipe actions to avoid recomposition
JunkFood02 Feb 18, 2024
6b4b215
fix(ui): page flickers when tapping bottom bar (#621)
lazzzis Feb 18, 2024
4b594ba
fix(ui): avoid overhead by hoisting states
JunkFood02 Feb 19, 2024
8b89644
fix(ui): add article id to content key
JunkFood02 Feb 19, 2024
2438b27
refactor(ui): decouple `ReaderNestedScrollConnection` & PullToLoadState
JunkFood02 Feb 19, 2024
2d9e3de
fix(opml): bump opml-parser to 3.1.0 and re-design OPML export dialog…
Ashinch Feb 20, 2024
a187d38
feat(ui): configuration for pull-to-load gesture
JunkFood02 Feb 20, 2024
1d4c286
Translated using Weblate (Belarusian) (#598)
weblate Feb 22, 2024
713b47d
Translated using Weblate (Kannada) (#596)
weblate Feb 22, 2024
0426b0b
feat(notification): request permission to post notifications on start
JunkFood02 Mar 3, 2024
acef782
fix(rtl): update appcompat to 1.7.0-alpha03
JunkFood02 Mar 5, 2024
cad1143
fix(rtl): use automirrored icons
JunkFood02 Mar 5, 2024
37835a4
feat(ui): save image as file (#627)
JunkFood02 Mar 6, 2024
f06d8ce
fix(ui): load new items from paging data
JunkFood02 Mar 6, 2024
d40743d
fix(sync): replace publish date of an article with the current time i…
Ashinch Mar 8, 2024
6b29a81
style: reformat code
JunkFood02 Mar 8, 2024
7a90aa3
feat(ui): add list and manage buttons in account switch tab dialog (#…
Ashinch Mar 8, 2024
df23902
feat(rss): support batch mark articles as read (#640)
Ashinch Mar 8, 2024
db65c3d
refactor(ui): migrate to tone-based surfaces in MD3 (#619)
JunkFood02 Mar 10, 2024
53523e4
feat(ui): long press on an item to show context menu (#613)
JunkFood02 Mar 10, 2024
098ec08
feat(ui): add line height multiple preference for reading page (#620)
JunkFood02 Mar 10, 2024
fab99b2
Revert "fix(ui): load new items from paging data"
JunkFood02 Mar 10, 2024
4413686
fix(rss): fix NPE when published date and updated date are both empty
JunkFood02 Mar 14, 2024
69d7124
feat(infrastructure): add except BusinessException case for crash han…
Ashinch Mar 18, 2024
9085994
fix(rss): ignore starred articles by default when clean feed or group…
Ashinch Mar 18, 2024
dfcba9c
fix(opml): ignore default group non-null check for service accounts w…
Ashinch Mar 21, 2024
7ea1893
Translated using Weblate (Hindi) (#632)
weblate Mar 26, 2024
d88a542
Translated using Weblate (German) (#631)
weblate Mar 26, 2024
2771989
feat(reading): support for specifying the composition of shared conte…
Ashinch Mar 26, 2024
ed6a5c9
style(settings): add tips for keep archived articles (#662)
Ashinch Mar 26, 2024
d705726
style(components): migrate switch component to md3 and improve intera…
Ashinch Mar 26, 2024
cbc0e06
feat(about): add license list page and improve about page (#664)
Ashinch Mar 26, 2024
d749107
feat(font): automatically restart the app after loading external font…
Ashinch Mar 27, 2024
826819a
feat(settings): add troubleshooting page and app preferences import/e…
Ashinch Mar 28, 2024
53aced9
fix(ui): remove toast on non-main thread
Ashinch Apr 2, 2024
b81f3e5
docs: remove invalid sponsorship links (#680)
Ashinch Apr 3, 2024
c7b7283
fix(rss): first find the enclosure tag as a thumbnail (#681)
Ashinch Apr 3, 2024
71b470a
test: add RssHelperTest.kt
Ashinch Apr 3, 2024
1199c68
feat(ui): switch to androidx edge to edge implementation (#690)
Moderpach Apr 27, 2024
1bf597d
fix(ui): menu position jitters when animating content height
JunkFood02 Apr 28, 2024
571840a
fix(ui): disable pull to load when no articles available
JunkFood02 Apr 28, 2024
29b2e10
Translated using Weblate (Polish) (#673)
weblate May 30, 2024
0f41e92
Translated using Weblate (French) (#671)
weblate May 30, 2024
bddc876
fix: remove whitespace & line break before opening URLs
JunkFood02 May 30, 2024
de9986c
fix(ui): update the status bar icons to match the current theme
JunkFood02 May 30, 2024
66e38c4
build(deps): update everything from androidx
JunkFood02 May 30, 2024
a1e4383
feat(settings): support export and import json for preferences (#710)
Ashinch May 31, 2024
4b42d2e
feat(greader): sort categories alphabetically during sync (#700)
mbestavros May 31, 2024
28b2016
Translated using Weblate (Serbian) (#711)
weblate Jun 2, 2024
30ca34e
refactor(ui): use static webp for placeholder (#712)
JunkFood02 Jun 2, 2024
a3ff77e
fix(ui): fix performance & data loading issues with sticky headers di…
JunkFood02 Jun 2, 2024
a0cab0e
Translated using Weblate (Chinese (Traditional)) (#713)
weblate Jun 2, 2024
b8d793e
Update version 0.10.0
Ashinch Jun 2, 2024
ab0e07a
Translated using Weblate (Czech) (#716)
weblate Jun 3, 2024
8fb090e
fix(ui): feedicon text style (#726)
Ashinch Jun 3, 2024
3d022a8
fix(preferences): revert newVersionSize to newVersionSizeString (#718)
Ashinch Jun 4, 2024
8e45258
chore(greader): add null checks in greader service (#724)
JunkFood02 Jun 4, 2024
f9bb04c
fix(opml): title is empty when importing (#735)
Ashinch Jun 5, 2024
01801ce
chore: add junkfood to FUNDING.yml
JunkFood02 Jun 5, 2024
44ad6f3
fix(ui): use AutoMirrored icons
JunkFood02 Jun 5, 2024
0d0477e
fix(ui): migrate to androidx-navigation-animation & ui bug fix (#717)
JunkFood02 Jun 5, 2024
3c8e11f
fix(ui): apply "any-RTL" algorithm for correct text direction on some…
JunkFood02 Jun 5, 2024
c68e2a3
fix(preference): rename left/right text align to start/end (#733)
JunkFood02 Jun 5, 2024
7db67c3
Translated using Weblate (Slovak) (#728)
weblate Jun 5, 2024
683a024
Translated using Weblate (Persian) (#736)
weblate Jun 5, 2024
688eabd
Update version 0.10.1
Ashinch Jun 5, 2024
313dcfb
Merge branch 'gestalt' into upstream-to-pr/rev-48438e7
hufman Jun 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
custom: ['https://www.buymeacoffee.com/ashinch', 'https://afdian.net/a/ashinch']
custom: ['https://afdian.net/a/ashinch']
github: [junkfood02]
2 changes: 1 addition & 1 deletion README-de.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ Wählen Sie den neuesten Workflow auf der GitHub Actions-Seite aus und laden Sie

**Read You** ist eine kostenlose Open-Source-Software, die von der Open-Source-Gemeinschaft profitiert, und jeder Benutzer kann ihre volle Funktionalität kostenlos genießen. Wenn Sie also meine aktuelle Arbeit wertschätzen, können Sie mir gerne eine Tasse Kaffee spendieren ☕️.

<a href="https://www.buymeacoffee.com/ashinch"><img width="200px" src="https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=&slug=ashinch&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff" /></a>
[<img src="https://s1.ax1x.com/2023/01/12/pSnHqpQ.png" alt="donate" height="80">](https://afdian.net/a/ashinch)

Danke für all die Liebe und Unterstützung ❤️

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,11 @@ If an [AAIdrive](https://github.com/BimmerGestalt/AAIdrive)-compatible car is co

Please use the [official ReadYou app](https://github.com/Ashinch/ReadYou) if you don't need car features because it will be more updated.

## Sponsor
## Sponsorship

**Read You** is a free open source software that benefits from the open source community and every user can enjoy it's full functionality for free, so if you appreciate my current work, you can buy me a cup of coffee ☕️.

<a href="https://www.buymeacoffee.com/ashinch"><img width="200px" src="https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=&slug=ashinch&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff" /></a>
[<img src="https://s1.ax1x.com/2023/01/12/pSnHqpQ.png" alt="donate" height="80">](https://afdian.net/a/ashinch)

Thanks for all the love and support ❤️

Expand Down
99 changes: 62 additions & 37 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ plugins {
id "org.jetbrains.kotlin.android"
id "kotlin-kapt"
id "dagger.hilt.android.plugin"
id "androidx.navigation.safeargs.kotlin"
id "com.google.dagger.hilt.android"
id 'com.mikepenz.aboutlibraries.plugin'
}

apply from: '../external/external.gradle'
Expand All @@ -17,14 +18,14 @@ if (keyPropsFile.exists()) {
}

android {
compileSdk 33
compileSdk 34

defaultConfig {
applicationId "me.ash.reader"
minSdk 26
targetSdk 33
versionCode 23
versionName "0.9.12"
versionCode 25
versionName "0.10.1"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
Expand All @@ -43,16 +44,16 @@ android {

flavorDimensions "channel"
productFlavors {
github {
dimension "channel"
}
fdroid {
dimension "channel"
}
googlePlay {
dimension "channel"
applicationIdSuffix ".google.play"
}
github {
dimension "channel"
}
gestalt {
dimension "channel"
}
Expand All @@ -65,6 +66,9 @@ android {
storePassword keyProps["storePassword"]
}
}
lint {
disable.addAll("MissingTranslation", "ExtraTranslation")
}
buildTypes {
release {
minifyEnabled true
Expand All @@ -82,27 +86,38 @@ android {
freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "1.8"
jvmTarget = JavaVersion.VERSION_11
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion compose
kotlinCompilerExtensionVersion '1.5.8'
}
packagingOptions {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}

// https://developer.android.com/guide/topics/resources/app-languages#auto-localeconfig
androidResources {
generateLocaleConfig true
}

namespace 'me.ash.reader'
}

dependencies {
// https://github.com/mikepenz/AboutLibraries/releases
implementation "com.mikepenz:aboutlibraries-core:${aboutLibsRelease}"
implementation "com.mikepenz:aboutlibraries-compose-m3:${aboutLibsRelease}"

// https://github.com/ireward/compose-html/tags
implementation "com.github.ireward:compose-html:1.0.2"

// http://bigbadaboom.github.io/androidsvg/release_notes.html
Expand All @@ -123,6 +138,9 @@ dependencies {
implementation("io.coil-kt:coil-svg:$coil")
implementation("io.coil-kt:coil-gif:$coil")

// https://saket.github.io/telephoto/zoomableimage/
implementation("me.saket.telephoto:zoomable:0.7.1")

// Cancel TLSv1.3 support pre Android10
// implementation 'org.conscrypt:conscrypt-android:2.5.2'

Expand All @@ -148,12 +166,12 @@ dependencies {
kapt "androidx.room:room-compiler:$room"

// https://developer.android.com/jetpack/androidx/releases/paging
implementation "androidx.paging:paging-common:$paging"
implementation "androidx.paging:paging-runtime:$paging"
implementation "androidx.paging:paging-compose:1.0.0-alpha14"
implementation "androidx.paging:paging-common-ktx:$paging"
implementation "androidx.paging:paging-runtime-ktx:$paging"
implementation "androidx.paging:paging-compose:$paging"

// https://developer.android.com/jetpack/androidx/releases/paging
implementation "androidx.browser:browser:1.5.0"
implementation "androidx.browser:browser:1.8.0"

// https://developer.android.com/jetpack/androidx/releases/navigation
implementation "androidx.navigation:navigation-compose:$navigation"
Expand All @@ -163,42 +181,49 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle"

// https://developer.android.com/jetpack/androidx/releases/compose-material3
implementation "androidx.compose.material3:material3:$material3"
implementation "androidx.compose.material3:material3"

// https://github.com/google/accompanist/releases
implementation "com.google.accompanist:accompanist-insets:$accompanist"
implementation "com.google.accompanist:accompanist-systemuicontroller:$accompanist"
implementation "com.google.accompanist:accompanist-pager:$accompanist"
implementation "com.google.accompanist:accompanist-flowlayout:$accompanist"
implementation "com.google.accompanist:accompanist-navigation-animation:$accompanist"
implementation "com.google.accompanist:accompanist-swiperefresh:$accompanist"

implementation platform("androidx.compose:compose-bom:$composeBom")
androidTestImplementation(platform("androidx.compose:compose-bom:$composeBom"))

// https://developer.android.com/jetpack/androidx/releases/compose-animation
implementation "androidx.compose.animation:animation-graphics:$compose"
implementation "androidx.compose.animation:animation-graphics"
// https://developer.android.com/jetpack/androidx/releases/compose-ui
implementation "androidx.compose.ui:ui:$compose"
implementation "androidx.compose.ui:ui-util:$compose"
implementation "androidx.compose.ui:ui"
implementation "androidx.compose.ui:ui-util"
// https://developer.android.com/jetpack/androidx/releases/compose-material
implementation "androidx.compose.material:material:$compose"
implementation "androidx.compose.material:material-icons-extended:$compose"
debugImplementation "androidx.compose.ui:ui-tooling:$compose"
implementation "androidx.compose.ui:ui-tooling-preview:$compose"
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose"
implementation "androidx.compose.material:material"
implementation "androidx.compose.material:material-icons-extended"
implementation "androidx.compose.ui:ui-tooling"
implementation "androidx.compose.ui:ui-tooling-preview"

androidTestImplementation "androidx.compose.ui:ui-test-junit4"

// hilt
implementation "androidx.hilt:hilt-work:1.0.0"
implementation "com.google.dagger:hilt-android:2.40.5"
kapt "com.google.dagger:hilt-android-compiler:2.40.5"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.0.0"
implementation "androidx.hilt:hilt-navigation-compose:1.0.0"
implementation "androidx.hilt:hilt-work:1.1.0"
implementation "com.google.dagger:hilt-android:2.50"
kapt "com.google.dagger:hilt-android-compiler:2.50"
// implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.1.0"
implementation "androidx.hilt:hilt-navigation-compose:1.1.0"

// android
implementation "androidx.core:core-ktx:1.7.0"
implementation "androidx.activity:activity-compose:1.4.0"
implementation "androidx.core:core-ktx:1.13.1"
implementation "androidx.activity:activity-compose:1.9.0"
implementation 'androidx.appcompat:appcompat:1.7.0'
testImplementation "junit:junit:4.13.2"
androidTestImplementation "androidx.test.ext:junit:1.1.3"
androidTestImplementation "androidx.test.espresso:espresso-core:3.4.0"
androidTestImplementation "androidx.test.ext:junit:1.1.5"
androidTestImplementation "androidx.test.espresso:espresso-core:3.5.1"

// mockito
testImplementation "org.mockito:mockito-core:5.11.0"
testImplementation 'org.mockito:mockito-junit-jupiter:5.11.0'
testImplementation "org.mockito.kotlin:mockito-kotlin:5.2.1"

// BimmerGestalt
gestaltImplementation 'io.bimmergestalt:IDriveConnectKit:0.6'
Expand Down
8 changes: 7 additions & 1 deletion app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,10 @@
-keep class com.rometools.** { *; }

# Provider API
-keep class me.ash.reader.infrastructure.** { *; }
-keep class me.ash.reader.** { *; }

# https://github.com/flutter/flutter/issues/127388
-dontwarn org.kxml2.io.KXml**

# https://youtrack.jetbrains.com/issue/KTOR-5528
-dontwarn org.slf4j.impl.StaticLoggerBinder
54 changes: 52 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28" />
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
Expand All @@ -27,12 +28,52 @@
<activity
android:name=".infrastructure.android.MainActivity"
android:exported="true"
android:launchMode="singleInstance"
android:theme="@style/Theme.Reader">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="http" />
<data android:scheme="https" />

<data android:host="*" />

<data android:mimeType="text/xml" />
<data android:mimeType="application/rss+xml" />
<data android:mimeType="application/atom+xml" />
<data android:mimeType="application/xml" />
<data android:mimeType="application/json" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<activity
android:name=".infrastructure.android.CrashReportActivity"
android:exported="false"
android:theme="@style/Theme.Reader">

</activity>

<provider
Expand All @@ -49,6 +90,15 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

<service
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
android:enabled="false"
android:exported="false">
<meta-data
android:name="autoStoreLocales"
android:value="true" />
</service>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package me.ash.reader.domain.model.general

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.rounded.Subject
import androidx.compose.material.icons.outlined.FiberManualRecord
import androidx.compose.material.icons.rounded.FiberManualRecord
import androidx.compose.material.icons.rounded.Star
Expand Down Expand Up @@ -65,8 +66,8 @@ class Filter private constructor(
)
val All = Filter(
index = 2,
iconOutline = Icons.Rounded.Subject,
iconFilled = Icons.Rounded.Subject,
iconOutline = Icons.AutoMirrored.Rounded.Subject,
iconFilled = Icons.AutoMirrored.Rounded.Subject,
)
val values = listOf(Starred, Unread, All)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -370,9 +370,10 @@ interface ArticleDao {
DELETE FROM article
WHERE accountId = :accountId
AND feedId = :feedId
AND (isStarred = :includeStarred OR :includeStarred = 1)
"""
)
suspend fun deleteByFeedId(accountId: Int, feedId: String)
suspend fun deleteByFeedId(accountId: Int, feedId: String, includeStarred: Boolean = false)

@Query(
"""
Expand All @@ -383,10 +384,11 @@ interface ArticleDao {
AND a.feedId = b.id
AND b.groupId = c.id
AND c.id = :groupId
AND (a.isStarred = :includeStarred OR :includeStarred = 1)
)
"""
)
suspend fun deleteByGroupId(accountId: Int, groupId: String)
suspend fun deleteByGroupId(accountId: Int, groupId: String, includeStarred: Boolean = false)

@Query(
"""
Expand Down
Loading
Loading