From d9ffd67f36b845cf4d0c00b105537eb6c32f1891 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 1 Apr 2022 16:10:01 -0300 Subject: [PATCH] Update My Stories logic when user has not sent to a distribution list. --- .../stories/landing/MyStoriesItem.kt | 5 +-- .../stories/landing/StoriesLandingFragment.kt | 7 +--- .../landing/StoriesLandingRepository.kt | 24 +----------- .../stories/landing/StoriesLandingState.kt | 1 - .../landing/StoriesLandingViewModel.kt | 5 +-- .../securesms/stories/my/MyStoriesFragment.kt | 8 ++-- .../layout/stories_my_stories_fragment.xml | 37 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 + 8 files changed, 51 insertions(+), 38 deletions(-) create mode 100644 app/src/main/res/layout/stories_my_stories_fragment.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/MyStoriesItem.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/MyStoriesItem.kt index 8396820130..4cc1b738ba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/MyStoriesItem.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/MyStoriesItem.kt @@ -20,8 +20,7 @@ object MyStoriesItem { } class Model( - val hasOutgoingStories: Boolean, - val onClick: (Boolean) -> Unit, + val onClick: () -> Unit, val onClickThumbnail: () -> Unit ) : PreferenceModel() { override fun areItemsTheSame(newItem: Model): Boolean = true @@ -34,7 +33,7 @@ object MyStoriesItem { private val badgeView: BadgeImageView = itemView.findViewById(R.id.badge) override fun bind(model: Model) { - itemView.setOnClickListener { model.onClick(model.hasOutgoingStories) } + itemView.setOnClickListener { model.onClick() } thumbnail.setOnClickListener { model.onClickThumbnail() } avatarView.displayProfileAvatar(Recipient.self()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt index f8b875e152..cb2968b011 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt @@ -110,13 +110,8 @@ class StoriesLandingFragment : DSLSettingsFragment(layoutId = R.layout.stories_l if (state.displayMyStoryItem) { customPref( MyStoriesItem.Model( - state.hasOutgoingStories, onClick = { - if (it) { - startActivity(Intent(requireContext(), MyStoriesActivity::class.java)) - } else { - cameraFab.performClick() - } + startActivity(Intent(requireContext(), MyStoriesActivity::class.java)) }, onClickThumbnail = { cameraFab.performClick() diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt index 0eadeaebd9..daf457b28c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt @@ -27,7 +27,7 @@ class StoriesLandingRepository(context: Context) { }.subscribeOn(Schedulers.io()) } - fun getStories(): Observable { + fun getStories(): Observable> { val storyRecipients: Observable>> = Observable.create { emitter -> fun refresh() { val myStoriesId = SignalDatabase.recipients.getOrInsertFromDistributionListId(DistributionListId.MY_STORY) @@ -57,7 +57,7 @@ class StoriesLandingRepository(context: Context) { refresh() } - val storiesLandingItemData = storyRecipients.switchMap { map -> + return storyRecipients.switchMap { map -> val observables = map.map { (recipient, results) -> val messages = results .sortedBy { it.messageSentTimestamp } @@ -74,21 +74,6 @@ class StoriesLandingRepository(context: Context) { it.toList() as List } } - - val hasOutgoingStories: Observable = storyRecipients.concatMap { - Observable.fromCallable { - SignalDatabase.mms.getAllOutgoingStories(false).use { - it.next != null - } - } - } - - return Observable.combineLatest( - storiesLandingItemData, - hasOutgoingStories - ) { data, outgoingStories -> - StoriesResult(data, outgoingStories) - }.observeOn(Schedulers.io()) } private fun createStoriesLandingItemData(sender: Recipient, messageRecords: List): Observable { @@ -142,9 +127,4 @@ class StoriesLandingRepository(context: Context) { SignalDatabase.recipients.setHideStory(recipientId, hideStory) }.subscribeOn(Schedulers.io()) } - - data class StoriesResult( - val data: List, - val hasOutgoingStories: Boolean - ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingState.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingState.kt index 28ba53ce69..f82d9a1c7b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingState.kt @@ -4,7 +4,6 @@ data class StoriesLandingState( val storiesLandingItems: List = emptyList(), val displayMyStoryItem: Boolean = false, val isHiddenContentVisible: Boolean = false, - val hasOutgoingStories: Boolean = false, val loadingState: LoadingState = LoadingState.INIT ) { enum class LoadingState { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingViewModel.kt index 63dcf4597a..302d9b31f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingViewModel.kt @@ -17,13 +17,12 @@ class StoriesLandingViewModel(private val storiesLandingRepository: StoriesLandi val state: LiveData = store.stateLiveData init { - disposables += storiesLandingRepository.getStories().subscribe { (stories, hasOutgoingGroupStories) -> + disposables += storiesLandingRepository.getStories().subscribe { stories -> store.update { state -> state.copy( loadingState = StoriesLandingState.LoadingState.LOADED, storiesLandingItems = stories.sorted(), - displayMyStoryItem = stories.isEmpty() || stories.none { it.storyRecipient.isMyStory }, - hasOutgoingStories = hasOutgoingGroupStories + displayMyStoryItem = stories.isEmpty() || stories.none { it.storyRecipient.isMyStory } ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesFragment.kt index 15c569f2a0..c8519f05e1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesFragment.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.stories.my +import android.view.View import android.widget.Toast import androidx.activity.OnBackPressedCallback import androidx.core.app.ActivityOptionsCompat @@ -19,8 +20,10 @@ import org.thoughtcrime.securesms.stories.dialogs.StoryContextMenu import org.thoughtcrime.securesms.stories.viewer.StoryViewerActivity import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.Util +import org.thoughtcrime.securesms.util.visible class MyStoriesFragment : DSLSettingsFragment( + layoutId = R.layout.stories_my_stories_fragment, titleId = R.string.StoriesLandingFragment__my_stories ) { @@ -44,12 +47,11 @@ class MyStoriesFragment : DSLSettingsFragment( } ) + val emptyNotice = requireView().findViewById(R.id.empty_notice) lifecycleDisposable.bindTo(viewLifecycleOwner) viewModel.state.observe(viewLifecycleOwner) { adapter.submitList(getConfiguration(it).toMappingModelList()) - if (it.distributionSets.isEmpty()) { - requireActivity().finish() - } + emptyNotice.visible = it.distributionSets.isEmpty() } } diff --git a/app/src/main/res/layout/stories_my_stories_fragment.xml b/app/src/main/res/layout/stories_my_stories_fragment.xml new file mode 100644 index 0000000000..acc91f3159 --- /dev/null +++ b/app/src/main/res/layout/stories_my_stories_fragment.xml @@ -0,0 +1,37 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7b3b07aacc..d992c7d13b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2230,6 +2230,8 @@ Copied sent timestamp to clipboard. + + Updates to your story will show up here.