Add: New adapters to InstalledFragment

This commit is contained in:
machiav3lli 2021-12-26 02:41:18 +01:00
parent 6b49062093
commit 113cb9864d
2 changed files with 40 additions and 16 deletions

View File

@ -6,31 +6,37 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager
import com.looker.droidify.R
import androidx.recyclerview.widget.RecyclerView
import com.looker.droidify.database.CursorOwner
import com.looker.droidify.databinding.FragmentInstalledXBinding
import com.looker.droidify.ui.adapters.AppListAdapter
import com.looker.droidify.entity.ProductItem
import com.looker.droidify.entity.Repository
import com.looker.droidify.ui.items.HAppItem
import com.looker.droidify.ui.items.VAppItem
import com.looker.droidify.ui.viewmodels.MainNavFragmentViewModelX
import com.looker.droidify.utility.RxUtils
import com.looker.droidify.widget.RecyclerFastScroller
import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.adapters.ItemAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.disposables.Disposable
import io.reactivex.rxjava3.schedulers.Schedulers
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
override val viewModel: MainNavFragmentViewModelX by viewModels()
private lateinit var binding: FragmentInstalledXBinding
private val installedItemAdapter = ItemAdapter<VAppItem>()
private var installedFastAdapter: FastAdapter<VAppItem>? = null
private val updatedItemAdapter = ItemAdapter<HAppItem>()
private var updatedFastAdapter: FastAdapter<HAppItem>? = null
override val source = Source.INSTALLED
private var repositories: Map<Long, Repository> = mapOf()
private var repositoriesDisposable: Disposable? = null
override fun onCreateView(
@ -42,11 +48,22 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
binding = FragmentInstalledXBinding.inflate(inflater, container, false)
binding.lifecycleOwner = this
binding.recyclerView.apply {
layoutManager = LinearLayoutManager(context)
installedFastAdapter = FastAdapter.with(installedItemAdapter)
installedFastAdapter?.setHasStableIds(true)
binding.installedRecycler.apply {
layoutManager = LinearLayoutManager(requireContext())
isMotionEventSplittingEnabled = false
isVerticalScrollBarEnabled = false
adapter = AppListAdapter { mainActivityX.navigateProduct(it.packageName) }
adapter = installedFastAdapter
RecyclerFastScroller(this)
}
updatedFastAdapter = FastAdapter.with(updatedItemAdapter)
updatedFastAdapter?.setHasStableIds(true)
binding.updatedRecycler.apply {
layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false)
isMotionEventSplittingEnabled = false
isVerticalScrollBarEnabled = false
adapter = updatedFastAdapter
RecyclerFastScroller(this)
}
return binding.root
@ -62,7 +79,7 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
.flatMapSingle { RxUtils.querySingle { mainActivityX.db.repositoryDao.all.mapNotNull { it.trueData } } }
.map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() }
.observeOn(AndroidSchedulers.mainThread())
.subscribe { (binding.recyclerView.adapter as? AppListAdapter)?.repositories = it }
.subscribe { repositories = it }
}
override fun onDestroyView() {
@ -74,9 +91,16 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
}
override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) {
// TODO create app list out of cursor and use those on the different RecycleViews
(binding.recyclerView.adapter as? AppListAdapter)?.apply {
this.cursor = cursor
// TODO get a list instead of the cursor
// TODO use LiveData and observers instead of listeners
val appItemList: List<ProductItem> = listOf()
installedItemAdapter.set(appItemList
.map { VAppItem(it, repositories[it.repositoryId]) }
)
updatedItemAdapter.set(appItemList.filter { it.canUpdate }
.map { HAppItem(it, repositories[it.repositoryId]) }
)
/*
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.RESUMED) {
emptyText = when {
@ -87,6 +111,6 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
}
}
}
}
*/
}
}

View File

@ -130,7 +130,7 @@
app:layout_constraintTop_toBottomOf="@id/modeBar">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:id="@+id/installedRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"