Add first time in group check.
This commit is contained in:
parent
adb1e292bf
commit
9382bbd8fd
3 changed files with 43 additions and 0 deletions
|
@ -280,6 +280,7 @@ import org.thoughtcrime.securesms.util.BottomSheetUtil
|
|||
import org.thoughtcrime.securesms.util.BubbleUtil
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions
|
||||
import org.thoughtcrime.securesms.util.ContextUtil
|
||||
import org.thoughtcrime.securesms.util.ConversationUtil
|
||||
import org.thoughtcrime.securesms.util.DateUtils
|
||||
import org.thoughtcrime.securesms.util.Debouncer
|
||||
import org.thoughtcrime.securesms.util.DeleteDialog
|
||||
|
@ -602,6 +603,16 @@ class ConversationFragment :
|
|||
}
|
||||
|
||||
viewModel.updateIdentityRecordsInBackground()
|
||||
|
||||
if (args.isFirstTimeInSelfCreatedGroup) {
|
||||
conversationGroupViewModel.checkJustSelfInGroup().subscribeBy(
|
||||
onSuccess = {
|
||||
GroupLinkInviteFriendsBottomSheetDialogFragment.show(childFragmentManager, it)
|
||||
}
|
||||
).addTo(disposables)
|
||||
}
|
||||
|
||||
ConversationUtil.refreshRecipientShortcuts()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
|
|
|
@ -3,11 +3,13 @@ package org.thoughtcrime.securesms.conversation.v2.groups
|
|||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import io.reactivex.rxjava3.kotlin.addTo
|
||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import io.reactivex.rxjava3.subjects.BehaviorSubject
|
||||
import io.reactivex.rxjava3.subjects.Subject
|
||||
import org.signal.core.util.Result
|
||||
|
@ -15,6 +17,7 @@ import org.signal.core.util.concurrent.subscribeWithSubject
|
|||
import org.thoughtcrime.securesms.conversation.v2.ConversationRecipientRepository
|
||||
import org.thoughtcrime.securesms.database.GroupTable
|
||||
import org.thoughtcrime.securesms.database.model.GroupRecord
|
||||
import org.thoughtcrime.securesms.groups.GroupId
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason
|
||||
import org.thoughtcrime.securesms.groups.v2.GroupBlockJoinRequestResult
|
||||
import org.thoughtcrime.securesms.groups.v2.GroupManagementRepository
|
||||
|
@ -37,6 +40,8 @@ class ConversationGroupViewModel(
|
|||
private val _groupActiveState: Subject<ConversationGroupActiveState> = BehaviorSubject.create()
|
||||
private val _memberLevel: BehaviorSubject<ConversationGroupMemberLevel> = BehaviorSubject.create()
|
||||
|
||||
private var firstTimeInviteFriendsTriggered: Boolean = false
|
||||
|
||||
val groupRecordSnapshot: GroupRecord?
|
||||
get() = _groupRecord.value
|
||||
|
||||
|
@ -106,6 +111,27 @@ class ConversationGroupViewModel(
|
|||
.addTo(disposables)
|
||||
}
|
||||
|
||||
/**
|
||||
* Emits the group id if we are the only member of the group.
|
||||
*/
|
||||
fun checkJustSelfInGroup(): Maybe<GroupId.V2> {
|
||||
if (firstTimeInviteFriendsTriggered) {
|
||||
return Maybe.empty()
|
||||
}
|
||||
|
||||
firstTimeInviteFriendsTriggered = true
|
||||
|
||||
return _groupRecord
|
||||
.firstOrError()
|
||||
.flatMapMaybe { groupRecord ->
|
||||
groupManagementRepository.isJustSelf(groupRecord.id).flatMapMaybe {
|
||||
if (it && groupRecord.id.isV2) Maybe.just(groupRecord.id.requireV2()) else Maybe.empty()
|
||||
}
|
||||
}
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
}
|
||||
|
||||
class Factory(private val threadId: Long, private val recipientRepository: ConversationRecipientRepository) : ViewModelProvider.Factory {
|
||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
return modelClass.cast(ConversationGroupViewModel(threadId, recipientRepository = recipientRepository)) as T
|
||||
|
|
|
@ -106,4 +106,10 @@ class GroupManagementRepository @JvmOverloads constructor(private val context: C
|
|||
SignalDatabase.groups.removeUnmigratedV1Members(groupId)
|
||||
}.subscribeOn(Schedulers.io())
|
||||
}
|
||||
|
||||
fun isJustSelf(groupId: GroupId): Single<Boolean> {
|
||||
return Single.fromCallable {
|
||||
SignalDatabase.groups.requireGroup(groupId).members == listOf(Recipient.self().id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue