Placeholder for time zone search

This commit is contained in:
Sad Ellie 2023-10-15 23:36:55 +03:00
parent 2d828ab272
commit c3603fe1ee
5 changed files with 39 additions and 16 deletions

View File

@ -167,6 +167,12 @@ Maybe this can be labeled better? Let me know. It should be something that can d
<string name="settings_vibrations_support">Haptic feedback when clicking keyboard buttons</string> <string name="settings_vibrations_support">Haptic feedback when clicking keyboard buttons</string>
<string name="settings_view_source_code">View source code</string> <string name="settings_view_source_code">View source code</string>
<string name="time_zone_add_title">Add time zone</string> <string name="time_zone_add_title">Add time zone</string>
<!-- https://s3.eu-west-1.amazonaws.com/po-pub/i/UCrz06kaEYxCGAE73ZLl9EtX.png -->
<string name="time_zone_no_results_button">Read the article</string>
<!-- https://s3.eu-west-1.amazonaws.com/po-pub/i/UCrz06kaEYxCGAE73ZLl9EtX.png -->
<string name="time_zone_no_results_support">Need more time zones?</string>
<string name="time_zone_title">Time zones</string> <string name="time_zone_title">Time zones</string>
<string name="tomorrow">Tomorrow</string> <string name="tomorrow">Tomorrow</string>
<string name="unit_acre">Acre</string> <string name="unit_acre">Acre</string>

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.sadellie.unitto.feature.converter.components package com.sadellie.unitto.core.ui.common
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -38,7 +38,11 @@ import androidx.compose.ui.unit.dp
import com.sadellie.unitto.core.base.R import com.sadellie.unitto.core.base.R
@Composable @Composable
internal fun SearchPlaceholder(navigateToSettingsAction: () -> Unit) { fun SearchPlaceholder(
onButtonClick: () -> Unit,
supportText: String,
buttonLabel: String
) {
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
@ -46,27 +50,23 @@ internal fun SearchPlaceholder(navigateToSettingsAction: () -> Unit) {
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(16.dp) verticalArrangement = Arrangement.spacedBy(16.dp)
) { ) {
// Big icon in the middle
Icon( Icon(
Icons.Default.SearchOff, imageVector = Icons.Default.SearchOff,
contentDescription = stringResource(R.string.no_results_description), contentDescription = stringResource(R.string.no_results_description),
modifier = Modifier.size(48.dp) modifier = Modifier.size(48.dp)
) )
// Primary text
Text( Text(
text = stringResource(R.string.no_results_label), text = stringResource(R.string.no_results_label),
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = MaterialTheme.typography.bodyLarge style = MaterialTheme.typography.bodyLarge
) )
// Secondary text with tips
Text( Text(
text = stringResource(R.string.converter_no_results_support), text = supportText,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = MaterialTheme.typography.bodySmall style = MaterialTheme.typography.bodySmall
) )
// Open settings button ElevatedButton(onClick = onButtonClick) {
ElevatedButton(onClick = navigateToSettingsAction) { Text(text = buttonLabel)
Text(text = stringResource(R.string.open_settings_label))
} }
} }
} }

View File

@ -38,6 +38,7 @@ import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.sadellie.unitto.core.base.R import com.sadellie.unitto.core.base.R
import com.sadellie.unitto.core.ui.common.SearchPlaceholder
import com.sadellie.unitto.core.ui.common.UnittoEmptyScreen import com.sadellie.unitto.core.ui.common.UnittoEmptyScreen
import com.sadellie.unitto.core.ui.common.UnittoSearchBar import com.sadellie.unitto.core.ui.common.UnittoSearchBar
import com.sadellie.unitto.data.model.UnitGroup import com.sadellie.unitto.data.model.UnitGroup
@ -49,7 +50,6 @@ import com.sadellie.unitto.feature.converter.components.BasicUnitListItem
import com.sadellie.unitto.feature.converter.components.ChipsFlexRow import com.sadellie.unitto.feature.converter.components.ChipsFlexRow
import com.sadellie.unitto.feature.converter.components.ChipsRow import com.sadellie.unitto.feature.converter.components.ChipsRow
import com.sadellie.unitto.feature.converter.components.FavoritesButton import com.sadellie.unitto.feature.converter.components.FavoritesButton
import com.sadellie.unitto.feature.converter.components.SearchPlaceholder
import com.sadellie.unitto.feature.converter.components.UnitGroupHeader import com.sadellie.unitto.feature.converter.components.UnitGroupHeader
import java.math.BigDecimal import java.math.BigDecimal
@ -169,7 +169,11 @@ private fun LeftSideScreen(
} }
} }
false -> SearchPlaceholder(navigateToSettingsAction = navigateToUnitGroups) false -> SearchPlaceholder(
onButtonClick = navigateToUnitGroups,
supportText = stringResource(R.string.converter_no_results_support),
buttonLabel = stringResource(R.string.open_settings_label)
)
} }
} }
} }

