Prevent forwarding to announcement groups in new forward fragment.
This commit is contained in:
parent
c1fb4f9421
commit
307f47fa33
3 changed files with 45 additions and 5 deletions
|
@ -18,6 +18,8 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.ContactSelectionListFragment
|
||||
import org.thoughtcrime.securesms.R
|
||||
|
@ -33,6 +35,7 @@ import org.thoughtcrime.securesms.sharing.MultiShareArgs
|
|||
import org.thoughtcrime.securesms.sharing.ShareSelectionAdapter
|
||||
import org.thoughtcrime.securesms.util.BottomSheetUtil
|
||||
import org.thoughtcrime.securesms.util.FeatureFlags
|
||||
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
||||
import org.thoughtcrime.securesms.util.Util
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog
|
||||
|
@ -53,6 +56,7 @@ class MultiselectForwardFragment :
|
|||
override val peekHeightPercentage: Float = 0.67f
|
||||
|
||||
private val viewModel: MultiselectForwardViewModel by viewModels(factoryProducer = this::createViewModelFactory)
|
||||
private val disposables = LifecycleDisposable()
|
||||
|
||||
private lateinit var selectionFragment: ContactSelectionListFragment
|
||||
private lateinit var contactFilterView: ContactFilterView
|
||||
|
@ -93,6 +97,7 @@ class MultiselectForwardFragment :
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
callback = requireNotNull(findListener())
|
||||
disposables.bindTo(viewLifecycleOwner.lifecycle)
|
||||
|
||||
selectionFragment = childFragmentManager.findFragmentById(R.id.contact_selection_list_fragment) as ContactSelectionListFragment
|
||||
|
||||
|
@ -249,9 +254,18 @@ class MultiselectForwardFragment :
|
|||
|
||||
override fun onBeforeContactSelected(recipientId: Optional<RecipientId>, number: String?, callback: Consumer<Boolean>) {
|
||||
if (recipientId.isPresent) {
|
||||
viewModel.addSelectedContact(recipientId, null)
|
||||
callback.accept(true)
|
||||
contactFilterView.clear()
|
||||
disposables.add(
|
||||
viewModel.addSelectedContact(recipientId, null)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe { success ->
|
||||
if (!success) {
|
||||
Toast.makeText(requireContext(), R.string.ShareActivity_you_do_not_have_permission_to_send_to_this_group, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
callback.accept(success)
|
||||
contactFilterView.clear()
|
||||
}
|
||||
)
|
||||
} else {
|
||||
Log.w(TAG, "Rejecting non-present recipient. Can't forward to an unknown contact.")
|
||||
callback.accept(false)
|
||||
|
|
|
@ -2,16 +2,19 @@ package org.thoughtcrime.securesms.conversation.mutiselect.forward
|
|||
|
||||
import android.content.Context
|
||||
import androidx.core.util.Consumer
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import org.signal.core.util.concurrent.SignalExecutors
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||
import org.thoughtcrime.securesms.database.IdentityDatabase
|
||||
import org.thoughtcrime.securesms.database.ThreadDatabase
|
||||
import org.thoughtcrime.securesms.database.identity.IdentityRecordList
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.sharing.MultiShareArgs
|
||||
import org.thoughtcrime.securesms.sharing.MultiShareSender
|
||||
import org.thoughtcrime.securesms.sharing.ShareContact
|
||||
import org.thoughtcrime.securesms.sharing.ShareContactAndThread
|
||||
import org.whispersystems.libsignal.util.guava.Optional
|
||||
|
||||
class MultiselectForwardRepository(context: Context) {
|
||||
|
||||
|
@ -33,6 +36,22 @@ class MultiselectForwardRepository(context: Context) {
|
|||
}
|
||||
}
|
||||
|
||||
fun canSelectRecipient(recipientId: Optional<RecipientId>): Single<Boolean> {
|
||||
if (!recipientId.isPresent) {
|
||||
return Single.just(true)
|
||||
}
|
||||
|
||||
return Single.fromCallable {
|
||||
val recipient = Recipient.resolved(recipientId.get())
|
||||
if (recipient.isPushV2Group) {
|
||||
val record = DatabaseFactory.getGroupDatabase(context).getGroup(recipient.requireGroupId())
|
||||
!(record.isPresent && record.get().isAnnouncementGroup && !record.get().isAdmin(Recipient.self()))
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun send(
|
||||
additionalMessage: String,
|
||||
multiShareArgs: List<MultiShareArgs>,
|
||||
|
|
|
@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
|
|||
import androidx.lifecycle.Transformations
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.sharing.MultiShareArgs
|
||||
|
@ -23,8 +24,14 @@ class MultiselectForwardViewModel(
|
|||
|
||||
val shareContactMappingModels: LiveData<List<ShareSelectionMappingModel>> = Transformations.map(state) { s -> s.selectedContacts.mapIndexed { i, c -> ShareSelectionMappingModel(c, i == 0) } }
|
||||
|
||||
fun addSelectedContact(recipientId: Optional<RecipientId>, number: String?) {
|
||||
store.update { it.copy(selectedContacts = it.selectedContacts + ShareContact(recipientId, number)) }
|
||||
fun addSelectedContact(recipientId: Optional<RecipientId>, number: String?): Single<Boolean> {
|
||||
return repository
|
||||
.canSelectRecipient(recipientId)
|
||||
.doOnSuccess { allowed ->
|
||||
if (allowed) {
|
||||
store.update { it.copy(selectedContacts = it.selectedContacts + ShareContact(recipientId, number)) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun removeSelectedContact(recipientId: Optional<RecipientId>, number: String?) {
|
||||
|
|
Loading…
Add table
Reference in a new issue