From 9888b1a5f86c66c50f269eacdffe53fd4b28f9ad Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Sat, 21 Sep 2024 07:01:43 -0400 Subject: [PATCH] Fix backup support for account wallpapers. --- .../backup/v2/ArchiveImportExportTests.kt | 5 ++-- .../database/ThreadTableBackupExtensions.kt | 25 ++----------------- .../v2/processor/AccountDataProcessor.kt | 16 +++++++++--- .../backup/v2/util/ChatStyleConverter.kt | 19 ++++++++++++++ 4 files changed, 37 insertions(+), 28 deletions(-) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt index bc69294c6c..04a0c25a88 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt @@ -53,10 +53,11 @@ class ArchiveImportExportTests { @Test fun temp() { - runTests { it == "chat_item_standard_message_standard_attachments_02.binproto" } + runTests { it == "account_data_01.binproto" } } - @Test + // Passing +// @Test fun accountData() { runTests { it.startsWith("account_data_") } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableBackupExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableBackupExtensions.kt index 46fe65cad8..a8f17d0e88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableBackupExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableBackupExtensions.kt @@ -19,8 +19,8 @@ import org.signal.core.util.toInt import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.backup.v2.ImportState import org.thoughtcrime.securesms.backup.v2.proto.Chat -import org.thoughtcrime.securesms.backup.v2.proto.ChatStyle import org.thoughtcrime.securesms.backup.v2.util.ChatStyleConverter +import org.thoughtcrime.securesms.backup.v2.util.parseChatWallpaper import org.thoughtcrime.securesms.backup.v2.util.toLocal import org.thoughtcrime.securesms.backup.v2.util.toLocalAttachment import org.thoughtcrime.securesms.conversation.colors.ChatColors @@ -29,10 +29,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.database.model.databaseprotos.ChatColor import org.thoughtcrime.securesms.database.model.databaseprotos.Wallpaper -import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.recipients.RecipientId -import org.thoughtcrime.securesms.wallpaper.ChatWallpaper -import org.thoughtcrime.securesms.wallpaper.ChatWallpaperFactory import org.thoughtcrime.securesms.wallpaper.UriChatWallpaper import java.io.Closeable @@ -78,13 +75,7 @@ fun ThreadTable.restoreFromBackup(chat: Chat, recipientId: RecipientId, importSt } } - val chatWallpaper = chat.style?.parseChatWallpaper(wallpaperAttachmentId)?.let { - if (chat.style.dimWallpaperInDarkMode) { - ChatWallpaperFactory.updateWithDimming(it, ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME) - } else { - it - } - } + val chatWallpaper = chat.style?.parseChatWallpaper(wallpaperAttachmentId) val threadId = writableDatabase .insertInto(ThreadTable.TABLE_NAME) @@ -161,15 +152,3 @@ class ChatExportIterator(private val cursor: Cursor, private val db: SignalDatab cursor.close() } } - -private fun ChatStyle.parseChatWallpaper(wallpaperAttachmentId: AttachmentId?): ChatWallpaper? { - if (this.wallpaperPreset != null) { - return this.wallpaperPreset.toLocal() - } - - if (wallpaperAttachmentId != null) { - return UriChatWallpaper(PartAuthority.getAttachmentDataUri(wallpaperAttachmentId), 0f) - } - - return null -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataProcessor.kt index e493c9e6ae..27c8ebb8ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataProcessor.kt @@ -8,14 +8,18 @@ package org.thoughtcrime.securesms.backup.v2.processor import okio.ByteString.Companion.EMPTY import okio.ByteString.Companion.toByteString import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.backup.v2.ImportState import org.thoughtcrime.securesms.backup.v2.database.restoreSelfFromBackup +import org.thoughtcrime.securesms.backup.v2.database.restoreWallpaperAttachment import org.thoughtcrime.securesms.backup.v2.proto.AccountData import org.thoughtcrime.securesms.backup.v2.proto.ChatStyle import org.thoughtcrime.securesms.backup.v2.proto.Frame import org.thoughtcrime.securesms.backup.v2.stream.BackupFrameEmitter import org.thoughtcrime.securesms.backup.v2.util.ChatStyleConverter +import org.thoughtcrime.securesms.backup.v2.util.parseChatWallpaper import org.thoughtcrime.securesms.backup.v2.util.toLocal +import org.thoughtcrime.securesms.backup.v2.util.toLocalAttachment import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository import org.thoughtcrime.securesms.components.settings.app.usernamelinks.UsernameQrCodeColorScheme import org.thoughtcrime.securesms.conversation.colors.ChatColors @@ -156,11 +160,17 @@ object AccountDataProcessor { if (settings.defaultChatStyle != null) { val chatColors = settings.defaultChatStyle.toLocal(importState) SignalStore.chatColors.chatColors = chatColors - if (SignalStore.wallpaper.wallpaper != null) { - SignalStore.wallpaper.setDimInDarkTheme(settings.defaultChatStyle.dimWallpaperInDarkMode) + + val wallpaperAttachmentId: AttachmentId? = settings.defaultChatStyle.wallpaperPhoto?.let { filePointer -> + filePointer.toLocalAttachment(importState)?.let { + SignalDatabase.attachments.restoreWallpaperAttachment(it) + } } - // TODO [backup] wallpaper + SignalStore.wallpaper.wallpaper = settings.defaultChatStyle.parseChatWallpaper(wallpaperAttachmentId) + } else { + SignalStore.chatColors.chatColors = null + SignalStore.wallpaper.wallpaper = null } if (accountData.donationSubscriberData != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ChatStyleConverter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ChatStyleConverter.kt index b14d2ca149..7d7938022b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ChatStyleConverter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ChatStyleConverter.kt @@ -13,11 +13,14 @@ import org.thoughtcrime.securesms.conversation.colors.ChatColors import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.Wallpaper +import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.mms.PartUriParser import org.thoughtcrime.securesms.util.UriUtil import org.thoughtcrime.securesms.wallpaper.ChatWallpaper +import org.thoughtcrime.securesms.wallpaper.ChatWallpaperFactory import org.thoughtcrime.securesms.wallpaper.GradientChatWallpaper import org.thoughtcrime.securesms.wallpaper.SingleColorChatWallpaper +import org.thoughtcrime.securesms.wallpaper.UriChatWallpaper /** * Contains a collection of methods to chat styles to and from their archive format. @@ -174,6 +177,22 @@ fun ChatStyle.WallpaperPreset.toLocal(): ChatWallpaper? { } } +fun ChatStyle.parseChatWallpaper(wallpaperAttachmentId: AttachmentId?): ChatWallpaper? { + val chatWallpaper = if (this.wallpaperPreset != null) { + this.wallpaperPreset.toLocal() + } else if (wallpaperAttachmentId != null) { + UriChatWallpaper(PartAuthority.getAttachmentDataUri(wallpaperAttachmentId), 0f) + } else { + null + } + + return if (chatWallpaper != null && this.dimWallpaperInDarkMode) { + ChatWallpaperFactory.updateWithDimming(chatWallpaper, ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME) + } else { + chatWallpaper + } +} + private fun Int.toRemoteWallpaperPreset(): ChatStyle.WallpaperPreset { return when (this) { SingleColorChatWallpaper.BLUSH.color -> ChatStyle.WallpaperPreset.SOLID_BLUSH