From 38e7e244bb0e89c50f54495c0945f9958adcf027 Mon Sep 17 00:00:00 2001 From: Shubert Munthali Date: Tue, 12 Mar 2024 07:04:08 +0200 Subject: [PATCH] #112: Fix crash on empty file name (#116) --- .../arkretouch/presentation/edit/EditScreen.kt | 4 ++++ .../arkretouch/presentation/edit/SavePathDialog.kt | 11 ++++++++++- .../arkretouch/presentation/utils/Utils.kt | 6 ++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/dev/arkbuilders/arkretouch/presentation/edit/EditScreen.kt b/app/src/main/java/dev/arkbuilders/arkretouch/presentation/edit/EditScreen.kt index e201480..789308b 100644 --- a/app/src/main/java/dev/arkbuilders/arkretouch/presentation/edit/EditScreen.kt +++ b/app/src/main/java/dev/arkbuilders/arkretouch/presentation/edit/EditScreen.kt @@ -76,6 +76,7 @@ import dev.arkbuilders.arkretouch.presentation.theme.Gray import dev.arkbuilders.arkretouch.presentation.utils.askWritePermissions import dev.arkbuilders.arkretouch.presentation.utils.getActivity import dev.arkbuilders.arkretouch.presentation.utils.isWritePermGranted +import dev.arkbuilders.arkretouch.presentation.utils.toast import java.nio.file.Path @Composable @@ -364,6 +365,9 @@ private fun BoxScope.TopMenu( SavePathDialog( initialImagePath = imagePath, fragmentManager = fragmentManager, + onEmptyFileName = { + context.toast(R.string.ark_retouch_file_name_missing) + }, onDismissClick = { viewModel.showSavePathDialog = false }, onPositiveClick = { savePath -> viewModel.saveImage(savePath) diff --git a/app/src/main/java/dev/arkbuilders/arkretouch/presentation/edit/SavePathDialog.kt b/app/src/main/java/dev/arkbuilders/arkretouch/presentation/edit/SavePathDialog.kt index 5dc3df8..9dee1ef 100644 --- a/app/src/main/java/dev/arkbuilders/arkretouch/presentation/edit/SavePathDialog.kt +++ b/app/src/main/java/dev/arkbuilders/arkretouch/presentation/edit/SavePathDialog.kt @@ -52,6 +52,7 @@ import kotlin.streams.toList fun SavePathDialog( initialImagePath: Path?, fragmentManager: FragmentManager, + onEmptyFileName: () -> Unit, onDismissClick: () -> Unit, onPositiveClick: (Path) -> Unit ) { @@ -128,6 +129,10 @@ fun SavePathDialog( value = name, onValueChange = { name = it + if (name.isEmpty()) { + onEmptyFileName() + return@OutlinedTextField + } currentPath?.let { path -> imagePath = path.resolve(name) showOverwriteCheckbox.value = Files.list(path).toList() @@ -175,7 +180,11 @@ fun SavePathDialog( Button( modifier = Modifier.padding(5.dp), onClick = { - if (currentPath != null && name != null) + if (name.isEmpty()) { + onEmptyFileName() + return@Button + } + if (currentPath != null) onPositiveClick(currentPath!!.resolve(name)) } ) { diff --git a/app/src/main/java/dev/arkbuilders/arkretouch/presentation/utils/Utils.kt b/app/src/main/java/dev/arkbuilders/arkretouch/presentation/utils/Utils.kt index 6f8a5d6..480f7ab 100644 --- a/app/src/main/java/dev/arkbuilders/arkretouch/presentation/utils/Utils.kt +++ b/app/src/main/java/dev/arkbuilders/arkretouch/presentation/utils/Utils.kt @@ -9,6 +9,8 @@ import android.net.Uri import android.os.Build import android.os.Environment import android.provider.Settings +import android.widget.Toast +import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.pointer.PointerEvent @@ -98,3 +100,7 @@ fun PointerEvent.calculateRotationFromOneFingerGesture( } return angleDelta.toFloat() } + +fun Context.toast(@StringRes stringId: Int) { + Toast.makeText(this, getString(stringId), Toast.LENGTH_SHORT).show() +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0ece549..987935c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -36,4 +36,5 @@ Please enter height Intensity Size + Please provide file name