kopia lustrzana https://github.com/ryukoposting/Signal-Android
Add support for message resends.
rodzic
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
|
||||
|
|
Ładowanie…
Reference in New Issue