diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt index 16e340da5..b9cdfe960 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt @@ -12,6 +12,7 @@ import io.reactivex.rxjava3.core.Observable import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.groups.SelectionLimits import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs import org.thoughtcrime.securesms.stories.settings.custom.PrivateStorySettingsFragment import org.thoughtcrime.securesms.stories.settings.my.MyStorySettingsFragment import org.thoughtcrime.securesms.stories.settings.privacy.ChooseInitialMyStoryMembershipBottomSheetDialogFragment @@ -97,6 +98,17 @@ class ContactSearchMediator( } private fun toggleStorySelection(view: View, contactSearchData: ContactSearchData.Story, isSelected: Boolean) { + if (SignalStore.storyValues().userHasSeenBetaDialog) { + performStoryToggle(view, contactSearchData, isSelected) + } else { + StoryDialogs.displayBetaDialog(view.context) { + SignalStore.storyValues().userHasSeenBetaDialog = true + performStoryToggle(view, contactSearchData, isSelected) + } + } + } + + private fun performStoryToggle(view: View, contactSearchData: ContactSearchData.Story, isSelected: Boolean) { if (contactSearchData.recipient.isMyStory && !SignalStore.storyValues().userHasBeenNotifiedAboutStories) { ChooseInitialMyStoryMembershipBottomSheetDialogFragment.show(fragment.childFragmentManager) } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StoryValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StoryValues.kt index 9d55e9a46..072e2351f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StoryValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StoryValues.kt @@ -39,6 +39,11 @@ internal class StoryValues(store: KeyValueStore) : SignalStoreValues(store) { * Marks whether the user has seen the onboarding story */ private const val USER_HAS_SEEN_ONBOARDING_STORY = "stories.user.has.seen.onboarding" + + /** + * Marks whether the user has seen the beta dialog + */ + private const val USER_HAS_SEEN_BETA_DIALOG = "stories.user.has.seen.beta.dialog" } override fun onFirstEverAppLaunch() = Unit @@ -47,7 +52,8 @@ internal class StoryValues(store: KeyValueStore) : SignalStoreValues(store) { MANUAL_FEATURE_DISABLE, USER_HAS_ADDED_TO_A_STORY, USER_HAS_SEEN_FIRST_NAV_VIEW, - HAS_DOWNLOADED_ONBOARDING_STORY + HAS_DOWNLOADED_ONBOARDING_STORY, + USER_HAS_SEEN_BETA_DIALOG ) var isFeatureDisabled: Boolean by booleanValue(MANUAL_FEATURE_DISABLE, false) @@ -62,6 +68,8 @@ internal class StoryValues(store: KeyValueStore) : SignalStoreValues(store) { var userHasSeenOnboardingStory: Boolean by booleanValue(USER_HAS_SEEN_ONBOARDING_STORY, false) + var userHasSeenBetaDialog: Boolean by booleanValue(USER_HAS_SEEN_BETA_DIALOG, false) + fun setLatestStorySend(storySend: StorySend) { synchronized(this) { val storySends: List = getList(LATEST_STORY_SENDS, StorySendSerializer) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryDialogs.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryDialogs.kt index 37fc18de3..73843a287 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryDialogs.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryDialogs.kt @@ -38,6 +38,13 @@ object StoryDialogs { .setTitle(R.string.StoriesPrivacySettingsFragment__turn_off_stories_question) .setMessage(R.string.StoriesPrivacySettingsFragment__you_will_no_longer_be_able_to_share) .setPositiveButton(positiveButtonMessage) { _, _ -> onDisable() } + } + + fun displayBetaDialog(context: Context, onConfirmed: () -> Unit) { + MaterialAlertDialogBuilder(context) + .setTitle(R.string.StoryDialogs__stories_is_available_to) + .setMessage(R.string.StoryDialogs__if_you_share_a_story) + .setPositiveButton(R.string.Permissions_continue) { _, _ -> onConfirmed() } .setNegativeButton(android.R.string.cancel) { _, _ -> } .show() } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 32443b6da..4ac9a779c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4945,6 +4945,10 @@ \"%1$s\" and updates shared to this story will be deleted. Delete + + Stories is available to Signal beta users only. + + If you share a story, it will only be available to people who are on Signal beta. Add to story?