From 08f389230e5fcb86222f93275c111971eb0a185a Mon Sep 17 00:00:00 2001 From: davotoula Date: Mon, 2 Mar 2026 18:00:58 +0000 Subject: [PATCH] restore download toast and permission check fix overflow button background to solid --- .../composable/controls/OverflowMenu.kt | 2 +- .../composable/controls/RenderTopButtons.kt | 31 ++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/controls/OverflowMenu.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/controls/OverflowMenu.kt index fe9b09abc..491634b68 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/controls/OverflowMenu.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/controls/OverflowMenu.kt @@ -120,7 +120,7 @@ fun OverflowMenuButton( .clip(CircleShape) .fillMaxSize(0.7f) .align(Alignment.Center) - .background(Color.Black.copy(alpha = 0.4f)), + .background(MaterialTheme.colorScheme.background), ) IconButton( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/controls/RenderTopButtons.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/controls/RenderTopButtons.kt index 4ae27026c..e4e19839f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/controls/RenderTopButtons.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/controls/RenderTopButtons.kt @@ -20,7 +20,10 @@ */ package com.vitorpamplona.amethyst.service.playback.composable.controls +import android.Manifest import android.content.pm.PackageManager +import android.os.Build +import android.widget.Toast import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -29,9 +32,14 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview +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.commons.richtext.MediaUrlVideo import com.vitorpamplona.amethyst.service.playback.composable.DEFAULT_MUTED_SETTING import com.vitorpamplona.amethyst.service.playback.composable.MediaControllerState @@ -42,8 +50,10 @@ import com.vitorpamplona.amethyst.ui.components.ShareMediaAction import com.vitorpamplona.amethyst.ui.components.getActivity import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.mockAccountViewModel +import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.theme.BitcoinOrange import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn +import kotlinx.coroutines.launch @Preview @Composable @@ -108,6 +118,7 @@ fun RenderTopButtons( ) } +@OptIn(ExperimentalPermissionsApi::class) @Composable fun RenderTopButtons( mediaData: MediaItemData, @@ -122,8 +133,14 @@ fun RenderTopButtons( accountViewModel: AccountViewModel, ) { val context = LocalContext.current + val scope = rememberCoroutineScope() val shareDialogVisible = remember { mutableStateOf(false) } + val writeStoragePermission = + rememberPermissionState(Manifest.permission.WRITE_EXTERNAL_STORAGE) { + if (it) accountViewModel.saveMediaToGallery(mediaData.videoUri, mediaData.mimeType, context) + } + LaunchedEffect(controllerVisible.value) { if (!controllerVisible.value) shareDialogVisible.value = false } @@ -150,7 +167,19 @@ fun RenderTopButtons( showPip = pipSupported, onShareClick = { shareDialogVisible.value = true }, onSaveClick = { - accountViewModel.saveMediaToGallery(mediaData.videoUri, mediaData.mimeType, context) + scope.launch { + Toast + .makeText( + context, + stringRes(context, R.string.video_download_has_started_toast), + Toast.LENGTH_SHORT, + ).show() + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q || writeStoragePermission.status.isGranted) { + accountViewModel.saveMediaToGallery(mediaData.videoUri, mediaData.mimeType, context) + } else { + writeStoragePermission.launchPermissionRequest() + } }, onPipClick = onPictureInPictureClick, )