Diaplay a count of results in the search field

This commit is contained in:
Artem Chepurnoy 2024-01-27 21:14:18 +02:00
parent d23b8e1c76
commit 96efcfad65
No known key found for this signature in database
GPG Key ID: FAC37D0CF674043E
8 changed files with 77 additions and 0 deletions

View File

@ -139,12 +139,21 @@ fun ChangePasswordScreen(
val query = filterState.value?.query
val queryText = query?.state?.value.orEmpty()
val count = loadableState
.getOrNull()
?.content
?.getOrNull()
?.getOrNull()
?.items
?.size
SearchTextField(
modifier = Modifier
.focusRequester2(focusRequester),
text = queryText,
placeholder = stringResource(Res.strings.apppicker_search_placeholder),
searchIcon = false,
count = count,
leading = {},
trailing = {},
onTextChange = query?.onChange,

View File

@ -182,12 +182,20 @@ fun WordlistViewScreen(
val backVisible = visualStack.size > 1
val searchIcon = !backVisible // otherwise it's too much icons in my opinion
val count = loadableState
.getOrNull()
?.content
?.getOrNull()
?.getOrNull()
?.items
?.size
SearchTextField(
modifier = Modifier
.focusRequester2(focusRequester),
text = queryText,
placeholder = stringResource(Res.strings.wordlist_word_search_placeholder),
searchIcon = searchIcon,
count = count,
leading = {},
trailing = {},
onTextChange = query?.onChange,

View File

@ -23,6 +23,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.artemchep.keyguard.common.model.getOrNull
import com.artemchep.keyguard.feature.EmptySearchView
import com.artemchep.keyguard.feature.home.vault.component.SearchTextField
import com.artemchep.keyguard.feature.navigation.NavigationIcon
@ -108,12 +109,14 @@ fun SearchSettingsScreenContent(
Spacer(Modifier.width(4.dp))
}
val count = state.items.size
SearchTextField(
modifier = Modifier
.focusRequester2(focusRequester),
text = state.query.state.value,
placeholder = stringResource(Res.strings.settingssearch_search_placeholder),
searchIcon = false,
count = count,
leading = {},
trailing = {},
onTextChange = state.query.onChange,

View File

@ -19,6 +19,7 @@ import androidx.compose.material.icons.outlined.Search
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -41,9 +42,13 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.artemchep.keyguard.res.Res
import com.artemchep.keyguard.ui.DisabledEmphasisAlpha
import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow
import com.artemchep.keyguard.ui.MediumEmphasisAlpha
import com.artemchep.keyguard.ui.PlainTextField
import com.artemchep.keyguard.ui.theme.combineAlpha
import dev.icerock.moko.resources.compose.stringResource
@Composable
fun SearchTextField(
@ -51,6 +56,7 @@ fun SearchTextField(
text: String,
placeholder: String,
searchIcon: Boolean = true,
count: Int? = null,
leading: @Composable () -> Unit,
trailing: @Composable () -> Unit,
onTextChange: ((String) -> Unit)?,
@ -145,6 +151,22 @@ fun SearchTextField(
),
singleLine = true,
)
if (count != null) {
val resultsCount = stringResource(
Res.plurals.result_count_plural,
count,
count.toString(),
)
Text(
modifier = Modifier
.padding(horizontal = 8.dp),
text = resultsCount,
style = MaterialTheme.typography.labelSmall,
color = LocalContentColor.current
.combineAlpha(DisabledEmphasisAlpha),
maxLines = 2,
)
}
Spacer(
modifier = Modifier
.size(8.dp),

View File

@ -149,12 +149,21 @@ fun JustDeleteMeListScreen(
val query = filterState.value?.query
val queryText = query?.state?.value.orEmpty()
val count = loadableState
.getOrNull()
?.content
?.getOrNull()
?.getOrNull()
?.items
?.size
SearchTextField(
modifier = Modifier
.focusRequester2(focusRequester),
text = queryText,
placeholder = stringResource(Res.strings.justdeleteme_search_placeholder),
searchIcon = false,
count = count,
leading = {},
trailing = {},
onTextChange = query?.onChange,

View File

@ -147,12 +147,21 @@ fun PasskeysListScreen(
val query = filterState.value?.query
val queryText = query?.state?.value.orEmpty()
val count = loadableState
.getOrNull()
?.content
?.getOrNull()
?.getOrNull()
?.items
?.size
SearchTextField(
modifier = Modifier
.focusRequester2(focusRequester),
text = queryText,
placeholder = stringResource(Res.strings.passkeys_directory_search_placeholder),
searchIcon = false,
count = count,
leading = {},
trailing = {},
onTextChange = query?.onChange,

View File

@ -147,12 +147,21 @@ fun TwoFaServiceListScreen(
val query = filterState.value?.query
val queryText = query?.state?.value.orEmpty()
val count = loadableState
.getOrNull()
?.content
?.getOrNull()
?.getOrNull()
?.items
?.size
SearchTextField(
modifier = Modifier
.focusRequester2(focusRequester),
text = queryText,
placeholder = stringResource(Res.strings.tfa_directory_search_placeholder),
searchIcon = false,
count = count,
leading = {},
trailing = {},
onTextChange = query?.onChange,

View File

@ -24,4 +24,12 @@
<item quantity="many"><xliff:g id="number">%1$s</xliff:g> words</item>
<item quantity="other"><xliff:g id="number">%1$s</xliff:g> words</item>
</plural>
<plural name="result_count_plural">
<item quantity="zero"><xliff:g id="number" example="0">%1$s</xliff:g> results</item>
<item quantity="one"><xliff:g id="number" example="1">%1$s</xliff:g> result</item>
<item quantity="two"><xliff:g id="number" example="2">%1$s</xliff:g> results</item>
<item quantity="few"><xliff:g id="number">%1$s</xliff:g> results</item>
<item quantity="many"><xliff:g id="number">%1$s</xliff:g> results</item>
<item quantity="other"><xliff:g id="number">%1$s</xliff:g> results</item>
</plural>
</resources>