From e5cd3692c4fc4460e3db7f6f77be4c898d01a901 Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 19 May 2026 16:41:22 +0530 Subject: [PATCH] Only restore local notes --- app/src/main/AndroidManifest.xml | 2 + .../e/notes/backup/NotesBackupAgent.kt | 67 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 app/src/main/java/foundation/e/notes/backup/NotesBackupAgent.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 285e2d6fc..d7a09a51c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,8 @@ . + */ +package foundation.e.notes.backup + +import android.app.backup.BackupAgent +import android.app.backup.BackupDataInput +import android.app.backup.BackupDataOutput +import android.os.ParcelFileDescriptor +import android.util.Log +import it.niedermann.owncloud.notes.persistence.NotesDatabase +import it.niedermann.owncloud.notes.shared.util.AccountSyncUtil + +class NotesBackupAgent : BackupAgent() { + + override fun onBackup( + oldState: ParcelFileDescriptor?, + data: BackupDataOutput?, + newState: ParcelFileDescriptor? + ) { + // Full Auto Backup handles the file payload. + } + + override fun onRestore( + data: BackupDataInput?, + appVersionCode: Int, + newState: ParcelFileDescriptor? + ) { + // Full Auto Backup handles the file payload. + } + + override fun onRestoreFinished() { + super.onRestoreFinished() + + runCatching { + val accountDao = NotesDatabase + .getInstance(applicationContext) + .getAccountDao() + + // Non-local account such as murena account will be auto logged-in + val removedAccounts = accountDao.getAccounts() + .filterNot { AccountSyncUtil.isLocalAccount(applicationContext, it) } + .onEach(accountDao::deleteAccount) + + Log.i(TAG, "Restore cleanup finished. Removed non-local accounts: ${removedAccounts.size}") + }.onFailure { + Log.e(TAG, "Failed to clean up restored accounts", it) + } + } + + companion object { + private const val TAG = "NotesBackupAgent" + } +} -- GitLab