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

View File

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