241 Commits

Author SHA1 Message Date
Ray c
a4ffd9c535 Resurrect from my 'Elvis' falls' in getBestLocale
Apparently Elvis' got style
2025-11-05 07:10:57 +00:00
Torsten Grote
07b56f0516 Upgrade Dokka syntax to v2 2025-11-04 08:50:56 -03:00
Torsten Grote
5a04b315d5 Upgrade maven publishing plugin 2025-11-04 08:50:56 -03:00
Torsten Grote
1e4c9f39ed Enable Binary compatibility validation
which is still experimental, but allows us to sport API breakage in CI. It still doesn't produce anything for the database lib.
2025-11-04 08:50:55 -03:00
Torsten Grote
911b337db7 Untangle libraries slightly by creating a common core library 2025-11-04 08:50:55 -03:00
Torsten Grote
ba7731af6c Migrate build scripts from Groovy to Kotlin 2025-11-04 08:50:55 -03:00
Torsten Grote
cc2010ff63 [db] Increase concurrency delay for RepoAdderTest
still a hack, but synchronizing the coroutines doesn't seem trivial
2025-11-04 08:50:54 -03:00
Torsten Grote
800d5bfe85 [db] Fix bug where repos/mirrors could be added twice
This could happen when tapping a button quickly two times in the UI. While we had provisions to ensure proper states, these didn't work, because a parallel fetching job would mess with our state allowing the adding code to run more than once.
2025-11-04 08:50:54 -03:00
Torsten Grote
77d8127015 [db] Don't cancel index fetching after enabling archive
This can cause other exceptions (e.g. in json parsing) which prevent repo from getting added properly.

Also, when updating the archive for the first time, we can now re-use the downloaded index.
2025-11-04 08:50:54 -03:00
Torsten Grote
4ad356249a [db] Fix UI update when deleting repo 2025-11-04 08:50:54 -03:00
Torsten Grote
3d5acc401b [db] Update repo shareUri to use fdroid.link 2025-11-04 08:50:53 -03:00
Torsten Grote
5ab649f14d [db] optimize adding repos
We now hang on to the index file while streaming it for repo preview purposes. This avoids having to re-download that file and we can properly add the repo right away.

This then allows us to bring the user to the list of apps in that repository without it being initially empty.
2025-11-04 08:50:53 -03:00
Torsten Grote
3284745c81 [db] deprecate caching of localized app name and summary
This led to many hard to debug issues in the past. It is easier to always fetch fresh data and not cache it.

Previously, we needed the cache as a search index. Now, search uses all localizations, so the cache isn't needed anymore.
2025-11-04 08:50:52 -03:00
Torsten Grote
290cfcee34 [db] New AppOverviewItems AppDao methods 2025-11-04 08:50:52 -03:00
Torsten Grote
a45c9763e5 [db] retrieve categories to enable post-query filtering 2025-11-04 08:50:52 -03:00
Torsten Grote
dff226a935 [db] Add different search API
for more flexible search result sorting and faster search
2025-11-04 08:50:51 -03:00
Torsten Grote
b33800bf5c [db] Add more information to versions
such as versionName and added date.
Also allow passing in UpdateChecker for DbUpdateChecker
2025-11-04 08:50:51 -03:00
Torsten Grote
7c490a2903 [db] expose installedVersionName for UpdatableApp
so that we can show to what version the update version would get applied to
2025-11-04 08:50:51 -03:00
Torsten Grote
23dde0bc9b [db] Better support search for CJK languages
by inserting zero whitespace between their characters to help the existing sqlite FTS tokenizers to split them up.

We have considered splitting them up only at word boundaries, but after consulting native speakers decided to do splitting by chars instead.

Doing this is a hack, but due to the limitations of tokenizers currently available with sqlite, we saw no better solution. While the ICU tokenizer is available as well, it doesn't handle diacritics in other languages.

The zero whitespace is added to zh, ja and ko locales when saving their text to the database. It happens for app names, summaries and descriptions either when loading a full index or when applying diffs. Tests have been added for both cases.
2025-11-04 08:50:51 -03:00
Torsten Grote
0f3f2d6f80 [db] improve search
This now also searches in descriptions, author and package names.
The search also considers all languages now and is insensitive to diacritics in most languages.

The AppMetadataFts needed to be re-created for this to work. A migration and a test for this have been added.
2025-11-04 08:50:50 -03:00
Torsten Grote
31d5832d73 [db] improve RepoAdder 2025-11-04 08:50:50 -03:00
Torsten Grote
982b300e67 [index] add versionName to PackageVersion 2025-11-04 08:50:50 -03:00
Torsten Grote
0fac4d96d0 [download] mirror share uri: fingerprint is non-null now 2025-11-04 08:50:49 -03:00
Torsten Grote
a47423ef01 [download] implement coil disk caching
unfortunately, in coil disk caching is not generic, but deeply integrated in their NetworkFetcher, so if you need a custom Fetcher then you need to implement disk caching yourself.

