Add: New adapters to LatestFragment

This commit is contained in:
machiav3lli 2021-12-26 02:41:34 +01:00
parent 113cb9864d
commit 292b4ae9c3
2 changed files with 43 additions and 20 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.FragmentLatestXBinding import com.looker.droidify.databinding.FragmentLatestXBinding
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 LatestFragment : MainNavFragmentX(), CursorOwner.Callback { class LatestFragment : MainNavFragmentX(), CursorOwner.Callback {
override val viewModel: MainNavFragmentViewModelX by viewModels() override val viewModel: MainNavFragmentViewModelX by viewModels()
private lateinit var binding: FragmentLatestXBinding private lateinit var binding: FragmentLatestXBinding
override val source = Source.UPDATES private val updatedItemAdapter = ItemAdapter<VAppItem>()
private var updatedFastAdapter: FastAdapter<VAppItem>? = null
private val newItemAdapter = ItemAdapter<HAppItem>()
private var newFastAdapter: FastAdapter<HAppItem>? = null
override val source = Source.AVAILABLE
private var repositories: Map<Long, Repository> = mapOf()
private var repositoriesDisposable: Disposable? = null private var repositoriesDisposable: Disposable? = null
override fun onCreateView( override fun onCreateView(
@ -42,12 +48,22 @@ class LatestFragment : MainNavFragmentX(), CursorOwner.Callback {
binding = FragmentLatestXBinding.inflate(inflater, container, false) binding = FragmentLatestXBinding.inflate(inflater, container, false)
binding.lifecycleOwner = this binding.lifecycleOwner = this
binding.recyclerView.apply { updatedFastAdapter = FastAdapter.with(updatedItemAdapter)
id = android.R.id.list updatedFastAdapter?.setHasStableIds(true)
layoutManager = LinearLayoutManager(context) binding.updatedRecycler.apply {
layoutManager = LinearLayoutManager(requireContext())
isMotionEventSplittingEnabled = false isMotionEventSplittingEnabled = false
isVerticalScrollBarEnabled = false isVerticalScrollBarEnabled = false
adapter = AppListAdapter { mainActivityX.navigateProduct(it.packageName) } adapter = updatedFastAdapter
RecyclerFastScroller(this)
}
newFastAdapter = FastAdapter.with(newItemAdapter)
newFastAdapter?.setHasStableIds(true)
binding.newRecycler.apply {
layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false)
isMotionEventSplittingEnabled = false
isVerticalScrollBarEnabled = false
adapter = newFastAdapter
RecyclerFastScroller(this) RecyclerFastScroller(this)
} }
return binding.root return binding.root
@ -63,7 +79,7 @@ class LatestFragment : 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() {
@ -75,9 +91,16 @@ class LatestFragment : 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()
updatedItemAdapter.set(appItemList // .filter { !it.hasOneRelease }
.map { VAppItem(it, repositories[it.repositoryId]) }
)
newItemAdapter.set(appItemList // .filter { it.hasOneRelease }
.map { HAppItem(it, repositories[it.repositoryId]) }
)
/*
lifecycleScope.launch { lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.RESUMED) { repeatOnLifecycle(Lifecycle.State.RESUMED) {
emptyText = when { emptyText = when {
@ -88,6 +111,6 @@ class LatestFragment : MainNavFragmentX(), CursorOwner.Callback {
} }
} }
} }
} */
} }
} }

View File

@ -44,12 +44,12 @@
android:layout_marginHorizontal="12dp" android:layout_marginHorizontal="12dp"
android:layout_marginVertical="14dp" android:layout_marginVertical="14dp"
android:text="@string/new_applications" android:text="@string/new_applications"
app:layout_constraintBottom_toTopOf="@id/updatedRecycler" app:layout_constraintBottom_toTopOf="@id/newRecycler"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/updatedRecycler" android:id="@+id/newRecycler"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipToPadding="false" android:clipToPadding="false"
@ -112,7 +112,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/updatedRecycler"
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"