From fdeaf77fc04d21dcb848863f6f9f49087292b114 Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Thu, 17 Oct 2024 16:48:06 -0700 Subject: [PATCH] Use custom config for chat folders. --- .../database/ThreadTableTest_active.kt | 7 +++ .../database/ThreadTableTest_pinned.kt | 7 +++ .../securesms/components/FromTextView.java | 7 +-- .../app/chats/ChatsSettingsFragment.kt | 2 +- .../ConversationListDataSource.java | 46 ++++++++++++++++++- .../ConversationListFragment.java | 2 +- .../securesms/util/RemoteConfig.kt | 8 ++++ ...rchivedConversationListDataSourceTest.java | 5 ++ 8 files changed, 78 insertions(+), 6 deletions(-) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_active.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_active.kt index d6f938adaa..e20da879a7 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_active.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_active.kt @@ -6,6 +6,8 @@ package org.thoughtcrime.securesms.database import androidx.test.platform.app.InstrumentationRegistry +import io.mockk.every +import io.mockk.mockkStatic import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Before @@ -15,6 +17,7 @@ import org.thoughtcrime.securesms.components.settings.app.chats.folders.ChatFold import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.testing.SignalDatabaseRule +import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.util.UUID @@ -30,6 +33,10 @@ class ThreadTableTest_active { @Before fun setUp() { + mockkStatic(RemoteConfig::class) + + every { RemoteConfig.showChatFolders } returns true + recipient = Recipient.resolved(SignalDatabase.recipients.getOrInsertFromServiceId(ACI.from(UUID.randomUUID()))) } diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_pinned.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_pinned.kt index beee4b74ca..9a7cf2d356 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_pinned.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_pinned.kt @@ -1,5 +1,7 @@ package org.thoughtcrime.securesms.database +import io.mockk.every +import io.mockk.mockkStatic import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Before @@ -10,6 +12,7 @@ import org.thoughtcrime.securesms.components.settings.app.chats.folders.ChatFold import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.testing.SignalDatabaseRule +import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.util.UUID @@ -25,6 +28,10 @@ class ThreadTableTest_pinned { @Before fun setUp() { + mockkStatic(RemoteConfig::class) + + every { RemoteConfig.showChatFolders } returns true + recipient = Recipient.resolved(SignalDatabase.recipients.getOrInsertFromServiceId(ACI.from(UUID.randomUUID()))) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java index 63eefb8ee6..b1f4fdbed2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java @@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.components.emoji.SimpleEmojiTextView; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DrawableUtil; +import org.thoughtcrime.securesms.util.RemoteConfig; import org.thoughtcrime.securesms.util.SpanUtil; import org.thoughtcrime.securesms.util.ViewUtil; @@ -77,9 +78,9 @@ public class FromTextView extends SimpleEmojiTextView { setText(builder); - if (recipient.isBlocked()) setCompoundDrawablesRelativeWithIntrinsicBounds(getBlocked(), null, null, null); - else if (isPinned) setCompoundDrawablesRelativeWithIntrinsicBounds(getPinned(), null, null, null); - else setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0); + if (recipient.isBlocked()) setCompoundDrawablesRelativeWithIntrinsicBounds(getBlocked(), null, null, null); + else if (RemoteConfig.getShowChatFolders() && isPinned) setCompoundDrawablesRelativeWithIntrinsicBounds(getPinned(), null, null, null); + else setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0); } private Drawable getBlocked() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt index 889d7e0a15..1678d5fc89 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt @@ -60,7 +60,7 @@ class ChatsSettingsFragment : DSLSettingsFragment(R.string.preferences_chats__ch dividerPref() - if (RemoteConfig.internalUser) { + if (RemoteConfig.showChatFolders) { sectionHeaderPref(R.string.ChatsSettingsFragment__chat_folders) clickPref( diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListDataSource.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListDataSource.java index 05e5bb2a04..a1d69e9dbc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListDataSource.java @@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.database.model.UpdateDescription; import org.thoughtcrime.securesms.dependencies.AppDependencies; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.util.RemoteConfig; import org.thoughtcrime.securesms.util.SignalTrace; import java.util.ArrayList; @@ -173,6 +174,7 @@ abstract class ConversationListDataSource implements PagedDataSource cursors = new ArrayList<>(5); long originalLimit = limit; + if (!RemoteConfig.getShowChatFolders() && offset == 0 && hasPinnedHeader()) { + MatrixCursor pinnedHeaderCursor = new MatrixCursor(ConversationReader.HEADER_COLUMN); + pinnedHeaderCursor.addRow(ConversationReader.PINNED_HEADER); + cursors.add(pinnedHeaderCursor); + limit--; + } + Cursor pinnedCursor = threadTable.getUnarchivedConversationList(conversationFilter, true, offset, limit, chatFolder); cursors.add(pinnedCursor); limit -= pinnedCursor.getCount(); - long unpinnedOffset = Math.max(0, offset - pinnedCount); + if (!RemoteConfig.getShowChatFolders() && offset == 0 && hasUnpinnedHeader()) { + MatrixCursor unpinnedHeaderCursor = new MatrixCursor(ConversationReader.HEADER_COLUMN); + unpinnedHeaderCursor.addRow(ConversationReader.UNPINNED_HEADER); + cursors.add(unpinnedHeaderCursor); + limit--; + } + + long unpinnedOffset = Math.max(0, offset - pinnedCount - getHeaderOffset()); Cursor unpinnedCursor = threadTable.getUnarchivedConversationList(conversationFilter, false, unpinnedOffset, limit, chatFolder); cursors.add(unpinnedCursor); @@ -223,6 +248,25 @@ abstract class ConversationListDataSource implements PagedDataSource signalDatabaseMockedStatic; + @Mock + private MockedStatic remoteConfigMockedStatic; + private ConversationListDataSource.UnarchivedConversationListDataSource testSubject; private ChatFolderRecord allChatsFolder; @@ -58,6 +62,7 @@ public class UnarchivedConversationListDataSourceTest { when(SignalDatabase.threads()).thenReturn(threadTable); when(AppDependencies.getDatabaseObserver()).thenReturn(mock(DatabaseObserver.class)); + when(RemoteConfig.getShowChatFolders()).thenReturn(true); allChatsFolder = setupAllChatsFolder(); testSubject = new ConversationListDataSource.UnarchivedConversationListDataSource(allChatsFolder, ConversationFilter.OFF, false);