Maybe in the future, we can hook into their NetworkFetcher and try to use our mirror logic around it. This or they make disk caching work for all fetchers.
2025-11-04 08:50:49 -03:00
Torsten Grote
e99840458e [download] add coil support 2025-11-04 08:50:49 -03:00
Torsten Grote
c5cdcdfd3f [download] limit download progress reporting to once per second
More often isn't needed and runs into issues with UI refresh rates and worse notification rate-limiting which causes important notifications to get missed
2025-11-04 08:50:49 -03:00
Torsten Grote
4579b82a4c [download] verify already downloaded files 2025-11-04 08:50:48 -03:00
Ray c
6bb2798045 [libs] More robust handling of language and script in getBestLocale 2025-11-04 11:49:39 +00:00
Torsten Grote
a0ddc0e5ad Update dependencies
minSdk for db lib needed a bump, because room bumped its minSdk

documentfile and localbroadcastmanager dependencies needed to be added explicitly now
2025-10-21 15:12:03 +00:00
Torsten Grote
78e8d09219 Run flaky network-based tests in a different job
that is allowed to fail. These tests are hitting real servers that often have issues and thus make our tests fail.
2025-07-14 23:26:40 +00:00
Torsten Grote
50907a590d Fix NPE when setting session timeout with conscrypt 2025-07-14 23:26:40 +00:00
Torsten Grote
9b5b68b740 remove non-determinism from removeAllOptionalsDiff test 2025-07-14 15:25:07 -03:00
Torsten Grote
6b304c8fa9 [db] Add test for removal of optionals from packages 2025-07-14 09:50:34 -03:00
Torsten Grote
d5fd44f718 [db] Removal of *all* packages via diff currently not supported 2025-07-14 09:50:34 -03:00
Torsten Grote
4d719af2bb [db] Fix diff removal of optionals in Repository 2025-07-14 09:50:34 -03:00
Torsten Grote
25ddb1307a Android 16 can still install targetSdk 24 apps 2025-06-26 09:33:36 -03:00
Tobias_Groza
948e22efc8 Fix and add tests for hasAuthorMoreThanOneApp(), getAppListItemsForAuthor() 2025-06-25 11:01:17 +02:00
Tobias_Groza
11c7ebf3ce De-duplicate SQL getAppListItems queries by using RawQuery 2025-06-25 11:01:17 +02:00
Tobias_Groza
c1226afab3 Use ViewModel to obtain data about app author 2025-06-25 11:01:17 +02:00
Tobias_Groza
1008cd5862 Display all apps created by a developer
This adds the abililty to click on the author's name in the app details if there are at least two app from them in the DB. A button with hint to take a look at the other  apps by the dev is also added at the bottom of the app details. When clicked, the AppList is opened with a new `authorName` filter.
2025-06-25 11:01:17 +02:00
Torsten Grote
c86600ff9d Upgrade Ktor to latest version 2025-05-30 16:48:42 -03:00
Torsten Grote
f1c55dd38f Add ConsistentCopyVisibility annotation where required 2025-05-30 16:48:42 -03:00
Tobias_Groza
fc6a88c4b7 Fix AppListLiveData.addSource()
With the update to Room 2.7.0 the chunked queries stopped to return distinct values. This is fixed by only processing distinct values when merging the chunked results.
The test case for the chunked quries was also fixed. It did not work properly before because it only tested chunked quries and not the base case which does not need chunked packageInfo
2025-05-30 16:48:41 -03:00
Torsten Grote
bcf50780e9 Migrate from KAPT to KSP 2025-05-30 16:48:41 -03:00
proletarius101
1b978cf6d6 fix: JDK version was locked to exactly 17 2025-05-26 14:36:41 +00:00
Thore Goebel
319ff86744 Add testAddingMidRepoByOfficialMirror 2025-05-01 14:47:59 +02:00
Thore Goebel
5362938b28 Don't add official mirror as user mirror when adding repo via official mirror
Fixes #2981.
2025-05-01 14:47:59 +02:00
Thore Goebel
6f2f6b0cf5 Add testAddingMinRepoByUserMirror
Also pull out mockNewRepoDbInsertion() to reduce complexity and allow future reuse.
2025-05-01 10:56:16 +02:00
Thore Goebel
118362ffce Clean up RepoAdderTest
- Rename expectDownloadOfMinRepo() to mockMinRepoDownload() to better describe what it does
- Move repoAdder.fetchRepository into expectMinRepoPreview() to reduce repetition
- Change some remnant example.com to min-v1.org
- Use explicit user-mirror-min-v1.org instead of example.com to make the intention clear
- Add comments to explain what's going on
- Make mockRepoDownload() configurable, to allow easier mocking of other repos in the futures (e.g., of mid and max)

See also fdroid/fdroidclient!1535

This clean up was prompted by the need to write a test for fdroid/fdroidclient!1530
2025-05-01 10:35:16 +02:00
Thore Goebel
5a87cbba6a Add /repo suffix to mid-v1.com official mirror 2025-05-01 10:26:42 +02:00