diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 285e2d6fcbdbdd766e455fb74a3552e008b86951..d7a09a51c4c396b2ca597729d4d54bde49704f7a 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" + } +}