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.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Add import androidx.compose.material.icons.rounded.Add
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@ -9,19 +10,47 @@ import androidx.compose.material3.Icon
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.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import com.machiav3lli.fdroid.R import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.ui.activities.PrefsActivityX
import com.machiav3lli.fdroid.ui.compose.RepositoriesRecycler 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 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) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun RepositoryPage(viewModel: RepositoriesViewModelX) { fun PrefsReposPage(viewModel: RepositoriesViewModelX) {
val context = LocalContext.current
val prefsActivityX = context as PrefsActivityX
val repos by viewModel.repositories.collectAsState() 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( Scaffold(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
floatingActionButton = { floatingActionButton = {
@ -38,13 +67,18 @@ fun RepositoryPage(viewModel: RepositoriesViewModelX) {
Text(text = stringResource(id = R.string.add_repository)) Text(text = stringResource(id = R.string.add_repository))
} }
} }
) { ) { paddingValues ->
val sortedRepoList = remember(repos) { repos.sortedBy { !it.enabled } } val sortedRepoList = remember(repos) { repos.sortedBy { !it.enabled } }
RepositoriesRecycler( RepositoriesRecycler(
modifier = Modifier.padding(paddingValues),
repositoriesList = sortedRepoList, 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) } onLongClick = { viewModel.showRepositorySheet(it.id) }
) )
} }
} }