From c55bbc99dcab4c0af57a7ec83749b816cec4a5d3 Mon Sep 17 00:00:00 2001 From: kazifahimislam Date: Sat, 1 Feb 2025 23:59:28 +0530 Subject: [PATCH 1/2] Implement camera preview modes and UI state management in MainActivity --- .idea/other.xml | 318 ------------------ app/src/main/AndroidManifest.xml | 7 +- .../com/google/jetpackcamera/MainActivity.kt | 27 +- .../com/google/jetpackcamera/ui/JcaApp.kt | 26 +- 4 files changed, 38 insertions(+), 340 deletions(-) delete mode 100644 .idea/other.xml diff --git a/.idea/other.xml b/.idea/other.xml deleted file mode 100644 index 94c96f631..000000000 --- a/.idea/other.xml +++ /dev/null @@ -1,318 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3f896db82..998e1adaf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -28,10 +28,11 @@ android:required="false" /> + + - + + - // Window color mode APIs require API level 26+ - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + JcaApp( + previewMode = getPreviewMode(), + isDebugMode = isDebugMode, + openAppSettings = ::openAppSettings, + onRequestWindowColorMode = { colorMode -> + // Window color mode APIs require API level 26+ Log.d( TAG, "Setting window color mode to:" + " ${colorMode.toColorModeString()}" ) window?.colorMode = colorMode + }, + onFirstFrameCaptureCompleted = { + firstFrameComplete?.complete(Unit) } - }, - onFirstFrameCaptureCompleted = { - firstFrameComplete?.complete(Unit) - } - ) + ) + } } } } 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 db3a70c4b..76fb83208 100644 --- a/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt +++ b/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt @@ -16,6 +16,8 @@ package com.google.jetpackcamera.ui import android.Manifest +import android.os.Build +import androidx.annotation.RequiresApi import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier @@ -36,6 +38,7 @@ import com.google.jetpackcamera.ui.Routes.PERMISSIONS_ROUTE import com.google.jetpackcamera.ui.Routes.PREVIEW_ROUTE import com.google.jetpackcamera.ui.Routes.SETTINGS_ROUTE +@RequiresApi(Build.VERSION_CODES.TIRAMISU) @Composable fun JcaApp( openAppSettings: () -> Unit, @@ -56,6 +59,7 @@ fun JcaApp( ) } +@RequiresApi(Build.VERSION_CODES.TIRAMISU) @OptIn(ExperimentalPermissionsApi::class) @Composable private fun JetpackCameraNavHost( @@ -88,15 +92,23 @@ private fun JetpackCameraNavHost( } composable(PREVIEW_ROUTE) { - val permissionStates = rememberMultiplePermissionsState( - permissions = listOf( - Manifest.permission.CAMERA, - Manifest.permission.RECORD_AUDIO - ) + val mediaPermissions = listOf( + Manifest.permission.READ_MEDIA_IMAGES, + Manifest.permission.READ_MEDIA_VIDEO, + Manifest.permission.READ_MEDIA_AUDIO ) + + val allPermissions = listOf( + Manifest.permission.CAMERA, + Manifest.permission.RECORD_AUDIO + ) + mediaPermissions + + val permissionStates = rememberMultiplePermissionsState(permissions = allPermissions) + + // Automatically navigate to permissions screen when camera permission revoked - LaunchedEffect(key1 = permissionStates.permissions[0].status) { - if (!permissionStates.permissions[0].status.isGranted) { + LaunchedEffect( key1 = permissionStates.permissions) { + if (permissionStates.permissions.any { it.status.isGranted.not() }) { // Pop off the preview screen navController.navigate(PERMISSIONS_ROUTE) { popUpTo(PREVIEW_ROUTE) { From 3a443f92961e684e17b20bb8a40b44c5da1ad57b Mon Sep 17 00:00:00 2001 From: kazifahimislam Date: Tue, 4 Feb 2025 11:54:32 +0530 Subject: [PATCH 2/2] Resolved merge conflicts with latest main --- jetpack-camera-app | 1 + 1 file changed, 1 insertion(+) create mode 160000 jetpack-camera-app diff --git a/jetpack-camera-app b/jetpack-camera-app new file mode 160000 index 000000000..31a27cd5e --- /dev/null +++ b/jetpack-camera-app @@ -0,0 +1 @@ +Subproject commit 31a27cd5e98901bbc5f4a22fd978f5e40a380c77