Add: PrefsRepos Page

This commit is contained in:
machiav3lli 2022-09-16 14:34:25 +02:00
parent da7b615e3f
commit 088512816a

View File

@ -1,6 +1,7 @@
package com.machiav3lli.fdroid.ui.compose.pages.settings.repository
package com.machiav3lli.fdroid.ui.pages
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Add
import androidx.compose.material3.ExperimentalMaterial3Api
@ -9,19 +10,47 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.ui.activities.PrefsActivityX
import com.machiav3lli.fdroid.ui.compose.RepositoriesRecycler
import com.machiav3lli.fdroid.ui.fragments.EditRepositorySheetX
import com.machiav3lli.fdroid.ui.fragments.RepositorySheetX
import com.machiav3lli.fdroid.ui.viewmodels.RepositoriesViewModelX
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun RepositoryPage(viewModel: RepositoriesViewModelX) {
fun PrefsReposPage(viewModel: RepositoriesViewModelX) {
val context = LocalContext.current
val prefsActivityX = context as PrefsActivityX
val repos by viewModel.repositories.collectAsState()
LaunchedEffect(key1 = viewModel.showSheet) {
viewModel.showSheet.collectLatest {
if (it.editMode) {
EditRepositorySheetX(it.repositoryId).showNow(
prefsActivityX.supportFragmentManager,
"Repository ${it.repositoryId}"
)
} else {
RepositorySheetX(it.repositoryId).showNow(
prefsActivityX.supportFragmentManager,
"Repository $it"
)
}
}
}
Scaffold(
modifier = Modifier.fillMaxSize(),
floatingActionButton = {
@ -38,11 +67,16 @@ fun RepositoryPage(viewModel: RepositoriesViewModelX) {
Text(text = stringResource(id = R.string.add_repository))
}
}
) {
) { paddingValues ->
val sortedRepoList = remember(repos) { repos.sortedBy { !it.enabled } }
RepositoriesRecycler(
modifier = Modifier.padding(paddingValues),
repositoriesList = sortedRepoList,
onClick = { viewModel.toggleRepository(it, it.enabled) },
onClick = {
CoroutineScope(Dispatchers.Default).launch {
prefsActivityX.syncConnection.binder?.setEnabled(it, it.enabled)
}
},
onLongClick = { viewModel.showRepositorySheet(it.id) }
)