diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt index 0e017027f5ca..bd04ccfd541a 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt @@ -131,7 +131,7 @@ abstract class AbstractFlashcardViewer : private var replayOnTtsInit = false @VisibleForTesting - val ankiDroidJsAPI by lazy { AnkiDroidJsAPI(this) } + val jsApi by lazy { AnkiDroidJsAPI(this) } /** * Broadcast that informs us when the sd card is about to be unmounted @@ -2556,7 +2556,11 @@ abstract class AbstractFlashcardViewer : override suspend fun handlePostRequest(uri: String, bytes: ByteArray): ByteArray { return if (uri.startsWith(AnkiServer.ANKIDROID_JS_PREFIX)) { - ankiDroidJsAPI.handleJsApiRequest(uri.substring(AnkiServer.ANKIDROID_JS_PREFIX.length), bytes, false) + jsApi.handleJsApiRequest( + uri.substring(AnkiServer.ANKIDROID_JS_PREFIX.length), + bytes, + returnDefaultValues = true + ) } else { throw IllegalArgumentException("unhandled request: $uri") } diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidJsAPI.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidJsAPI.kt index 57c0d15d1cea..90e7fd3aeb1c 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidJsAPI.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidJsAPI.kt @@ -177,18 +177,18 @@ open class AnkiDroidJsAPI(private val activity: AbstractFlashcardViewer) { /** * Handle js api request, - * some of the methods are overriden in Reviewer.kt and default values are returned. + * some of the methods are overridden in Reviewer.kt and default values are returned. * @param methodName * @param bytes - * @param isReviewer + * @param returnDefaultValues `true` if default values should be returned (if non-[Reviewer]) * @return */ - open suspend fun handleJsApiRequest(methodName: String, bytes: ByteArray, isReviewer: Boolean) = withContext(Dispatchers.Main) { + open suspend fun handleJsApiRequest(methodName: String, bytes: ByteArray, returnDefaultValues: Boolean = true) = withContext(Dispatchers.Main) { // the method will call to set the card supplied data and is valid version for each api request val apiContract = parseJsApiContract(bytes)!! // if api not init or is api not called from reviewer then return default -1 // also other action will not be modified - if (!apiContract.isValid or !isReviewer) { + if (!apiContract.isValid or returnDefaultValues) { return@withContext convertToByteArray(apiContract, -1) } diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt index ab4e20db81cc..f00b785a91a9 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt @@ -1358,7 +1358,11 @@ open class Reviewer : else -> throw IllegalArgumentException("unhandled request: $methodName") } } else if (uri.startsWith(ANKIDROID_JS_PREFIX)) { - ankiDroidJsAPI.handleJsApiRequest(uri.substring(ANKIDROID_JS_PREFIX.length), bytes, true) + jsApi.handleJsApiRequest( + uri.substring(ANKIDROID_JS_PREFIX.length), + bytes, + returnDefaultValues = false + ) } else { throw IllegalArgumentException("unhandled request: $uri") } diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/AnkiDroidJsAPITest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/AnkiDroidJsAPITest.kt index 76cb85457fc7..23ab4632e894 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/AnkiDroidJsAPITest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/AnkiDroidJsAPITest.kt @@ -42,7 +42,7 @@ class AnkiDroidJsAPITest : RobolectricTest() { addNoteUsingBasicModel("foo", "bar") val reviewer: Reviewer = startReviewer() - val jsapi = reviewer.ankiDroidJsAPI + val jsapi = reviewer.jsApi reviewer.displayCardAnswer() @@ -75,7 +75,7 @@ class AnkiDroidJsAPITest : RobolectricTest() { addNoteUsingBasicModel("foo", "bar") val reviewer: Reviewer = startReviewer() - val jsapi = reviewer.ankiDroidJsAPI + val jsapi = reviewer.jsApi reviewer.displayCardAnswer() waitForAsyncTasksToComplete() @@ -185,7 +185,7 @@ class AnkiDroidJsAPITest : RobolectricTest() { addNoteUsingBasicModel("foo", "bar") val reviewer: Reviewer = startReviewer() - val jsapi = reviewer.ankiDroidJsAPI + val jsapi = reviewer.jsApi waitForAsyncTasksToComplete() @@ -227,7 +227,7 @@ class AnkiDroidJsAPITest : RobolectricTest() { addNoteUsingBasicModel("foo", "bar") val reviewer: Reviewer = startReviewer() - val jsapi = reviewer.ankiDroidJsAPI + val jsapi = reviewer.jsApi waitForAsyncTasksToComplete() @@ -291,7 +291,7 @@ class AnkiDroidJsAPITest : RobolectricTest() { addNoteUsingBasicModel("Test Note", "Bury and Suspend Note") val reviewer: Reviewer = startReviewer() - val jsapi = reviewer.ankiDroidJsAPI + val jsapi = reviewer.jsApi // ---------- // Bury Card @@ -360,7 +360,7 @@ class AnkiDroidJsAPITest : RobolectricTest() { val reviewer: Reviewer = startReviewer() waitForAsyncTasksToComplete() - val jsapi = reviewer.ankiDroidJsAPI + val jsapi = reviewer.jsApi // get card id for testing due val cardIdRes = getDataFromRequest("cardId", jsapi) val jsonObject = JSONObject(cardIdRes) @@ -396,7 +396,7 @@ class AnkiDroidJsAPITest : RobolectricTest() { val reviewer: Reviewer = startReviewer() waitForAsyncTasksToComplete() - val jsapi = reviewer.ankiDroidJsAPI + val jsapi = reviewer.jsApi // test that card reset assertThat(getDataFromRequest("resetProgress", jsapi), equalTo(formatApiResult(true))) @@ -428,7 +428,7 @@ class AnkiDroidJsAPITest : RobolectricTest() { jsAPI: AnkiDroidJsAPI, apiData: String = "" ): String { - return jsAPI.handleJsApiRequest(methodName, jsApiContract(apiData), true) + return jsAPI.handleJsApiRequest(methodName, jsApiContract(apiData), false) .decodeToString() } } diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerTest.kt index 4543e72e3527..f855fefd6952 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerTest.kt @@ -205,11 +205,11 @@ class ReviewerTest : RobolectricTest() { addDeck("A", setAsSelected = true) val reviewer = startReviewer() - val javaScriptFunction = reviewer.ankiDroidJsAPI + val jsApi = reviewer.jsApi waitForAsyncTasksToComplete() assertThat( - javaScriptFunction.handleJsApiRequest("deckName", jsApiContract(), true) + jsApi.handleJsApiRequest("deckName", jsApiContract(), false) .decodeToString(), equalTo(formatApiResult("B")) ) @@ -316,7 +316,7 @@ class ReviewerTest : RobolectricTest() { @Suppress("SameParameterValue") private fun assertCounts(r: Reviewer, newCount: Int, stepCount: Int, revCount: Int) = runTest { - val jsApi = r.ankiDroidJsAPI + val jsApi = r.jsApi val countList = listOf( getDataFromRequest("newCardCount", jsApi), getDataFromRequest("lrnCardCount", jsApi),