From 9b1917cbdc9353eb964f5d0e7efbbeafff14e42c Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 29 Jun 2023 15:16:19 -0300 Subject: [PATCH] Add story ring to CFV2. --- .../securesms/avatar/view/AvatarView.kt | 2 +- .../conversation/v2/ConversationFragment.kt | 20 +++++++++++++++++++ .../conversation/v2/ConversationViewModel.kt | 7 +++++++ .../main/res/drawable/avatar_story_ring.xml | 13 ------------ .../res/drawable/avatar_story_ring_active.xml | 7 +++++++ .../drawable/avatar_story_ring_inactive.xml | 7 +++++++ app/src/main/res/layout/avatar_view.xml | 2 +- 7 files changed, 43 insertions(+), 15 deletions(-) delete mode 100644 app/src/main/res/drawable/avatar_story_ring.xml create mode 100644 app/src/main/res/drawable/avatar_story_ring_active.xml create mode 100644 app/src/main/res/drawable/avatar_story_ring_inactive.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/avatar/view/AvatarView.kt b/app/src/main/java/org/thoughtcrime/securesms/avatar/view/AvatarView.kt index c039737f7b..2dac9f6aef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/avatar/view/AvatarView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/avatar/view/AvatarView.kt @@ -41,7 +41,7 @@ class AvatarView @JvmOverloads constructor( } storyRing.visible = true - storyRing.isActivated = hasUnreadStory + storyRing.setBackgroundResource(if (hasUnreadStory) R.drawable.avatar_story_ring_active else R.drawable.avatar_story_ring_inactive) avatar.scaleX = storyRingScale avatar.scaleY = storyRingScale diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index cd601d44b2..9bed818342 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -479,6 +479,7 @@ class ConversationFragment : presentChatColors(args.chatColors) presentConversationTitle(viewModel.recipientSnapshot) presentActionBarMenu() + presentStoryRing() observeConversationThread() @@ -855,6 +856,25 @@ class ConversationFragment : .addTo(disposables) } + private fun presentStoryRing() { + if (SignalStore.storyValues().isFeatureDisabled) { + return + } + + disposables += viewModel.storyRingState.subscribeBy { + binding.conversationTitleView.conversationTitleView.setStoryRingFromState(it) + } + + binding.conversationTitleView.conversationTitleView.setOnStoryRingClickListener { + val recipient: Recipient = viewModel.recipientSnapshot ?: return@setOnStoryRingClickListener + val args = StoryViewerArgs.Builder(recipient.id, recipient.shouldHideStory()) + .isFromQuote(true) + .build() + + startActivity(StoryViewerActivity.createIntent(requireContext(), args)) + } + } + private fun presentInputReadyState(inputReadyState: InputReadyState) { presentConversationTitle(inputReadyState.conversationRecipient) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt index 6cd16e35bc..291db7da39 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt @@ -43,6 +43,7 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord import org.thoughtcrime.securesms.database.model.Quote import org.thoughtcrime.securesms.database.model.ReactionRecord import org.thoughtcrime.securesms.database.model.StickerRecord +import org.thoughtcrime.securesms.database.model.StoryViewState import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.jobs.RetrieveProfileJob @@ -123,6 +124,12 @@ class ConversationViewModel( private val _searchQuery = BehaviorSubject.createDefault("") val searchQuery: Observable = _searchQuery + val storyRingState = recipient + .switchMap { StoryViewState.getForRecipientId(it.id) } + .subscribeOn(Schedulers.io()) + .distinctUntilChanged() + .observeOn(AndroidSchedulers.mainThread()) + init { disposables += recipient .subscribeBy { diff --git a/app/src/main/res/drawable/avatar_story_ring.xml b/app/src/main/res/drawable/avatar_story_ring.xml deleted file mode 100644 index 55e5a75efa..0000000000 --- a/app/src/main/res/drawable/avatar_story_ring.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/avatar_story_ring_active.xml b/app/src/main/res/drawable/avatar_story_ring_active.xml new file mode 100644 index 0000000000..ebd4449d91 --- /dev/null +++ b/app/src/main/res/drawable/avatar_story_ring_active.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/avatar_story_ring_inactive.xml b/app/src/main/res/drawable/avatar_story_ring_inactive.xml new file mode 100644 index 0000000000..e5582e2a51 --- /dev/null +++ b/app/src/main/res/drawable/avatar_story_ring_inactive.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/avatar_view.xml b/app/src/main/res/layout/avatar_view.xml index fcb766e2c1..6a469244e1 100644 --- a/app/src/main/res/layout/avatar_view.xml +++ b/app/src/main/res/layout/avatar_view.xml @@ -17,7 +17,7 @@ android:id="@+id/avatar_story_ring" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@drawable/avatar_story_ring" + android:background="@drawable/avatar_story_ring_inactive" android:importantForAccessibility="no" android:visibility="gone" tools:visibility="visible" />