From 512ba2b0a88e9bd9bbb81344f03528126d63b35d Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 8 Nov 2022 17:34:02 -0500 Subject: [PATCH] Show bottom sheet when you tap an avatar in the story viewer. --- .../RecipientBottomSheetDialogFragment.java | 16 +++++++++++++++ .../viewer/page/StoryViewerPageFragment.kt | 20 ++++++++++++++++++- .../viewer/page/StoryViewerPageViewModel.kt | 4 ++++ .../viewer/page/StoryViewerPlaybackState.kt | 6 ++++-- 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java index be3ddd4b6e..90dc8b4768 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.recipients.ui.bottomsheet; import android.app.Activity; import android.content.ActivityNotFoundException; +import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; @@ -83,6 +84,7 @@ public final class RecipientBottomSheetDialogFragment extends BottomSheetDialogF private View buttonStrip; private View interactionsContainer; private BadgeImageView badgeImageView; + private Callback callback; public static BottomSheetDialogFragment create(@NonNull RecipientId recipientId, @Nullable GroupId groupId) @@ -341,6 +343,8 @@ public final class RecipientBottomSheetDialogFragment extends BottomSheetDialogF removeAdminButton.setEnabled(!busy); removeFromGroupButton.setEnabled(!busy); }); + + callback = getParentFragment() != null && getParentFragment() instanceof Callback ? (Callback) getParentFragment() : null; } private void openSystemContactSheet(@NonNull Intent intent) { @@ -363,4 +367,16 @@ public final class RecipientBottomSheetDialogFragment extends BottomSheetDialogF public void show(@NonNull FragmentManager manager, @Nullable String tag) { BottomSheetUtil.show(manager, tag, this); } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + if (callback != null) { + callback.onRecipientBottomSheetDismissed(); + } + } + + public interface Callback { + void onRecipientBottomSheetDismissed(); + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt index 401d470b0d..6531279c2a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt @@ -57,6 +57,7 @@ import org.thoughtcrime.securesms.mediapreview.VideoControlsDelegate import org.thoughtcrime.securesms.mms.GlideApp import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment import org.thoughtcrime.securesms.safety.SafetyNumberBottomSheet import org.thoughtcrime.securesms.stories.StorySlateView import org.thoughtcrime.securesms.stories.StoryVolumeOverlayView @@ -93,7 +94,8 @@ class StoryViewerPageFragment : MultiselectForwardBottomSheet.Callback, StorySlateView.Callback, StoryInfoBottomSheetDialogFragment.OnInfoSheetDismissedListener, - SafetyNumberBottomSheet.Callbacks { + SafetyNumberBottomSheet.Callbacks, + RecipientBottomSheetDialogFragment.Callback { private val storyVolumeViewModel: StoryVolumeViewModel by viewModels(ownerProducer = { requireActivity() }) @@ -859,6 +861,8 @@ class StoryViewerPageFragment : } else { from.text = name } + + from.setOnClickListener { onSenderClicked(storyPost.sender.id) } } private fun presentDate(date: TextView, storyPost: StoryPost) { @@ -867,17 +871,27 @@ class StoryViewerPageFragment : private fun presentSenderAvatar(senderAvatar: AvatarImageView, post: StoryPost) { AvatarUtil.loadIconIntoImageView(post.sender, senderAvatar, DimensionUnit.DP.toPixels(32f).toInt()) + senderAvatar.setOnClickListener { onSenderClicked(post.sender.id) } } private fun presentGroupAvatar(groupAvatar: AvatarImageView, post: StoryPost) { if (post.group != null) { groupAvatar.setRecipient(post.group) groupAvatar.visible = true + groupAvatar.setOnClickListener { onSenderClicked(post.sender.id) } } else { groupAvatar.visible = false + groupAvatar.setOnClickListener(null) } } + private fun onSenderClicked(senderId: RecipientId) { + viewModel.setIsDisplayingRecipientBottomSheet(true) + RecipientBottomSheetDialogFragment + .create(senderId, null) + .show(childFragmentManager, "BOTTOM") + } + private fun presentBottomBar(post: StoryPost, replyState: StoryViewerPageState.ReplyState, isReceiptsEnabled: Boolean) { if (replyState == StoryViewerPageState.ReplyState.NONE) { viewsAndReplies.visible = false @@ -1282,6 +1296,10 @@ class StoryViewerPageFragment : viewModel.setIsDisplayingPartialSendDialog(false) } + override fun onRecipientBottomSheetDismissed() { + viewModel.setIsDisplayingRecipientBottomSheet(false) + } + interface Callback { fun onGoToPreviousStory(recipientId: RecipientId) fun onFinishedPosts(recipientId: RecipientId) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt index 62803161b0..ddf01c6ef8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt @@ -242,6 +242,10 @@ class StoryViewerPageViewModel( storyViewerPlaybackStore.update { it.copy(isDisplayingCaptionOverlay = isDisplayingCaptionOverlay) } } + fun setIsDisplayingRecipientBottomSheet(isDisplayingRecipientBottomSheet: Boolean) { + storyViewerPlaybackStore.update { it.copy(isDisplayingRecipientBottomSheet = isDisplayingRecipientBottomSheet) } + } + fun setIsUserTouching(isUserTouching: Boolean) { storyViewerPlaybackStore.update { it.copy(isUserTouching = isUserTouching) } storyLongPressSubject.onNext(isUserTouching) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPlaybackState.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPlaybackState.kt index 2867fe4977..4c0d0d09ed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPlaybackState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPlaybackState.kt @@ -22,7 +22,8 @@ data class StoryViewerPlaybackState( val isUserLongTouching: Boolean = false, val isUserScrollingChild: Boolean = false, val isUserScaling: Boolean = false, - val isDisplayingPartialSendDialog: Boolean = false + val isDisplayingPartialSendDialog: Boolean = false, + val isDisplayingRecipientBottomSheet: Boolean = false ) { val hideChromeImmediate: Boolean = isRunningSharedElementAnimation || isDisplayingFirstTimeNavigation @@ -51,5 +52,6 @@ data class StoryViewerPlaybackState( isDisplayingInfoDialog || isUserScaling || isDisplayingHideDialog || - isDisplayingPartialSendDialog + isDisplayingPartialSendDialog || + isDisplayingRecipientBottomSheet }