Add first time in group check.

This commit is contained in:
Alex Hart 2023-08-04 13:23:43 -03:00
parent adb1e292bf
commit 9382bbd8fd
3 changed files with 43 additions and 0 deletions

View file

@ -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() {

View file

@ -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

View file

@ -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)
}
}
}