diff options
| author | Harsh Shandilya <me@msfjarvis.dev> | 2021-05-15 12:53:31 +0530 |
|---|---|---|
| committer | Harsh Shandilya <me@msfjarvis.dev> | 2021-05-15 15:48:05 +0530 |
| commit | 285bf9d92944c49c36d1828bc388b12a97525b1a (patch) | |
| tree | 1c51ef43afb30a38cd4334a13ac1126ae32e673d /app/src/main/java/dev/msfjarvis/aps/util | |
| parent | cdf8e76ac66aca46f2fbfcbc239731c19eb6bec9 (diff) | |
| download | HardenedPass-285bf9d92944c49c36d1828bc388b12a97525b1a.tar.gz HardenedPass-285bf9d92944c49c36d1828bc388b12a97525b1a.zip | |
Move file reads in RV adapters to a background dispatcher
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
Diffstat (limited to 'app/src/main/java/dev/msfjarvis/aps/util')
| -rw-r--r-- | app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt b/app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt index 7106dbe3..f2d0dc64 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt @@ -36,6 +36,7 @@ import java.io.File import java.text.Collator import java.util.Locale import java.util.Stack +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.FlowPreview @@ -48,6 +49,7 @@ import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.toList +import kotlinx.coroutines.launch import kotlinx.coroutines.yield import me.zhanghai.android.fastscroll.PopupTextProvider @@ -376,7 +378,8 @@ private object PasswordItemDiffCallback : DiffUtil.ItemCallback<PasswordItem>() open class SearchableRepositoryAdapter<T : RecyclerView.ViewHolder>( private val layoutRes: Int, private val viewHolderCreator: (view: View) -> T, - private val viewHolderBinder: T.(item: PasswordItem) -> Unit + private val coroutineScope: CoroutineScope, + private val viewHolderBinder: suspend T.(item: PasswordItem) -> Unit, ) : ListAdapter<PasswordItem, T>(PasswordItemDiffCallback), PopupTextProvider { fun <T : ItemDetailsLookup<String>> makeSelectable( @@ -454,7 +457,7 @@ open class SearchableRepositoryAdapter<T : RecyclerView.ViewHolder>( final override fun onBindViewHolder(holder: T, position: Int) { val item = getItem(position) holder.apply { - viewHolderBinder.invoke(this, item) + coroutineScope.launch(Dispatchers.Main.immediate) { viewHolderBinder.invoke(holder, item) } selectionTracker?.let { itemView.isSelected = it.isSelected(item.stableId) } itemView.setOnClickListener { // Do not emit custom click events while the user is selecting items. |
