Third-Party Import of: https://github.com/google/jetpack-camera-app
Request Document: go/android3p
For CL Reviewers: go/android3p#cl-review
For Build Team: go/ab-third-party-imports
Bug: http://b/309514655
Test: manual - built successfully

Change-Id: I4330a42c6fd18f8a3fbfb9ef5ab9273be34fecf9
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..efeb54e
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,17 @@
+package {
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+subdirs = [
+        "app",
+	"core/common",
+	"camera-viewfinder-compose",
+	"data/settings",
+	"domain/camera",
+	"feature",
+
+    ]
+
+
diff --git a/METADATA b/METADATA
new file mode 100644
index 0000000..11465c3
--- /dev/null
+++ b/METADATA
@@ -0,0 +1,20 @@
+name: "jetpack-camera-app"
+description:
+    "Jetpack Camera App is (will be) a fully functional camera app, focused on "
+    "features used by app developers, and built entirely with CameraX, Kotlin "
+    "and Jetpack Compose. It follows Android design and development best "
+    "practices and it's intended to be a useful reference for developers."
+
+third_party {
+  url {
+    type: HOMEPAGE
+    value: "https://github.com/google/jetpack-camera-app"
+  }
+  url {
+    type: GIT
+    value: "https://github.com/google/jetpack-camera-app"
+  }
+  version: "3ae0900e248937bd7439b3d3c22360f2a7265153"
+  last_upgrade_date { year: 2023 month: 11 day: 17 }
+  license_type: NOTICE
+}
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_APACHE2
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..6a44f69
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,7 @@
+# Default owners are top 3 active developers of the past 1 or 2 years
+# or people with more than 10 commits last year.
+# Please update this list if you find better owner candidates.
+trevormcguire@google.com
+yasith@google.com
+davidjia@google.com
+kcrevecoeur@google.com
diff --git a/app/Android.bp b/app/Android.bp
new file mode 100644
index 0000000..778e3cd
--- /dev/null
+++ b/app/Android.bp
@@ -0,0 +1,35 @@
+package {
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+android_app {
+    name: "jetpack-camera-app",
+    static_libs:[
+	"androidx.compose.material3_material3",
+	"androidx.compose.ui_ui-tooling-preview",
+	"androidx.compose.ui_ui-tooling",
+	"androidx.lifecycle_lifecycle-viewmodel-compose",
+	"androidx.activity_activity-compose",
+	"androidx.core_core-ktx",
+	"androidx.lifecycle_lifecycle-runtime-ktx",
+	"androidx.navigation_navigation-compose",
+	"hilt_android",
+	"androidx.compose.runtime_runtime",
+	"jetpack-camera-app_data_settings",
+	"jetpack-camera-app_feature_preview",
+	"jetpack-camera-app_feature_settings",
+    ],
+    srcs: [
+        "src/main/**/*.kt",
+    ],
+
+    resource_dirs: [
+        "src/main/res",
+    ], 
+    manifest: "src/main/AndroidManifest.xml",
+    sdk_version: "34",
+    min_sdk_version: "21",
+}
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 40f0301..4e5c9ce 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,7 +15,8 @@
   ~ limitations under the License.
   -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools">
+  xmlns:tools="http://schemas.android.com/tools"
+  package="com.google.jetpackcamera">
 
     <uses-feature
         android:name="android.hardware.camera"
@@ -50,4 +51,4 @@
         </activity>
     </application>
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/app/src/main/java/com/google/jetpackcamera/JetpackCameraApplication.kt b/app/src/main/java/com/google/jetpackcamera/JetpackCameraApplication.kt
index aca5cdd..fc87bfc 100644
--- a/app/src/main/java/com/google/jetpackcamera/JetpackCameraApplication.kt
+++ b/app/src/main/java/com/google/jetpackcamera/JetpackCameraApplication.kt
@@ -21,5 +21,5 @@
 /**
  * [Application] class for JetpackCameraApp.
  */
-@HiltAndroidApp
-class JetpackCameraApplication : Application()
+@HiltAndroidApp(Application::class)
+class JetpackCameraApplication : Hilt_JetpackCameraApplication()
diff --git a/app/src/main/java/com/google/jetpackcamera/MainActivity.kt b/app/src/main/java/com/google/jetpackcamera/MainActivity.kt
index 64d39a7..a499bb9 100644
--- a/app/src/main/java/com/google/jetpackcamera/MainActivity.kt
+++ b/app/src/main/java/com/google/jetpackcamera/MainActivity.kt
@@ -56,8 +56,8 @@
 /**
  * Activity for the JetpackCameraApp.
  */
-@AndroidEntryPoint
-class MainActivity : ComponentActivity() {
+@AndroidEntryPoint(ComponentActivity::class)
+class MainActivity : Hilt_MainActivity() {
     private val viewModel: MainActivityViewModel by viewModels()
 
     @VisibleForTesting
diff --git a/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt b/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt
index 64b9754..8fadcbf 100644
--- a/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt
+++ b/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt
@@ -23,32 +23,32 @@
 import androidx.navigation.compose.NavHost
 import androidx.navigation.compose.composable
 import androidx.navigation.compose.rememberNavController
-import com.google.accompanist.permissions.ExperimentalPermissionsApi
-import com.google.accompanist.permissions.isGranted
-import com.google.accompanist.permissions.rememberPermissionState
+//import com.google.accompanist.permissions.ExperimentalPermissionsApi
+//import com.google.accompanist.permissions.isGranted
+//import com.google.accompanist.permissions.rememberPermissionState
 import com.google.jetpackcamera.feature.preview.PreviewScreen
 import com.google.jetpackcamera.feature.preview.PreviewViewModel
 import com.google.jetpackcamera.settings.SettingsScreen
 import com.google.jetpackcamera.ui.Routes.PREVIEW_ROUTE
 import com.google.jetpackcamera.ui.Routes.SETTINGS_ROUTE
 
-@OptIn(ExperimentalPermissionsApi::class)
+//@OptIn(ExperimentalPermissionsApi::class)
 @Composable
 fun JcaApp(
     onPreviewViewModel: (PreviewViewModel) -> Unit
     /*TODO(b/306236646): remove after still capture*/
 ) {
-    val permissionState =
-        rememberPermissionState(permission = Manifest.permission.CAMERA)
+//    val permissionState = Manifest.permission.CAMERA
+//        rememberPermissionState(permission = Manifest.permission.CAMERA)
 
-    if (permissionState.status.isGranted) {
+//    if (permissionState.status.isGranted) {
         JetpackCameraNavHost(onPreviewViewModel)
-    } else {
-        CameraPermission(
-            modifier = Modifier.fillMaxSize(),
-            cameraPermissionState = permissionState
-        )
-    }
+//    } else {
+//        CameraPermission(
+//            modifier = Modifier.fillMaxSize(),
+//            cameraPermissionState = permissionState
+//        )
+//    }
 }
 
 @Composable
@@ -70,3 +70,4 @@
         }
     }
 }
+
diff --git a/app/src/main/java/com/google/jetpackcamera/ui/PermissionsUi.kt b/app/src/main/java/com/google/jetpackcamera/ui/PermissionsUi.kt
index 5100dff..adb56e1 100644
--- a/app/src/main/java/com/google/jetpackcamera/ui/PermissionsUi.kt
+++ b/app/src/main/java/com/google/jetpackcamera/ui/PermissionsUi.kt
@@ -43,16 +43,16 @@
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.unit.dp
-import com.google.accompanist.permissions.ExperimentalPermissionsApi
-import com.google.accompanist.permissions.PermissionState
+//import com.google.accompanist.permissions.ExperimentalPermissionsApi
+//import com.google.accompanist.permissions.PermissionState
 import com.google.jetpackcamera.R
 
-@OptIn(ExperimentalPermissionsApi::class)
+//@OptIn(ExperimentalPermissionsApi::class)
 @Composable
-fun CameraPermission(modifier: Modifier = Modifier, cameraPermissionState: PermissionState) {
+fun CameraPermission(modifier: Modifier = Modifier) {
     PermissionTemplate(
         modifier = modifier,
-        permissionState = cameraPermissionState,
+//        permissionState = cameraPermissionState,
         painter = painterResource(id = R.drawable.photo_camera),
         iconAccessibilityText = stringResource(id = R.string.camera_permission_accessibility_text),
         title = stringResource(id = R.string.camera_permission_screen_title),
@@ -61,11 +61,11 @@
     )
 }
 
-@OptIn(ExperimentalPermissionsApi::class)
+//@OptIn(ExperimentalPermissionsApi::class)
 @Composable
 fun PermissionTemplate(
     modifier: Modifier = Modifier,
-    permissionState: PermissionState,
+//    permissionState: PermissionState,
     onSkipPermission: (() -> Unit)? = null,
     painter: Painter,
     iconAccessibilityText: String,
@@ -100,7 +100,7 @@
                     .fillMaxWidth()
                     .align(Alignment.CenterHorizontally)
                     .height(IntrinsicSize.Min),
-                permissionState = permissionState,
+//                permissionState = permissionState,
                 requestButtonText = requestButtonText,
                 onSkipPermission = onSkipPermission
             )
@@ -123,11 +123,11 @@
     }
 }
 
