From 113cb9864d139a212afd85264d94a3bcc66057fb Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Sun, 26 Dec 2021 02:41:18 +0100 Subject: [PATCH] Add: New adapters to InstalledFragment --- .../ui/fragments/InstalledFragment.kt | 54 +++++++++++++------ src/main/res/layout/fragment_installed_x.xml | 2 +- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt index acc819b9..c2df2c3b 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt @@ -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() + private var installedFastAdapter: FastAdapter? = null + private val updatedItemAdapter = ItemAdapter() + private var updatedFastAdapter: FastAdapter? = null + override val source = Source.INSTALLED + private var repositories: Map = 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 = 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 { } } } - } + */ } } diff --git a/src/main/res/layout/fragment_installed_x.xml b/src/main/res/layout/fragment_installed_x.xml index 92aedc5f..9bea4a68 100644 --- a/src/main/res/layout/fragment_installed_x.xml +++ b/src/main/res/layout/fragment_installed_x.xml @@ -130,7 +130,7 @@ app:layout_constraintTop_toBottomOf="@id/modeBar">