Skip to content

Commit 6793ee4

Browse files
authored
[Feature] Implement Media Sync and Koin DI Integration (#94)
1 parent 2001097 commit 6793ee4

20 files changed

Lines changed: 582 additions & 60 deletions

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,5 @@ dependencies {
9797
implementation(libs.androidx.compose.material.icons.extended)
9898
implementation(platform(libs.firebase.bom))
9999
implementation(libs.firebase.analytics)
100+
implementation(libs.koin.workmanager)
100101
}

app/gradle.lockfile

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ androidx.compose.ui:ui:1.9.2=releaseUnitTestCompileClasspath,releaseUnitTestRunt
153153
androidx.compose:compose-bom:2024.09.00=releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
154154
androidx.compose:compose-bom:2026.03.00=debugAndroidTestLintChecksClasspath,debugUnitTestLintChecksClasspath
155155
androidx.compose:compose-bom:2026.05.00=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
156-
androidx.concurrent:concurrent-futures-ktx:1.2.0=debugAndroidTestCompileClasspath,debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath
156+
androidx.concurrent:concurrent-futures-ktx:1.1.0=debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
157+
androidx.concurrent:concurrent-futures-ktx:1.2.0=debugAndroidTestCompileClasspath,debugAndroidTestLintChecksClasspath
157158
androidx.concurrent:concurrent-futures:1.1.0=debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
158159
androidx.concurrent:concurrent-futures:1.2.0=debugAndroidTestCompileClasspath,debugAndroidTestLintChecksClasspath
159160
androidx.constraintlayout:constraintlayout-core:1.0.0=debugAndroidTestLintChecksClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
@@ -272,7 +273,7 @@ androidx.sqlite:sqlite-framework:2.5.0=debugAndroidTestLintChecksClasspath,debug
272273
androidx.sqlite:sqlite-framework:2.6.2=debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
273274
androidx.sqlite:sqlite:2.5.0=debugAndroidTestLintChecksClasspath,debugUnitTestLintChecksClasspath
274275
androidx.sqlite:sqlite:2.6.2=debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
275-
androidx.startup:startup-runtime:1.1.1=debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
276+
androidx.startup:startup-runtime:1.1.1=debugAndroidTestCompileClasspath,debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
276277
androidx.swiperefreshlayout:swiperefreshlayout:1.0.0=debugAndroidTestLintChecksClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
277278
androidx.test.espresso:espresso-core:3.7.0=debugAndroidTestCompileClasspath,debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath
278279
androidx.test.espresso:espresso-idling-resource:3.7.0=debugAndroidTestCompileClasspath,debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath
@@ -281,6 +282,7 @@ androidx.test.services:storage:1.6.0=debugAndroidTestCompileClasspath,debugAndro
281282
androidx.test:core:1.7.0=debugAndroidTestCompileClasspath,debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath
282283
androidx.test:monitor:1.8.0=debugAndroidTestCompileClasspath,debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath
283284
androidx.test:runner:1.7.0=debugAndroidTestCompileClasspath,debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath
285+
androidx.tracing:tracing-ktx:1.2.0=debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
284286
androidx.tracing:tracing:1.1.0=debugAndroidTestCompileClasspath
285287
androidx.tracing:tracing:1.2.0=debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
286288
androidx.transition:transition:1.2.0=releaseUnitTestRuntimeClasspath
@@ -293,8 +295,10 @@ androidx.viewpager:viewpager:1.0.0=debugAndroidTestCompileClasspath,debugAndroid
293295
androidx.window:window-core-android:1.5.0=debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
294296
androidx.window:window-core:1.5.0=debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
295297
androidx.window:window:1.5.0=debugAndroidTestLintChecksClasspath,debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
296-
androidx.work:work-runtime-ktx:2.9.0=debugAndroidTestLintChecksClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
297-
androidx.work:work-runtime:2.9.0=debugAndroidTestLintChecksClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestLintChecksClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
298+
androidx.work:work-runtime-ktx:2.11.1=debugAndroidTestCompileClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
299+
androidx.work:work-runtime-ktx:2.9.0=debugAndroidTestLintChecksClasspath,debugUnitTestLintChecksClasspath
300+
androidx.work:work-runtime:2.11.1=debugAndroidTestCompileClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
301+
androidx.work:work-runtime:2.9.0=debugAndroidTestLintChecksClasspath,debugUnitTestLintChecksClasspath
298302
ch.qos.logback:logback-classic:1.3.14=ktlint
299303
ch.qos.logback:logback-core:1.3.14=ktlint
300304
co.touchlab:stately-concurrency-jvm:2.0.6=debugAndroidTestLintChecksClasspath,debugUnitTestLintChecksClasspath
@@ -530,6 +534,7 @@ io.insert-koin:koin-android:3.5.6=debugAndroidTestLintChecksClasspath,debugUnitT
530534
io.insert-koin:koin-android:4.2.1=debugAndroidTestCompileClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
531535
io.insert-koin:koin-androidx-compose:3.5.6=debugAndroidTestLintChecksClasspath,debugUnitTestLintChecksClasspath
532536
io.insert-koin:koin-androidx-compose:4.2.1=debugAndroidTestCompileClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
537+
io.insert-koin:koin-androidx-workmanager:4.2.1=debugAndroidTestCompileClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
533538
io.insert-koin:koin-compose-android:4.2.1=debugAndroidTestCompileClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
534539
io.insert-koin:koin-compose-jvm:1.1.5=debugAndroidTestLintChecksClasspath,debugUnitTestLintChecksClasspath
535540
io.insert-koin:koin-compose-viewmodel-android:4.2.1=debugAndroidTestCompileClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath

app/src/main/java/com/itlab/notes/NotesApplication.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import android.app.Application
44
import com.itlab.data.di.dataModule
55
import com.itlab.notes.di.appModule
66
import org.koin.android.ext.koin.androidContext
7+
import org.koin.androidx.workmanager.koin.workManagerFactory
78
import org.koin.core.context.startKoin
89

910
class NotesApplication : Application() {
1011
override fun onCreate() {
1112
super.onCreate()
1213
startKoin {
1314
androidContext(this@NotesApplication)
15+
workManagerFactory()
1416
modules(listOf(appModule, dataModule))
1517
}
1618
}

data/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,6 @@ dependencies {
9999
testImplementation(libs.androidx.work.testing)
100100
testImplementation(libs.koin.test)
101101
testImplementation(libs.koin.test.junit4)
102+
testImplementation(libs.mockk.agent.jvm)
103+
implementation(libs.koin.workmanager)
102104
}

data/gradle.lockfile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ androidx.collection:collection:1.4.2=releaseUnitTestCompileClasspath,releaseUnit
2626
androidx.collection:collection:1.5.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
2727
androidx.compose.runtime:runtime-annotation-android:1.9.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
2828
androidx.compose.runtime:runtime-annotation:1.9.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
29+
androidx.concurrent:concurrent-futures-ktx:1.1.0=debugLintChecksClasspath,debugRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
2930
androidx.concurrent:concurrent-futures-ktx:1.2.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath
3031
androidx.concurrent:concurrent-futures:1.1.0=debugLintChecksClasspath,debugRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
3132
androidx.concurrent:concurrent-futures:1.2.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath
@@ -149,6 +150,7 @@ androidx.test.services:storage:1.6.0=debugAndroidTestCompileClasspath,debugAndro
149150
androidx.test:core:1.7.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath
150151
androidx.test:monitor:1.8.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath
151152
androidx.test:runner:1.7.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath
153+
androidx.tracing:tracing-ktx:1.2.0=debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
152154
androidx.tracing:tracing:1.1.0=debugAndroidTestCompileClasspath,debugUnitTestCompileClasspath
153155
androidx.tracing:tracing:1.2.0=debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath
154156
androidx.transition:transition:1.2.0=releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
@@ -158,9 +160,9 @@ androidx.vectordrawable:vectordrawable:1.1.0=debugAndroidTestCompileClasspath,de
158160
androidx.versionedparcelable:versionedparcelable:1.1.1=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
159161
androidx.viewpager2:viewpager2:1.0.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
160162
androidx.viewpager:viewpager:1.0.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
161-
androidx.work:work-runtime-ktx:2.9.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
162-
androidx.work:work-runtime:2.9.0=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
163-
androidx.work:work-testing:2.9.0=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath
163+
androidx.work:work-runtime-ktx:2.11.1=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
164+
androidx.work:work-runtime:2.11.1=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
165+
androidx.work:work-testing:2.11.1=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath
164166
ch.qos.logback:logback-classic:1.3.14=ktlint
165167
ch.qos.logback:logback-core:1.3.14=ktlint
166168
co.touchlab:stately-concurrency-jvm:2.1.0=debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
@@ -411,6 +413,7 @@ io.grpc:grpc-stub:1.69.1=_internal-unified-test-platform-android-test-plugin-hos
411413
io.grpc:grpc-util:1.62.2=debugAndroidTestRuntimeClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
412414
io.grpc:grpc-util:1.69.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control
413415
io.insert-koin:koin-android:4.2.1=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
416+
io.insert-koin:koin-androidx-workmanager:4.2.1=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath
414417
io.insert-koin:koin-core-annotations-jvm:4.2.1=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath
415418
io.insert-koin:koin-core-annotations:4.2.1=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath
416419
io.insert-koin:koin-core-jvm:4.2.1=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugLintChecksClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseLintChecksClasspath,releaseRuntimeClasspath

data/src/main/java/com/itlab/data/cloud/FirebaseCloudDataSource.kt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.itlab.data.cloud
22

33
import com.google.firebase.storage.FirebaseStorage
44
import com.itlab.domain.cloud.CloudDataSource
5+
import com.itlab.domain.cloud.CloudMediaMetadata
56
import com.itlab.domain.cloud.CloudNoteMetadata
67
import com.itlab.domain.cloud.Result
78
import kotlinx.coroutines.CancellationException
@@ -30,6 +31,21 @@ class FirebaseCloudDataSource(
3031
metadataList
3132
}
3233

34+
override suspend fun listMediaMetadata(userId: String): Result<List<CloudMediaMetadata>> =
35+
safeCall {
36+
val mediaRef = rootRef.child("users/$userId/media")
37+
val result = mediaRef.listAll().await()
38+
39+
result.items.map { itemRef ->
40+
val metadata = itemRef.metadata.await()
41+
CloudMediaMetadata(
42+
key = itemRef.path,
43+
mediaId = itemRef.name,
44+
mimeType = metadata.contentType ?: "application/octet-stream",
45+
)
46+
}
47+
}
48+
3349
override suspend fun downloadNote(key: String): Result<String> =
3450
safeCall {
3551
val fileRef = rootRef.child(key)
@@ -56,11 +72,16 @@ class FirebaseCloudDataSource(
5672
override suspend fun uploadMedia(
5773
key: String,
5874
file: File,
75+
mimeType: String,
5976
): Result<Unit> =
6077
safeCall {
6178
val fileRef = rootRef.child(key)
79+
val metadata =
80+
com.google.firebase.storage.storageMetadata {
81+
contentType = mimeType
82+
}
6283
file.inputStream().use { stream ->
63-
fileRef.putStream(stream).await()
84+
fileRef.putStream(stream, metadata).await()
6485
}
6586
Unit
6687
}

0 commit comments

Comments
 (0)