Enable sharing to stories and refactor share activity.

This commit is contained in:
Alex Hart
2022-04-07 15:47:56 -03:00
committed by Greyson Parrelli
parent fd4543ffe0
commit 523537cf05
62 changed files with 1188 additions and 1855 deletions

View File

@@ -12,12 +12,12 @@ sealed class ContactSearchData(val contactSearchKey: ContactSearchKey) {
*
* Note that if the recipient is a group, it's participant list size is used instead of viewerCount.
*/
data class Story(val recipient: Recipient, val viewerCount: Int) : ContactSearchData(ContactSearchKey.Story(recipient.id))
data class Story(val recipient: Recipient, val viewerCount: Int) : ContactSearchData(ContactSearchKey.RecipientSearchKey.Story(recipient.id))
/**
* A row displaying a known recipient.
*/
data class KnownRecipient(val recipient: Recipient) : ContactSearchData(ContactSearchKey.KnownRecipient(recipient.id))
data class KnownRecipient(val recipient: Recipient) : ContactSearchData(ContactSearchKey.RecipientSearchKey.KnownRecipient(recipient.id))
/**
* A row containing a title for a given section

View File

@@ -19,34 +19,37 @@ sealed class ContactSearchKey {
open fun requireParcelable(): Parcelable = error("This key cannot be parcelized")
/**
* Key to a Story
*/
data class Story(override val recipientId: RecipientId) : ContactSearchKey(), RecipientSearchKey {
override fun requireShareContact(): ShareContact {
return ShareContact(recipientId)
sealed class RecipientSearchKey : ContactSearchKey() {
abstract val recipientId: RecipientId
abstract val isStory: Boolean
data class Story(override val recipientId: RecipientId) : RecipientSearchKey() {
override fun requireShareContact(): ShareContact {
return ShareContact(recipientId)
}
override fun requireParcelable(): Parcelable {
return ParcelableRecipientSearchKey(ParcelableType.STORY, recipientId)
}
override val isStory: Boolean = true
}
override fun requireParcelable(): Parcelable {
return ParcelableContactSearchKey(ParcelableType.STORY, recipientId)
/**
* Key to a recipient which already exists in our database
*/
data class KnownRecipient(override val recipientId: RecipientId) : RecipientSearchKey() {
override fun requireShareContact(): ShareContact {
return ShareContact(recipientId)
}
override fun requireParcelable(): Parcelable {
return ParcelableRecipientSearchKey(ParcelableType.KNOWN_RECIPIENT, recipientId)
}
override val isStory: Boolean = false
}
override val isStory: Boolean = true
}
/**
* Key to a recipient which already exists in our database
*/
data class KnownRecipient(override val recipientId: RecipientId) : ContactSearchKey(), RecipientSearchKey {
override fun requireShareContact(): ShareContact {
return ShareContact(recipientId)
}
override fun requireParcelable(): Parcelable {
return ParcelableContactSearchKey(ParcelableType.KNOWN_RECIPIENT, recipientId)
}
override val isStory: Boolean = false
}
/**
@@ -60,11 +63,11 @@ sealed class ContactSearchKey {
data class Expand(val sectionKey: ContactSearchConfiguration.SectionKey) : ContactSearchKey()
@Parcelize
data class ParcelableContactSearchKey(val type: ParcelableType, val recipientId: RecipientId) : Parcelable {
data class ParcelableRecipientSearchKey(val type: ParcelableType, val recipientId: RecipientId) : Parcelable {
fun asContactSearchKey(): ContactSearchKey {
return when (type) {
ParcelableType.STORY -> Story(recipientId)
ParcelableType.KNOWN_RECIPIENT -> KnownRecipient(recipientId)
ParcelableType.STORY -> RecipientSearchKey.Story(recipientId)
ParcelableType.KNOWN_RECIPIENT -> RecipientSearchKey.KnownRecipient(recipientId)
}
}
}

View File

@@ -67,7 +67,7 @@ class ContactSearchMediator(
return viewModel.selectionState
}
fun addToVisibleGroupStories(groupStories: Set<ContactSearchKey.Story>) {
fun addToVisibleGroupStories(groupStories: Set<ContactSearchKey.RecipientSearchKey.Story>) {
viewModel.addToVisibleGroupStories(groupStories)
}

View File

@@ -12,8 +12,8 @@ class ContactSearchRepository {
val isSelectable = when (it) {
is ContactSearchKey.Expand -> false
is ContactSearchKey.Header -> false
is ContactSearchKey.KnownRecipient -> canSelectRecipient(it.recipientId)
is ContactSearchKey.Story -> canSelectRecipient(it.recipientId)
is ContactSearchKey.RecipientSearchKey.KnownRecipient -> canSelectRecipient(it.recipientId)
is ContactSearchKey.RecipientSearchKey.Story -> canSelectRecipient(it.recipientId)
}
ContactSearchSelectionResult(it, isSelectable)
}.toSet()

View File

@@ -86,7 +86,7 @@ class ContactSearchViewModel(
return selectionStore.state
}
fun addToVisibleGroupStories(groupStories: Set<ContactSearchKey.Story>) {
fun addToVisibleGroupStories(groupStories: Set<ContactSearchKey.RecipientSearchKey.Story>) {
configurationStore.update { state ->
state.copy(
groupStories = state.groupStories + groupStories.map {

View File

@@ -1,11 +0,0 @@
package org.thoughtcrime.securesms.contacts.paged
import org.thoughtcrime.securesms.recipients.RecipientId
/**
* A Contact Search Key that is backed by a recipient, along with information about whether it is a story.
*/
interface RecipientSearchKey {
val recipientId: RecipientId
val isStory: Boolean
}