mirror of
https://github.com/LiveFastEatTrashRaccoon/RaccoonForLemmy.git
synced 2025-02-04 21:47:38 +01:00
enhancement: show message after successful save image to gallery
This commit is contained in:
parent
ca568049c0
commit
560854b9d8
@ -14,5 +14,7 @@ interface ZoomableImageMviModel :
|
||||
val autoLoadImages: Boolean = true,
|
||||
)
|
||||
|
||||
sealed interface Effect
|
||||
sealed interface Effect {
|
||||
data object ShareSuccess : Effect
|
||||
}
|
||||
}
|
@ -14,8 +14,11 @@ import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.SnackbarHost
|
||||
import androidx.compose.material3.SnackbarHostState
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
@ -31,6 +34,10 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.Zoomabl
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getZoomableImageViewModel
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
|
||||
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
|
||||
class ZoomableImageScreen(
|
||||
private val url: String,
|
||||
@ -42,7 +49,18 @@ class ZoomableImageScreen(
|
||||
val model = rememberScreenModel { getZoomableImageViewModel() }
|
||||
model.bindToLifecycle(key)
|
||||
val uiState by model.uiState.collectAsState()
|
||||
val snackbarHostState = remember { SnackbarHostState() }
|
||||
val successMessage = stringResource(MR.strings.message_operation_successful)
|
||||
val navigator = remember { getNavigationCoordinator().getRootNavigator() }
|
||||
LaunchedEffect(model) {
|
||||
model.effects.onEach {
|
||||
when (it) {
|
||||
ZoomableImageMviModel.Effect.ShareSuccess -> {
|
||||
snackbarHostState.showSnackbar(successMessage)
|
||||
}
|
||||
}
|
||||
}.launchIn(this)
|
||||
}
|
||||
|
||||
Scaffold(
|
||||
topBar = {
|
||||
@ -79,6 +97,9 @@ class ZoomableImageScreen(
|
||||
}
|
||||
)
|
||||
},
|
||||
snackbarHost = {
|
||||
SnackbarHost(snackbarHostState)
|
||||
},
|
||||
content = { paddingValues ->
|
||||
Box(
|
||||
modifier = Modifier
|
||||
|
@ -34,7 +34,9 @@ class ZoomableImageViewModel(
|
||||
override fun reduce(intent: ZoomableImageMviModel.Intent) {
|
||||
when (intent) {
|
||||
is ZoomableImageMviModel.Intent.Share -> {
|
||||
shareHelper.share(intent.url, "image/*")
|
||||
runCatching {
|
||||
shareHelper.share(intent.url, "image/*")
|
||||
}
|
||||
}
|
||||
|
||||
is ZoomableImageMviModel.Intent.SaveToGallery -> downloadAndSave(intent.url)
|
||||
@ -51,6 +53,7 @@ class ZoomableImageViewModel(
|
||||
s.substring(idx).takeIf { it.isNotEmpty() } ?: ".jpeg"
|
||||
}
|
||||
galleryHelper.saveToGallery(bytes, "${DateTime.epochMillis()}.$extension")
|
||||
mvi.emitEffect(ZoomableImageMviModel.Effect.ShareSuccess)
|
||||
} catch (e: Throwable) {
|
||||
e.printStackTrace()
|
||||
} finally {
|
||||
|
Loading…
x
Reference in New Issue
Block a user