Fix weather widget missing permission / no data UI overlap

This commit is contained in:
MM20 2022-04-02 14:05:24 +02:00
parent e7775b5a2a
commit 9433b11747
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -58,27 +58,29 @@ fun WeatherWidget() {
val forecast = selectedForecast ?: run { val forecast = selectedForecast ?: run {
val hasPermission by viewModel.hasLocationPermission.observeAsState() val hasPermission by viewModel.hasLocationPermission.observeAsState()
val autoLocation by viewModel.autoLocation.observeAsState() val autoLocation by viewModel.autoLocation.observeAsState()
AnimatedVisibility(hasPermission == false && autoLocation == true) { Column {
MissingPermissionBanner( AnimatedVisibility(hasPermission == false && autoLocation == true) {
modifier = Modifier MissingPermissionBanner(
.padding(horizontal = 16.dp) modifier = Modifier
.padding(top = 16.dp), .padding(horizontal = 16.dp)
text = stringResource(id = R.string.missing_permission_auto_location), .padding(top = 16.dp),
onClick = { text = stringResource(id = R.string.missing_permission_auto_location),
viewModel.requestLocationPermission(context as AppCompatActivity) onClick = {
}, viewModel.requestLocationPermission(context as AppCompatActivity)
secondaryAction = { },
TextButton(onClick = { secondaryAction = {
showLocationDialog = true TextButton(onClick = {
}) { showLocationDialog = true
Text( }) {
stringResource(R.string.weather_widget_set_location), Text(
) stringResource(R.string.weather_widget_set_location),
)
}
} }
} )
) }
NoData()
} }
NoData()
return return
} }
@ -86,7 +88,9 @@ fun WeatherWidget() {
CurrentWeather(forecast, imperialUnits) CurrentWeather(forecast, imperialUnits)
Row( Row(
modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp), modifier = Modifier
.fillMaxWidth()
.padding(vertical = 2.dp),
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
val dailyForecasts by viewModel.dailyForecasts.observeAsState(emptyList()) val dailyForecasts by viewModel.dailyForecasts.observeAsState(emptyList())
@ -98,7 +102,9 @@ fun WeatherWidget() {
onDaySelected = { onDaySelected = {
viewModel.selectDay(it) viewModel.selectDay(it)
}, },
modifier = Modifier.weight(1f).padding(horizontal = 4.dp), modifier = Modifier
.weight(1f)
.padding(horizontal = 4.dp),
imperialUnits = imperialUnits imperialUnits = imperialUnits
) )
} }
@ -110,7 +116,9 @@ fun WeatherWidget() {
onTimeSelected = { onTimeSelected = {
viewModel.selectForecast(it) viewModel.selectForecast(it)
}, },
modifier = Modifier.weight(1f).padding(horizontal = 4.dp), modifier = Modifier
.weight(1f)
.padding(horizontal = 4.dp),
) )
} }
} }
@ -162,18 +170,27 @@ fun CurrentWeather(forecast: Forecast, imperialUnits: Boolean) {
) { ) {
if (forecast.humidity >= 0) { if (forecast.humidity >= 0) {
Text( Text(
stringResource(id = R.string.weather_details_humidity, "${forecast.humidity.roundToInt()} %"), stringResource(
id = R.string.weather_details_humidity,
"${forecast.humidity.roundToInt()} %"
),
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
) )
} }
Text( Text(
stringResource(id = R.string.weather_details_wind, formatWindSpeed(imperialUnits, forecast)), stringResource(
id = R.string.weather_details_wind,
formatWindSpeed(imperialUnits, forecast)
),
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
) )
val precipitation = formatPrecipitation(imperialUnits, forecast) val precipitation = formatPrecipitation(imperialUnits, forecast)
if (precipitation != null) { if (precipitation != null) {
Text( Text(
stringResource(id = R.string.weather_details_precipitation, precipitation), stringResource(
id = R.string.weather_details_precipitation,
precipitation
),
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
) )
} }