diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2.kt index 2a88f2150b..27bb3df409 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2.kt @@ -23,6 +23,7 @@ import org.thoughtcrime.securesms.util.doOnEachLayout */ class InlineQueryResultsControllerV2( private val parentFragment: Fragment, + private val threadId: Long, private val viewModel: InlineQueryViewModelV2, private val anchor: View, private val container: ViewGroup, @@ -110,7 +111,7 @@ class InlineQueryResultsControllerV2( if (mentionFragment == null) { mentionFragment = parentFragment.childFragmentManager.findFragmentByTag(MENTION_TAG) as? MentionsPickerFragmentV2 if (mentionFragment == null) { - mentionFragment = MentionsPickerFragmentV2() + mentionFragment = MentionsPickerFragmentV2.create(threadId) parentFragment.childFragmentManager.commit { replace(R.id.mention_fragment_container, mentionFragment!!) runOnCommit { mentionFragment!!.updateList(results.results) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerFragmentV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerFragmentV2.kt index 02119b49fc..4ea61ee4ea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerFragmentV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerFragmentV2.kt @@ -6,7 +6,7 @@ import android.os.Looper import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.viewModels +import androidx.core.os.bundleOf import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetBehavior @@ -17,9 +17,11 @@ import org.signal.core.util.concurrent.addTo import org.thoughtcrime.securesms.LoggingFragment import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.conversation.ui.inlinequery.InlineQueryViewModelV2 +import org.thoughtcrime.securesms.conversation.v2.ConversationRecipientRepository import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.VibrateUtil import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel +import org.thoughtcrime.securesms.util.viewModel import org.thoughtcrime.securesms.util.viewholders.RecipientViewHolder /** @@ -27,9 +29,27 @@ import org.thoughtcrime.securesms.util.viewholders.RecipientViewHolder */ class MentionsPickerFragmentV2 : LoggingFragment() { + companion object { + + private val THREAD_ID = "thread.id" + + fun create(threadId: Long): MentionsPickerFragmentV2 { + return MentionsPickerFragmentV2().apply { + arguments = bundleOf(THREAD_ID to threadId) + } + } + } + private val lifecycleDisposable: LifecycleDisposable = LifecycleDisposable() - private val viewModel: InlineQueryViewModelV2 by viewModels( - ownerProducer = { requireParentFragment() } + + private val conversationRecipientRepository: ConversationRecipientRepository by viewModel( + ownerProducer = { requireParentFragment() }, + create = { ConversationRecipientRepository(requireArguments().getLong(THREAD_ID)) } + ) + + private val viewModel: InlineQueryViewModelV2 by viewModel( + ownerProducer = { requireParentFragment() }, + create = { InlineQueryViewModelV2(conversationRecipientRepository) } ) private lateinit var adapter: MentionsPickerAdapter diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index a01020d050..07c37ad42f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -420,7 +420,7 @@ class ConversationFragment : ConversationIntents.readArgsFromBundle(requireArguments()) } - private val conversationRecipientRepository: ConversationRecipientRepository by lazy { + private val conversationRecipientRepository: ConversationRecipientRepository by viewModel { ConversationRecipientRepository(args.threadId) } @@ -513,6 +513,7 @@ class ConversationFragment : private val inlineQueryController: InlineQueryResultsControllerV2 by lazy { InlineQueryResultsControllerV2( this, + args.threadId, inlineQueryViewModel, inputPanel, (requireView() as ViewGroup), diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository.kt index bdd4662dbb..c0623d8d88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.conversation.v2 +import androidx.lifecycle.ViewModel import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers @@ -8,7 +9,7 @@ import org.thoughtcrime.securesms.database.model.GroupRecord import org.thoughtcrime.securesms.recipients.Recipient import java.util.Optional -class ConversationRecipientRepository(threadId: Long) { +class ConversationRecipientRepository(threadId: Long) : ViewModel() { val conversationRecipient: Observable by lazy { val threadRecipientId = Single.fromCallable { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ViewModelFactory.kt b/app/src/main/java/org/thoughtcrime/securesms/util/ViewModelFactory.kt index 8d64ccba68..1b5e152ed9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ViewModelFactory.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ViewModelFactory.kt @@ -8,6 +8,7 @@ import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.ViewModelStoreOwner import androidx.lifecycle.viewmodel.CreationExtras /** @@ -42,9 +43,11 @@ inline fun ComponentActivity.viewModel( @MainThread inline fun Fragment.viewModel( + noinline ownerProducer: () -> ViewModelStoreOwner = { this }, noinline create: (CreationExtras) -> VM ): Lazy { return viewModels( + ownerProducer = ownerProducer, factoryProducer = ViewModelFactory.factoryProducer(create) ) }