mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 00:59:49 +01:00
Add support for message resends.
This commit is contained in:
committed by
Cody Henthorne
parent
c8c0589ac4
commit
559561bf72
@@ -127,6 +127,9 @@ class StoriesLandingFragment :
|
||||
onRowClick = {
|
||||
if (it.data.storyRecipient.isMyStory) {
|
||||
startActivity(Intent(requireContext(), MyStoriesActivity::class.java))
|
||||
} else if (it.data.primaryStory.messageRecord.isOutgoing && it.data.primaryStory.messageRecord.isFailed) {
|
||||
lifecycleDisposable += viewModel.resend(it.data.primaryStory.messageRecord).subscribe()
|
||||
Toast.makeText(requireContext(), R.string.message_recipients_list_item__resend, Toast.LENGTH_SHORT).show()
|
||||
} else {
|
||||
startActivity(StoryViewerActivity.createIntent(requireContext(), it.data.storyRecipient.id))
|
||||
}
|
||||
|
||||
@@ -14,11 +14,18 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientForeverObserver
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.sms.MessageSender
|
||||
|
||||
class StoriesLandingRepository(context: Context) {
|
||||
|
||||
private val context = context.applicationContext
|
||||
|
||||
fun resend(story: MessageRecord): Completable {
|
||||
return Completable.fromAction {
|
||||
MessageSender.resend(context, story)
|
||||
}.subscribeOn(Schedulers.io())
|
||||
}
|
||||
|
||||
fun getStories(): Observable<List<StoriesLandingItemData>> {
|
||||
return Observable.create<Observable<List<StoriesLandingItemData>>> { emitter ->
|
||||
val myStoriesId = SignalDatabase.recipients.getOrInsertFromDistributionListId(DistributionListId.MY_STORY)
|
||||
|
||||
@@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModelProvider
|
||||
import io.reactivex.rxjava3.core.Completable
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.util.livedata.Store
|
||||
|
||||
@@ -31,6 +32,10 @@ class StoriesLandingViewModel(private val storiesLandingRepository: StoriesLandi
|
||||
disposables.clear()
|
||||
}
|
||||
|
||||
fun resend(story: MessageRecord): Completable {
|
||||
return storiesLandingRepository.resend(story)
|
||||
}
|
||||
|
||||
fun setHideStory(sender: Recipient, hide: Boolean): Completable {
|
||||
return storiesLandingRepository.setHideStory(sender.id, hide)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.thoughtcrime.securesms.stories.my
|
||||
|
||||
import android.widget.Toast
|
||||
import androidx.fragment.app.viewModels
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.settings.DSLConfiguration
|
||||
@@ -56,8 +57,13 @@ class MyStoriesFragment : DSLSettingsFragment(
|
||||
MyStoriesItem.Model(
|
||||
distributionStory = conversationMessage,
|
||||
onClick = {
|
||||
// TODO [stories] pass in something more specific to start with the correct progress
|
||||
startActivity(StoryViewerActivity.createIntent(requireContext(), Recipient.self().id))
|
||||
if (it.distributionStory.messageRecord.isOutgoing && it.distributionStory.messageRecord.isFailed) {
|
||||
lifecycleDisposable += viewModel.resend(it.distributionStory.messageRecord).subscribe()
|
||||
Toast.makeText(requireContext(), R.string.message_recipients_list_item__resend, Toast.LENGTH_SHORT).show()
|
||||
} else {
|
||||
// TODO [stories] pass in something more specific to start with the correct progress
|
||||
startActivity(StoryViewerActivity.createIntent(requireContext(), Recipient.self().id))
|
||||
}
|
||||
},
|
||||
onSaveClick = {
|
||||
StoryContextMenu.save(requireContext(), it.distributionStory.messageRecord)
|
||||
|
||||
@@ -1,18 +1,27 @@
|
||||
package org.thoughtcrime.securesms.stories.my
|
||||
|
||||
import android.content.Context
|
||||
import io.reactivex.rxjava3.core.Completable
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage
|
||||
import org.thoughtcrime.securesms.database.DatabaseObserver
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.sms.MessageSender
|
||||
|
||||
class MyStoriesRepository(context: Context) {
|
||||
|
||||
private val context = context.applicationContext
|
||||
|
||||
fun resend(story: MessageRecord): Completable {
|
||||
return Completable.fromAction {
|
||||
MessageSender.resend(context, story)
|
||||
}.subscribeOn(Schedulers.io())
|
||||
}
|
||||
|
||||
fun getMyStories(): Observable<List<MyStoriesState.DistributionSet>> {
|
||||
return Observable.create { emitter ->
|
||||
fun refresh() {
|
||||
|
||||
@@ -3,8 +3,10 @@ package org.thoughtcrime.securesms.stories.my
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import io.reactivex.rxjava3.core.Completable
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||
import org.thoughtcrime.securesms.util.livedata.Store
|
||||
|
||||
class MyStoriesViewModel(private val repository: MyStoriesRepository) : ViewModel() {
|
||||
@@ -24,6 +26,10 @@ class MyStoriesViewModel(private val repository: MyStoriesRepository) : ViewMode
|
||||
disposables.clear()
|
||||
}
|
||||
|
||||
fun resend(story: MessageRecord): Completable {
|
||||
return repository.resend(story)
|
||||
}
|
||||
|
||||
class Factory(private val repository: MyStoriesRepository) : ViewModelProvider.Factory {
|
||||
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
|
||||
return modelClass.cast(MyStoriesViewModel(repository)) as T
|
||||
|
||||
Reference in New Issue
Block a user