From 167c3e7e2eedaf5cba631ef627b36a6d8d11dd40 Mon Sep 17 00:00:00 2001 From: Nain57 Date: Fri, 31 Jul 2026 10:51:25 +0200 Subject: [PATCH 1/5] [#1020] Revert "[fix] Lift NavBarDialog above IME without ADJUST_RESIZE" This reverts commit dba68216484a48fd6c282e990f5033d61cebeea2. --- .../implementation/navbar/NavBarDialog.kt | 26 ---- .../navbar/NavBarDialogImeLiftController.kt | 117 ------------------ 2 files changed, 143 deletions(-) delete mode 100644 core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/dialog/implementation/navbar/NavBarDialogImeLiftController.kt diff --git a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/dialog/implementation/navbar/NavBarDialog.kt b/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/dialog/implementation/navbar/NavBarDialog.kt index f7f9dc992..0855e701d 100644 --- a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/dialog/implementation/navbar/NavBarDialog.kt +++ b/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/dialog/implementation/navbar/NavBarDialog.kt @@ -21,8 +21,6 @@ import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.Window -import android.view.WindowManager import androidx.annotation.CallSuper import androidx.annotation.StyleRes @@ -49,8 +47,6 @@ abstract class NavBarDialog(@StyleRes theme: Int) : OverlayDialog(theme) { lateinit var floatingActionButtons: IncludeFloatingActionButtonsBinding lateinit var topBarBinding: IncludeDialogNavigationTopBarBinding - private var imeLiftController: NavBarDialogImeLiftController? = null - abstract fun inflateMenu(navBarView: NavigationBarView) abstract fun onCreateContent(navItemId: Int): NavBarDialogContent @@ -59,17 +55,6 @@ abstract class NavBarDialog(@StyleRes theme: Int) : OverlayDialog(theme) { open fun onContentViewChanged(navItemId: Int) = Unit - /** - * Keep window size unchanged while the IME is shown. - * Portrait bottom bar sits on the dialog [CoordinatorLayout]; [SOFT_INPUT_ADJUST_RESIZE] parks the sheet mid-screen. - */ - override fun applySoftInputMode(window: Window) { - window.setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING or - WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN, - ) - } - override fun onCreateView(): ViewGroup { baseViewBinding = DialogBaseNavBarBinding.inflate(LayoutInflater.from(context)).apply { layoutTopBar.apply { @@ -114,15 +99,6 @@ abstract class NavBarDialog(@StyleRes theme: Int) : OverlayDialog(theme) { setupPortraitViews() } - val coordinator = dialogCoordinatorLayout - val decor = dialog.window?.decorView - if (coordinator != null && decor != null) { - imeLiftController = NavBarDialogImeLiftController( - liftTarget = coordinator, - insetHost = decor, - ).also { it.start() } - } - updateContentView( itemId = navBarView.selectedItemId, forceUpdate = true, @@ -140,8 +116,6 @@ abstract class NavBarDialog(@StyleRes theme: Int) : OverlayDialog(theme) { } override fun onDestroy() { - imeLiftController?.stop() - imeLiftController = null contentMap.values.forEach { content -> content.destroy() } diff --git a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/dialog/implementation/navbar/NavBarDialogImeLiftController.kt b/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/dialog/implementation/navbar/NavBarDialogImeLiftController.kt deleted file mode 100644 index 340eb84bb..000000000 --- a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/dialog/implementation/navbar/NavBarDialogImeLiftController.kt +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2026 Kevin Buzeau - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.buzbuz.smartautoclicker.core.common.overlays.dialog.implementation.navbar - -import android.animation.ValueAnimator -import android.view.View -import android.view.animation.AccelerateDecelerateInterpolator - -import androidx.core.view.ViewCompat -import androidx.core.view.WindowInsetsAnimationCompat -import androidx.core.view.WindowInsetsCompat - -/** - * Lifts a dialog content root when the IME is visible. - * - * [NavBarDialog] keeps [android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING] so the portrait bottom bar - * is not parked by system resize; this controller mirrors IME height via translation instead. - */ -internal class NavBarDialogImeLiftController( - private val liftTarget: View, - private val insetHost: View, -) { - - private var lastImeLiftPx: Int = 0 - private var imeAnimationRunning: Boolean = false - private var imeLiftAnimator: ValueAnimator? = null - - private val insetsAnimationCallback = - object : WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_CONTINUE_ON_SUBTREE) { - override fun onPrepare(animation: WindowInsetsAnimationCompat) { - if (animation.typeMask and WindowInsetsCompat.Type.ime() != 0) { - imeAnimationRunning = true - imeLiftAnimator?.cancel() - } - } - - override fun onProgress( - insets: WindowInsetsCompat, - runningAnimations: MutableList, - ): WindowInsetsCompat { - applyImeLift(resolveImeLiftPx(insets)) - return insets - } - - override fun onEnd(animation: WindowInsetsAnimationCompat) { - if (animation.typeMask and WindowInsetsCompat.Type.ime() != 0) { - imeAnimationRunning = false - syncImeLiftAnimated() - } - } - } - - fun start() { - ViewCompat.setWindowInsetsAnimationCallback(insetHost, insetsAnimationCallback) - ViewCompat.setOnApplyWindowInsetsListener(insetHost) { _, insets -> - if (!imeAnimationRunning) { - applyImeLift(resolveImeLiftPx(insets)) - } - insets - } - ViewCompat.requestApplyInsets(insetHost) - } - - fun stop() { - imeLiftAnimator?.cancel() - imeLiftAnimator = null - ViewCompat.setWindowInsetsAnimationCallback(insetHost, null) - ViewCompat.setOnApplyWindowInsetsListener(insetHost, null) - applyImeLift(0) - } - - private fun syncImeLiftAnimated() { - val insets = ViewCompat.getRootWindowInsets(insetHost) ?: return - val target = resolveImeLiftPx(insets) - if (target == lastImeLiftPx) return - - imeLiftAnimator?.cancel() - val start = lastImeLiftPx - imeLiftAnimator = ValueAnimator.ofInt(start, target).apply { - duration = IME_LIFT_ANIMATION_MS - interpolator = AccelerateDecelerateInterpolator() - addUpdateListener { animator -> - applyImeLift(animator.animatedValue as Int) - } - start() - } - } - - private fun resolveImeLiftPx(insets: WindowInsetsCompat): Int { - if (!insets.isVisible(WindowInsetsCompat.Type.ime())) return 0 - return insets.getInsets(WindowInsetsCompat.Type.ime()).bottom - } - - private fun applyImeLift(imeBottomPx: Int) { - if (imeBottomPx == lastImeLiftPx) return - lastImeLiftPx = imeBottomPx - liftTarget.translationY = -imeBottomPx.toFloat() - } - - private companion object { - const val IME_LIFT_ANIMATION_MS = 180L - } -} From 5b2b19d67f0198cea2114811c490dde555bf1717 Mon Sep 17 00:00:00 2001 From: Nain57 Date: Fri, 31 Jul 2026 12:32:51 +0200 Subject: [PATCH 2/5] [#1026] Improve debugging rectangle display -> Filter negative 0,0 results. Using 0,0, was fine but now we have margins added, which results is something visible. -> Double the margin, as it seems to improve the detection for huge downscaling --- .../debugging/ui/view/DebugOverlayView.kt | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/feature/smart-debugging/src/main/java/com/buzbuz/smartautoclicker/feature/smart/debugging/ui/view/DebugOverlayView.kt b/feature/smart-debugging/src/main/java/com/buzbuz/smartautoclicker/feature/smart/debugging/ui/view/DebugOverlayView.kt index d06979e14..fb53d949e 100644 --- a/feature/smart-debugging/src/main/java/com/buzbuz/smartautoclicker/feature/smart/debugging/ui/view/DebugOverlayView.kt +++ b/feature/smart-debugging/src/main/java/com/buzbuz/smartautoclicker/feature/smart/debugging/ui/view/DebugOverlayView.kt @@ -27,7 +27,7 @@ internal class DebugOverlayView(context: Context) : View(context) { } /** The margin between the actual condition position and the displayed borders. */ - private val conditionBordersMargin = 10 + private val conditionBordersMargin = 20 private val results: MutableList = mutableListOf() private val displayedResults: MutableList> = mutableListOf() @@ -67,16 +67,23 @@ internal class DebugOverlayView(context: Context) : View(context) { return } - results.forEach { result -> displayedResults.add(result.toDisplayResult()) } + displayedResults.addAll(results.toDisplayResults()) } - private fun ScreenConditionResultUiState.toDisplayResult(): Pair = Pair( - if (positive) positiveResultPaint else negativeResultPaint, - Rect( - coordinates.left - conditionBordersMargin, - coordinates.top - conditionBordersMargin, - coordinates.right + conditionBordersMargin, - coordinates.bottom + conditionBordersMargin, - ) - ) + private fun List.toDisplayResults(): List> = + mapNotNull { uiState -> + if (!uiState.positive && (uiState.coordinates.width() == 0 || uiState.coordinates.height() == 0)) + return@mapNotNull null + + Pair( + if (uiState.positive) positiveResultPaint else negativeResultPaint, + Rect( + uiState.coordinates.left - conditionBordersMargin, + uiState.coordinates.top - conditionBordersMargin, + uiState.coordinates.right + conditionBordersMargin, + uiState.coordinates.bottom + conditionBordersMargin, + ) + ) + } + } \ No newline at end of file From 19524c75409f5f6ae03f2d1fcdcfd5c1ad6987af Mon Sep 17 00:00:00 2001 From: Nain57 Date: Mon, 3 Aug 2026 13:42:08 +0200 Subject: [PATCH 3/5] Fix overlay menu window size issues --- .../core/common/overlays/menu/OverlayMenu.kt | 27 ++++++++++++++++++- .../common/OverlayMenuAnimations.kt | 8 ++++++ .../common/OverlayMenuResizeController.kt | 10 ++++--- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/OverlayMenu.kt b/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/OverlayMenu.kt index d56856db2..cd75feeaa 100644 --- a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/OverlayMenu.kt +++ b/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/OverlayMenu.kt @@ -461,9 +461,30 @@ abstract class OverlayMenu( */ protected fun setMenuItemVisibility(view: View, visible: Boolean) { Log.d(TAG, "setMenuItemVisibility for ${hashCode()}, $view to $visible") + + if (view.isVisible == visible) return view.isVisible = visible - if (!resizeController.isAnimating) forceWindowResize() + if (canResizeWindow()) forceWindowResize() + } + + /** + * Set the visibility of several menu items. + * When changing multiple items visibility, use this method to recompute the window size only once. + * + * @param viewState map of the item views to their new visibility + */ + protected fun setMenuItemsVisibility(viewState: Map) { + Log.d(TAG, "setMenuItemVisibility for ${hashCode()}, $viewState") + + var haveChanged = false + viewState.forEach { (view, isVisible) -> + haveChanged = haveChanged || view.isVisible != isVisible + view.isVisible = isVisible + } + + if (!haveChanged) return + if (canResizeWindow()) forceWindowResize() } /** @@ -477,6 +498,10 @@ abstract class OverlayMenu( resizeController.animateLayoutChanges(layoutChanges) } + private fun canResizeWindow(): Boolean = + !resizeController.isAnimating && !animations.showAnimationIsRunning + && !animations.hideAnimationIsRunning && menuBackground.width > 0 + private fun forceWindowResize() { Log.d(TAG, "Force window resize") onNewWindowSize(resizeController.measureMenuSize()) diff --git a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/implementation/common/OverlayMenuAnimations.kt b/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/implementation/common/OverlayMenuAnimations.kt index e91dbce44..76a121f40 100644 --- a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/implementation/common/OverlayMenuAnimations.kt +++ b/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/implementation/common/OverlayMenuAnimations.kt @@ -69,6 +69,10 @@ internal class OverlayMenuAnimations : Dumpable { showAnimationIsRunning = false showOverlayMenuAnimation.cancel() showOverlayViewAnimation.cancel() + + view.alpha = 1f + if (overlayView is ViewGroup && overlayView.childCount == 1) overlayView.children.first().alpha = 1f + onAnimationEnded() } view.postDelayed(timeoutCallback, 1_000) @@ -107,6 +111,10 @@ internal class OverlayMenuAnimations : Dumpable { hideAnimationIsRunning = false hideOverlayMenuAnimation.cancel() hideOverlayViewAnimation.cancel() + + view.alpha = 0f + if (overlayView is ViewGroup && overlayView.childCount == 1) overlayView.children.first().alpha = 0f + onAnimationEnded() } diff --git a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/implementation/common/OverlayMenuResizeController.kt b/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/implementation/common/OverlayMenuResizeController.kt index f7789e956..974e45915 100644 --- a/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/implementation/common/OverlayMenuResizeController.kt +++ b/core/common/overlays/src/main/java/com/buzbuz/smartautoclicker/core/common/overlays/menu/implementation/common/OverlayMenuResizeController.kt @@ -125,11 +125,15 @@ internal class OverlayMenuResizeController( } fun measureMenuSize(): Size { - resizedContainer.measure(MeasureSpec.EXACTLY, MeasureSpec.EXACTLY) + resizedContainer.measure( + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), + ) - // Get the height of all children + the padding + // Get the height of all children + the padding. + // Use measuredHeight as fallback for views that are now visible but not yet laid out (height == 0). val height = resizedContainer.children.fold(0) { acc, child -> - acc + (if (child.isGone) 0 else child.height) + acc + (if (child.isGone) 0 else maxOf(child.height, child.measuredHeight)) } + resizedContainer.paddingTop + resizedContainer.paddingBottom val firstChild = (backgroundViewGroup.getChildAt(0) as? ViewGroup) From 802b0657762819bb5a574f403ce33835c7c81fff Mon Sep 17 00:00:00 2001 From: Nain57 Date: Mon, 3 Aug 2026 14:38:24 +0200 Subject: [PATCH 4/5] [#1025] Add help buttons in several place in the app Issue doesn't seem to follow the tutorial guidelines. Having this explaination buried in the tons of information is not ideal, and user misunderstanding is completely legitimate. As this is not really a "bug", we can add more entry points to the tutorials, in the context the need to be read. This PR adds the possibility to display a slideshow as a tutorial Tip, on a dialog from anywhere. Then, use this new dialog, for the image capture menu and all area selector menus --- .../common/navigation/TutorialNavigator.kt | 2 +- .../tutorial/domain/TutorialRepository.kt | 5 +- .../domain/TutorialSubjectController.kt | 4 +- .../tutorial/domain/model/{data => }/Tip.kt | 8 +- .../domain/model/state/TutorialState.kt | 4 +- .../model/state/TutorialSubjectState.kt | 6 +- .../model/{data => tutorial}/Tutorial.kt | 6 +- .../model/{data => tutorial}/TutorialInfo.kt | 2 +- .../{data => tutorial}/step/TutorialStep.kt | 2 +- .../step/TutorialStepEndCondition.kt | 2 +- .../step/TutorialStepImage.kt | 2 +- .../step/TutorialStepStartCondition.kt | 2 +- .../subject/TutorialSubject.kt | 4 +- .../quickclickgame/QuickClickGameRules.kt | 2 +- .../QuickClickGameTargetState.kt | 2 +- .../QuickClickGameTargetType.kt | 2 +- .../tutorial/impl/TutorialRepositoryImpl.kt | 4 +- .../tutorial/impl/data/TipsStateDataSource.kt | 2 +- .../data/TutorialCompletionStateDataSource.kt | 2 +- .../tutorial/impl/engine/TutorialEngine.kt | 10 +- .../step/TutorialStepEndConditionMonitor.kt | 2 +- .../step/TutorialStepStartConditionMonitor.kt | 2 +- .../engine/step/TutorialStepsOrchestrator.kt | 2 +- .../engine/subject/QuickClickGameEngine.kt | 4 +- .../impl/engine/subject/TimingGameEngine.kt | 2 +- .../impl/data/TipsStateDataSourceTest.kt | 2 +- .../TutorialCompletionStateDataSourceTest.kt | 8 +- .../impl/engine/TutorialEngineTest.kt | 14 +-- .../engine/TutorialStepsOrchestratorTest.kt | 6 +- .../TutorialStepStartConditionMonitorTest.kt | 3 +- .../subject/QuickClickGameEngineTest.kt | 8 +- .../ui/src/main/res/drawable/ic_help.xml | 19 ++++ .../feature/dumb/config/ui/DumbMainMenu.kt | 2 +- .../dumb/config/ui/DumbMainMenuModel.kt | 2 +- .../areaselector/ConditionAreaSelectorMenu.kt | 7 ++ .../ui/condition/screen/image/CaptureMenu.kt | 24 ++++ .../screen/image/ImageConditionDialog.kt | 3 + .../screen/number/NumberConditionDialog.kt | 3 + .../screen/text/TextConditionDialog.kt | 3 + .../smart/config/ui/mainmenu/MainMenu.kt | 2 +- .../smart/config/ui/mainmenu/MainMenuModel.kt | 2 +- .../src/main/res/drawable/ic_help.xml | 11 -- .../res/layout/overlay_validation_menu.xml | 10 +- .../color/ColorConditionsTutorial.kt | 14 +-- .../ImageConditionsMovingTargetTutorial.kt | 14 +-- .../ImageConditionsStillTargetTutorial.kt | 14 +-- .../NumberConditionsStaticValueTutorial.kt | 14 +-- .../text/TextConditionsMovingTextTutorial.kt | 14 +-- .../text/TextConditionsStillTextTutorial.kt | 14 +-- .../TimerReachedConditionTutorial.kt | 12 +- ...mbineConditionsNotVisibleTargetTutorial.kt | 12 +- .../CombineConditionsOperatorAndTutorial.kt | 14 +-- .../CombineConditionsOperatorOrTutorial.kt | 12 +- .../priority/EventsPriorityTutorial.kt | 14 +-- .../state/EventsStateTutorial.kt | 14 +-- .../root/counters/CountersBasicsTutorial.kt | 14 +-- .../image/CountBlueValidateRedRules.kt | 6 +- .../FourMovingTargetsInOrderTargetRules.kt | 6 +- .../image/OneMovingTargetRules.kt | 6 +- .../image/OneStillTargetRules.kt | 6 +- .../TwoMovingTargetsPressInOrderRules.kt | 6 +- .../image/TwoStillTargetsPressAnyRules.kt | 6 +- ...woStillTargetsPressWhenBothVisibleRules.kt | 6 +- ...TwoStillTargetsPressWhenOneVisibleRules.kt | 6 +- ...neStillChangingNumberClickWhenOverRules.kt | 6 +- .../text/FourStillChangingTextRules.kt | 6 +- .../text/OneStillChangingTextRules.kt | 6 +- .../tutorial/domain/model/TutorialItem.kt | 4 +- .../navigation/TutorialNavigatorImpl.kt | 26 ++++- .../ui/dialogs/StopWithVolumeDownTipDialog.kt | 2 +- .../game/clickcount/ClickCountGameFragment.kt | 4 +- .../game/clickcount/ClickCountGameUiState.kt | 4 +- .../clickcount/ClickCountGameViewModel.kt | 4 +- .../ui/game/timing/TimingGameViewModel.kt | 2 +- .../ui/overlay/TutorialFullscreenViewModel.kt | 4 +- .../ui/slideshow/TutorialSlideshowDialog.kt | 107 ++++++++++++++++++ .../res/layout/dialog_tutorial_slideshow.xml | 61 ++++++++++ .../layout/item_tutorial_slideshow_page.xml | 4 +- 78 files changed, 463 insertions(+), 215 deletions(-) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => }/Tip.kt (88%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/Tutorial.kt (94%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/TutorialInfo.kt (98%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/step/TutorialStep.kt (99%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/step/TutorialStepEndCondition.kt (98%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/step/TutorialStepImage.kt (98%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/step/TutorialStepStartCondition.kt (99%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/subject/TutorialSubject.kt (96%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/subject/quickclickgame/QuickClickGameRules.kt (98%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/subject/quickclickgame/QuickClickGameTargetState.kt (96%) rename core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/{data => tutorial}/subject/quickclickgame/QuickClickGameTargetType.kt (97%) create mode 100644 core/common/ui/src/main/res/drawable/ic_help.xml delete mode 100644 feature/smart-config/src/main/res/drawable/ic_help.xml create mode 100644 feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/slideshow/TutorialSlideshowDialog.kt create mode 100644 feature/tutorial/src/main/res/layout/dialog_tutorial_slideshow.xml diff --git a/core/common/navigation/src/main/java/com/buzbuz/smartautoclicker/core/common/navigation/TutorialNavigator.kt b/core/common/navigation/src/main/java/com/buzbuz/smartautoclicker/core/common/navigation/TutorialNavigator.kt index 779f8dfe0..83d2a98f8 100644 --- a/core/common/navigation/src/main/java/com/buzbuz/smartautoclicker/core/common/navigation/TutorialNavigator.kt +++ b/core/common/navigation/src/main/java/com/buzbuz/smartautoclicker/core/common/navigation/TutorialNavigator.kt @@ -17,7 +17,7 @@ package com.buzbuz.smartautoclicker.core.common.navigation import android.content.Context -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import dagger.hilt.EntryPoints interface TutorialNavigator { diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/TutorialRepository.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/TutorialRepository.kt index 8574e91f6..33b8d1765 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/TutorialRepository.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/TutorialRepository.kt @@ -17,9 +17,8 @@ package com.buzbuz.smartautoclicker.core.common.tutorial.domain import android.content.Intent -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tutorial -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.TutorialInfo -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.Tutorial +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialState import kotlinx.coroutines.flow.Flow diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/TutorialSubjectController.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/TutorialSubjectController.kt index 82607f1ba..cd8b49089 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/TutorialSubjectController.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/TutorialSubjectController.kt @@ -16,8 +16,8 @@ */ package com.buzbuz.smartautoclicker.core.common.tutorial.domain -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.TutorialSubject -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetType +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.TutorialSubject +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetType import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialSubjectState import kotlinx.coroutines.flow.StateFlow diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/Tip.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/Tip.kt similarity index 88% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/Tip.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/Tip.kt index 6c9ce70d1..d8ae1752d 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/Tip.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/Tip.kt @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2026 Kevin Buzeau * * This program is free software: you can redistribute it and/or modify @@ -14,8 +14,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model enum class Tip { + IMAGE_CAPTURE, + IMAGE_DETECTION_AREA, + NUMBER_DETECTION_AREA, + TEXT_DETECTION_AREA, STOP_WITH_VOLUME_DOWN, } \ No newline at end of file diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/state/TutorialState.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/state/TutorialState.kt index 22879364e..6ea7e5cb3 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/state/TutorialState.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/state/TutorialState.kt @@ -16,8 +16,8 @@ */ package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tutorial -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStep +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.Tutorial +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStep /** * Lifecycle state of the tutorial engine, emitted on [TutorialRepository.tutorialState]. diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/state/TutorialSubjectState.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/state/TutorialSubjectState.kt index 620cc03c1..e54a98c64 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/state/TutorialSubjectState.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/state/TutorialSubjectState.kt @@ -16,9 +16,9 @@ */ package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.TutorialSubject -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetState -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetType +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.TutorialSubject +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetState +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetType /** * Live state of the active tutorial subject, emitted on [TutorialSubjectController.Game.state]. diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/Tutorial.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/Tutorial.kt similarity index 94% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/Tutorial.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/Tutorial.kt index 2f14f3080..8d893b97e 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/Tutorial.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/Tutorial.kt @@ -14,10 +14,10 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStep -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.TutorialSubject +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStep +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.TutorialSubject /** * Root definition of a single tutorial. diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/TutorialInfo.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/TutorialInfo.kt similarity index 98% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/TutorialInfo.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/TutorialInfo.kt index dc9e139ae..861234d39 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/TutorialInfo.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/TutorialInfo.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial import androidx.annotation.StringRes diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStep.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStep.kt similarity index 99% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStep.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStep.kt index cc21ac890..9d69dee0c 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStep.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStep.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step import androidx.annotation.StringRes diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStepEndCondition.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStepEndCondition.kt similarity index 98% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStepEndCondition.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStepEndCondition.kt index b97744c9f..11ab18162 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStepEndCondition.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStepEndCondition.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.monitoring.MonitoredViewType diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStepImage.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStepImage.kt similarity index 98% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStepImage.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStepImage.kt index eb6c4454f..3e97d7fa1 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStepImage.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStepImage.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step import androidx.annotation.DrawableRes import androidx.annotation.StringRes diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStepStartCondition.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStepStartCondition.kt similarity index 99% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStepStartCondition.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStepStartCondition.kt index 09f76bcdc..e8a665209 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/step/TutorialStepStartCondition.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/step/TutorialStepStartCondition.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.monitoring.MonitoredOverlayType import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.monitoring.MonitoredViewType diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/TutorialSubject.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/TutorialSubject.kt similarity index 96% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/TutorialSubject.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/TutorialSubject.kt index 758cf7e79..2aabbc761 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/TutorialSubject.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/TutorialSubject.kt @@ -14,10 +14,10 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject import androidx.annotation.StringRes -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameRules +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameRules /** * Describes the interactive subject that runs alongside a tutorial's step sequence. diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/quickclickgame/QuickClickGameRules.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/quickclickgame/QuickClickGameRules.kt similarity index 98% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/quickclickgame/QuickClickGameRules.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/quickclickgame/QuickClickGameRules.kt index cbaeec763..543cc4e67 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/quickclickgame/QuickClickGameRules.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/quickclickgame/QuickClickGameRules.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame import android.graphics.PointF diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/quickclickgame/QuickClickGameTargetState.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/quickclickgame/QuickClickGameTargetState.kt similarity index 96% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/quickclickgame/QuickClickGameTargetState.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/quickclickgame/QuickClickGameTargetState.kt index 7cc99764a..629116dee 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/quickclickgame/QuickClickGameTargetState.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/quickclickgame/QuickClickGameTargetState.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame import android.graphics.PointF diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/quickclickgame/QuickClickGameTargetType.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/quickclickgame/QuickClickGameTargetType.kt similarity index 97% rename from core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/quickclickgame/QuickClickGameTargetType.kt rename to core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/quickclickgame/QuickClickGameTargetType.kt index fed91cd58..aaaafba35 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/data/subject/quickclickgame/QuickClickGameTargetType.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/domain/model/tutorial/subject/quickclickgame/QuickClickGameTargetType.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame +package com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame /** * Distinguishes the target types that can appear in a [TutorialSubject.Game]. diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/TutorialRepositoryImpl.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/TutorialRepositoryImpl.kt index 9835f27ef..b1ab6961a 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/TutorialRepositoryImpl.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/TutorialRepositoryImpl.kt @@ -29,8 +29,8 @@ import com.buzbuz.smartautoclicker.core.domain.IRepository import com.buzbuz.smartautoclicker.core.domain.model.scenario.Scenario import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialRepository import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialSubjectController -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tutorial -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.Tutorial +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialState import com.buzbuz.smartautoclicker.core.common.tutorial.impl.data.TipsStateDataSource import com.buzbuz.smartautoclicker.core.common.tutorial.impl.data.TutorialCompletionStateDataSource diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TipsStateDataSource.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TipsStateDataSource.kt index 6ce60fc70..b201a4412 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TipsStateDataSource.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TipsStateDataSource.kt @@ -25,7 +25,7 @@ import androidx.datastore.preferences.core.booleanPreferencesKey import com.buzbuz.smartautoclicker.core.base.PreferencesDataStore import com.buzbuz.smartautoclicker.core.base.di.Dispatcher import com.buzbuz.smartautoclicker.core.base.di.HiltCoroutineDispatchers.IO -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.CoroutineDispatcher diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TutorialCompletionStateDataSource.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TutorialCompletionStateDataSource.kt index 777133ad3..a386e6612 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TutorialCompletionStateDataSource.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TutorialCompletionStateDataSource.kt @@ -23,7 +23,7 @@ import androidx.datastore.preferences.core.booleanPreferencesKey import com.buzbuz.smartautoclicker.core.base.PreferencesDataStore import com.buzbuz.smartautoclicker.core.base.di.Dispatcher import com.buzbuz.smartautoclicker.core.base.di.HiltCoroutineDispatchers.IO -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tutorial +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.Tutorial import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.CoroutineDispatcher diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialEngine.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialEngine.kt index cc91b6688..c17df7416 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialEngine.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialEngine.kt @@ -21,11 +21,11 @@ import android.util.Log import com.buzbuz.smartautoclicker.core.base.di.Dispatcher import com.buzbuz.smartautoclicker.core.base.di.HiltCoroutineDispatchers.IO import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialSubjectController -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tutorial -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStep -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepEndCondition -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepStartCondition -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.TutorialSubject +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.Tutorial +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStep +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepEndCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepStartCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.TutorialSubject import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialState import com.buzbuz.smartautoclicker.core.common.tutorial.impl.data.TutorialCompletionStateDataSource import com.buzbuz.smartautoclicker.core.common.tutorial.impl.engine.step.TutorialStepEndConditionMonitor diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepEndConditionMonitor.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepEndConditionMonitor.kt index 845bb10b8..fc87fd68d 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepEndConditionMonitor.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepEndConditionMonitor.kt @@ -19,7 +19,7 @@ package com.buzbuz.smartautoclicker.core.common.tutorial.impl.engine.step import com.buzbuz.smartautoclicker.core.base.di.Dispatcher import com.buzbuz.smartautoclicker.core.base.di.HiltCoroutineDispatchers.IO import com.buzbuz.smartautoclicker.core.common.overlays.manager.OverlayManager -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepEndCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepEndCondition import com.buzbuz.smartautoclicker.core.common.tutorial.impl.monitoring.MonitoredViewsManagerImpl import kotlinx.coroutines.CoroutineDispatcher diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepStartConditionMonitor.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepStartConditionMonitor.kt index 61742c536..6884c5299 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepStartConditionMonitor.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepStartConditionMonitor.kt @@ -20,7 +20,7 @@ import com.buzbuz.smartautoclicker.core.base.di.Dispatcher import com.buzbuz.smartautoclicker.core.base.di.HiltCoroutineDispatchers.IO import com.buzbuz.smartautoclicker.core.common.overlays.manager.OverlayManager import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialSubjectController -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepStartCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepStartCondition import com.buzbuz.smartautoclicker.core.common.tutorial.impl.engine.subject.QuickClickGameEngine import com.buzbuz.smartautoclicker.core.common.tutorial.impl.monitoring.MonitoredViewsManagerImpl diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepsOrchestrator.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepsOrchestrator.kt index da300fb97..b8c25dcf1 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepsOrchestrator.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepsOrchestrator.kt @@ -18,7 +18,7 @@ package com.buzbuz.smartautoclicker.core.common.tutorial.impl.engine.step import android.util.Log -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStep +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStep import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/QuickClickGameEngine.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/QuickClickGameEngine.kt index 7be912382..99d9d8a56 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/QuickClickGameEngine.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/QuickClickGameEngine.kt @@ -21,8 +21,8 @@ import android.util.Log import com.buzbuz.smartautoclicker.core.base.di.Dispatcher import com.buzbuz.smartautoclicker.core.base.di.HiltCoroutineDispatchers.IO import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialSubjectController -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.TutorialSubject -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetType +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.TutorialSubject +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetType import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialSubjectState import kotlinx.coroutines.CoroutineDispatcher diff --git a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/TimingGameEngine.kt b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/TimingGameEngine.kt index 69f743813..74e82842b 100644 --- a/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/TimingGameEngine.kt +++ b/core/common/tutorial/src/main/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/TimingGameEngine.kt @@ -18,7 +18,7 @@ package com.buzbuz.smartautoclicker.core.common.tutorial.impl.engine.subject import android.util.Log import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialSubjectController -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.TutorialSubject +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.TutorialSubject import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialSubjectState import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow diff --git a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TipsStateDataSourceTest.kt b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TipsStateDataSourceTest.kt index 6f78689c9..aac5fecc8 100644 --- a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TipsStateDataSourceTest.kt +++ b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TipsStateDataSourceTest.kt @@ -22,7 +22,7 @@ import android.os.Build import androidx.test.core.app.ApplicationProvider import com.buzbuz.smartautoclicker.core.base.PreferencesDataStore -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.first diff --git a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TutorialCompletionStateDataSourceTest.kt b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TutorialCompletionStateDataSourceTest.kt index 1829b95e9..8ca723484 100644 --- a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TutorialCompletionStateDataSourceTest.kt +++ b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/data/TutorialCompletionStateDataSourceTest.kt @@ -22,9 +22,9 @@ import android.os.Build import androidx.test.core.app.ApplicationProvider import com.buzbuz.smartautoclicker.core.base.PreferencesDataStore -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tutorial -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.TutorialInfo -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.TutorialSubject +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.Tutorial +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.TutorialInfo +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.TutorialSubject import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.first @@ -49,7 +49,7 @@ import java.util.UUID @Config(sdk = [Build.VERSION_CODES.Q]) class TutorialCompletionStateDataSourceTest { - @Mock private lateinit var mockGameRules: com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameRules + @Mock private lateinit var mockGameRules: com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameRules private val context: Context = ApplicationProvider.getApplicationContext() private val testDispatcher = UnconfinedTestDispatcher() diff --git a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialEngineTest.kt b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialEngineTest.kt index 445885eba..e1bb963ca 100644 --- a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialEngineTest.kt +++ b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialEngineTest.kt @@ -20,13 +20,13 @@ import android.os.Build import com.buzbuz.smartautoclicker.core.common.overlays.base.Overlay import com.buzbuz.smartautoclicker.core.common.overlays.manager.OverlayManager -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tutorial -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.TutorialInfo -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStep -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepEndCondition -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepStartCondition -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.TutorialSubject -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameRules +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.Tutorial +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.TutorialInfo +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStep +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepEndCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepStartCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.TutorialSubject +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameRules import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialState import com.buzbuz.smartautoclicker.core.common.tutorial.impl.data.TutorialCompletionStateDataSource import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.monitoring.MonitoredOverlayType diff --git a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialStepsOrchestratorTest.kt b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialStepsOrchestratorTest.kt index efdedb109..a8e409c74 100644 --- a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialStepsOrchestratorTest.kt +++ b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/TutorialStepsOrchestratorTest.kt @@ -18,9 +18,9 @@ package com.buzbuz.smartautoclicker.core.common.tutorial.impl.engine import android.os.Build -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStep -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepEndCondition -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepStartCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStep +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepEndCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepStartCondition import com.buzbuz.smartautoclicker.core.common.tutorial.impl.engine.step.TutorialStepsOrchestrator import org.junit.Assert.assertEquals diff --git a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepStartConditionMonitorTest.kt b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepStartConditionMonitorTest.kt index 159b37020..f15ee8d9c 100644 --- a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepStartConditionMonitorTest.kt +++ b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/step/TutorialStepStartConditionMonitorTest.kt @@ -21,7 +21,7 @@ import android.os.Build import com.buzbuz.smartautoclicker.core.common.overlays.base.Overlay import com.buzbuz.smartautoclicker.core.common.overlays.manager.OverlayManager import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialSubjectController -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepStartCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepStartCondition import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.monitoring.MonitoredOverlayType import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.monitoring.MonitoredViewType import com.buzbuz.smartautoclicker.core.common.tutorial.impl.engine.subject.QuickClickGameEngine @@ -45,7 +45,6 @@ import org.mockito.Mock import org.mockito.MockitoAnnotations import org.mockito.kotlin.any import org.mockito.kotlin.argumentCaptor -import org.mockito.kotlin.doAnswer import org.mockito.kotlin.eq import org.mockito.kotlin.verify as mockitoVerify import org.mockito.kotlin.whenever diff --git a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/QuickClickGameEngineTest.kt b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/QuickClickGameEngineTest.kt index 4f365e80f..45b342c53 100644 --- a/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/QuickClickGameEngineTest.kt +++ b/core/common/tutorial/src/test/java/com/buzbuz/smartautoclicker/core/common/tutorial/impl/engine/subject/QuickClickGameEngineTest.kt @@ -19,10 +19,10 @@ package com.buzbuz.smartautoclicker.core.common.tutorial.impl.engine.subject import android.graphics.PointF import android.os.Build -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.TutorialSubject -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameRules -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetState -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetType +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.TutorialSubject +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameRules +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetState +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetType import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.StandardTestDispatcher diff --git a/core/common/ui/src/main/res/drawable/ic_help.xml b/core/common/ui/src/main/res/drawable/ic_help.xml new file mode 100644 index 000000000..b5c59d20c --- /dev/null +++ b/core/common/ui/src/main/res/drawable/ic_help.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/feature/dumb-config/src/main/java/com/buzbuz/smartautoclicker/feature/dumb/config/ui/DumbMainMenu.kt b/feature/dumb-config/src/main/java/com/buzbuz/smartautoclicker/feature/dumb/config/ui/DumbMainMenu.kt index 4c161b18e..96eb0d9dc 100644 --- a/feature/dumb-config/src/main/java/com/buzbuz/smartautoclicker/feature/dumb/config/ui/DumbMainMenu.kt +++ b/feature/dumb-config/src/main/java/com/buzbuz/smartautoclicker/feature/dumb/config/ui/DumbMainMenu.kt @@ -30,7 +30,7 @@ import com.buzbuz.smartautoclicker.core.common.navigation.TutorialNavigator import com.buzbuz.smartautoclicker.core.common.navigation.getTutorialNavigator import com.buzbuz.smartautoclicker.core.common.overlays.base.viewModels import com.buzbuz.smartautoclicker.core.common.overlays.menu.OverlayMenu -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.ui.utils.AnimatedStatesImageButtonController import com.buzbuz.smartautoclicker.feature.dumb.config.R import com.buzbuz.smartautoclicker.feature.dumb.config.databinding.OverlayDumbMainMenuBinding diff --git a/feature/dumb-config/src/main/java/com/buzbuz/smartautoclicker/feature/dumb/config/ui/DumbMainMenuModel.kt b/feature/dumb-config/src/main/java/com/buzbuz/smartautoclicker/feature/dumb/config/ui/DumbMainMenuModel.kt index 2876c420e..ffbebe84b 100644 --- a/feature/dumb-config/src/main/java/com/buzbuz/smartautoclicker/feature/dumb/config/ui/DumbMainMenuModel.kt +++ b/feature/dumb-config/src/main/java/com/buzbuz/smartautoclicker/feature/dumb/config/ui/DumbMainMenuModel.kt @@ -21,7 +21,7 @@ import androidx.lifecycle.viewModelScope import com.buzbuz.smartautoclicker.core.base.identifier.Identifier import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialRepository -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.dumb.engine.DumbEngine import com.buzbuz.smartautoclicker.feature.dumb.config.domain.DumbEditionRepository diff --git a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/areaselector/ConditionAreaSelectorMenu.kt b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/areaselector/ConditionAreaSelectorMenu.kt index 6a80df65a..d893b1b8f 100644 --- a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/areaselector/ConditionAreaSelectorMenu.kt +++ b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/areaselector/ConditionAreaSelectorMenu.kt @@ -36,6 +36,7 @@ import kotlinx.coroutines.launch import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.monitoring.MonitoredOverlayType class ConditionAreaSelectorMenu( + private val onHelpClicked: (() -> Unit)? = null, private val onAreaSelected: (Rect) -> Unit ) : OverlayMenu() { @@ -55,6 +56,11 @@ class ConditionAreaSelectorMenu( override fun onCreateMenu(layoutInflater: LayoutInflater): ViewGroup { selectorView = AreaSelectorView(context, displayConfigManager) viewBinding = OverlayValidationMenuBinding.inflate(layoutInflater) + + if (onHelpClicked == null) { + viewBinding.btnHelp.visibility = View.GONE + } + return viewBinding.root } @@ -76,6 +82,7 @@ class ConditionAreaSelectorMenu( when (viewId) { R.id.btn_confirm -> onConfirm() R.id.btn_cancel -> onCancel() + R.id.btn_help -> onHelpClicked?.invoke() } } diff --git a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureMenu.kt b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureMenu.kt index fc93cb1f4..738cd811c 100644 --- a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureMenu.kt +++ b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureMenu.kt @@ -22,9 +22,11 @@ import android.view.View import android.view.ViewGroup import androidx.annotation.IntDef +import com.buzbuz.smartautoclicker.core.common.navigation.getTutorialNavigator import com.buzbuz.smartautoclicker.core.common.overlays.base.viewModels import com.buzbuz.smartautoclicker.core.common.overlays.menu.OverlayMenu +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.domain.model.condition.ScreenCondition import com.buzbuz.smartautoclicker.core.ui.views.imageselector.ImageSelectorView import com.buzbuz.smartautoclicker.feature.smart.config.R @@ -83,6 +85,12 @@ class CaptureMenu( SELECTION -> { viewBinding.btnConfirm.setImageResource(R.drawable.ic_capture) setMenuVisibility(View.VISIBLE) + setMenuItemsVisibility( + mapOf( + viewBinding.btnHelp to false, + viewBinding.btnHideOverlay to false, + ) + ) setOverlayViewVisibility(false) selectorView.hide = true } @@ -94,11 +102,19 @@ class CaptureMenu( ADJUST -> { viewBinding.btnConfirm.setImageResource(R.drawable.ic_confirm) setMenuVisibility(View.VISIBLE) + setMenuItemsVisibility( + mapOf( + viewBinding.btnHelp to true, + viewBinding.btnHideOverlay to true, + ) + ) selectorView.hide = false } SAVE -> { setMenuItemViewEnabled(viewBinding.btnConfirm, false) setMenuItemViewEnabled(viewBinding.btnCancel, false) + setMenuItemViewEnabled(viewBinding.btnHelp, false) + setMenuItemViewEnabled(viewBinding.btnHideOverlay, false) selectorView.hide = false } } @@ -123,6 +139,7 @@ class CaptureMenu( when (viewId) { R.id.btn_confirm -> onConfirm() R.id.btn_cancel -> onCancel() + R.id.btn_help -> onHelp() } } @@ -176,4 +193,11 @@ class CaptureMenu( ADJUST -> state = SELECTION } } + + private fun onHelp() { + context.getTutorialNavigator().showTipDialog( + context = context, + tip = Tip.IMAGE_CAPTURE, + ) + } } diff --git a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/ImageConditionDialog.kt b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/ImageConditionDialog.kt index 64013422d..585266c17 100644 --- a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/ImageConditionDialog.kt +++ b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/ImageConditionDialog.kt @@ -28,9 +28,11 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle +import com.buzbuz.smartautoclicker.core.common.navigation.getTutorialNavigator import com.buzbuz.smartautoclicker.core.common.overlays.base.viewModels import com.buzbuz.smartautoclicker.core.common.overlays.dialog.OverlayDialog +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.domain.model.EXACT import com.buzbuz.smartautoclicker.core.domain.model.IN_AREA import com.buzbuz.smartautoclicker.core.domain.model.WHOLE_SCREEN @@ -267,6 +269,7 @@ class ImageConditionDialog( overlayManager.navigateTo( context = context, newOverlay = ConditionAreaSelectorMenu( + onHelpClicked = { context.getTutorialNavigator().showTipDialog(context, Tip.IMAGE_DETECTION_AREA) }, onAreaSelected = viewModel::setDetectionArea, ), hideCurrent = true, diff --git a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/number/NumberConditionDialog.kt b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/number/NumberConditionDialog.kt index f4f5f299a..92658a525 100644 --- a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/number/NumberConditionDialog.kt +++ b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/number/NumberConditionDialog.kt @@ -24,9 +24,11 @@ import android.view.ViewGroup import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle +import com.buzbuz.smartautoclicker.core.common.navigation.getTutorialNavigator import com.buzbuz.smartautoclicker.core.common.overlays.base.viewModels import com.buzbuz.smartautoclicker.core.common.overlays.dialog.OverlayDialog +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.domain.model.counter.CounterOperationValue import com.buzbuz.smartautoclicker.core.ui.bindings.dialogs.DialogNavigationButton import com.buzbuz.smartautoclicker.core.ui.bindings.dialogs.setButtonEnabledState @@ -241,6 +243,7 @@ class NumberConditionDialog( overlayManager.navigateTo( context = context, newOverlay = ConditionAreaSelectorMenu( + onHelpClicked = { context.getTutorialNavigator().showTipDialog(context, Tip.NUMBER_DETECTION_AREA) }, onAreaSelected = viewModel::setDetectionArea, ), hideCurrent = true, diff --git a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/text/TextConditionDialog.kt b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/text/TextConditionDialog.kt index 8425b37a2..7c9d31d61 100644 --- a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/text/TextConditionDialog.kt +++ b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/text/TextConditionDialog.kt @@ -24,9 +24,11 @@ import android.view.ViewGroup import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle +import com.buzbuz.smartautoclicker.core.common.navigation.getTutorialNavigator import com.buzbuz.smartautoclicker.core.common.overlays.base.viewModels import com.buzbuz.smartautoclicker.core.common.overlays.dialog.OverlayDialog +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.ui.bindings.dialogs.DialogNavigationButton import com.buzbuz.smartautoclicker.core.ui.bindings.dialogs.setButtonEnabledState import com.buzbuz.smartautoclicker.core.ui.bindings.fields.setChecked @@ -225,6 +227,7 @@ class TextConditionDialog( overlayManager.navigateTo( context = context, newOverlay = ConditionAreaSelectorMenu( + onHelpClicked = { context.getTutorialNavigator().showTipDialog(context, Tip.TEXT_DETECTION_AREA) }, onAreaSelected = viewModel::setDetectionArea, ), hideCurrent = true, diff --git a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/mainmenu/MainMenu.kt b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/mainmenu/MainMenu.kt index 4eebcf4e9..223114d1e 100644 --- a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/mainmenu/MainMenu.kt +++ b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/mainmenu/MainMenu.kt @@ -35,7 +35,7 @@ import com.buzbuz.smartautoclicker.core.common.navigation.getTutorialNavigator import com.buzbuz.smartautoclicker.core.common.overlays.base.viewModels import com.buzbuz.smartautoclicker.core.common.overlays.manager.OverlayManager.Companion.showAsOverlay import com.buzbuz.smartautoclicker.core.common.overlays.menu.OverlayMenu -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.monitoring.MonitoredOverlayType import com.buzbuz.smartautoclicker.core.ui.utils.AnimatedStatesImageButtonController import com.buzbuz.smartautoclicker.core.ui.utils.getDynamicColorsContext diff --git a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/mainmenu/MainMenuModel.kt b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/mainmenu/MainMenuModel.kt index 208ffe284..2c53d760c 100644 --- a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/mainmenu/MainMenuModel.kt +++ b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/mainmenu/MainMenuModel.kt @@ -24,7 +24,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialRepository -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.processing.domain.SmartProcessingRepository import com.buzbuz.smartautoclicker.core.processing.domain.model.DetectionState import com.buzbuz.smartautoclicker.core.smart.debugging.domain.DebuggingRepository diff --git a/feature/smart-config/src/main/res/drawable/ic_help.xml b/feature/smart-config/src/main/res/drawable/ic_help.xml deleted file mode 100644 index 7f116ea42..000000000 --- a/feature/smart-config/src/main/res/drawable/ic_help.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/feature/smart-config/src/main/res/layout/overlay_validation_menu.xml b/feature/smart-config/src/main/res/layout/overlay_validation_menu.xml index 9dc890561..2cf9364bb 100644 --- a/feature/smart-config/src/main/res/layout/overlay_validation_menu.xml +++ b/feature/smart-config/src/main/res/layout/overlay_validation_menu.xml @@ -25,7 +25,8 @@ + tools:viewBindingIgnore="true" + tools:background="#99000000"> + android:src="@drawable/ic_visible_on"/> + + context.createTutorialSlideshowDialog( + slideshowType = TutorialSlideshow.Type.IMAGE_CONDITION_CAPTURE, + onDismissed = onDismissed, + )?.showAsOverlay() + + Tip.IMAGE_DETECTION_AREA -> context.createTutorialSlideshowDialog( + slideshowType = TutorialSlideshow.Type.IMAGE_CONDITION_DETECTION_AREA, + pageIndex = 1, + onDismissed = onDismissed, + )?.showAsOverlay() + + Tip.NUMBER_DETECTION_AREA -> context.createTutorialSlideshowDialog( + slideshowType = TutorialSlideshow.Type.NUMBER_CONDITION_DETECTION_AREA, + onDismissed = onDismissed, + )?.showAsOverlay() + + Tip.TEXT_DETECTION_AREA -> context.createTutorialSlideshowDialog( + slideshowType = TutorialSlideshow.Type.TEXT_CONDITION_DETECTION_AREA, + onDismissed = onDismissed, + )?.showAsOverlay() } } - } diff --git a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/dialogs/StopWithVolumeDownTipDialog.kt b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/dialogs/StopWithVolumeDownTipDialog.kt index 2acb4661c..84be04f9f 100644 --- a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/dialogs/StopWithVolumeDownTipDialog.kt +++ b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/dialogs/StopWithVolumeDownTipDialog.kt @@ -21,7 +21,7 @@ import android.view.LayoutInflater import androidx.appcompat.app.AlertDialog import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialRepository -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.Tip +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.Tip import com.buzbuz.smartautoclicker.core.ui.utils.getDynamicColorsContext import com.buzbuz.smartautoclicker.feature.tutorial.R import com.buzbuz.smartautoclicker.feature.tutorial.databinding.DialogStopWithVolumeDownBinding diff --git a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameFragment.kt b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameFragment.kt index 8dff76125..71884aadb 100644 --- a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameFragment.kt +++ b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameFragment.kt @@ -34,8 +34,8 @@ import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.fragment.findNavController import com.buzbuz.smartautoclicker.core.common.overlays.manager.OverlayManager -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetState -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetType +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetState +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetType import com.buzbuz.smartautoclicker.core.ui.utils.getDynamicColorsContext import com.buzbuz.smartautoclicker.feature.tutorial.R import com.buzbuz.smartautoclicker.feature.tutorial.databinding.DialogTutorialSuccessBinding diff --git a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameUiState.kt b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameUiState.kt index 4f409902d..c7f3fff44 100644 --- a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameUiState.kt +++ b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameUiState.kt @@ -17,8 +17,8 @@ package com.buzbuz.smartautoclicker.feature.tutorial.ui.game.clickcount import androidx.annotation.StringRes -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetState -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetType +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetState +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetType data class ClickCountGameUiState( @field:StringRes val instructionsResId: Int, diff --git a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameViewModel.kt b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameViewModel.kt index 050cd0850..9aa354a99 100644 --- a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameViewModel.kt +++ b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/clickcount/ClickCountGameViewModel.kt @@ -21,8 +21,8 @@ import androidx.lifecycle.viewModelScope import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialRepository import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialSubjectController -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStep -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.subject.quickclickgame.QuickClickGameTargetType +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStep +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.subject.quickclickgame.QuickClickGameTargetType import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialState import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialSubjectState import com.buzbuz.smartautoclicker.core.processing.domain.SmartProcessingRepository diff --git a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/timing/TimingGameViewModel.kt b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/timing/TimingGameViewModel.kt index fda070bbc..262cd4023 100644 --- a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/timing/TimingGameViewModel.kt +++ b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/game/timing/TimingGameViewModel.kt @@ -21,7 +21,7 @@ import androidx.lifecycle.viewModelScope import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialRepository import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialSubjectController -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStep +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStep import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialState import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialSubjectState import com.buzbuz.smartautoclicker.core.processing.domain.SmartProcessingRepository diff --git a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/overlay/TutorialFullscreenViewModel.kt b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/overlay/TutorialFullscreenViewModel.kt index 73dc021f9..97dccba48 100644 --- a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/overlay/TutorialFullscreenViewModel.kt +++ b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/overlay/TutorialFullscreenViewModel.kt @@ -21,8 +21,8 @@ import androidx.lifecycle.viewModelScope import com.buzbuz.smartautoclicker.core.display.config.DisplayConfigManager import com.buzbuz.smartautoclicker.core.common.tutorial.domain.TutorialRepository -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStep -import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.data.step.TutorialStepEndCondition +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStep +import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.tutorial.step.TutorialStepEndCondition import com.buzbuz.smartautoclicker.core.common.tutorial.domain.model.state.TutorialState import com.buzbuz.smartautoclicker.core.common.tutorial.domain.MonitoredViewsManager diff --git a/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/slideshow/TutorialSlideshowDialog.kt b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/slideshow/TutorialSlideshowDialog.kt new file mode 100644 index 000000000..f1de1046c --- /dev/null +++ b/feature/tutorial/src/main/java/com/buzbuz/smartautoclicker/feature/tutorial/ui/slideshow/TutorialSlideshowDialog.kt @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2026 Kevin Buzeau + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.buzbuz.smartautoclicker.feature.tutorial.ui.slideshow + +import android.content.Context +import android.util.Log +import android.view.LayoutInflater +import androidx.appcompat.app.AlertDialog +import androidx.viewpager2.widget.ViewPager2 + +import com.buzbuz.smartautoclicker.core.ui.utils.getDynamicColorsContext +import com.buzbuz.smartautoclicker.feature.tutorial.R +import com.buzbuz.smartautoclicker.feature.tutorial.data.mapping.toTutorialSlideshow +import com.buzbuz.smartautoclicker.feature.tutorial.databinding.DialogTutorialSlideshowBinding +import com.buzbuz.smartautoclicker.feature.tutorial.domain.model.TutorialSlideshow + +import com.google.android.material.dialog.MaterialAlertDialogBuilder + +internal fun Context.createTutorialSlideshowDialog( + slideshowType: TutorialSlideshow.Type, + pageIndex: Int, + onDismissed: (() -> Unit)?, +): AlertDialog? = createDialog(slideshowType.toTutorialSlideshow(), IntRange(pageIndex, pageIndex), onDismissed) + +internal fun Context.createTutorialSlideshowDialog( + slideshowType: TutorialSlideshow.Type, + pageRange: IntRange? = null, + onDismissed: (() -> Unit)?, +): AlertDialog? = createDialog(slideshowType.toTutorialSlideshow(), pageRange, onDismissed) + +private fun Context.createDialog( + slideshow: TutorialSlideshow, + pageRange: IntRange?, + onDismissed: (() -> Unit)?, +): AlertDialog? { + + val pages = pageRange ?: IntRange(0, slideshow.slideshowItems.lastIndex) + if (pageRange != null && (pageRange.first < 0 || pageRange.last > slideshow.slideshowItems.lastIndex)) { + Log.e(TAG, "Can't create slideshow dialog, page range is invalid: $pageRange; " + + "slideshowItems=${slideshow.slideshowItems.size}") + return null + } + + val dialogContext = getDynamicColorsContext(R.style.AppTheme) + val dialogViewBinding = DialogTutorialSlideshowBinding.inflate(LayoutInflater.from(dialogContext)) + val dialog = MaterialAlertDialogBuilder(dialogContext) + .setView(dialogViewBinding.root) + .setOnDismissListener { onDismissed?.invoke() } + .create() + + dialogViewBinding.bind( + slideshow = slideshow, + pageRange = pages, + onCloseClicked = { dialog.dismiss() }, + ) + + return dialog +} + +private fun DialogTutorialSlideshowBinding.bind( + slideshow: TutorialSlideshow, + pageRange: IntRange, + onCloseClicked: () -> Unit, +) { + titleSlideshow.setText(slideshow.nameRes) + + val adapter = SlideshowPagerAdapter(slideshow.slideshowItems.subList(pageRange.first, pageRange.last + 1)) + viewPager.adapter = adapter + viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + updateButtonLabel(position, adapter.itemCount) + } + }) + updateButtonLabel(0, adapter.itemCount) + + buttonNext.setOnClickListener { + val currentItem = viewPager.currentItem + if (currentItem < adapter.itemCount - 1) { + viewPager.currentItem = currentItem + 1 + } else { + onCloseClicked() + } + } +} + +private fun DialogTutorialSlideshowBinding.updateButtonLabel(currentPage: Int, pageCount: Int) { + val isLastPage = currentPage == pageCount - 1 + buttonNext.setText( + if (isLastPage) R.string.button_text_tutorial_close else R.string.button_text_tutorial_next + ) +} + +private const val TAG = "TutorialSlideshowDialog" \ No newline at end of file diff --git a/feature/tutorial/src/main/res/layout/dialog_tutorial_slideshow.xml b/feature/tutorial/src/main/res/layout/dialog_tutorial_slideshow.xml new file mode 100644 index 000000000..02461d33d --- /dev/null +++ b/feature/tutorial/src/main/res/layout/dialog_tutorial_slideshow.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + diff --git a/feature/tutorial/src/main/res/layout/item_tutorial_slideshow_page.xml b/feature/tutorial/src/main/res/layout/item_tutorial_slideshow_page.xml index 573922b4f..9ef53845e 100644 --- a/feature/tutorial/src/main/res/layout/item_tutorial_slideshow_page.xml +++ b/feature/tutorial/src/main/res/layout/item_tutorial_slideshow_page.xml @@ -20,7 +20,9 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:scrollbars="vertical" + android:fadeScrollbars="true"> Date: Mon, 3 Aug 2026 15:03:49 +0200 Subject: [PATCH 5/5] [#1021] Handle screenshot failure --- .../core/display/recorder/DisplayRecorder.kt | 8 ++++--- .../ui/condition/screen/image/CaptureMenu.kt | 23 +++++++++++++------ .../screen/image/CaptureViewModel.kt | 5 ++-- .../src/main/res/values-ar/strings.xml | 2 ++ .../src/main/res/values-es/strings.xml | 2 ++ .../src/main/res/values-fr/strings.xml | 2 ++ .../src/main/res/values-it/strings.xml | 2 ++ .../src/main/res/values-ja/strings.xml | 1 + .../src/main/res/values-pt-rBR/strings.xml | 2 ++ .../src/main/res/values-ru/strings.xml | 2 ++ .../src/main/res/values-uk/strings.xml | 2 ++ .../src/main/res/values-zh-rCN/strings.xml | 2 ++ .../src/main/res/values-zh-rTW/strings.xml | 2 ++ .../src/main/res/values/strings.xml | 2 ++ 14 files changed, 45 insertions(+), 12 deletions(-) diff --git a/core/common/display/src/main/java/com/buzbuz/smartautoclicker/core/display/recorder/DisplayRecorder.kt b/core/common/display/src/main/java/com/buzbuz/smartautoclicker/core/display/recorder/DisplayRecorder.kt index 222c6e6b3..5b5ab1444 100644 --- a/core/common/display/src/main/java/com/buzbuz/smartautoclicker/core/display/recorder/DisplayRecorder.kt +++ b/core/common/display/src/main/java/com/buzbuz/smartautoclicker/core/display/recorder/DisplayRecorder.kt @@ -163,9 +163,9 @@ class DisplayRecorder @Inject internal constructor( do { result = imageReaderProxy.getLastFrame() - if (result == null) delay(20.milliseconds) + if (result == null) delay(40.milliseconds) - } while (result == null && System.currentTimeMillis() < (startTimeMs + 1000)) + } while (result == null && System.currentTimeMillis() < (startTimeMs + SCREEN_CAPTURE_SCREENSHOT_TIMEOUT_MS)) return result } @@ -202,7 +202,9 @@ class DisplayRecorder @Inject internal constructor( } /** How long to wait for the first valid frame when validating screen capture support, in milliseconds. */ -private const val SCREEN_CAPTURE_VALIDATION_TIMEOUT_MS = 1000L +private const val SCREEN_CAPTURE_SCREENSHOT_TIMEOUT_MS = 2000L +/** How long to wait for the first valid frame when validating screen capture support, in milliseconds. */ +private const val SCREEN_CAPTURE_VALIDATION_TIMEOUT_MS = 2000L /** Polling interval between frame acquisition attempts during screen capture validation, in milliseconds. */ private const val SCREEN_CAPTURE_VALIDATION_RETRY_DELAY_MS = 20L diff --git a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureMenu.kt b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureMenu.kt index 738cd811c..211b35f60 100644 --- a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureMenu.kt +++ b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureMenu.kt @@ -20,6 +20,7 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.annotation.IntDef import com.buzbuz.smartautoclicker.core.common.navigation.getTutorialNavigator @@ -159,13 +160,7 @@ class CaptureMenu( */ private fun onConfirm() { when (state) { - SELECTION -> { - state = CAPTURE - viewModel.takeScreenshot { screenshot -> - selectorView.showCapture(screenshot) - state = ADJUST - } - } + SELECTION -> onTakeScreenshotClicked() ADJUST -> { state = SAVE @@ -200,4 +195,18 @@ class CaptureMenu( tip = Tip.IMAGE_CAPTURE, ) } + + private fun onTakeScreenshotClicked() { + state = CAPTURE + viewModel.takeScreenshot { screenshot -> + if (screenshot == null) { + Toast.makeText(context, R.string.toast_capture_failed, Toast.LENGTH_LONG).show() + state = SELECTION + return@takeScreenshot + } + + selectorView.showCapture(screenshot) + state = ADJUST + } + } } diff --git a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureViewModel.kt b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureViewModel.kt index 01fe79bcb..27d9266c5 100644 --- a/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureViewModel.kt +++ b/feature/smart-config/src/main/java/com/buzbuz/smartautoclicker/feature/smart/config/ui/condition/screen/image/CaptureViewModel.kt @@ -34,6 +34,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import javax.inject.Inject +import kotlin.time.Duration.Companion.milliseconds class CaptureViewModel @Inject constructor( private val displayRecorder: DisplayRecorder, @@ -41,9 +42,9 @@ class CaptureViewModel @Inject constructor( private val monitoredViewsManager: MonitoredViewsManager, ) : ViewModel() { - fun takeScreenshot(resultCallback: (Bitmap) -> Unit) { + fun takeScreenshot(resultCallback: (Bitmap?) -> Unit) { viewModelScope.launch(Dispatchers.IO) { - delay(200L) + delay(200L.milliseconds) val screenshot = displayRecorder.takeScreenshot() ?: return@launch withContext(Dispatchers.Main) { diff --git a/feature/smart-config/src/main/res/values-ar/strings.xml b/feature/smart-config/src/main/res/values-ar/strings.xml index 6700ff984..93b3e7764 100644 --- a/feature/smart-config/src/main/res/values-ar/strings.xml +++ b/feature/smart-config/src/main/res/values-ar/strings.xml @@ -199,6 +199,8 @@ الفرق المسموح به + فشل التقاط الشاشة، لم يتم إنشاء أي إطارات. + diff --git a/feature/smart-config/src/main/res/values-es/strings.xml b/feature/smart-config/src/main/res/values-es/strings.xml index c04a1e33c..36edd07fc 100644 --- a/feature/smart-config/src/main/res/values-es/strings.xml +++ b/feature/smart-config/src/main/res/values-es/strings.xml @@ -199,6 +199,8 @@ diferencia tolerada + Error al capturar pantalla, no se generaron fotogramas. + diff --git a/feature/smart-config/src/main/res/values-fr/strings.xml b/feature/smart-config/src/main/res/values-fr/strings.xml index c38e6948b..3dce2fb16 100644 --- a/feature/smart-config/src/main/res/values-fr/strings.xml +++ b/feature/smart-config/src/main/res/values-fr/strings.xml @@ -462,6 +462,8 @@ L\'élément est valide Élément(s) référencé(s) manquant(s) + Échec de la capture d\'écran, aucune image n\'a été générée. + Vous êtes sur le point de supprimer cet élément, êtes-vous sûr ? diff --git a/feature/smart-config/src/main/res/values-it/strings.xml b/feature/smart-config/src/main/res/values-it/strings.xml index cfdc3e54e..076b8d557 100644 --- a/feature/smart-config/src/main/res/values-it/strings.xml +++ b/feature/smart-config/src/main/res/values-it/strings.xml @@ -462,6 +462,8 @@ L\'elemento è valido Elemento/i di riferimento mancante/i + Screenshot non riuscito, nessun fotogramma generato. + Stai per eliminare questo elemento, sei sicuro? diff --git a/feature/smart-config/src/main/res/values-ja/strings.xml b/feature/smart-config/src/main/res/values-ja/strings.xml index 1d5c39d5b..37a1adae2 100644 --- a/feature/smart-config/src/main/res/values-ja/strings.xml +++ b/feature/smart-config/src/main/res/values-ja/strings.xml @@ -122,6 +122,7 @@ 検知エリア [%1$d、%2$d、%3$d、%4$d] で 許容する差異 + スクリーンショットに失敗しました。フレームが生成されませんでした。 カウンターの値に到達 カウンター名 diff --git a/feature/smart-config/src/main/res/values-pt-rBR/strings.xml b/feature/smart-config/src/main/res/values-pt-rBR/strings.xml index 9d4b65e75..6aa70e51a 100644 --- a/feature/smart-config/src/main/res/values-pt-rBR/strings.xml +++ b/feature/smart-config/src/main/res/values-pt-rBR/strings.xml @@ -197,6 +197,8 @@ Diferença tolerada + Falha na captura de tela, nenhum quadro foi gerado. + diff --git a/feature/smart-config/src/main/res/values-ru/strings.xml b/feature/smart-config/src/main/res/values-ru/strings.xml index 9f78e2cb7..c77668ed9 100644 --- a/feature/smart-config/src/main/res/values-ru/strings.xml +++ b/feature/smart-config/src/main/res/values-ru/strings.xml @@ -199,6 +199,8 @@ Допустимое отличие + Не удалось сделать снимок экрана, кадры не были созданы. + diff --git a/feature/smart-config/src/main/res/values-uk/strings.xml b/feature/smart-config/src/main/res/values-uk/strings.xml index 392c8d759..81142eea1 100644 --- a/feature/smart-config/src/main/res/values-uk/strings.xml +++ b/feature/smart-config/src/main/res/values-uk/strings.xml @@ -200,6 +200,8 @@ Допустима різниця + Не вдалося зробити знімок екрана, кадри не були створені. + diff --git a/feature/smart-config/src/main/res/values-zh-rCN/strings.xml b/feature/smart-config/src/main/res/values-zh-rCN/strings.xml index 782a7aeca..646a2a6c8 100644 --- a/feature/smart-config/src/main/res/values-zh-rCN/strings.xml +++ b/feature/smart-config/src/main/res/values-zh-rCN/strings.xml @@ -459,6 +459,8 @@ 项目有效 缺少引用的项目 + 截图失败,未生成任何帧。 + 您即将删除此项目,确定吗? \ No newline at end of file diff --git a/feature/smart-config/src/main/res/values-zh-rTW/strings.xml b/feature/smart-config/src/main/res/values-zh-rTW/strings.xml index 2dee005d9..b7bf06108 100644 --- a/feature/smart-config/src/main/res/values-zh-rTW/strings.xml +++ b/feature/smart-config/src/main/res/values-zh-rTW/strings.xml @@ -459,6 +459,8 @@ 項目有效 缺少引用的項目 + 截圖失敗,未生成任何畫面。 + 您即將刪除此項目,確定嗎? \ No newline at end of file diff --git a/feature/smart-config/src/main/res/values/strings.xml b/feature/smart-config/src/main/res/values/strings.xml index 07e7d27af..365b16da0 100644 --- a/feature/smart-config/src/main/res/values/strings.xml +++ b/feature/smart-config/src/main/res/values/strings.xml @@ -242,6 +242,8 @@ Detection Area In [%1$d, %2$d, %3$d, %4$d] + Screenshot failed, no frames were generated. +