From fe59f50e36155cc81275c8c1a3374d32316ba332 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Tue, 18 Jan 2022 01:51:53 +0100 Subject: [PATCH] Add: The new repositories fragment --- .../com/looker/droidify/database/DAOs.kt | 4 ++ .../ui/fragments/PrefsRepositoriesFragment.kt | 71 +++++++++++++++++++ .../ui/viewmodels/RepositoriesViewModelX.kt | 26 +++++++ .../res/layout/fragment_repositories_x.xml | 46 ++++++++++++ 4 files changed, 147 insertions(+) create mode 100644 src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt create mode 100644 src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt create mode 100644 src/main/res/layout/fragment_repositories_x.xml diff --git a/src/main/kotlin/com/looker/droidify/database/DAOs.kt b/src/main/kotlin/com/looker/droidify/database/DAOs.kt index a5afc319..0703980c 100644 --- a/src/main/kotlin/com/looker/droidify/database/DAOs.kt +++ b/src/main/kotlin/com/looker/droidify/database/DAOs.kt @@ -2,6 +2,7 @@ package com.looker.droidify.database import android.database.Cursor import android.os.CancellationSignal +import androidx.lifecycle.LiveData import androidx.paging.DataSource import androidx.room.* import androidx.sqlite.db.SimpleSQLiteQuery @@ -55,6 +56,9 @@ interface RepositoryDao : BaseDao { @get:Query("SELECT * FROM repository WHERE deleted == 0 ORDER BY _id ASC") val all: List + @get:Query("SELECT * FROM repository WHERE deleted == 0 ORDER BY _id ASC") + val allLive: LiveData> + @get:Query("SELECT * FROM repository WHERE deleted == 0 ORDER BY _id ASC") val allFlowable: Flowable> diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt new file mode 100644 index 00000000..6a3b6d7d --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt @@ -0,0 +1,71 @@ +package com.looker.droidify.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.looker.droidify.databinding.FragmentRepositoriesXBinding +import com.looker.droidify.service.Connection +import com.looker.droidify.service.SyncService +import com.looker.droidify.ui.activities.PrefsActivityX +import com.looker.droidify.ui.items.RepoItem +import com.looker.droidify.ui.viewmodels.RepositoriesViewModelX +import com.mikepenz.fastadapter.FastAdapter +import com.mikepenz.fastadapter.adapters.ItemAdapter + +class PrefsRepositoriesFragment : BaseNavFragment() { + private lateinit var binding: FragmentRepositoriesXBinding + private val reposItemAdapter = ItemAdapter() + private var reposFastAdapter: FastAdapter? = null + val viewModel: RepositoriesViewModelX by viewModels { + RepositoriesViewModelX.Factory(prefsActivityX.db) + } + + private val prefsActivityX: PrefsActivityX + get() = requireActivity() as PrefsActivityX + + private val syncConnection = Connection(SyncService::class.java) + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View { + super.onCreate(savedInstanceState) + binding = FragmentRepositoriesXBinding.inflate(inflater, container, false) + binding.lifecycleOwner = this + + return binding.root + } + + override fun setupAdapters() { + syncConnection.bind(requireContext()) + + reposFastAdapter = FastAdapter.with(reposItemAdapter) + reposFastAdapter?.setHasStableIds(false) + + binding.recyclerView.apply { + layoutManager = LinearLayoutManager(context) + adapter = reposFastAdapter + } + } + + override fun setupLayout() { + viewModel.productsList.observe(requireActivity()) { + reposItemAdapter.set( + it.mapNotNull { dbRepo -> + dbRepo.trueData?.let { repo -> + RepoItem(repo) + } + } + ) + } + } + + override fun onDestroyView() { + super.onDestroyView() + syncConnection.unbind(requireContext()) + } +} diff --git a/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt b/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt new file mode 100644 index 00000000..637f26cc --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt @@ -0,0 +1,26 @@ +package com.looker.droidify.ui.viewmodels + +import androidx.lifecycle.MediatorLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import com.looker.droidify.database.DatabaseX +import com.looker.droidify.database.Repository + +class RepositoriesViewModelX(val db: DatabaseX) : ViewModel() { + + val productsList = MediatorLiveData>() + + init { + productsList.addSource(db.repositoryDao.allLive, productsList::setValue) + } + + class Factory(val db: DatabaseX) : ViewModelProvider.Factory { + @Suppress("unchecked_cast") + override fun create(modelClass: Class): T { + if (modelClass.isAssignableFrom(RepositoriesViewModelX::class.java)) { + return RepositoriesViewModelX(db) as T + } + throw IllegalArgumentException("Unknown ViewModel class") + } + } +} diff --git a/src/main/res/layout/fragment_repositories_x.xml b/src/main/res/layout/fragment_repositories_x.xml new file mode 100644 index 00000000..1e2fa5fc --- /dev/null +++ b/src/main/res/layout/fragment_repositories_x.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + +