Make more onboarding screens scrollable (#2987)

- Fixes not being able to continue as the buttons are off screen
This commit is contained in:
Joris Pelgröm 2022-10-25 23:08:38 +02:00 committed by GitHub
parent 6da455f1be
commit 326ab94652
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 67 additions and 49 deletions

View file

@ -1,12 +1,15 @@
package io.homeassistant.companion.android.onboarding.integration package io.homeassistant.companion.android.onboarding.integration
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button import androidx.compose.material.Button
import androidx.compose.material.Switch import androidx.compose.material.Switch
import androidx.compose.material.SwitchDefaults import androidx.compose.material.SwitchDefaults
@ -37,66 +40,77 @@ fun MobileAppIntegrationView(
onLocationTrackingChanged: (Boolean) -> Unit, onLocationTrackingChanged: (Boolean) -> Unit,
onFinishClicked: () -> Unit onFinishClicked: () -> Unit
) { ) {
val scrollState = rememberScrollState()
val keyboardController = LocalSoftwareKeyboardController.current val keyboardController = LocalSoftwareKeyboardController.current
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxHeight()
.fillMaxWidth() .fillMaxWidth()
.padding(16.dp) .padding(16.dp)
) { ) {
Column(
OnboardingHeaderView( modifier = Modifier
icon = if (onboardingViewModel.deviceIsWatch) { .verticalScroll(scrollState)
CommunityMaterial.Icon3.cmd_watch .fillMaxWidth()
} else if (LocalConfiguration.current.screenWidthDp.dp >= 600.dp) { .weight(1f)
CommunityMaterial.Icon3.cmd_tablet ) {
} else { OnboardingHeaderView(
CommunityMaterial.Icon.cmd_cellphone icon = if (onboardingViewModel.deviceIsWatch) {
}, CommunityMaterial.Icon3.cmd_watch
title = stringResource(id = commonR.string.connect_to_home_assistant) } else if (LocalConfiguration.current.screenWidthDp.dp >= 600.dp) {
) CommunityMaterial.Icon3.cmd_tablet
} else {
TextField( CommunityMaterial.Icon.cmd_cellphone
value = onboardingViewModel.deviceName.value, },
onValueChange = { onboardingViewModel.onDeviceNameUpdated(it) }, title = stringResource(id = commonR.string.connect_to_home_assistant)
modifier = Modifier.align(Alignment.CenterHorizontally),
label = { Text(stringResource(id = commonR.string.device_name)) },
singleLine = true,
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(
onDone = {
keyboardController?.hide()
}
) )
)
if (onboardingViewModel.locationTrackingPossible.value) { TextField(
Row { value = onboardingViewModel.deviceName.value,
Text( onValueChange = { onboardingViewModel.onDeviceNameUpdated(it) },
text = stringResource(commonR.string.enable_location_tracking), modifier = Modifier.align(Alignment.CenterHorizontally),
modifier = Modifier label = { Text(stringResource(id = commonR.string.device_name)) },
.align(Alignment.CenterVertically) singleLine = true,
.weight(1f) keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(
onDone = {
keyboardController?.hide()
}
) )
Switch( )
checked = onboardingViewModel.locationTrackingEnabled, if (onboardingViewModel.locationTrackingPossible.value) {
onCheckedChange = onLocationTrackingChanged, Row {
colors = SwitchDefaults.colors(uncheckedThumbColor = colorResource(commonR.color.colorSwitchUncheckedThumb)) Text(
text = stringResource(commonR.string.enable_location_tracking),
modifier = Modifier
.align(Alignment.CenterVertically)
.weight(1f)
)
Switch(
checked = onboardingViewModel.locationTrackingEnabled,
onCheckedChange = onLocationTrackingChanged,
colors = SwitchDefaults.colors(uncheckedThumbColor = colorResource(commonR.color.colorSwitchUncheckedThumb))
)
}
Text(
text = stringResource(id = commonR.string.enable_location_tracking_description),
fontWeight = FontWeight.Light
) )
} }
Text( TextButton(onClick = openPrivacyPolicy) {
text = stringResource(id = commonR.string.enable_location_tracking_description), Text(stringResource(id = commonR.string.privacy_url))
fontWeight = FontWeight.Light }
)
} }
TextButton(onClick = openPrivacyPolicy) {
Text(stringResource(id = commonR.string.privacy_url)) Row(
} modifier = Modifier
Spacer(modifier = Modifier.weight(1f)) .padding(top = 16.dp)
Button( .fillMaxWidth(),
onClick = onFinishClicked, horizontalArrangement = Arrangement.End
modifier = Modifier.align(Alignment.End)
) { ) {
Text(stringResource(id = commonR.string.continue_connect)) Button(onClick = onFinishClicked) {
Text(stringResource(id = commonR.string.continue_connect))
}
} }
} }
} }

View file

@ -3,8 +3,10 @@ package io.homeassistant.companion.android.onboarding.manual
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button import androidx.compose.material.Button
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.material.TextField import androidx.compose.material.TextField
@ -28,10 +30,12 @@ fun ManualSetupView(
onboardingViewModel: OnboardingViewModel, onboardingViewModel: OnboardingViewModel,
connectedClicked: () -> Unit connectedClicked: () -> Unit
) { ) {
val scrollState = rememberScrollState()
val keyboardController = LocalSoftwareKeyboardController.current val keyboardController = LocalSoftwareKeyboardController.current
Column( Column(
modifier = Modifier modifier = Modifier
.verticalScroll(scrollState)
.fillMaxWidth() .fillMaxWidth()
.padding(16.dp) .padding(16.dp)
) { ) {