Jetpack Compose accounts settings screen
This commit is contained in:
parent
0acf84efe8
commit
fb774928c7
@ -117,5 +117,9 @@ dependencies {
|
|||||||
implementation(project(":permissions"))
|
implementation(project(":permissions"))
|
||||||
implementation(project(":websites"))
|
implementation(project(":websites"))
|
||||||
implementation(project(":unitconverter"))
|
implementation(project(":unitconverter"))
|
||||||
|
implementation(project(":nextcloud"))
|
||||||
|
implementation(project(":g-services"))
|
||||||
|
implementation(project(":ms-services"))
|
||||||
|
implementation(project(":owncloud"))
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -96,6 +96,9 @@ class ComposeActivity : AppCompatActivity() {
|
|||||||
composable("settings/badges") {
|
composable("settings/badges") {
|
||||||
SettingsBadgesScreen()
|
SettingsBadgesScreen()
|
||||||
}
|
}
|
||||||
|
composable("settings/accounts") {
|
||||||
|
SettingsAccountScreen()
|
||||||
|
}
|
||||||
composable("settings/appearance") {
|
composable("settings/appearance") {
|
||||||
SettingsAppearanceScreen()
|
SettingsAppearanceScreen()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,173 @@
|
|||||||
|
package de.mm20.launcher2.ui.screens.settings
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import de.mm20.launcher2.gservices.GoogleAccount
|
||||||
|
import de.mm20.launcher2.gservices.GoogleApiHelper
|
||||||
|
import de.mm20.launcher2.msservices.MicrosoftGraphApiHelper
|
||||||
|
import de.mm20.launcher2.msservices.MsUser
|
||||||
|
import de.mm20.launcher2.nextcloud.NcUser
|
||||||
|
import de.mm20.launcher2.nextcloud.NextcloudApiHelper
|
||||||
|
import de.mm20.launcher2.owncloud.OcUser
|
||||||
|
import de.mm20.launcher2.owncloud.OwncloudClient
|
||||||
|
import de.mm20.launcher2.ui.R
|
||||||
|
import de.mm20.launcher2.ui.component.preferences.Preference
|
||||||
|
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||||
|
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsAccountScreen() {
|
||||||
|
val context = LocalContext.current
|
||||||
|
val scope = rememberCoroutineScope()
|
||||||
|
PreferenceScreen(title = stringResource(id = R.string.preference_screen_services)) {
|
||||||
|
item {
|
||||||
|
PreferenceCategory(title = stringResource(id = R.string.preference_category_services_nextcloud)) {
|
||||||
|
val client = remember { NextcloudApiHelper(context) }
|
||||||
|
var account by remember { mutableStateOf<NcUser?>(null) }
|
||||||
|
LaunchedEffect(null) {
|
||||||
|
account = client.getLoggedInUser()
|
||||||
|
}
|
||||||
|
|
||||||
|
val launcher =
|
||||||
|
rememberLauncherForActivityResult(contract = ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
scope.launch {
|
||||||
|
account = client.getLoggedInUser()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Preference(
|
||||||
|
title = account?.let {
|
||||||
|
stringResource(id = R.string.preference_signin_logout)
|
||||||
|
} ?: stringResource(id = R.string.preference_nextcloud_signin),
|
||||||
|
summary = account?.let {
|
||||||
|
stringResource(
|
||||||
|
id = R.string.preference_signin_user,
|
||||||
|
it.displayName
|
||||||
|
)
|
||||||
|
} ?: stringResource(id = R.string.preference_nextcloud_signin_summary),
|
||||||
|
onClick = {
|
||||||
|
if (account == null) {
|
||||||
|
launcher.launch(client.getLoginIntent())
|
||||||
|
} else {
|
||||||
|
scope.launch {
|
||||||
|
client.logout()
|
||||||
|
account = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
PreferenceCategory(title = stringResource(id = R.string.preference_category_services_owncloud)) {
|
||||||
|
val client = remember { OwncloudClient(context) }
|
||||||
|
var account by remember { mutableStateOf<OcUser?>(null) }
|
||||||
|
LaunchedEffect(null) {
|
||||||
|
account = client.getLoggedInUser()
|
||||||
|
}
|
||||||
|
|
||||||
|
val launcher =
|
||||||
|
rememberLauncherForActivityResult(contract = ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
scope.launch {
|
||||||
|
account = client.getLoggedInUser()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Preference(
|
||||||
|
title = account?.let {
|
||||||
|
stringResource(id = R.string.preference_signin_logout)
|
||||||
|
} ?: stringResource(id = R.string.preference_owncloud_signin),
|
||||||
|
summary = account?.let {
|
||||||
|
stringResource(
|
||||||
|
id = R.string.preference_signin_user,
|
||||||
|
it.displayName
|
||||||
|
)
|
||||||
|
} ?: stringResource(id = R.string.preference_owncloud_signin_summary),
|
||||||
|
onClick = {
|
||||||
|
if (account == null) {
|
||||||
|
launcher.launch(client.getLoginIntent())
|
||||||
|
} else {
|
||||||
|
scope.launch {
|
||||||
|
client.logout()
|
||||||
|
account = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
PreferenceCategory(title = stringResource(id = R.string.preference_category_services_google)) {
|
||||||
|
val client = remember { GoogleApiHelper.getInstance(context) }
|
||||||
|
var account by remember { mutableStateOf<GoogleAccount?>(null) }
|
||||||
|
LaunchedEffect(null) {
|
||||||
|
account = client.getAccount()
|
||||||
|
}
|
||||||
|
Preference(
|
||||||
|
title = account?.let {
|
||||||
|
stringResource(id = R.string.preference_signin_logout)
|
||||||
|
} ?: stringResource(id = R.string.preference_google_signin),
|
||||||
|
summary = if (client.isAvailable()) {
|
||||||
|
account?.let {
|
||||||
|
stringResource(
|
||||||
|
id = R.string.preference_signin_user,
|
||||||
|
it.name
|
||||||
|
)
|
||||||
|
} ?: stringResource(id = R.string.preference_google_signin_summary)
|
||||||
|
} else {
|
||||||
|
stringResource(id = R.string.feature_not_available, stringResource(R.string.app_name))
|
||||||
|
},
|
||||||
|
onClick = {
|
||||||
|
if (account == null) {
|
||||||
|
scope.launch {
|
||||||
|
client.login(context as Activity)
|
||||||
|
account = client.getAccount()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
client.logout()
|
||||||
|
account = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
enabled = client.isAvailable()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
PreferenceCategory(title = stringResource(id = R.string.preference_category_services_microsoft)) {
|
||||||
|
val client = remember { MicrosoftGraphApiHelper.getInstance(context) }
|
||||||
|
var account by remember { mutableStateOf<MsUser?>(null) }
|
||||||
|
LaunchedEffect(null) {
|
||||||
|
account = client.getUser()
|
||||||
|
}
|
||||||
|
Preference(
|
||||||
|
title = account?.let {
|
||||||
|
stringResource(id = R.string.preference_signin_logout)
|
||||||
|
} ?: stringResource(id = R.string.preference_ms_signin),
|
||||||
|
summary = if (client.isAvailable()) {
|
||||||
|
account?.let {
|
||||||
|
stringResource(
|
||||||
|
id = R.string.preference_signin_user,
|
||||||
|
it.name
|
||||||
|
)
|
||||||
|
} ?: stringResource(id = R.string.preference_ms_signin_summary)
|
||||||
|
} else {
|
||||||
|
stringResource(id = R.string.feature_not_available, stringResource(R.string.app_name))
|
||||||
|
},
|
||||||
|
onClick = {
|
||||||
|
if (account == null) {
|
||||||
|
scope.launch {
|
||||||
|
client.login(context as Activity)
|
||||||
|
account = client.getUser()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
scope.launch {
|
||||||
|
client.logout()
|
||||||
|
account = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
enabled = client.isAvailable()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -53,7 +53,10 @@ fun SettingsMainScreen() {
|
|||||||
Preference(
|
Preference(
|
||||||
icon = Icons.Rounded.AccountBox,
|
icon = Icons.Rounded.AccountBox,
|
||||||
title = stringResource(id = R.string.preference_screen_services),
|
title = stringResource(id = R.string.preference_screen_services),
|
||||||
summary = stringResource(id = R.string.preference_screen_services_summary)
|
summary = stringResource(id = R.string.preference_screen_services_summary),
|
||||||
|
onClick = {
|
||||||
|
navController?.navigate("settings/accounts")
|
||||||
|
}
|
||||||
)
|
)
|
||||||
Preference(
|
Preference(
|
||||||
icon = Icons.Rounded.Info,
|
icon = Icons.Rounded.Info,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user