From bffcbea4ced2f91d31d79052eeeff313d9a55b6d Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Tue, 12 Apr 2022 18:16:34 +0200 Subject: [PATCH] Update: Migrate PrefRepo to Compose --- .../ui/fragments/PrefsRepositoriesFragment.kt | 72 ++++++++++++++----- .../res/layout/fragment_repositories_x.xml | 26 ++----- 2 files changed, 60 insertions(+), 38 deletions(-) diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt index b9072545..860ad66d 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt @@ -5,9 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material.Scaffold +import androidx.compose.foundation.layout.* +import androidx.compose.material3.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import androidx.fragment.app.viewModels +import com.looker.droidify.R import com.looker.droidify.content.Preferences +import com.looker.droidify.database.entity.Repository import com.looker.droidify.databinding.FragmentRepositoriesXBinding import com.looker.droidify.service.Connection import com.looker.droidify.service.SyncService @@ -45,19 +53,54 @@ class PrefsRepositoriesFragment : BaseNavFragment() { override fun setupLayout() { syncConnection.bind(requireContext()) - binding.addRepository.setOnClickListener { viewModel.addRepository() } viewModel.repositories.observe(requireActivity()) { - binding.reposRecycler.setContent { - AppTheme( - darkTheme = when (Preferences[Preferences.Key.Theme]) { - is Preferences.Theme.System -> isSystemInDarkTheme() - is Preferences.Theme.AmoledSystem -> isSystemInDarkTheme() - else -> isDarkTheme - } - ) { - Scaffold { _ -> + redrawPage(it) + } + } + + override fun onDestroyView() { + super.onDestroyView() + syncConnection.unbind(requireContext()) + } + + @OptIn(ExperimentalMaterial3Api::class) + fun redrawPage(repos: List) { + binding.reposRecycler.setContent { + AppTheme( + darkTheme = when (Preferences[Preferences.Key.Theme]) { + is Preferences.Theme.System -> isSystemInDarkTheme() + is Preferences.Theme.AmoledSystem -> isSystemInDarkTheme() + else -> isDarkTheme + } + ) { + Scaffold { + Column( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.Absolute.spacedBy(4.dp) + ) { + OutlinedButton( + modifier = Modifier.fillMaxWidth(), + contentPadding = PaddingValues(12.dp), + colors = ButtonDefaults.outlinedButtonColors( + contentColor = MaterialTheme.colorScheme.primary, + containerColor = MaterialTheme.colorScheme.background + ), + onClick = { viewModel.addRepository() } + ) { + Text( + modifier = Modifier.weight(1f), + text = stringResource(id = R.string.add_repository), + textAlign = TextAlign.Center, + style = MaterialTheme.typography.titleSmall + ) + Icon( + painter = painterResource(id = R.drawable.ic_add), + contentDescription = stringResource(id = R.string.add_repository) + ) + } + RepositoriesRecycler( - repositoriesList = it.sortedBy { repo -> !repo.enabled }, + repositoriesList = repos.sortedBy { repo -> !repo.enabled }, onClick = { repo -> repo.enabled = !repo.enabled GlobalScope.launch(Dispatchers.IO) { @@ -73,9 +116,4 @@ class PrefsRepositoriesFragment : BaseNavFragment() { } } } - - override fun onDestroyView() { - super.onDestroyView() - syncConnection.unbind(requireContext()) - } } diff --git a/src/main/res/layout/fragment_repositories_x.xml b/src/main/res/layout/fragment_repositories_x.xml index d5b10359..7010967d 100644 --- a/src/main/res/layout/fragment_repositories_x.xml +++ b/src/main/res/layout/fragment_repositories_x.xml @@ -23,29 +23,13 @@ + android:layout_height="match_parent" + android:orientation="vertical"> - - - - - - + android:layout_height="match_parent" />