Skip to content

Commit 7c7f2ae

Browse files
david-allisonmikehardy
authored andcommitted
improvement(reviewer): use back callbacks
Issue 14558
1 parent e1088cf commit 7c7f2ae

File tree

1 file changed

+16
-25
lines changed

1 file changed

+16
-25
lines changed

AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import android.webkit.WebViewClient
6464
import android.widget.FrameLayout
6565
import android.widget.LinearLayout
6666
import android.widget.RelativeLayout
67+
import androidx.activity.OnBackPressedCallback
6768
import androidx.activity.result.ActivityResult
6869
import androidx.activity.result.ActivityResultCallback
6970
import androidx.activity.result.contract.ActivityResultContracts
@@ -82,6 +83,7 @@ import com.ichi2.anim.ActivityTransitionAnimation
8283
import com.ichi2.anki.AbstractFlashcardViewer.Signal.Companion.toSignal
8384
import com.ichi2.anki.CollectionManager.TR
8485
import com.ichi2.anki.CollectionManager.withCol
86+
import com.ichi2.anki.android.back.exitViaDoubleTapBackCallback
8587
import com.ichi2.anki.cardviewer.AndroidCardRenderContext
8688
import com.ichi2.anki.cardviewer.AndroidCardRenderContext.Companion.createInstance
8789
import com.ichi2.anki.cardviewer.CardMediaPlayer
@@ -135,7 +137,6 @@ import com.ichi2.libanki.Card
135137
import com.ichi2.libanki.CardId
136138
import com.ichi2.libanki.ChangeManager
137139
import com.ichi2.libanki.Collection
138-
import com.ichi2.libanki.Consts
139140
import com.ichi2.libanki.DeckId
140141
import com.ichi2.libanki.Decks
141142
import com.ichi2.libanki.Sound.getAvTag
@@ -147,7 +148,6 @@ import com.ichi2.themes.Themes
147148
import com.ichi2.themes.Themes.getResFromAttr
148149
import com.ichi2.ui.FixedEditText
149150
import com.ichi2.utils.ClipboardUtil.getText
150-
import com.ichi2.utils.HandlerUtils.executeFunctionWithDelay
151151
import com.ichi2.utils.HandlerUtils.newHandler
152152
import com.ichi2.utils.HashUtil.hashSetInit
153153
import 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

Comments
 (0)