From 7dc4cb4ce7eddea32a58d10b63e0327ae2bf4a0a Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Wed, 21 May 2025 11:33:13 -0400 Subject: [PATCH] Ensure default chat folder exists. --- .../helpers/SignalDatabaseMigrations.kt | 6 ++-- .../migration/V253_CreateChatFolderTables.kt | 14 ++++++-- .../V275_EnsureDefaultAllChatsFolder.kt | 32 +++++++++++++++++++ .../logsubmit/LogSectionChatFolders.kt | 28 ++++++++++++++++ .../logsubmit/SubmitDebugLogRepository.java | 1 + 5 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V275_EnsureDefaultAllChatsFolder.kt create mode 100644 app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionChatFolders.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt index ba68ea6d3e..85170629cc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt @@ -129,6 +129,7 @@ import org.thoughtcrime.securesms.database.helpers.migration.V271_AddNotificatio import org.thoughtcrime.securesms.database.helpers.migration.V272_UpdateUnreadCountIndices import org.thoughtcrime.securesms.database.helpers.migration.V273_FixUnreadOriginalMessages import org.thoughtcrime.securesms.database.helpers.migration.V274_BackupMediaSnapshotLastSeenOnRemote +import org.thoughtcrime.securesms.database.helpers.migration.V275_EnsureDefaultAllChatsFolder import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSqliteDatabase /** @@ -263,10 +264,11 @@ object SignalDatabaseMigrations { 271 to V271_AddNotificationProfileIdColumn, 272 to V272_UpdateUnreadCountIndices, 273 to V273_FixUnreadOriginalMessages, - 274 to V274_BackupMediaSnapshotLastSeenOnRemote + 274 to V274_BackupMediaSnapshotLastSeenOnRemote, + 275 to V275_EnsureDefaultAllChatsFolder ) - const val DATABASE_VERSION = 274 + const val DATABASE_VERSION = 275 @JvmStatic fun migrate(context: Application, db: SignalSqliteDatabase, oldVersion: Int, newVersion: Int) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V253_CreateChatFolderTables.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V253_CreateChatFolderTables.kt index fd500af369..7bd7c6e7e9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V253_CreateChatFolderTables.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V253_CreateChatFolderTables.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import org.thoughtcrime.securesms.database.ChatFolderTables +import androidx.core.content.contentValuesOf import org.thoughtcrime.securesms.database.SQLiteDatabase /** @@ -42,6 +42,16 @@ object V253_CreateChatFolderTables : SignalDatabaseMigration { db.execSQL("CREATE INDEX chat_folder_membership_thread_id_index ON chat_folder_membership (thread_id)") db.execSQL("CREATE INDEX chat_folder_membership_membership_type_index ON chat_folder_membership (membership_type)") - ChatFolderTables.insertInitialChatFoldersAtCreationTime(db) + db.insert( + "chat_folder", + null, + contentValuesOf( + "position" to 0, + "folder_type" to 0, + "show_individual" to 1, + "show_groups" to 1, + "show_muted" to 1 + ) + ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V275_EnsureDefaultAllChatsFolder.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V275_EnsureDefaultAllChatsFolder.kt new file mode 100644 index 0000000000..6c6a29d7eb --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V275_EnsureDefaultAllChatsFolder.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.database.helpers.migration + +import android.app.Application +import org.signal.core.util.Base64 +import org.thoughtcrime.securesms.database.SQLiteDatabase +import org.thoughtcrime.securesms.storage.StorageSyncHelper +import java.util.UUID + +/** + * Ensures that there is a default 'All chat' within chat folders. + */ +object V275_EnsureDefaultAllChatsFolder : SignalDatabaseMigration { + override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + db.execSQL( + """ + INSERT INTO chat_folder(position, folder_type, show_individual, show_groups, show_muted, chat_folder_id, storage_service_id) + SELECT '0', '0', '1', '1', '1', '${UUID.randomUUID()}', '${Base64.encodeWithPadding(StorageSyncHelper.generateKey())}' + WHERE NOT EXISTS ( + SELECT 1 + FROM chat_folder + WHERE folder_type = 0 + LIMIT 1 + ); + """.trimIndent() + ) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionChatFolders.kt b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionChatFolders.kt new file mode 100644 index 0000000000..99bfc90847 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionChatFolders.kt @@ -0,0 +1,28 @@ +package org.thoughtcrime.securesms.logsubmit + +import android.content.Context +import org.thoughtcrime.securesms.components.settings.app.chats.folders.ChatFolderRecord +import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.recipients.Recipient + +/** + * Prints out chat folders settings + */ +class LogSectionChatFolders : LogSection { + override fun getTitle(): String = "CHAT FOLDERS" + + override fun getContent(context: Context): CharSequence { + val output = StringBuilder() + + if (Recipient.isSelfSet) { + val count = SignalDatabase.chatFolders.getFolderCount() + val hasDefault = SignalDatabase.chatFolders.getCurrentChatFolders().any { folder -> folder.folderType == ChatFolderRecord.FolderType.ALL } + output.append("Has default all chats : ${hasDefault}\n") + output.append("Number of folders (undeleted) : ${count}\n") + } else { + output.append("< Self is not set yet >\n") + } + + return output + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java index f7df5a41cf..7d33da1be9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java @@ -88,6 +88,7 @@ public class SubmitDebugLogRepository { add(new LogSectionKeyPreferences()); add(new LogSectionStories()); add(new LogSectionBadges()); + add(new LogSectionChatFolders()); add(new LogSectionRemoteBackups()); add(new LogSectionPermissions()); add(new LogSectionTrace());