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 655bec8b..c30baf27 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt @@ -16,7 +16,11 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -24,8 +28,6 @@ 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.FragmentComposeBinding import com.looker.droidify.service.Connection import com.looker.droidify.service.SyncService import com.looker.droidify.ui.activities.PrefsActivityX @@ -38,7 +40,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch class PrefsRepositoriesFragment : BaseNavFragment() { - private lateinit var binding: FragmentComposeBinding + val viewModel: RepositoriesViewModelX by viewModels { RepositoriesViewModelX.Factory(prefsActivityX.db) } @@ -54,17 +56,13 @@ class PrefsRepositoriesFragment : BaseNavFragment() { savedInstanceState: Bundle?, ): View { super.onCreate(savedInstanceState) - binding = FragmentComposeBinding.inflate(inflater, container, false) - binding.lifecycleOwner = this - - return binding.root + return ComposeView(requireContext()).apply { + setContent { ReposPage() } + } } override fun setupLayout() { syncConnection.bind(requireContext()) - viewModel.repositories.observe(requireActivity()) { - redrawPage(it) - } viewModel.toLaunch.observe(viewLifecycleOwner) { if (it?.first == true) { EditRepositorySheetX(it.second) @@ -80,55 +78,56 @@ class PrefsRepositoriesFragment : BaseNavFragment() { } @OptIn(ExperimentalMaterial3Api::class) - fun redrawPage(repos: List) { - binding.composeView.setContent { - AppTheme( - darkTheme = when (Preferences[Preferences.Key.Theme]) { - is Preferences.Theme.System -> isSystemInDarkTheme() - is Preferences.Theme.AmoledSystem -> isSystemInDarkTheme() - else -> isDarkTheme - } - ) { - Scaffold { padding -> - Column( - modifier = Modifier.padding(padding) - ) { - OutlinedButton( - modifier = Modifier - .padding(8.dp) - .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) - ) - } + @Composable + fun ReposPage() { + val repos by viewModel.repositories.observeAsState(null) - RepositoriesRecycler( - repositoriesList = repos.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}") - }) + AppTheme( + darkTheme = when (Preferences[Preferences.Key.Theme]) { + is Preferences.Theme.System -> isSystemInDarkTheme() + is Preferences.Theme.AmoledSystem -> isSystemInDarkTheme() + else -> isDarkTheme + } + ) { + Scaffold { padding -> + Column( + modifier = Modifier.padding(padding) + ) { + OutlinedButton( + modifier = Modifier + .padding(8.dp) + .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 = repos?.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}") + }) } } }