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.OutlinedButton
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text 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.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
@ -24,8 +28,6 @@ import androidx.compose.ui.unit.dp
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.looker.droidify.R import com.looker.droidify.R
import com.looker.droidify.content.Preferences 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.Connection
import com.looker.droidify.service.SyncService import com.looker.droidify.service.SyncService
import com.looker.droidify.ui.activities.PrefsActivityX import com.looker.droidify.ui.activities.PrefsActivityX
@ -38,7 +40,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class PrefsRepositoriesFragment : BaseNavFragment() { class PrefsRepositoriesFragment : BaseNavFragment() {
private lateinit var binding: FragmentComposeBinding
val viewModel: RepositoriesViewModelX by viewModels { val viewModel: RepositoriesViewModelX by viewModels {
RepositoriesViewModelX.Factory(prefsActivityX.db) RepositoriesViewModelX.Factory(prefsActivityX.db)
} }
@ -54,17 +56,13 @@ class PrefsRepositoriesFragment : BaseNavFragment() {
savedInstanceState: Bundle?, savedInstanceState: Bundle?,
): View { ): View {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = FragmentComposeBinding.inflate(inflater, container, false) return ComposeView(requireContext()).apply {
binding.lifecycleOwner = this setContent { ReposPage() }
}
return binding.root
} }
override fun setupLayout() { override fun setupLayout() {
syncConnection.bind(requireContext()) syncConnection.bind(requireContext())
viewModel.repositories.observe(requireActivity()) {
redrawPage(it)
}
viewModel.toLaunch.observe(viewLifecycleOwner) { viewModel.toLaunch.observe(viewLifecycleOwner) {
if (it?.first == true) { if (it?.first == true) {
EditRepositorySheetX(it.second) EditRepositorySheetX(it.second)
@ -80,55 +78,56 @@ class PrefsRepositoriesFragment : BaseNavFragment() {
} }
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
fun redrawPage(repos: List<Repository>) { @Composable
binding.composeView.setContent { fun ReposPage() {
AppTheme( val repos by viewModel.repositories.observeAsState(null)
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( AppTheme(
repositoriesList = repos.sortedBy { repo -> !repo.enabled }, darkTheme = when (Preferences[Preferences.Key.Theme]) {
onClick = { repo -> is Preferences.Theme.System -> isSystemInDarkTheme()
repo.enabled = !repo.enabled is Preferences.Theme.AmoledSystem -> isSystemInDarkTheme()
GlobalScope.launch(Dispatchers.IO) { else -> isDarkTheme
syncConnection.binder?.setEnabled(repo, repo.enabled) }
} ) {
}, Scaffold { padding ->
onLongClick = { repo -> Column(
RepositorySheetX(repo.id) modifier = Modifier.padding(padding)
.showNow(parentFragmentManager, "Repository ${repo.id}") ) {
}) 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}")
})
} }
} }
} }