enhancement: show message after successful save image to gallery

This commit is contained in:
Diego Beraldin 2023-10-15 17:52:45 +02:00
parent ca568049c0
commit 560854b9d8
3 changed files with 28 additions and 2 deletions

View File

@ -14,5 +14,7 @@ interface ZoomableImageMviModel :
val autoLoadImages: Boolean = true,
)
sealed interface Effect
sealed interface Effect {
data object ShareSuccess : Effect
}
}

View File

@ -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

View File

@ -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 {