From db54e4a615c504235a95c08f88df97c8862de0dd Mon Sep 17 00:00:00 2001 From: David Allison <62114487+david-allison@users.noreply.github.com> Date: Thu, 16 Jan 2025 04:11:59 +0000 Subject: [PATCH] improvement(reviewer): use back callbacks Issue 14558 --- .../com/ichi2/anki/AbstractFlashcardViewer.kt | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt index 8669aeb19556..78ed056baf97 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt @@ -64,6 +64,7 @@ import android.webkit.WebViewClient import android.widget.FrameLayout import android.widget.LinearLayout import android.widget.RelativeLayout +import androidx.activity.OnBackPressedCallback import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -82,6 +83,7 @@ import com.ichi2.anim.ActivityTransitionAnimation import com.ichi2.anki.AbstractFlashcardViewer.Signal.Companion.toSignal import com.ichi2.anki.CollectionManager.TR import com.ichi2.anki.CollectionManager.withCol +import com.ichi2.anki.android.back.exitViaDoubleTapBackCallback import com.ichi2.anki.cardviewer.AndroidCardRenderContext import com.ichi2.anki.cardviewer.AndroidCardRenderContext.Companion.createInstance import com.ichi2.anki.cardviewer.CardMediaPlayer @@ -134,7 +136,6 @@ import com.ichi2.libanki.Card import com.ichi2.libanki.CardId import com.ichi2.libanki.ChangeManager import com.ichi2.libanki.Collection -import com.ichi2.libanki.Consts import com.ichi2.libanki.DeckId import com.ichi2.libanki.Decks import com.ichi2.libanki.Sound.getAvTag @@ -146,7 +147,6 @@ import com.ichi2.themes.Themes import com.ichi2.themes.Themes.getResFromAttr import com.ichi2.ui.FixedEditText import com.ichi2.utils.ClipboardUtil.getText -import com.ichi2.utils.HandlerUtils.executeFunctionWithDelay import com.ichi2.utils.HandlerUtils.newHandler import com.ichi2.utils.HashUtil.hashSetInit import com.ichi2.utils.Stopwatch @@ -291,9 +291,6 @@ abstract class AbstractFlashcardViewer : /** Lock to allow thread-safe regeneration of mCard */ private val cardLock: ReadWriteLock = ReentrantReadWriteLock() - /** Preference: Whether the user wants press back twice to return to the main screen" */ - private var exitViaDoubleTapBack = false - @VisibleForTesting val onRenderProcessGoneDelegate = OnRenderProcessGoneDelegate(this) protected val tts = TTS() @@ -340,6 +337,14 @@ abstract class AbstractFlashcardViewer : }, ) + private val defaultOnBackCallback = + object : OnBackPressedCallback(enabled = true) { + override fun handleOnBackPressed() { + // TODO: This should be improved now we're using callbacks + closeReviewer(RESULT_DEFAULT) + } + } + protected inner class FlashCardViewerResultCallback( private val callback: (result: ActivityResult, reloadRequired: Boolean) -> Unit = { _, _ -> }, ) : ActivityResultCallback<ActivityResult> { @@ -564,6 +569,12 @@ abstract class AbstractFlashcardViewer : TtsVoicesFieldFilter.ensureApplied() } + override fun setupBackPressedCallbacks() { + onBackPressedDispatcher.addCallback(this, defaultOnBackCallback) + onBackPressedDispatcher.addCallback(this, exitViaDoubleTapBackCallback()) + super.setupBackPressedCallbacks() + } + protected open fun getContentViewAttr(fullscreenMode: FullScreenMode): Int = R.layout.reviewer @get:VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) @@ -655,25 +666,6 @@ abstract class AbstractFlashcardViewer : } } - @Deprecated("Deprecated in Java") - override fun onBackPressed() { - if (isDrawerOpen) { - @Suppress("DEPRECATION") - super.onBackPressed() - } else { - Timber.i("Back key pressed") - if (!exitViaDoubleTapBack || backButtonPressedToReturn) { - closeReviewer(RESULT_DEFAULT) - } else { - showSnackbar(R.string.back_pressed_once_reviewer, Snackbar.LENGTH_SHORT) - } - backButtonPressedToReturn = true - executeFunctionWithDelay(Consts.SHORT_TOAST_DURATION) { - backButtonPressedToReturn = false - } - } - } - override fun onKeyDown( keyCode: Int, event: KeyEvent, @@ -1233,7 +1225,6 @@ abstract class AbstractFlashcardViewer : largeAnswerButtons = preferences.getBoolean("showLargeAnswerButtons", false) doubleTapTimeInterval = preferences.getInt(DOUBLE_TAP_TIME_INTERVAL, DEFAULT_DOUBLE_TAP_TIME_INTERVAL) - exitViaDoubleTapBack = preferences.getBoolean("exitViaDoubleTapBack", false) gesturesEnabled = preferences.getBoolean(GestureProcessor.PREF_KEY, false) if (gesturesEnabled) { gestureProcessor.init(preferences)