Skip to content

Commit 17020ff

Browse files
committed
migrate to androidx.paging.compose; update SQLCipher to 4.9.0; add AutofillManager integration; update Gradle and CI configs; various UI and code improvements
1 parent f78dc31 commit 17020ff

File tree

83 files changed

+32703
-14569
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+32703
-14569
lines changed

.github/workflows/android.yml

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,20 @@ jobs:
1313
strategy:
1414
fail-fast: false
1515
matrix:
16-
api-level: [ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 ]
16+
api-level: [ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 ]
1717
steps:
1818
- name: Check out
1919
uses: actions/checkout@v4
20-
- name: Cached Konan
21-
uses: actions/cache@v4
22-
with:
23-
path: ~/.konan
24-
key: ${{ runner.os }}-konan-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
25-
restore-keys: ${{ runner.os }}-konan-
26-
- name: Cached Gradle
27-
uses: actions/cache@v4
28-
with:
29-
path: ~/.gradle
30-
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
31-
restore-keys: ${{ runner.os }}-gradle-
3220
- name: Set up JDK 17
33-
uses: actions/setup-java@v1
21+
uses: actions/setup-java@v4
3422
with:
23+
distribution: 'oracle'
3524
java-version: 17
25+
- name: Setup Gradle
26+
uses: gradle/actions/setup-gradle@v4
27+
with:
28+
cache-read-only: false
29+
cache-overwrite-existing: true
3630
- name: Decrypt large secret
3731
run: ./.github/scripts/decrypt_secret.sh
3832
env:
@@ -50,22 +44,16 @@ jobs:
5044
steps:
5145
- name: Check out
5246
uses: actions/checkout@v4
53-
- name: Cached Konan
54-
uses: actions/cache@v4
55-
with:
56-
path: ~/.konan
57-
key: ${{ runner.os }}-konan-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
58-
restore-keys: ${{ runner.os }}-konan-
59-
- name: Cached Gradle
60-
uses: actions/cache@v4
61-
with:
62-
path: ~/.gradle
63-
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
64-
restore-keys: ${{ runner.os }}-gradle-
6547
- name: Set up JDK 17
66-
uses: actions/setup-java@v1
48+
uses: actions/setup-java@v4
6749
with:
50+
distribution: 'oracle'
6851
java-version: 17
52+
- name: Setup Gradle
53+
uses: gradle/actions/setup-gradle@v4
54+
with:
55+
cache-read-only: false
56+
cache-overwrite-existing: true
6957
- name: Decrypt large secret
7058
run: ./.github/scripts/decrypt_secret.sh
7159
env:

.github/workflows/desktop.yaml

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,16 @@ jobs:
1616
steps:
1717
- name: Check out
1818
uses: actions/checkout@v4
19-
- name: Cached Konan
20-
uses: actions/cache@v4
21-
with:
22-
path: ~/.konan
23-
key: ${{ runner.os }}-konan-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
24-
restore-keys: ${{ runner.os }}-konan-
25-
- name: Cached Gradle
26-
uses: actions/cache@v4
27-
with:
28-
path: ~/.gradle
29-
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
30-
restore-keys: ${{ runner.os }}-gradle-
3119
- name: Set up JDK 17
32-
uses: actions/setup-java@v1
20+
uses: actions/setup-java@v4
3321
with:
22+
distribution: 'oracle'
3423
java-version: 17
24+
- name: Setup Gradle
25+
uses: gradle/actions/setup-gradle@v4
26+
with:
27+
cache-read-only: false
28+
cache-overwrite-existing: true
3529
- name: Packaging
3630
run: ./gradlew packageReleaseDistributionForCurrentOS #TODO packageRelease
3731
- name: Release

