diff --git a/amethyst/src/main/AndroidManifest.xml b/amethyst/src/main/AndroidManifest.xml index 049a2f5ad..8259da6a2 100644 --- a/amethyst/src/main/AndroidManifest.xml +++ b/amethyst/src/main/AndroidManifest.xml @@ -19,12 +19,8 @@ - - - - - + diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/UploadFromGallery.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/UploadFromGallery.kt index ff5560063..66ac7d264 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/UploadFromGallery.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/UploadFromGallery.kt @@ -22,9 +22,10 @@ package com.vitorpamplona.amethyst.ui.actions import android.content.Context import android.net.Uri -import android.os.Build import android.os.Environment import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.PickVisualMediaRequest +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.infiniteRepeatable @@ -55,11 +56,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.core.content.FileProvider -import com.google.accompanist.permissions.ExperimentalPermissionsApi -import com.google.accompanist.permissions.isGranted -import com.google.accompanist.permissions.rememberPermissionState import com.vitorpamplona.amethyst.R -import com.vitorpamplona.amethyst.ui.GetMediaActivityResultContract import com.vitorpamplona.amethyst.ui.stringRes import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList @@ -69,7 +66,6 @@ import java.util.Date import java.util.Locale import java.util.concurrent.atomic.AtomicBoolean -@OptIn(ExperimentalPermissionsApi::class) @Composable fun UploadFromGallery( isUploading: Boolean, @@ -77,32 +73,19 @@ fun UploadFromGallery( modifier: Modifier, onImageChosen: (Uri) -> Unit, ) { - val cameraPermissionState = - rememberPermissionState( - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - android.Manifest.permission.READ_MEDIA_IMAGES - } else { - android.Manifest.permission.READ_EXTERNAL_STORAGE + var showGallerySelect by remember { mutableStateOf(false) } + if (showGallerySelect) { + GallerySelect( + onImageUri = { uri -> + showGallerySelect = false + if (uri != null) { + onImageChosen(uri) + } }, ) - - if (cameraPermissionState.status.isGranted) { - var showGallerySelect by remember { mutableStateOf(false) } - if (showGallerySelect) { - GallerySelect( - onImageUri = { uri -> - showGallerySelect = false - if (uri != null) { - onImageChosen(uri) - } - }, - ) - } - - UploadBoxButton(isUploading, tint, modifier) { showGallerySelect = true } - } else { - UploadBoxButton(isUploading, tint, modifier) { cameraPermissionState.launchPermissionRequest() } } + + UploadBoxButton(isUploading, tint, modifier) { showGallerySelect = true } } @Composable @@ -183,6 +166,7 @@ fun LoadingAnimation( easing = LinearEasing, ), ), + label = "UploadGalleryUploadingAnimation", ) CircularProgressIndicator( @@ -203,10 +187,10 @@ fun LoadingAnimation( @Composable fun GallerySelect(onImageUri: (Uri?) -> Unit = {}) { - var hasLaunched by remember { mutableStateOf(AtomicBoolean(false)) } + val hasLaunched by remember { mutableStateOf(AtomicBoolean(false)) } val launcher = rememberLauncherForActivityResult( - contract = GetMediaActivityResultContract(), + contract = ActivityResultContracts.PickVisualMedia(), onResult = { uri: Uri? -> onImageUri(uri) hasLaunched.set(false) @@ -217,7 +201,7 @@ fun GallerySelect(onImageUri: (Uri?) -> Unit = {}) { fun LaunchGallery() { SideEffect { if (!hasLaunched.getAndSet(true)) { - launcher.launch("*/*") + launcher.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageAndVideo)) } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/video/NewImageButton.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/video/NewImageButton.kt index 7d6e960c3..ddef875df 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/video/NewImageButton.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/video/NewImageButton.kt @@ -22,7 +22,6 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.video import android.Manifest import android.net.Uri -import android.os.Build import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.AnimatedVisibility @@ -151,31 +150,18 @@ fun NewImageButton( } if (wantsToPostFromGallery) { - val cameraPermissionState = - rememberPermissionState( - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - Manifest.permission.READ_MEDIA_IMAGES - } else { - Manifest.permission.READ_EXTERNAL_STORAGE + var showGallerySelect by remember { mutableStateOf(false) } + if (showGallerySelect) { + GallerySelect( + onImageUri = { uri -> + wantsToPostFromGallery = false + showGallerySelect = false + pickedURI = uri }, ) - - if (cameraPermissionState.status.isGranted) { - var showGallerySelect by remember { mutableStateOf(false) } - if (showGallerySelect) { - GallerySelect( - onImageUri = { uri -> - wantsToPostFromGallery = false - showGallerySelect = false - pickedURI = uri - }, - ) - } - - showGallerySelect = true - } else { - LaunchedEffect(key1 = accountViewModel) { cameraPermissionState.launchPermissionRequest() } } + + showGallerySelect = true } pickedURI?.let {