From 7537307e08de97c3e049a5b0e8e116ae908aac62 Mon Sep 17 00:00:00 2001 From: David Allison <62114487+david-allison@users.noreply.github.com> Date: Thu, 15 Feb 2024 03:54:48 +0000 Subject: [PATCH] feat(deck-options): add redundant 'save' button It's more 'standard' Android UI to use a menu This may be removed once we fix accessibility on the deck options Fixes 14438 --- .../java/com/ichi2/anki/pages/DeckOptions.kt | 24 ++++++++++++++++++ AnkiDroid/src/main/res/menu/deck_options.xml | 25 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 AnkiDroid/src/main/res/menu/deck_options.xml diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/pages/DeckOptions.kt b/AnkiDroid/src/main/java/com/ichi2/anki/pages/DeckOptions.kt index 96997fbe700c..36d612f9a17a 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/pages/DeckOptions.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/pages/DeckOptions.kt @@ -18,10 +18,13 @@ package com.ichi2.anki.pages import android.content.Context import android.content.Intent import android.os.Bundle +import android.view.KeyEvent +import android.view.View import android.webkit.WebView import androidx.activity.OnBackPressedCallback import androidx.fragment.app.FragmentActivity import anki.collection.OpChanges +import com.google.android.material.appbar.MaterialToolbar import com.ichi2.anki.CollectionManager import com.ichi2.anki.OnPageFinishedCallback import com.ichi2.anki.R @@ -61,6 +64,19 @@ class DeckOptions : PageFragment() { } } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + view.findViewById(R.id.toolbar)?.apply { + inflateMenu(R.menu.deck_options) + setOnMenuItemClickListener { item -> + if (item.itemId == R.id.save_deck_options) { + saveAndExit() + } + true + } + } + } + override fun onCreateWebViewClient(savedInstanceState: Bundle?): PageWebViewClient { val deckId = arguments?.getLong(ARG_DECK_ID) ?: throw Exception("missing deck ID") @@ -75,6 +91,14 @@ class DeckOptions : PageFragment() { } } + private fun saveAndExit() { + // dispatch Ctrl+Enter + val downEvent = KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER, 0, KeyEvent.META_CTRL_ON) + val upEvent = KeyEvent(0, 0, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER, 0, KeyEvent.META_CTRL_ON) + webView.dispatchKeyEvent(downEvent) + webView.dispatchKeyEvent(upEvent) + } + class DeckOptionsWebClient(val deckId: Long) : PageWebViewClient() { override val promiseToWaitFor: String get() = "\$deckOptions" diff --git a/AnkiDroid/src/main/res/menu/deck_options.xml b/AnkiDroid/src/main/res/menu/deck_options.xml new file mode 100644 index 000000000000..ae80f0157b79 --- /dev/null +++ b/AnkiDroid/src/main/res/menu/deck_options.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file