@@ -64,6 +64,7 @@ import android.webkit.WebViewClient
6464import android.widget.FrameLayout
6565import android.widget.LinearLayout
6666import android.widget.RelativeLayout
67+ import androidx.activity.OnBackPressedCallback
6768import androidx.activity.result.ActivityResult
6869import androidx.activity.result.ActivityResultCallback
6970import androidx.activity.result.contract.ActivityResultContracts
@@ -82,6 +83,7 @@ import com.ichi2.anim.ActivityTransitionAnimation
8283import com.ichi2.anki.AbstractFlashcardViewer.Signal.Companion.toSignal
8384import com.ichi2.anki.CollectionManager.TR
8485import com.ichi2.anki.CollectionManager.withCol
86+ import com.ichi2.anki.android.back.exitViaDoubleTapBackCallback
8587import com.ichi2.anki.cardviewer.AndroidCardRenderContext
8688import com.ichi2.anki.cardviewer.AndroidCardRenderContext.Companion.createInstance
8789import com.ichi2.anki.cardviewer.CardMediaPlayer
@@ -135,7 +137,6 @@ import com.ichi2.libanki.Card
135137import com.ichi2.libanki.CardId
136138import com.ichi2.libanki.ChangeManager
137139import com.ichi2.libanki.Collection
138- import com.ichi2.libanki.Consts
139140import com.ichi2.libanki.DeckId
140141import com.ichi2.libanki.Decks
141142import com.ichi2.libanki.Sound.getAvTag
@@ -147,7 +148,6 @@ import com.ichi2.themes.Themes
147148import com.ichi2.themes.Themes.getResFromAttr
148149import com.ichi2.ui.FixedEditText
149150import com.ichi2.utils.ClipboardUtil.getText
150- import com.ichi2.utils.HandlerUtils.executeFunctionWithDelay
151151import com.ichi2.utils.HandlerUtils.newHandler
152152import com.ichi2.utils.HashUtil.hashSetInit
153153import com.ichi2.utils.Stopwatch
@@ -292,9 +292,6 @@ abstract class AbstractFlashcardViewer :
292292 /* * Lock to allow thread-safe regeneration of mCard */
293293 private val cardLock: ReadWriteLock = ReentrantReadWriteLock ()
294294
295- /* * Preference: Whether the user wants press back twice to return to the main screen" */
296- private var exitViaDoubleTapBack = false
297-
298295 @VisibleForTesting
299296 val onRenderProcessGoneDelegate = OnRenderProcessGoneDelegate (this )
300297 protected val tts = TTS ()
@@ -341,6 +338,14 @@ abstract class AbstractFlashcardViewer :
341338 },
342339 )
343340
341+ private val defaultOnBackCallback =
342+ object : OnBackPressedCallback (enabled = true ) {
343+ override fun handleOnBackPressed () {
344+ // TODO: This should be improved now we're using callbacks
345+ closeReviewer(RESULT_DEFAULT )
346+ }
347+ }
348+
344349 protected inner class FlashCardViewerResultCallback (
345350 private val callback : (result: ActivityResult , reloadRequired: Boolean ) -> Unit = { _, _ -> },
346351 ) : ActivityResultCallback<ActivityResult> {
@@ -565,6 +570,12 @@ abstract class AbstractFlashcardViewer :
565570 TtsVoicesFieldFilter .ensureApplied()
566571 }
567572
573+ override fun setupBackPressedCallbacks () {
574+ onBackPressedDispatcher.addCallback(this , defaultOnBackCallback)
575+ onBackPressedDispatcher.addCallback(this , exitViaDoubleTapBackCallback(R .string.back_pressed_once_reviewer))
576+ super .setupBackPressedCallbacks()
577+ }
578+
568579 protected open fun getContentViewAttr (fullscreenMode : FullScreenMode ): Int = R .layout.reviewer
569580
570581 @get:VisibleForTesting(otherwise = VisibleForTesting .PROTECTED )
@@ -656,25 +667,6 @@ abstract class AbstractFlashcardViewer :
656667 }
657668 }
658669
659- @Deprecated(" Deprecated in Java" )
660- override fun onBackPressed () {
661- if (isDrawerOpen) {
662- @Suppress(" DEPRECATION" )
663- super .onBackPressed()
664- } else {
665- Timber .i(" Back key pressed" )
666- if (! exitViaDoubleTapBack || backButtonPressedToReturn) {
667- closeReviewer(RESULT_DEFAULT )
668- } else {
669- showSnackbar(R .string.back_pressed_once_reviewer, Snackbar .LENGTH_SHORT )
670- }
671- backButtonPressedToReturn = true
672- executeFunctionWithDelay(Consts .SHORT_TOAST_DURATION ) {
673- backButtonPressedToReturn = false
674- }
675- }
676- }
677-
678670 override fun onKeyDown (
679671 keyCode : Int ,
680672 event : KeyEvent ,
@@ -1234,7 +1226,6 @@ abstract class AbstractFlashcardViewer :
12341226 largeAnswerButtons = preferences.getBoolean(" showLargeAnswerButtons" , false )
12351227 doubleTapTimeInterval =
12361228 preferences.getInt(DOUBLE_TAP_TIME_INTERVAL , DEFAULT_DOUBLE_TAP_TIME_INTERVAL )
1237- exitViaDoubleTapBack = preferences.getBoolean(" exitViaDoubleTapBack" , false )
12381229 gesturesEnabled = preferences.getBoolean(GestureProcessor .PREF_KEY , false )
12391230 if (gesturesEnabled) {
12401231 gestureProcessor.init (preferences)
0 commit comments