From 19f8fa203ddc42357b8c9bb69f8856b79f7a317b Mon Sep 17 00:00:00 2001 From: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com> Date: Wed, 13 May 2026 14:22:35 +0700 Subject: [PATCH] Add haptic feedback before actions (#1636) * perform haptic before doing action * Perform haptic feedback call in UI/main thread instead of IO * Haptic feedback on both cases of long press action --- .../libraryUpdateError/components/LibraryUpdateErrorUiItem.kt | 2 +- app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt | 2 +- .../kanade/presentation/manga/components/BaseMangaListItem.kt | 2 +- .../main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt | 2 +- .../tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt | 2 +- app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt | 2 +- app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt | 2 +- app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/libraryUpdateError/components/LibraryUpdateErrorUiItem.kt b/app/src/main/java/eu/kanade/presentation/libraryUpdateError/components/LibraryUpdateErrorUiItem.kt index c834a61d5..a18baecd4 100644 --- a/app/src/main/java/eu/kanade/presentation/libraryUpdateError/components/LibraryUpdateErrorUiItem.kt +++ b/app/src/main/java/eu/kanade/presentation/libraryUpdateError/components/LibraryUpdateErrorUiItem.kt @@ -142,8 +142,8 @@ private fun LibraryUpdateErrorUiItem( .combinedClickable( onClick = onClick, onLongClick = { - onLongClick() haptic.performHapticFeedback(HapticFeedbackType.LongPress) + onLongClick() }, ) .padding(horizontal = MaterialTheme.padding.medium), diff --git a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt index f8f5fc463..08cdfa37e 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt @@ -1372,8 +1372,8 @@ private fun LazyListScope.sharedChapterItems( chapterSwipeStartAction = chapterSwipeStartAction, chapterSwipeEndAction = chapterSwipeEndAction, onLongClick = { - onChapterSelected(item, !item.selected, true) haptic.performHapticFeedback(HapticFeedbackType.LongPress) + onChapterSelected(item, !item.selected, true) }, onClick = { onChapterItemClick( diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/BaseMangaListItem.kt b/app/src/main/java/eu/kanade/presentation/manga/components/BaseMangaListItem.kt index e56216ba0..eb134704b 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/BaseMangaListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/BaseMangaListItem.kt @@ -43,8 +43,8 @@ fun BaseMangaListItem( onClick = onClickItem, // KMK --> onLongClick = { - onLongClick() haptic.performHapticFeedback(HapticFeedbackType.LongPress) + onLongClick() }, // KMK <-- ) diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt index 98ff2d78b..44bd792fc 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt @@ -286,8 +286,8 @@ private fun UpdatesUiItem( .combinedClickable( onClick = onClick, onLongClick = { - onLongClick() haptic.performHapticFeedback(HapticFeedbackType.LongPress) + onLongClick() }, ) .padding(top = if (isLeader) MaterialTheme.padding.small else 0.dp) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt index cc875e266..edb69c9df 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt @@ -375,6 +375,7 @@ data class BrowseSourceScreen( }, onMangaLongClick = { manga -> // KMK --> + haptic.performHapticFeedback(HapticFeedbackType.LongPress) if (bulkFavoriteState.selectionMode) { navigator.push(MangaScreen(manga.id, true)) } else { @@ -388,7 +389,6 @@ data class BrowseSourceScreen( ) else -> screenModel.addFavorite(manga) } - haptic.performHapticFeedback(HapticFeedbackType.LongPress) } } }, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt index 5eda7ac7e..c35c63142 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt @@ -329,8 +329,8 @@ data object LibraryTab : Tab { }.takeIf { state.showMangaContinueButton }, onToggleSelection = screenModel::toggleSelection, onToggleRangeSelection = { category, manga -> - screenModel.toggleRangeSelection(category, manga) haptic.performHapticFeedback(HapticFeedbackType.LongPress) + screenModel.toggleRangeSelection(category, manga) }, onRefresh = { onClickRefresh(state.activeCategory) }, onGlobalSearchClicked = { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt index c2e296d82..9b3739ae3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt @@ -278,8 +278,8 @@ class MangaScreen( onChapterClicked = { openChapter(context, it) }, onDownloadChapter = screenModel::runChapterDownloadActions.takeIf { !successState.source.isLocalOrStub() }, onAddToLibraryClicked = { - screenModel.toggleFavorite() haptic.performHapticFeedback(HapticFeedbackType.LongPress) + screenModel.toggleFavorite() }, // SY --> onWebViewClicked = { diff --git a/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt b/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt index 71b907bb6..658823b05 100644 --- a/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt +++ b/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt @@ -127,6 +127,7 @@ class MangaDexFollowsScreen(private val sourceId: Long) : Screen() { }, onMangaLongClick = { manga -> // KMK --> + haptic.performHapticFeedback(HapticFeedbackType.LongPress) if (bulkFavoriteState.selectionMode) { navigator.push(MangaScreen(manga.id, true)) } else { @@ -140,7 +141,6 @@ class MangaDexFollowsScreen(private val sourceId: Long) : Screen() { ) else -> screenModel.addFavorite(manga) } - haptic.performHapticFeedback(HapticFeedbackType.LongPress) } } },