.github/workflows/ios.yml

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,20 @@ jobs:
1313
steps:
1414
- name: Check out
1515
uses: actions/checkout@v4
16-
- name: Cached Konan
17-
uses: actions/cache@v4
16+
- name: Set up JDK 17
17+
uses: actions/setup-java@v4
1818
with:
19-
path: ~/.konan
20-
key: ${{ runner.os }}-konan-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
21-
restore-keys: ${{ runner.os }}-konan-
22-
- name: Cached Gradle
23-
uses: actions/cache@v4
19+
distribution: 'oracle'
20+
java-version: 17
21+
- name: Setup Gradle
22+
uses: gradle/actions/setup-gradle@v4
2423
with:
25-
path: ~/.gradle
26-
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
27-
restore-keys: ${{ runner.os }}-gradle-
24+
cache-read-only: false
25+
cache-overwrite-existing: true
2826
- name: Decrypt large secret
2927
run: ./.github/scripts/decrypt_secret.sh
3028
env:
3129
LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
32-
- name: Set up JDK 17
33-
uses: actions/setup-java@v1
34-
with:
35-
java-version: 17
3630
- name: Download the Apple Worldwide Developer Relations Intermediate Certificate
3731
working-directory: ./iosApp/fastlane
3832
run: curl -o AppleWWDRCAG3.cer https://www.apple.com/certificateauthority/AppleWWDRCAG3.cer

.github/workflows/kmp.yml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@ jobs:
2222
uses: actions/setup-java@v4
2323
with:
2424
distribution: 'oracle'
25-
java-version: '17'
25+
java-version: 17
2626
- name: Setup Gradle
27-
uses: gradle/gradle-build-action@v2
27+
uses: gradle/actions/setup-gradle@v4
28+
with:
29+
cache-read-only: false
30+
cache-overwrite-existing: true
2831
- name: Build
2932
run: ./gradlew build
3033
- name: Archive build-output artifacts
@@ -44,7 +47,7 @@ jobs:
4447
strategy:
4548
fail-fast: false
4649
matrix:
47-
api-level: [ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 ]
50+
api-level: [ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 ]
4851
target: [default]
4952
steps:
5053
- name: Check out
@@ -53,9 +56,12 @@ jobs:
5356
uses: actions/setup-java@v4
5457
with:
5558
distribution: 'oracle'
56-
java-version: '17'
59+
java-version: 17
5760
- name: Setup Gradle
58-
uses: gradle/gradle-build-action@v2
61+
uses: gradle/actions/setup-gradle@v4
62+
with:
63+
cache-read-only: false
64+
cache-overwrite-existing: true
5965
- name: Enable KVM
6066
run: |
6167
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules

android-compose-app/build.gradle.kts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension
44
import com.google.firebase.crashlytics.buildtools.gradle.tasks.UploadMappingFileTask
5+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
56
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
67

