Update: Migrate Repos to use Compose solely

This commit is contained in:
machiav3lli 2022-05-03 03:26:35 +02:00
parent 123adea168
commit 96a133dbec

View File

@ -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<Repository>) {
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}")
})
}
}
}