diff --git a/app/src/main/java/com/junkfood/seal/ui/page/command/TaskListPage.kt b/app/src/main/java/com/junkfood/seal/ui/page/command/TaskListPage.kt
index 3155f51749..3124c017ce 100644
--- a/app/src/main/java/com/junkfood/seal/ui/page/command/TaskListPage.kt
+++ b/app/src/main/java/com/junkfood/seal/ui/page/command/TaskListPage.kt
@@ -49,6 +49,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalClipboardManager
+import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.clearAndSetSemantics
import androidx.compose.ui.text.font.FontFamily
@@ -60,6 +61,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.junkfood.seal.Downloader
import com.junkfood.seal.R
import com.junkfood.seal.database.objects.CommandTemplate
+import com.junkfood.seal.ui.common.HapticFeedback.slightHapticFeedback
import com.junkfood.seal.ui.common.SVGImage
import com.junkfood.seal.ui.common.intState
import com.junkfood.seal.ui.component.BackButton
@@ -87,6 +89,7 @@ import kotlinx.coroutines.launch
@Composable
fun TaskListPage(onNavigateBack: () -> Unit, onNavigateToDetail: (Int) -> Unit) {
val scope = rememberCoroutineScope()
+ val view = LocalView.current
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
var showBottomSheet by remember { mutableStateOf(false) }
@@ -225,6 +228,7 @@ fun TaskListPage(onNavigateBack: () -> Unit, onNavigateToDetail: (Int) -> Unit)
item {
FilledButtonWithIcon(
onClick = {
+ view.slightHapticFeedback()
Downloader.executeCommandWithUrl(url)
onDismissRequest()
},
@@ -292,7 +296,7 @@ fun ColumnScope.TaskCreatorDialogContent(
textAlign = TextAlign.Center,
modifier = Modifier
.align(Alignment.CenterHorizontally)
- .padding(bottom = 16.dp)
+ .padding(bottom = 24.dp)
)
OutlinedTextField(
@@ -318,16 +322,16 @@ fun ColumnScope.TaskCreatorDialogContent(
}
item {
OutlinedButtonChip(
- icon = Icons.Outlined.NewLabel,
- label = stringResource(id = R.string.new_template),
- onClick = onNewTemplateClicked
+ icon = Icons.Outlined.Edit,
+ label = stringResource(id = R.string.edit_template, template.name),
+ onClick = onEditClicked
)
}
item {
OutlinedButtonChip(
- icon = Icons.Outlined.Edit,
- label = stringResource(id = R.string.edit_template, template.name),
- onClick = onEditClicked
+ icon = Icons.Outlined.NewLabel,
+ label = stringResource(id = R.string.new_template),
+ onClick = onNewTemplateClicked
)
}
}
diff --git a/app/src/main/java/com/junkfood/seal/ui/page/download/DownloadPage.kt b/app/src/main/java/com/junkfood/seal/ui/page/download/DownloadPage.kt
index 6aea6ddb4f..2664fddcbd 100644
--- a/app/src/main/java/com/junkfood/seal/ui/page/download/DownloadPage.kt
+++ b/app/src/main/java/com/junkfood/seal/ui/page/download/DownloadPage.kt
@@ -155,6 +155,7 @@ fun DownloadPage(
val clipboardManager = LocalClipboardManager.current
val keyboardController = LocalSoftwareKeyboardController.current
val useDialog = LocalWindowWidthState.current != WindowWidthSizeClass.Compact
+ val view = LocalView.current
var showDownloadDialog by rememberSaveable { mutableStateOf(false) }
var showMeteredNetworkDialog by remember { mutableStateOf(false) }
@@ -188,6 +189,7 @@ fun DownloadPage(
val downloadCallback: () -> Unit = {
+ view.slightHapticFeedback()
keyboardController?.hide()
if (NOTIFICATION.getBoolean() && notificationPermission?.status?.isGranted == false) {
showNotificationDialog = true
diff --git a/app/src/main/java/com/junkfood/seal/ui/page/settings/command/TemplateListPage.kt b/app/src/main/java/com/junkfood/seal/ui/page/settings/command/TemplateListPage.kt
index 05759f25c5..e0403d97f6 100644
--- a/app/src/main/java/com/junkfood/seal/ui/page/settings/command/TemplateListPage.kt
+++ b/app/src/main/java/com/junkfood/seal/ui/page/settings/command/TemplateListPage.kt
@@ -64,6 +64,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.junkfood.seal.R
+import com.junkfood.seal.database.backup.BackupUtil
import com.junkfood.seal.database.objects.CommandTemplate
import com.junkfood.seal.ui.common.HapticFeedback.slightHapticFeedback
import com.junkfood.seal.ui.common.intState
@@ -76,7 +77,6 @@ import com.junkfood.seal.ui.component.PreferenceItemVariant
import com.junkfood.seal.ui.component.PreferenceSwitchWithContainer
import com.junkfood.seal.ui.component.TemplateItem
import com.junkfood.seal.ui.page.settings.about.ytdlpUrl
-import com.junkfood.seal.database.backup.BackupUtil
import com.junkfood.seal.util.CUSTOM_COMMAND
import com.junkfood.seal.util.DatabaseUtil
import com.junkfood.seal.util.PreferenceUtil
@@ -243,6 +243,7 @@ fun TemplateListPage(onNavigateBack: () -> Unit, onNavigateToEditPage: (Int) ->
modifier = Modifier.fillMaxWidth()
) {
TriStateCheckbox(state = checkBoxState, onClick = {
+ view.slightHapticFeedback()
when (checkBoxState) {
ToggleableState.On -> selectedTemplates.clear()
else -> selectedTemplates.run {
@@ -262,6 +263,7 @@ fun TemplateListPage(onNavigateBack: () -> Unit, onNavigateToEditPage: (Int) ->
IconButton(
onClick = {
+ view.slightHapticFeedback()
scope.launch {
snackbarHostState.showSnackbar(
context.getString(R.string.template_exported)
@@ -288,7 +290,10 @@ fun TemplateListPage(onNavigateBack: () -> Unit, onNavigateToEditPage: (Int) ->
)
}
IconButton(
- onClick = { showDeleteDialog = true },
+ onClick = {
+ view.slightHapticFeedback()
+ showDeleteDialog = true
+ },
enabled = selectedTemplates.isNotEmpty()
) {
Icon(
diff --git a/app/src/main/java/com/junkfood/seal/ui/page/videolist/VideoDetailDrawer.kt b/app/src/main/java/com/junkfood/seal/ui/page/videolist/VideoDetailDrawer.kt
index b7bdca519c..03242ffd14 100644
--- a/app/src/main/java/com/junkfood/seal/ui/page/videolist/VideoDetailDrawer.kt
+++ b/app/src/main/java/com/junkfood/seal/ui/page/videolist/VideoDetailDrawer.kt
@@ -36,6 +36,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.platform.LocalUriHandler
+import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextOverflow
@@ -43,6 +44,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.junkfood.seal.R
import com.junkfood.seal.database.objects.DownloadedVideoInfo
+import com.junkfood.seal.ui.common.HapticFeedback.slightHapticFeedback
import com.junkfood.seal.ui.component.FilledTonalButtonWithIcon
import com.junkfood.seal.ui.component.LongTapTextButton
import com.junkfood.seal.ui.component.OutlinedButtonWithIcon
@@ -51,7 +53,6 @@ import com.junkfood.seal.ui.theme.SealTheme
import com.junkfood.seal.util.FileUtil
import com.junkfood.seal.util.ToastUtil
-@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun VideoDetailDrawer(
sheetState: ModalBottomSheetState,
@@ -61,6 +62,7 @@ fun VideoDetailDrawer(
onDelete: () -> Unit = {},
) {
val uriHandler = LocalUriHandler.current
+ val view = LocalView.current
val context = LocalContext.current
val hapticFeedback = LocalHapticFeedback.current
BackHandler(sheetState.targetValue == ModalBottomSheetValue.Expanded) {
@@ -91,6 +93,7 @@ fun VideoDetailDrawer(
onReDownload = onReDownload,
onDismissRequest = onDismissRequest,
onDelete = {
+ view.slightHapticFeedback()
onDismissRequest()
onDelete()
}, onOpenLink = {
@@ -98,6 +101,7 @@ fun VideoDetailDrawer(
onDismissRequest()
uriHandler.openUri(videoUrl)
}, onShareFile = {
+ view.slightHapticFeedback()
FileUtil.createIntentForSharingFile(videoPath)?.runCatching {
context.startActivity(
Intent.createChooser(this, shareTitle)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3b6dd00379..2f4dbe4d0d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -36,7 +36,7 @@
Link copied to clipboard
Open link
Remove
- Delete
+ Delete file
About
Version, feedback, auto update
Back