-@OptIn(ExperimentalPermissionsApi::class)
+//@OptIn(ExperimentalPermissionsApi::class)
 @Composable
 fun PermissionButtonSection(
     modifier: Modifier = Modifier,
-    permissionState: PermissionState,
+//    permissionState: PermissionState,
     requestButtonText: String,
     onSkipPermission: (() -> Unit)?
 ) {
@@ -138,7 +138,7 @@
                 .align(Alignment.Center)
         ) {
             PermissionButton(
-                permissionState = permissionState,
+//                permissionState = permissionState,
                 requestButtonText = requestButtonText
             )
             Spacer(modifier = Modifier.height(20.dp))
@@ -156,11 +156,11 @@
     }
 }
 
-@OptIn(ExperimentalPermissionsApi::class)
+//@OptIn(ExperimentalPermissionsApi::class)
 @Composable
 fun PermissionButton(
     modifier: Modifier = Modifier,
-    permissionState: PermissionState,
+//    permissionState: PermissionState,
     requestButtonText: String
 ) {
     Button(
@@ -169,7 +169,9 @@
             containerColor = MaterialTheme.colorScheme.primaryContainer,
             contentColor = MaterialTheme.colorScheme.onPrimaryContainer
         ),
-        onClick = { permissionState.launchPermissionRequest() }
+        onClick = {
+//            permissionState.launchPermissionRequest()
+        }
     ) {
         Text(
             modifier = Modifier.padding(10.dp),
@@ -233,3 +235,4 @@
         textAlign = TextAlign.Center
     )
 }
