Skip to content

Commit adba26f

Browse files
committed
Additional SQLiteBlobTooBigException handler
1 parent 850c86a commit adba26f

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

app/src/main/java/com/philkes/notallyx/presentation/activity/LockedActivity.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.philkes.notallyx.presentation.activity
33
import android.app.Activity
44
import android.app.KeyguardManager
55
import android.content.Intent
6+
import android.database.sqlite.SQLiteBlobTooBigException
67
import android.hardware.biometrics.BiometricPrompt.BIOMETRIC_ERROR_HW_NOT_PRESENT
78
import android.hardware.biometrics.BiometricPrompt.BIOMETRIC_ERROR_NO_BIOMETRICS
89
import android.os.Build
@@ -15,18 +16,28 @@ import androidx.activity.result.contract.ActivityResultContracts
1516
import androidx.activity.viewModels
1617
import androidx.appcompat.app.AppCompatActivity
1718
import androidx.core.content.ContextCompat
19+
import androidx.lifecycle.MutableLiveData
1820
import androidx.lifecycle.lifecycleScope
1921
import androidx.viewbinding.ViewBinding
2022
import com.google.android.material.color.DynamicColors
2123
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2224
import com.philkes.notallyx.NotallyXApplication
2325
import com.philkes.notallyx.R
26+
import com.philkes.notallyx.presentation.setupProgressDialog
2427
import com.philkes.notallyx.presentation.showToast
2528
import com.philkes.notallyx.presentation.viewmodel.BaseNoteModel
2629
import com.philkes.notallyx.presentation.viewmodel.preference.NotallyXPreferences
2730
import com.philkes.notallyx.presentation.viewmodel.preference.Theme
31+
import com.philkes.notallyx.presentation.viewmodel.progress.MigrationProgress
32+
import com.philkes.notallyx.utils.log
33+
import com.philkes.notallyx.utils.secondsBetween
2834
import com.philkes.notallyx.utils.security.showBiometricOrPinPrompt
35+
import com.philkes.notallyx.utils.splitOversizedNotes
36+
import kotlinx.coroutines.Dispatchers
2937
import kotlinx.coroutines.launch
38+
import kotlinx.coroutines.sync.Mutex
39+
import kotlinx.coroutines.sync.withLock
40+
import kotlinx.coroutines.withContext
3041

3142
abstract class LockedActivity<T : ViewBinding> : AppCompatActivity() {
3243

@@ -40,6 +51,7 @@ abstract class LockedActivity<T : ViewBinding> : AppCompatActivity() {
4051

4152
override fun onCreate(savedInstanceState: Bundle?) {
4253
super.onCreate(savedInstanceState)
54+
setupGlobalExceptionHandler()
4355
initViewModel()
4456
notallyXApplication = (application as NotallyXApplication)
4557
preferences = NotallyXPreferences.getInstance(notallyXApplication)
@@ -197,4 +209,10 @@ abstract class LockedActivity<T : ViewBinding> : AppCompatActivity() {
197209
}
198210
} ?: false
199211
}
212+
213+
companion object {
214+
private const val TAG = "LockedActivity"
215+
private val EXCEPTION_HANDLER_MUTEX = Mutex()
216+
private var EXCEPTION_HANDLER_MUTEX_LAST_TIMESTAMP: Long? = null
217+
}
200218
}

app/src/main/java/com/philkes/notallyx/utils/DataSchemaMigrations.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private fun Application.moveAttachments(preferences: NotallyXPreferences) {
6161
* end of each truncated note that points to the next note. The link text is included in the body
6262
* and must also fit within the size limit.
6363
*/
64-
private suspend fun Application.splitOversizedNotes() {
64+
suspend fun Application.splitOversizedNotes() {
6565
log(
6666
TAG,
6767
"Running migration 2: Splitting notes exceeding the body size limit (limit: $MAX_BODY_CHAR_LENGTH characters)",
@@ -87,8 +87,14 @@ private suspend fun Application.splitOversizedNotes() {
8787
e,
8888
)
8989
repaired += 1
90-
truncateBodyAndFixSpans(dao, id)
91-
dao.get(id)
90+
try {
91+
truncateBodyAndFixSpans(dao, id)
92+
dao.get(id)
93+
} catch (e: SQLiteBlobTooBigException) {
94+
log(TAG, "Note (id: $id) could not be repaired. Deleting...", e)
95+
dao.delete(id)
96+
null
97+
}
9298
}
9399
if (original == null) return@forEach
94100
if (original.type != Type.NOTE) return@forEach

app/src/main/java/com/philkes/notallyx/utils/MiscExtensions.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.philkes.notallyx.utils
33
import android.util.Patterns
44
import java.util.Calendar
55
import java.util.Locale
6+
import kotlin.math.abs
67

78
fun CharSequence.truncate(limit: Int): CharSequence {
89
return if (length > limit) {
@@ -110,3 +111,7 @@ fun now(): Calendar =
110111
set(Calendar.SECOND, 0)
111112
set(Calendar.MILLISECOND, 0)
112113
}
114+
115+
typealias TimeMillis = Long
116+
117+
fun TimeMillis.secondsBetween(other: TimeMillis): Long = abs(this - other) / 1000

0 commit comments

Comments
 (0)