From bb2c9c4e8dd5e37dd3277c818493000bb14bbcb5 Mon Sep 17 00:00:00 2001 From: Ayush Patel Date: Tue, 9 Jun 2026 14:23:51 +0530 Subject: [PATCH] fix(stats): recreate statistics and card info on rotation --- .../java/com/ichi2/anki/pages/CardInfoDestination.kt | 4 ++-- .../src/main/java/com/ichi2/anki/pages/Statistics.kt | 10 ++++++++++ .../java/com/ichi2/anki/pages/StatisticsDestination.kt | 5 +++-- .../test/java/com/ichi2/anki/pages/StatisticsTest.kt | 8 ++++---- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/pages/CardInfoDestination.kt b/AnkiDroid/src/main/java/com/ichi2/anki/pages/CardInfoDestination.kt index af47fc83a1b0..a62de89946f7 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/pages/CardInfoDestination.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/pages/CardInfoDestination.kt @@ -19,10 +19,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import com.ichi2.anki.R -import com.ichi2.anki.SingleFragmentActivity import com.ichi2.anki.libanki.CardId import com.ichi2.anki.libanki.withoutUnicodeIsolation import com.ichi2.anki.ui.internationalization.toSentenceCase +import com.ichi2.anki.utils.ConfigAwareSingleFragmentActivity import com.ichi2.anki.utils.Destination data class CardInfoDestination( @@ -44,7 +44,7 @@ data class CardInfoDestination( putString(CardInfoFragment.KEY_TITLE, cardInfoTitle) putLong(CardInfoFragment.KEY_CARD_ID, cardId) } - return SingleFragmentActivity.getIntent( + return ConfigAwareSingleFragmentActivity.getIntent( context, fragmentClass = CardInfoFragment::class, arguments = arguments, diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/pages/Statistics.kt b/AnkiDroid/src/main/java/com/ichi2/anki/pages/Statistics.kt index 6f1de2322134..dad9c5beecb6 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/pages/Statistics.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/pages/Statistics.kt @@ -130,6 +130,16 @@ class Statistics : PageFragment(R.layout.page_statistics) { webViewLayout.evaluateJavascript(javascriptCode, null) } + override fun onCreateWebViewClient(savedInstanceState: Bundle?): PageWebViewClient = + super.onCreateWebViewClient(savedInstanceState).apply { + onPageFinishedCallbacks.add { + val deckName = binding.deckName.text.toString() + if (deckName.isNotEmpty()) { + changeDeck(deckName) + } + } + } + companion object { private const val KEY_DECK_NAME = "key_deck_name" } diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/pages/StatisticsDestination.kt b/AnkiDroid/src/main/java/com/ichi2/anki/pages/StatisticsDestination.kt index 447f6a7a61f8..4223354f11c9 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/pages/StatisticsDestination.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/pages/StatisticsDestination.kt @@ -17,9 +17,10 @@ package com.ichi2.anki.pages import android.content.Context import android.content.Intent -import com.ichi2.anki.SingleFragmentActivity +import com.ichi2.anki.utils.ConfigAwareSingleFragmentActivity import com.ichi2.anki.utils.Destination class StatisticsDestination : Destination { - override fun toIntent(context: Context): Intent = SingleFragmentActivity.getIntent(context, fragmentClass = Statistics::class) + override fun toIntent(context: Context): Intent = + ConfigAwareSingleFragmentActivity.getIntent(context, fragmentClass = Statistics::class) } diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/pages/StatisticsTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/pages/StatisticsTest.kt index cca64b6be61c..4beb44a26c61 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/pages/StatisticsTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/pages/StatisticsTest.kt @@ -28,8 +28,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.anki.CollectionManager.withCol import com.ichi2.anki.R import com.ichi2.anki.RobolectricTest -import com.ichi2.anki.SingleFragmentActivity import com.ichi2.anki.dialogs.DeckSelectionDialog +import com.ichi2.anki.utils.ConfigAwareSingleFragmentActivity import kotlinx.coroutines.test.advanceUntilIdle import org.junit.Test import org.junit.jupiter.api.assertNotNull @@ -43,7 +43,7 @@ class StatisticsTest : RobolectricTest() { fun `shows 'Default' deck when collection is empty`() = runTest { ActivityScenario - .launch( + .launch( StatisticsDestination().toIntent( targetContext, ), @@ -62,7 +62,7 @@ class StatisticsTest : RobolectricTest() { withCol { decks.select(testDeck1) } addDeck(testDeckName2) ActivityScenario - .launch( + .launch( StatisticsDestination().toIntent( targetContext, ), @@ -84,7 +84,7 @@ class StatisticsTest : RobolectricTest() { // the statistics screen doesn't allow the selection of 'All Decks' and filtered decks, // also 'Default' deck should be enabled no matter its status(empty/not empty) ActivityScenario - .launch(StatisticsDestination().toIntent(targetContext)) + .launch(StatisticsDestination().toIntent(targetContext)) .onActivity { activity -> val statisticsFragment = activity.supportFragmentManager.findFragmentById(R.id.fragment_container)