mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-06-20 06:09:19 +00:00
Update: Replace traditional recycler with compose lazylist repositories fragment
This commit is contained in:
@ -4,25 +4,24 @@ import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.material.Scaffold
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.looker.droidify.content.Preferences
|
||||
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.compose.RepositoriesRecycler
|
||||
import com.looker.droidify.ui.compose.theme.AppTheme
|
||||
import com.looker.droidify.ui.viewmodels.RepositoriesViewModelX
|
||||
import com.mikepenz.fastadapter.FastAdapter
|
||||
import com.mikepenz.fastadapter.IAdapter
|
||||
import com.mikepenz.fastadapter.adapters.ItemAdapter
|
||||
import com.looker.droidify.utility.isDarkTheme
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class PrefsRepositoriesFragment : BaseNavFragment() {
|
||||
private lateinit var binding: FragmentRepositoriesXBinding
|
||||
private val reposItemAdapter = ItemAdapter<RepoItem>()
|
||||
private var reposFastAdapter: FastAdapter<RepoItem>? = null
|
||||
val viewModel: RepositoriesViewModelX by viewModels {
|
||||
RepositoriesViewModelX.Factory(prefsActivityX.db)
|
||||
}
|
||||
@ -46,53 +45,35 @@ class PrefsRepositoriesFragment : BaseNavFragment() {
|
||||
|
||||
override fun setupAdapters() {
|
||||
syncConnection.bind(requireContext())
|
||||
|
||||
reposFastAdapter = FastAdapter.with(reposItemAdapter)
|
||||
reposFastAdapter?.setHasStableIds(false)
|
||||
|
||||
reposFastAdapter?.onClickListener =
|
||||
{ _: View?, _: IAdapter<RepoItem>?, item: RepoItem?, _: Int? ->
|
||||
item?.item?.let {
|
||||
it.enabled = !it.enabled
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
syncConnection.binder?.setEnabled(it, it.enabled)
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
reposFastAdapter?.onLongClickListener =
|
||||
{ _: View?, _: IAdapter<RepoItem>?, item: RepoItem?, _: Int? ->
|
||||
item?.item?.let {
|
||||
RepositorySheetX(it.id)
|
||||
.showNow(parentFragmentManager, "Repository ${it.id}")
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
binding.recyclerView.apply {
|
||||
layoutManager = LinearLayoutManager(context)
|
||||
adapter = reposFastAdapter
|
||||
}
|
||||
binding.addRepository.setOnClickListener { viewModel.addRepository() }
|
||||
}
|
||||
|
||||
override fun setupLayout() {
|
||||
viewModel.repositories.observe(requireActivity()) {
|
||||
// Function: sync when an enabled repo got edited
|
||||
val enabledList = it.filter { it.enabled }
|
||||
reposItemAdapter.adapterItems.filter(RepoItem::isEnabled).forEach { item ->
|
||||
enabledList.firstOrNull { it.id == item.item.id }?.let { repo ->
|
||||
repo.let { data ->
|
||||
if (data != item.item) syncConnection.binder?.sync(data)
|
||||
binding.reposRecycler.setContent {
|
||||
AppTheme(
|
||||
darkTheme = when (Preferences[Preferences.Key.Theme]) {
|
||||
is Preferences.Theme.System -> isSystemInDarkTheme()
|
||||
is Preferences.Theme.AmoledSystem -> isSystemInDarkTheme()
|
||||
else -> isDarkTheme
|
||||
}
|
||||
) {
|
||||
Scaffold { _ ->
|
||||
RepositoriesRecycler(
|
||||
repositoriesList = it.sortedBy { repo -> !repo.enabled },
|
||||
onClick = { repo ->
|
||||
repo.enabled = !repo.enabled
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
syncConnection.binder?.setEnabled(repo, repo.enabled)
|
||||
}
|
||||
},
|
||||
onLongClick = { repo ->
|
||||
RepositorySheetX(repo.id)
|
||||
.showNow(parentFragmentManager, "Repository ${repo.id}")
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
reposItemAdapter.set(
|
||||
it.sortedBy { repo -> !repo.enabled }
|
||||
.mapNotNull { dbRepo ->
|
||||
RepoItem(dbRepo)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user