+
diff --git a/camera-viewfinder-compose/Android.bp b/camera-viewfinder-compose/Android.bp
new file mode 100644
index 0000000..2b55a3f
--- /dev/null
+++ b/camera-viewfinder-compose/Android.bp
@@ -0,0 +1,23 @@
+package {
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+android_library {
+    name: "jetpack-camera-app_camera-viewfinder-compose",
+    srcs: ["src/main/**/*.kt"],
+    static_libs: [
+        "androidx.compose.material3_material3",
+	"androidx.compose.runtime_runtime",
+	"androidx.compose.ui_ui-tooling-preview",
+        "androidx.compose.ui_ui-tooling",
+	"androidx.camera_camera-core",
+	"androidx.camera_camera-viewfinder",
+	"androidx.core_core",
+    ],
+    sdk_version: "34",
+    min_sdk_version: "21",
+    manifest:"src/main/AndroidManifest.xml"
+}
+
diff --git a/camera-viewfinder-compose/src/main/AndroidManifest.xml b/camera-viewfinder-compose/src/main/AndroidManifest.xml
index 5c675bb..426a891 100644
--- a/camera-viewfinder-compose/src/main/AndroidManifest.xml
+++ b/camera-viewfinder-compose/src/main/AndroidManifest.xml
@@ -14,6 +14,6 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest>
+<manifest package="com.google.jetpackcamera.viewfinder">
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/camera-viewfinder-compose/src/main/java/com/google/jetpackcamera/viewfinder/CameraPreview.kt b/camera-viewfinder-compose/src/main/java/com/google/jetpackcamera/viewfinder/CameraPreview.kt
index 0bdc770..97009b8 100644
--- a/camera-viewfinder-compose/src/main/java/com/google/jetpackcamera/viewfinder/CameraPreview.kt
+++ b/camera-viewfinder-compose/src/main/java/com/google/jetpackcamera/viewfinder/CameraPreview.kt
@@ -21,7 +21,6 @@
 import android.view.View
 import androidx.camera.core.Preview.SurfaceProvider
 import androidx.camera.core.SurfaceRequest
-import androidx.camera.view.PreviewView.ImplementationMode
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
@@ -39,6 +38,20 @@
 
 private const val TAG = "Preview"
 
+enum class ImplementationMode {
+    /**
+     * Use a [SurfaceView] for the preview when possible. If the device
+     * doesn't support [SurfaceView], [PreviewView] will fall back to use a
+     * [TextureView] instead.
+     */
+    PERFORMANCE,
+
+    /**
+     * Use a [TextureView] for the preview.
+     */
+    COMPATIBLE
+}
+
 @Composable
 fun CameraPreview(
     modifier: Modifier,
diff --git a/core/common/Android.bp b/core/common/Android.bp
new file mode 100644
index 0000000..552b888
--- /dev/null
+++ b/core/common/Android.bp
@@ -0,0 +1,19 @@
+package {
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+android_library {
+    name: "jetpack-camera-app_core_common",
+    srcs: ["src/main/**/*.kt"],
+    static_libs: [
+        "androidx.core_core-ktx",
+	"hilt_android",
+        "androidx.appcompat_appcompat",
+	"com.google.android.material_material",
+    ],
+    sdk_version: "34",
+    min_sdk_version: "21",
+    manifest:"src/main/AndroidManifest.xml"
+}
diff --git a/core/common/src/main/AndroidManifest.xml b/core/common/src/main/AndroidManifest.xml
index 5c675bb..1609b38 100644
--- a/core/common/src/main/AndroidManifest.xml
+++ b/core/common/src/main/AndroidManifest.xml
@@ -14,6 +14,6 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest>
+<manifest package="com.google.jetpackcamera.core.common">
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/data/settings/Android.bp b/data/settings/Android.bp
new file mode 100644
index 0000000..2abb0b4
--- /dev/null
+++ b/data/settings/Android.bp
@@ -0,0 +1,43 @@
+package {
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+java_library {
+    name: "jetpack-camera-app-protos-java-gen",
+    installable: false,
+    proto: {
+        type: "lite",
+	canonical_path_from_root: false,
+	local_include_dirs: ["src/main/proto"],
+    },
+    srcs: [
+        "src/main/proto/**/*.proto",
+    ],
+    min_sdk_version: "21",
+    sdk_version: "34",
+
+    static_libs: [
+        "libprotobuf-java-lite",
+    ]
+}
+
+
+android_library {
+    name: "jetpack-camera-app_data_settings",
+    srcs: [
+        "src/main/**/*.kt",
+    ],
+    static_libs: [
+        "hilt_android",
+        "kotlinx-coroutines-core",
+	"androidx.datastore_datastore",
+	"jetpack-camera-app-protos-java-gen",
+	"libprotobuf-java-lite",
+    ],
+    sdk_version: "34",
+    min_sdk_version: "21",
+    manifest:"src/main/AndroidManifest.xml",
+}
+
diff --git a/data/settings/src/main/AndroidManifest.xml b/data/settings/src/main/AndroidManifest.xml
index 5c675bb..da78212 100644
--- a/data/settings/src/main/AndroidManifest.xml
+++ b/data/settings/src/main/AndroidManifest.xml
@@ -14,6 +14,6 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest>
+<manifest package="com.google.jetpackcamera.data.settings">
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/domain/camera/Android.bp b/domain/camera/Android.bp
new file mode 100644
index 0000000..b22d7e4
--- /dev/null
+++ b/domain/camera/Android.bp
@@ -0,0 +1,25 @@
+package {
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+android_library {
+    name: "jetpack-camera-app_domain_camera",
+    srcs: ["src/main/**/*.kt"],
+    static_libs: [
+        "androidx.concurrent_concurrent-futures-ktx",
+        "hilt_android",
+        "androidx.camera_camera-core",
+        "androidx.camera_camera-viewfinder",
+        "androidx.camera_camera-camera2",
+        "androidx.camera_camera-lifecycle",
+        "androidx.camera_camera-extensions",
+	"jetpack-camera-app_data_settings",
+	"jetpack-camera-app_core_common",
+    ],
+    sdk_version: "34",
+    min_sdk_version: "21",
+    manifest:"src/main/AndroidManifest.xml"
+}
+
diff --git a/domain/camera/src/main/AndroidManifest.xml b/domain/camera/src/main/AndroidManifest.xml
index 1e7c244..2aa7dee 100644
--- a/domain/camera/src/main/AndroidManifest.xml
+++ b/domain/camera/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+  package="com.google.jetpackcamera.domain.camera">
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/domain/camera/src/main/java/com/google/jetpackcamera/domain/camera/CameraXCameraUseCase.kt b/domain/camera/src/main/java/com/google/jetpackcamera/domain/camera/CameraXCameraUseCase.kt
index 556e778..e04bdd9 100644
--- a/domain/camera/src/main/java/com/google/jetpackcamera/domain/camera/CameraXCameraUseCase.kt
+++ b/domain/camera/src/main/java/com/google/jetpackcamera/domain/camera/CameraXCameraUseCase.kt
@@ -33,10 +33,10 @@
 import androidx.camera.core.ViewPort
 import androidx.camera.core.ZoomState
 import androidx.camera.lifecycle.ProcessCameraProvider
-import androidx.camera.video.MediaStoreOutputOptions
-import androidx.camera.video.Recorder
-import androidx.camera.video.Recording
-import androidx.camera.video.VideoCapture
+//import androidx.camera.video.MediaStoreOutputOptions
+//import androidx.camera.video.Recorder
+//import androidx.camera.video.Recording
+//import androidx.camera.video.VideoCapture
 import androidx.concurrent.futures.await
 import androidx.core.content.ContextCompat
 import com.google.jetpackcamera.domain.camera.CameraUseCase.Companion.INVALID_ZOOM_SCALE
@@ -71,11 +71,11 @@
     // TODO apply flash from settings
     private val imageCaptureUseCase = ImageCapture.Builder().build()
 
-    private val recorder = Recorder.Builder().setExecutor(
-        defaultDispatcher.asExecutor()
-    ).build()
-    private val videoCaptureUseCase = VideoCapture.withOutput(recorder)
-    private var recording: Recording? = null
+//    private val recorder = Recorder.Builder().setExecutor(
+//        defaultDispatcher.asExecutor()
+//    ).build()
+//    private val videoCaptureUseCase = VideoCapture.withOutput(recorder)
+//    private var recording: Recording? = null
 
     private lateinit var previewUseCase: Preview
     private lateinit var useCaseGroup: UseCaseGroup
@@ -161,27 +161,27 @@
             ContentValues().apply {
                 put(MediaStore.Video.Media.DISPLAY_NAME, name)
             }
-        val mediaStoreOutput =
-            MediaStoreOutputOptions.Builder(
-                application.contentResolver,
-                MediaStore.Video.Media.EXTERNAL_CONTENT_URI
-            )
-                .setContentValues(contentValues)
-                .build()
+//        val mediaStoreOutput =
+//            MediaStoreOutputOptions.Builder(
+//                application.contentResolver,
+//                MediaStore.Video.Media.EXTERNAL_CONTENT_URI
+//            )
+//                .setContentValues(contentValues)
+//                .build()
 
-        recording =
-            videoCaptureUseCase.output
-                .prepareRecording(application, mediaStoreOutput)
-                .start(ContextCompat.getMainExecutor(application)) { videoRecordEvent ->
-                    run {
-                        Log.d(TAG, videoRecordEvent.toString())
-                    }
-                }
+//        recording =
+//            videoCaptureUseCase.output
+//                .prepareRecording(application, mediaStoreOutput)
+//                .start(ContextCompat.getMainExecutor(application)) { videoRecordEvent ->
+//                    run {
+//                        Log.d(TAG, videoRecordEvent.toString())
+//                    }
+//                }
     }
 
     override fun stopVideoRecording() {
         Log.d(TAG, "stopRecording")
-        recording?.stop()
+//        recording?.stop()
     }
 
     override fun setZoomScale(scale: Float): Float {
@@ -267,7 +267,7 @@
                 )
                 .addUseCase(previewUseCase)
                 .addUseCase(imageCaptureUseCase)
-                .addUseCase(videoCaptureUseCase)
+//                .addUseCase(videoCaptureUseCase)
 
         if (captureMode == CaptureMode.SINGLE_STREAM) {
             useCaseGroupBuilder.addEffect(SingleSurfaceForcingEffect())
@@ -320,3 +320,4 @@
             else -> throw IllegalArgumentException("Invalid lens facing type: $lensFacing")
         }
 }
+
diff --git a/domain/camera/src/main/java/com/google/jetpackcamera/domain/camera/CoroutineCameraProvider.kt b/domain/camera/src/main/java/com/google/jetpackcamera/domain/camera/CoroutineCameraProvider.kt
index a056ec0..e55ae35 100644
--- a/domain/camera/src/main/java/com/google/jetpackcamera/domain/camera/CoroutineCameraProvider.kt
+++ b/domain/camera/src/main/java/com/google/jetpackcamera/domain/camera/CoroutineCameraProvider.kt
@@ -71,5 +71,5 @@
         }
     }
 
-    override fun getLifecycle() = lifecycleRegistry
+    override public val lifecycle: Lifecycle = lifecycleRegistry
 }
diff --git a/feature/preview/Android.bp b/feature/preview/Android.bp
new file mode 100644
index 0000000..ed5c86e
--- /dev/null
+++ b/feature/preview/Android.bp
@@ -0,0 +1,35 @@
+package {
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+android_library {
+    name: "jetpack-camera-app_feature_preview",
+    srcs: ["src/main/**/*.kt"],
+    resource_dirs: [
+        "src/main/res",
+    ],
+    static_libs: [
+        "androidx.compose.runtime_runtime",
+        "androidx.compose.material3_material3",
+        "androidx.compose.ui_ui-tooling-preview",
+        "hilt_android",
+	"androidx.hilt_hilt-navigation-compose",
+        "androidx.compose.ui_ui-tooling",
+        "kotlinx_coroutines_guava",
+        "androidx.datastore_datastore",
+        "libprotobuf-java-lite",
+	"androidx.camera_camera-core",
+        "androidx.camera_camera-viewfinder",
+        "jetpack-camera-app_data_settings",
+	"jetpack-camera-app_domain_camera",
+	"jetpack-camera-app_camera-viewfinder-compose",
+	"jetpack-camera-app_feature_quicksettings",
+
+    ],
+    sdk_version: "34",
+    min_sdk_version: "21",
+    manifest:"src/main/AndroidManifest.xml"
+}
+
diff --git a/feature/preview/src/main/AndroidManifest.xml b/feature/preview/src/main/AndroidManifest.xml
index 5c675bb..1fb3b89 100644
--- a/feature/preview/src/main/AndroidManifest.xml
+++ b/feature/preview/src/main/AndroidManifest.xml
@@ -14,6 +14,6 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest>
+<manifest package="com.google.jetpackcamera.feature.preview">
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/feature/quicksettings/Android.bp b/feature/quicksettings/Android.bp
new file mode 100644
index 0000000..8b0e3b6
--- /dev/null
+++ b/feature/quicksettings/Android.bp
@@ -0,0 +1,28 @@
+package {
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+android_library {
+    name: "jetpack-camera-app_feature_quicksettings",
+    srcs: ["src/main/**/*.kt"],
+    static_libs: [
+        "androidx.compose.material3_material3",
+	"androidx.compose.runtime_runtime",
+        "androidx.compose.ui_ui-tooling-preview",
+        "androidx.compose.ui_ui-tooling",
+        "androidx.camera_camera-core",
+        "androidx.camera_camera-viewfinder",
+	"kotlinx_coroutines_guava",
+	"jetpack-camera-app_data_settings",
+    ],
+    sdk_version: "34",
+    min_sdk_version: "21",
+    manifest:"src/main/AndroidManifest.xml",
+    resource_dirs: [
+        "src/main/res",
+    ],
+}
+
+
diff --git a/feature/quicksettings/src/main/AndroidManifest.xml b/feature/quicksettings/src/main/AndroidManifest.xml
index 5c675bb..331bca7 100644
--- a/feature/quicksettings/src/main/AndroidManifest.xml
+++ b/feature/quicksettings/src/main/AndroidManifest.xml
@@ -14,6 +14,6 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest>
+<manifest package="com.google.jetpackcamera.quicksettings">
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/feature/settings/Android.bp b/feature/settings/Android.bp
new file mode 100644
index 0000000..2e21fb8
--- /dev/null
+++ b/feature/settings/Android.bp
@@ -0,0 +1,31 @@
+package {
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+android_library {
+    name: "jetpack-camera-app_feature_settings",
+    srcs: ["src/main/**/*.kt"],
+    resource_dirs: [
+        "src/main/res",
+    ],
+    static_libs: [
+        "androidx.compose.material3_material3",
+	"androidx.compose.material_material-icons-core",
+	"androidx.compose.runtime_runtime",
+	"androidx.compose.ui_ui-tooling-preview",
+	"hilt_android",
+        "androidx.compose.ui_ui-tooling",
+	"kotlinx_coroutines_guava",
+	"androidx.datastore_datastore",
+	"libprotobuf-java-lite",
+	"jetpack-camera-app_data_settings",
+	"androidx.hilt_hilt-navigation-compose",
+
+    ],
+    sdk_version: "34",
+    min_sdk_version: "21",
+    manifest:"src/main/AndroidManifest.xml"
+}
+
diff --git a/feature/settings/src/main/AndroidManifest.xml b/feature/settings/src/main/AndroidManifest.xml
index 5c675bb..cfecf54 100644
--- a/feature/settings/src/main/AndroidManifest.xml
+++ b/feature/settings/src/main/AndroidManifest.xml
@@ -14,6 +14,6 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest>
+<manifest package="com.google.jetpackcamera.settings">
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/feature/settings/src/main/java/com/google/jetpackcamera/settings/ui/SettingsComponents.kt b/feature/settings/src/main/java/com/google/jetpackcamera/settings/ui/SettingsComponents.kt
index 31b2d08..738d489 100644
--- a/feature/settings/src/main/java/com/google/jetpackcamera/settings/ui/SettingsComponents.kt
+++ b/feature/settings/src/main/java/com/google/jetpackcamera/settings/ui/SettingsComponents.kt
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.selection.selectableGroup
 import androidx.compose.foundation.selection.toggleable
 import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.automirrored.filled.ArrowBack
 import androidx.compose.material3.AlertDialog
 import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.Icon
@@ -68,7 +68,7 @@
         },
         navigationIcon = {
             IconButton(onClick = { navBack() }) {
-                Icon(Icons.Filled.ArrowBack, stringResource(id = R.string.nav_back_accessibility))
+                Icon(Icons.AutoMirrored.Filled.ArrowBack, stringResource(id = R.string.nav_back_accessibility))
             }
         }
     )
@@ -332,8 +332,8 @@
 ) {
     ListItem(
         modifier = modifier,
-        headlineText = { Text(title) },
-        supportingText = when (description) {
+        headlineContent = { Text(title) },
+        supportingContent = when (description) {
             null -> null
             else -> {
                 { Text(description) }