78
plugins {
@@ -13,15 +14,18 @@ plugins {
1314
alias(libs.plugins.crashlytics)
1415
}
1516
apply(from = "$rootDir/gradle/common-android-sign-conf.gradle")
17+
18+
kotlin.compilerOptions.jvmTarget = JvmTarget.fromTarget(libs.versions.jdk.get())
19+
1620
android {
1721
namespace = "com.softartdev.notedelight"
1822
compileSdk = libs.versions.compileSdk.get().toInt()
1923
defaultConfig {
2024
applicationId = "com.softartdev.noteroom"
2125
minSdk = libs.versions.minSdk.get().toInt()
2226
targetSdk = libs.versions.targetSdk.get().toInt()
23-
versionCode = 837
24-
versionName = "8.3.7"
27+
versionCode = 838
28+
versionName = "8.3.8"
2529
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2630
testInstrumentationRunnerArguments["clearPackageData"] = "true"
2731
vectorDrawables.useSupportLibrary = true
@@ -47,9 +51,6 @@ android {
4751
sourceCompatibility = JavaVersion.toVersion(libs.versions.jdk.get().toInt())
4852
targetCompatibility = JavaVersion.toVersion(libs.versions.jdk.get().toInt())
4953
}
50-
kotlinOptions {
51-
jvmTarget = libs.versions.jdk.get()
52-
}
5354
tasks.withType<KotlinCompilationTask<*>>().configureEach {
5455
compilerOptions.freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn")
5556
}
@@ -77,7 +78,6 @@ dependencies {
7778
debugImplementation(compose.uiTooling)
7879
debugImplementation(libs.androidx.compose.test.manifest)
7980
implementation(libs.androidx.navigation.compose)
80-
implementation(libs.androidx.paging.compose)
8181
implementation(libs.material.theme.prefs)
8282
implementation(libs.napier)
8383
implementation(platform(libs.koin.bom))

android-compose-app/src/androidTest/java/com/softartdev/notedelight/CryptInstrumentedTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
55
import androidx.test.filters.MediumTest
66
import com.softartdev.notedelight.model.PlatformSQLiteState
77
import com.softartdev.notedelight.repository.SafeRepo
8+
import io.github.aakira.napier.Napier
89
import org.junit.Assert.assertEquals
910
import org.junit.Test
1011
import org.junit.runner.RunWith
@@ -21,6 +22,7 @@ class CryptInstrumentedTest {
2122
fun cryptTest() {
2223
assertEquals(PlatformSQLiteState.DOES_NOT_EXIST, safeRepo.databaseState)
2324
safeRepo.buildDbIfNeed()
25+
Napier.d("notes count = ${safeRepo.noteDAO.count}")
2426
assertEquals(PlatformSQLiteState.UNENCRYPTED, safeRepo.databaseState)
2527
safeRepo.encrypt(SpannableStringBuilder(password))
2628
assertEquals(PlatformSQLiteState.ENCRYPTED, safeRepo.databaseState)

android-compose-app/src/androidTest/java/com/softartdev/notedelight/CryptUseCaseInstrumentedTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.test.filters.MediumTest
55
import com.softartdev.notedelight.model.PlatformSQLiteState
66
import com.softartdev.notedelight.repository.SafeRepo
77
import com.softartdev.notedelight.usecase.crypt.*
8+
import io.github.aakira.napier.Napier
89
import kotlinx.coroutines.runBlocking
910
import org.junit.Assert.assertFalse
1011
import org.junit.Assert.assertTrue
@@ -27,6 +28,7 @@ class CryptUseCaseInstrumentedTest {
2728
@Test
2829
fun cryptTest() = runBlocking {
2930
safeRepo.buildDbIfNeed()
31+
Napier.d("notes count = ${safeRepo.noteDAO.count}")
3032
assertFalse(dbIsEncrypted)
3133
changePasswordUseCase(null, password)
3234
assertTrue(dbIsEncrypted)

core/data/db-room/src/androidMain/kotlin/com/softartdev/notedelight/db/AndroidDatabaseHolder.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,9 @@ class AndroidDatabaseHolder(
1010
context: Context,
1111
passphrase: CharSequence,
1212
) : RoomDbHolder {
13-
private val dbPath: String = context.getDatabasePath(SafeRepo.DB_NAME).absolutePath
1413

1514
val noteDatabase: NoteDatabase = Room
16-
.databaseBuilder(context, NoteDatabase::class.java, dbPath)
15+
.databaseBuilder(context, NoteDatabase::class.java, SafeRepo.DB_NAME)
1716
.openHelperFactory(SafeHelperFactory.fromUser(SpannableStringBuilder(passphrase)))
1817
.fallbackToDestructiveMigrationOnDowngrade(false)
1918
.build()

core/data/db-room/src/iosMain/kotlin/com/softartdev/notedelight/db/IosCipherUtils.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,18 @@ import platform.Foundation.*
1212

1313
object IosCipherUtils {
1414

15+
private val nsFileManager = NSFileManager.defaultManager
16+
1517
private val dbDirPath: String by lazy {
16-
val paths: List<*> = NSSearchPathForDirectoriesInDomains(
17-
directory = NSApplicationSupportDirectory,
18-
domainMask = NSUserDomainMask,
19-
expandTilde = true
18+
val documentDirectory: NSURL? = nsFileManager.URLForDirectory(
19+
directory = NSDocumentDirectory,
20+
inDomain = NSUserDomainMask,
21+
appropriateForURL = null,
22+
create = false,
23+
error = null,
2024
)
21-
val zeroPath: NSString = paths.first() as NSString
22-
return@lazy zeroPath.stringByAppendingPathComponent(str = "databases")
25+
return@lazy requireNotNull(documentDirectory?.path)
2326
}
24-
private val nsFileManager = NSFileManager.defaultManager
2527

2628
fun getDatabaseState(dbName: String): PlatformSQLiteState {
2729
var result = PlatformSQLiteState.DOES_NOT_EXIST

core/data/db-room/src/iosMain/kotlin/com/softartdev/notedelight/db/IosDatabaseHolder.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
@file:OptIn(ExperimentalForeignApi::class)
2-
31
package com.softartdev.notedelight.db
42

53
import androidx.room.Room
64
import androidx.sqlite.driver.bundled.BundledSQLiteDriver
75
import com.softartdev.notedelight.repository.SafeRepo
8-
import kotlinx.cinterop.ExperimentalForeignApi
96

107
class IosDatabaseHolder(
118
key: String? = null,

0 commit comments

Comments
 (0)