Skip to content

Commit c87fdd7

Browse files
committed
Fix: database corruption shows correct dialog
Ensures `launchCatchingTask` and `InitialActivity` handle `SQLiteDatabaseCorruptException` with correct dialog
1 parent 4de0391 commit c87fdd7

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import android.app.Activity
2020
import android.app.Dialog
2121
import android.content.Context
2222
import android.content.DialogInterface
23+
import android.database.sqlite.SQLiteDatabaseCorruptException
2324
import android.net.Uri
2425
import android.view.WindowManager
2526
import android.view.WindowManager.BadTokenException
@@ -40,6 +41,7 @@ import com.ichi2.anki.CrashReportData.HelpAction
4041
import com.ichi2.anki.CrashReportData.HelpAction.AnkiBackendLink
4142
import com.ichi2.anki.CrashReportData.HelpAction.OpenDeckOptions
4243
import com.ichi2.anki.common.annotations.UseContextParameter
44+
import com.ichi2.anki.dialogs.DatabaseErrorDialog
4345
import com.ichi2.anki.exception.StorageAccessException
4446
import com.ichi2.anki.libanki.Collection
4547
import com.ichi2.anki.pages.DeckOptionsDestination
@@ -204,6 +206,12 @@ suspend fun <T> FragmentActivity.runCatching(
204206
if (callerTrace != null) Timber.e(callerTrace)
205207
showError(exc.localizedMessage!!, exc.toCrashReportData(this))
206208
}
209+
is SQLiteDatabaseCorruptException -> {
210+
Timber.e(exc, errorMessage)
211+
DatabaseErrorDialog.databaseCorruptFlag = true
212+
if (callerTrace != null) Timber.e(callerTrace)
213+
DatabaseErrorDialog.ShowDatabaseErrorDialog.fromMessage(CollectionLoadingErrorDialog().toMessage())
214+
}
207215
else -> {
208216
Timber.e(exc, errorMessage)
209217
if (callerTrace != null) Timber.e(callerTrace)

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ package com.ichi2.anki
1818

1919
import android.content.Context
2020
import android.content.SharedPreferences
21+
import android.database.sqlite.SQLiteDatabaseCorruptException
2122
import android.database.sqlite.SQLiteFullException
2223
import android.os.Build
2324
import android.os.Environment
2425
import android.os.Parcelable
2526
import androidx.annotation.CheckResult
2627
import androidx.annotation.RequiresApi
2728
import androidx.core.content.edit
29+
import com.ichi2.anki.dialogs.DatabaseErrorDialog
2830
import com.ichi2.anki.exception.StorageAccessException
2931
import com.ichi2.anki.servicelayer.PreferenceUpgradeService
3032
import com.ichi2.anki.servicelayer.PreferenceUpgradeService.setPreferencesUpToDate
@@ -65,6 +67,10 @@ object InitialActivity {
6567
} catch (e: SQLiteFullException) {
6668
Timber.w(e)
6769
StartupFailure.DiskFull
70+
} catch (e: SQLiteDatabaseCorruptException) {
71+
Timber.w(e)
72+
DatabaseErrorDialog.databaseCorruptFlag = true
73+
StartupFailure.DBError(e)
6874
} catch (e: StorageAccessException) {
6975
// Same handling as the fall through, but without the exception report
7076
// These are now handled with a dialog and don't generate actionable reports

0 commit comments

Comments
 (0)