Skip to content

Commit 5a4bf7f

Browse files
committed
Merge branch 'kim/refactor/quickSettings/button-rows' into kim/developerOptions/hybrid-api
update defaultAppConfig to match pattern
2 parents 44a3006 + 5552042 commit 5a4bf7f

30 files changed

Lines changed: 382 additions & 164 deletions

File tree

app/build.gradle.kts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ android {
101101
dependencies {
102102
implementation(libs.androidx.tracing)
103103
implementation(project(":core:common"))
104+
implementation(project(":core:camera"))
105+
implementation(project(":core:camera:low-light"))
106+
implementation(project(":core:camera:postprocess"))
107+
implementation(project(":data:camera"))
108+
implementation(project(":data:media"))
104109
implementation(project(":feature:postcapture"))
105110
// Compose
106111
val composeBom = platform(libs.compose.bom)
@@ -179,6 +184,13 @@ dependencies {
179184
implementation(project(":ui:components:capture"))
180185
implementation(project(":ui:debug"))
181186

187+
// Low Light implementations
188+
implementation(project(":core:camera:low-light:low-light-di"))
189+
implementation(project(":core:camera:low-light-playservices-di"))
190+
191+
// Postprocess implementations
192+
implementation(project(":core:camera:postprocess:postprocess-di"))
193+
182194
implementation(project(":core:camera:low-light-playservices"))
183195
implementation(project(":core:camera:effects:single-stream"))
184196
}

app/src/main/java/com/google/jetpackcamera/AppModule.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@
1515
*/
1616
package com.google.jetpackcamera
1717

18-
import com.google.jetpackcamera.core.common.DefaultAppConfig
19-
import com.google.jetpackcamera.core.common.DefaultCaptureModeOverride
20-
import com.google.jetpackcamera.core.common.DefaultFilePathGenerator
21-
import com.google.jetpackcamera.core.common.DefaultSaveMode
2218
import com.google.jetpackcamera.core.common.FilePathGenerator
19+
import com.google.jetpackcamera.di.DefaultCaptureModeOverride
20+
import com.google.jetpackcamera.di.DefaultFilePathGenerator
2321
import com.google.jetpackcamera.model.CaptureMode
2422
import com.google.jetpackcamera.model.SaveMode
2523
import com.google.jetpackcamera.settings.api.DeveloperAppConfig
@@ -42,8 +40,10 @@ object AppModule {
4240
videoDynamicRange = SettingConfig(DEFAULT_CAMERA_APP_SETTINGS.dynamicRange)
4341
)
4442

43+
/**
44+
* Provides the default [DeveloperAppConfig] configuration.
45+
*/
4546
@Provides
46-
@DefaultAppConfig
4747
fun providesDeveloperAppConfig(): DeveloperAppConfig = jcaDefaultAppConfig
4848

4949
/**
@@ -57,7 +57,6 @@ object AppModule {
5757
* provides the default [SaveMode] to be used by the app
5858
*/
5959
@Provides
60-
@DefaultSaveMode
6160
fun providesSaveMode(): SaveMode = SaveMode.Immediate
6261

6362
@Provides

app/src/main/java/com/google/jetpackcamera/AppSettingsModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import androidx.datastore.core.DataStore
2020
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
2121
import androidx.datastore.preferences.core.Preferences
2222
import androidx.datastore.preferences.preferencesDataStoreFile
23-
import com.google.jetpackcamera.core.common.DefaultCaptureModeOverride
2423
import com.google.jetpackcamera.core.settings.datastoreprefs.PrefsDataStoreSettingsDataSource
24+
import com.google.jetpackcamera.di.DefaultCaptureModeOverride
2525
import com.google.jetpackcamera.model.CaptureMode
2626
import com.google.jetpackcamera.settings.SettingsDataSource
2727
import dagger.Module
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Copyright (C) 2026 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.google.jetpackcamera.di
17+
18+
import javax.inject.Qualifier
19+
20+
/**
21+
* Identifies the default file path generator instance used for naming and locating media output files.
22+
*/
23+
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER)
24+
@Qualifier
25+
@Retention(AnnotationRetention.BINARY)
26+
annotation class DefaultFilePathGenerator
27+
28+
/**
29+
* Identifies the fallback capture mode override when initializing repository settings.
30+
*/
31+
@Qualifier
32+
@Retention(AnnotationRetention.BINARY)
33+
annotation class DefaultCaptureModeOverride
34+
35+
/**
36+
* Identifies the CPU-bound [kotlinx.coroutines.CoroutineDispatcher] used for general computation.
37+
*/
38+
@Qualifier
39+
@Retention(AnnotationRetention.BINARY)
40+
annotation class DefaultDispatcher
41+
42+
/**
43+
* Identifies the I/O-bound [kotlinx.coroutines.CoroutineDispatcher] used for disk and network tasks.
44+
*/
45+
@Qualifier
46+
@Retention(AnnotationRetention.BINARY)
47+
annotation class IODispatcher
48+
49+
/**
50+
* Identifies the root application-level [kotlinx.coroutines.CoroutineScope] tied to SingletonComponent lifecycle.
51+
*/
52+
@Qualifier
53+
@Retention(AnnotationRetention.BINARY)
54+
annotation class DefaultCoroutineScope

data/camera/src/main/java/com/google/jetpackcamera/data/camera/CameraModule.kt renamed to app/src/main/java/com/google/jetpackcamera/di/CameraModule.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package com.google.jetpackcamera.data.camera
16+
package com.google.jetpackcamera.di
1717

1818
import android.app.Application
1919
import android.content.Context
@@ -25,10 +25,9 @@ import com.google.jetpackcamera.core.camera.lowlight.LowLightBoostEffectProvider
2525
import com.google.jetpackcamera.core.camera.lowlight.LowLightBoostFeatureKey
2626
import com.google.jetpackcamera.core.camera.postprocess.ImagePostProcessor
2727
import com.google.jetpackcamera.core.camera.postprocess.ImagePostProcessorFeatureKey
28-
import com.google.jetpackcamera.core.common.DefaultDispatcher
29-
import com.google.jetpackcamera.core.common.DefaultFilePathGenerator
3028
import com.google.jetpackcamera.core.common.FilePathGenerator
31-
import com.google.jetpackcamera.core.common.IODispatcher
29+
import com.google.jetpackcamera.data.camera.CameraSystemRepository
30+
import com.google.jetpackcamera.data.camera.CameraXCameraSystemRepository
3231
import dagger.Binds
3332
import dagger.Module
3433
import dagger.Provides
@@ -40,11 +39,11 @@ import javax.inject.Provider
4039
import kotlinx.coroutines.CoroutineDispatcher
4140

4241
/**
43-
* Dagger [Module] for camera data layer.
42+
* Dagger [Module] for camera dependencies.
4443
*/
4544
@Module
4645
@InstallIn(ActivityRetainedComponent::class)
47-
interface CameraModule {
46+
internal interface CameraModule {
4847

4948
@Binds
5049
@ActivityRetainedScoped

core/common/src/main/java/com/google/jetpackcamera/core/common/CommonModule.kt renamed to app/src/main/java/com/google/jetpackcamera/di/CommonModule.kt

Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2023 The Android Open Source Project
2+
* Copyright (C) 2026 The Android Open Source Project
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -13,25 +13,24 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package com.google.jetpackcamera.core.common
16+
package com.google.jetpackcamera.di
1717

1818
import dagger.Module
1919
import dagger.Provides
2020
import dagger.hilt.InstallIn
2121
import dagger.hilt.components.SingletonComponent
22-
import javax.inject.Qualifier
2322
import javax.inject.Singleton
2423
import kotlinx.coroutines.CoroutineDispatcher
2524
import kotlinx.coroutines.CoroutineScope
2625
import kotlinx.coroutines.Dispatchers
2726
import kotlinx.coroutines.SupervisorJob
2827

2928
/**
30-
* Dagger [Module] for Common dependencies.
29+
* Dagger [Module] for global application-level coroutine dispatchers and scope.
3130
*/
3231
@Module
3332
@InstallIn(SingletonComponent::class)
34-
class CommonModule {
33+
internal object CommonModule {
3534
@Provides
3635
@DefaultDispatcher
3736
fun provideDefaultDispatcher(): CoroutineDispatcher = Dispatchers.Default
@@ -46,35 +45,3 @@ class CommonModule {
4645
fun providesCoroutineScope(@DefaultDispatcher dispatcher: CoroutineDispatcher) =
4746
CoroutineScope(SupervisorJob() + dispatcher)
4847
}
49-
50-
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER)
51-
@Qualifier
52-
@Retention(AnnotationRetention.BINARY)
53-
annotation class DefaultFilePathGenerator
54-
55-
/**
56-
* provides the default [CaptureMode] to override in [LocalSettingsRepository]
57-
*/
58-
@Qualifier
59-
@Retention(AnnotationRetention.BINARY)
60-
annotation class DefaultCaptureModeOverride
61-
62-
@Qualifier
63-
@Retention(AnnotationRetention.BINARY)
64-
annotation class DefaultSaveMode
65-
66-
@Qualifier
67-
@Retention(AnnotationRetention.BINARY)
68-
annotation class DefaultDispatcher
69-
70-
@Qualifier
71-
@Retention(AnnotationRetention.BINARY)
72-
annotation class IODispatcher
73-
74-
@Qualifier
75-
@Retention(AnnotationRetention.BINARY)
76-
annotation class DefaultCoroutineScope
77-
78-
@Qualifier
79-
@Retention(AnnotationRetention.BINARY)
80-
annotation class DefaultAppConfig

data/media/src/main/kotlin/com/google/jetpackcamera/data/media/MediaModule.kt renamed to app/src/main/java/com/google/jetpackcamera/di/MediaModule.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,34 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package com.google.jetpackcamera.data.media
16+
package com.google.jetpackcamera.di
1717

18-
import dagger.Binds
18+
import android.content.Context
19+
import com.google.jetpackcamera.core.common.FilePathGenerator
20+
import com.google.jetpackcamera.data.media.LocalMediaRepository
21+
import com.google.jetpackcamera.data.media.MediaRepository
1922
import dagger.Module
23+
import dagger.Provides
2024
import dagger.hilt.InstallIn
25+
import dagger.hilt.android.qualifiers.ApplicationContext
2126
import dagger.hilt.components.SingletonComponent
2227
import javax.inject.Singleton
28+
import kotlinx.coroutines.CoroutineDispatcher
2329

2430
/**
2531
* Dagger [Module] for Media dependencies.
2632
*/
2733
@Module
2834
@InstallIn(SingletonComponent::class)
29-
interface MediaModule {
35+
internal object MediaModule {
3036

31-
@Binds
37+
@Provides
3238
@Singleton
33-
fun bindsMediaRepository(localMediaRepository: LocalMediaRepository): MediaRepository
39+
fun provideMediaRepository(
40+
@ApplicationContext context: Context,
41+
@IODispatcher ioDispatcher: CoroutineDispatcher,
42+
@DefaultFilePathGenerator filePathGenerator: FilePathGenerator
43+
): MediaRepository {
44+
return LocalMediaRepository(context, ioDispatcher, filePathGenerator)
45+
}
3446
}

core/camera/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ dependencies {
113113
androidTestImplementation(libs.kotlinx.coroutines.test)
114114
androidTestImplementation(libs.truth)
115115
androidTestImplementation(project(":core:common:testing"))
116+
androidTestImplementation(project(":core:camera:postprocess:postprocess-di"))
116117
testImplementation(project(":core:camera:testing"))
117118

118119
// Futures

core/camera/effects/single-stream/src/main/java/com/google/jetpackcamera/core/camera/effects/EffectsModule.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,12 @@ import javax.inject.Provider
3232
internal object EffectsModule {
3333
@Provides
3434
@IntoSet
35-
fun provideSingleStreamEffectProviderEntry(
36-
impl: Provider<SingleStreamEffectProvider>
37-
): Map.Entry<
35+
fun provideSingleStreamEffectProviderEntry(): Map.Entry<
3836
CameraEffectFeatureKey,
3937
@JvmSuppressWildcards Provider<CameraEffectProvider>
4038
> =
4139
AbstractMap.SimpleImmutableEntry(
4240
SingleStreamEffectKey,
43-
Provider { impl.get() }
41+
Provider { SingleStreamEffectProvider() }
4442
)
4543
}

core/camera/effects/single-stream/src/main/java/com/google/jetpackcamera/core/camera/effects/SingleStreamEffectProvider.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,9 @@ package com.google.jetpackcamera.core.camera.effects
1818
import androidx.camera.core.CameraEffect
1919
import com.google.jetpackcamera.core.camera.CameraEffectProvider
2020
import com.google.jetpackcamera.model.CameraEffectTarget
21-
import javax.inject.Inject
2221
import kotlinx.coroutines.CoroutineScope
2322

24-
/**
25-
* Implementation of [CameraEffectProvider] that provides [SingleSurfaceForcingEffect].
26-
*/
27-
internal class SingleStreamEffectProvider @Inject constructor() : CameraEffectProvider {
23+
internal class SingleStreamEffectProvider : CameraEffectProvider {
2824

2925
override val targets: Set<CameraEffectTarget> = setOf(
3026
CameraEffectTarget.PREVIEW,

0 commit comments

Comments
 (0)