View File

@ -34,6 +34,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.sadellie.unitto.core.base.OutputFormat import com.sadellie.unitto.core.base.OutputFormat
import com.sadellie.unitto.core.base.R import com.sadellie.unitto.core.base.R
import com.sadellie.unitto.core.ui.common.SearchPlaceholder
import com.sadellie.unitto.core.ui.common.UnittoEmptyScreen import com.sadellie.unitto.core.ui.common.UnittoEmptyScreen
import com.sadellie.unitto.core.ui.common.UnittoSearchBar import com.sadellie.unitto.core.ui.common.UnittoSearchBar
import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols
@ -48,7 +49,6 @@ import com.sadellie.unitto.data.model.unit.NumberBaseUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.feature.converter.components.BasicUnitListItem import com.sadellie.unitto.feature.converter.components.BasicUnitListItem
import com.sadellie.unitto.feature.converter.components.FavoritesButton import com.sadellie.unitto.feature.converter.components.FavoritesButton
import com.sadellie.unitto.feature.converter.components.SearchPlaceholder
import com.sadellie.unitto.feature.converter.components.UnitGroupHeader import com.sadellie.unitto.feature.converter.components.UnitGroupHeader
import java.math.BigDecimal import java.math.BigDecimal
@ -142,7 +142,11 @@ private fun RightSideScreen(
} }
} }
false -> SearchPlaceholder(navigateToSettingsAction = navigateToUnitGroups) false -> SearchPlaceholder(
onButtonClick = navigateToUnitGroups,
supportText = stringResource(R.string.converter_no_results_support),
buttonLabel = stringResource(R.string.open_settings_label)
)
} }
} }
} }

View File

@ -40,15 +40,19 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.sadellie.unitto.core.base.R
import com.sadellie.unitto.core.ui.LocalLocale import com.sadellie.unitto.core.ui.LocalLocale
import com.sadellie.unitto.core.ui.common.SearchPlaceholder
import com.sadellie.unitto.core.ui.common.UnittoEmptyScreen import com.sadellie.unitto.core.ui.common.UnittoEmptyScreen
import com.sadellie.unitto.core.ui.common.UnittoListItem import com.sadellie.unitto.core.ui.common.UnittoListItem
import com.sadellie.unitto.core.ui.common.UnittoSearchBar import com.sadellie.unitto.core.ui.common.UnittoSearchBar
import com.sadellie.unitto.core.ui.datetime.formatTime import com.sadellie.unitto.core.ui.datetime.formatTime
import com.sadellie.unitto.core.ui.openLink
import com.sadellie.unitto.data.common.displayName import com.sadellie.unitto.data.common.displayName
import com.sadellie.unitto.data.common.offset import com.sadellie.unitto.data.common.offset
import com.sadellie.unitto.data.common.regionName import com.sadellie.unitto.data.common.regionName
@ -83,6 +87,7 @@ fun AddTimeZoneScreen(
addToFavorites: (TimeZone) -> Unit, addToFavorites: (TimeZone) -> Unit,
userTime: ZonedDateTime, userTime: ZonedDateTime,
) { ) {
val mContext = LocalContext.current
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior() val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
val locale = LocalLocale.current val locale = LocalLocale.current
val is24Hour = is24HourFormat(LocalContext.current) val is24Hour = is24HourFormat(LocalContext.current)
@ -100,11 +105,15 @@ fun AddTimeZoneScreen(
) { paddingValues -> ) { paddingValues ->
Crossfade( Crossfade(
modifier = Modifier.padding(paddingValues), modifier = Modifier.padding(paddingValues),
targetState = uiState.list.isEmpty(), targetState = uiState.list.isEmpty() and uiState.query.text.isNotEmpty(),
label = "Placeholder" label = "Placeholder"
) { empty -> ) { empty ->
if (empty) { if (empty) {
UnittoEmptyScreen() SearchPlaceholder(
onButtonClick = { openLink(mContext, "https://github.com/sadellie/unitto/wiki/Adding-more-time-zones") },
supportText = stringResource(R.string.time_zone_no_results_support),
buttonLabel = stringResource(R.string.time_zone_no_results_button),
)
} else { } else {
LazyColumn(Modifier.fillMaxSize()) { LazyColumn(Modifier.fillMaxSize()) {
items(uiState.list, { it.timeZone.id }) { items(uiState.list, { it.timeZone.id }) {