diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt b/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt index 441e563588fe..92a2bae79dd7 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt @@ -619,7 +619,7 @@ open class DeckPicker : return true } }) - if (colIsOpen()) { + if (colIsOpen() && !CollectionHelper.getInstance().isCollectionLocked) { displaySyncBadge(menu) // Show / hide undo diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/Sync.kt b/AnkiDroid/src/main/java/com/ichi2/anki/Sync.kt index 6254682b95d4..ea74974e3ca3 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/Sync.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/Sync.kt @@ -166,16 +166,19 @@ private suspend fun handleDownload( extractProgress = fullDownloadProgress(col.tr.syncDownloadingFromAnkiweb()), onCancel = ::cancelSync ) { - col.createBackup( - BackupManager.getBackupDirectoryFromCollection(col.path), - force = true, - waitForCompletion = true - ) - col.close(save = true, downgrade = false, forFullSync = true) + val helper = CollectionHelper.getInstance() + helper.lockCollection() try { + col.createBackup( + BackupManager.getBackupDirectoryFromCollection(col.path), + force = true, + waitForCompletion = true + ) + col.close(save = true, downgrade = false, forFullSync = true) col.fullDownload(auth) } finally { col.reopen(afterFullSync = true) + helper.unlockCollection() } } @@ -193,11 +196,14 @@ private suspend fun handleUpload( extractProgress = fullDownloadProgress(col.tr.syncUploadingToAnkiweb()), onCancel = ::cancelSync ) { + val helper = CollectionHelper.getInstance() + helper.lockCollection() col.close(save = true, downgrade = false, forFullSync = true) try { col.fullUpload(auth) } finally { col.reopen(afterFullSync = true) + helper.unlockCollection() } } Timber.i("Full Upload Completed") diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/SyncStatus.kt b/AnkiDroid/src/main/java/com/ichi2/utils/SyncStatus.kt index 3f6d0420acfe..eac41f2acbf0 100644 --- a/AnkiDroid/src/main/java/com/ichi2/utils/SyncStatus.kt +++ b/AnkiDroid/src/main/java/com/ichi2/utils/SyncStatus.kt @@ -30,14 +30,15 @@ enum class SyncStatus { @JvmStatic fun getSyncStatus(getCol: Supplier): SyncStatus { - val col: Collection - col = try { - getCol.get() + return try { + val col = getCol.get() + // may fail when the collection is closed for a full sync, + // as col.db is null + getSyncStatus(col) } catch (e: Exception) { Timber.w(e) return INCONCLUSIVE } - return getSyncStatus(col) } @JvmStatic