mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 00:59:49 +01:00
Fix crash when entering convo with mention in draft.
This commit is contained in:
@@ -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) }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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<Recipient> by lazy {
|
||||
val threadRecipientId = Single.fromCallable {
|
||||
|
||||
@@ -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 <reified VM : ViewModel> ComponentActivity.viewModel(
|
||||
|
||||
@MainThread
|
||||
inline fun <reified VM : ViewModel> Fragment.viewModel(
|
||||
noinline ownerProducer: () -> ViewModelStoreOwner = { this },
|
||||
noinline create: (CreationExtras) -> VM
|
||||
): Lazy<VM> {
|
||||
return viewModels(
|
||||
ownerProducer = ownerProducer,
|
||||
factoryProducer = ViewModelFactory.factoryProducer(create)
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user