Skip to content

Commit

Permalink
Version 12.1 - Version updater, search members by name
Browse files Browse the repository at this point in the history
  • Loading branch information
Asim Mughal committed Jul 16, 2024
1 parent 67058e2 commit ed8a7f5
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 5 deletions.
1 change: 0 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

<activity
android:name=".ui.screens.main.MainActivity"
android:windowSoftInputMode="adjustResize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import androidx.compose.ui.text.style.TextAlign
import com.ndemi.garden.gym.R
import com.ndemi.garden.gym.ui.screens.members.MembersScreenViewModel.UiState
import com.ndemi.garden.gym.ui.theme.padding_screen
import com.ndemi.garden.gym.ui.theme.padding_screen_tiny
import com.ndemi.garden.gym.ui.widgets.SearchTextWidget
import com.ndemi.garden.gym.ui.widgets.TextRegular
import com.ndemi.garden.gym.ui.widgets.ToolBarWidget
import com.ndemi.garden.gym.ui.widgets.WarningWidget
Expand Down Expand Up @@ -54,12 +54,19 @@ fun MembersScreen(
onRefresh = { viewModel.getMembers() }
) {
LazyColumn {
item {
SearchTextWidget(
textInput = viewModel.searchTerm,
hint = stringResource(R.string.txt_search_members),
onValueChanged = viewModel::onSearchTextChanged
)
}
item {
if (members.value.isEmpty() && uiState.value !is UiState.Loading) {
TextRegular(
modifier = Modifier
.fillMaxWidth()
.padding(padding_screen_tiny),
.padding(padding_screen),
textAlign = TextAlign.Center,
text = stringResource(R.string.txt_no_members)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ class MembersScreenViewModel (
private val navigationService: NavigationService,
) : BaseViewModel<UiState, Action>(UiState.Loading) {

private val _membersUnfiltered: MutableList<MemberEntity> = mutableListOf()
private val _members = MutableLiveData<List<MemberEntity>>(listOf())
val members: LiveData<List<MemberEntity>> = _members
var searchTerm: String = ""

fun getMembers() {
sendAction(Action.SetLoading)
Expand All @@ -39,7 +41,9 @@ class MembersScreenViewModel (
is DomainResult.Error ->
sendAction(Action.ShowDomainError(result.error, errorCodeConverter))
is DomainResult.Success -> {
_members.value = result.data
_membersUnfiltered.clear()
_membersUnfiltered.addAll(result.data)
filterResults()
sendAction(Action.Success)
}
}
Expand Down Expand Up @@ -89,6 +93,21 @@ class MembersScreenViewModel (
}
}

fun onSearchTextChanged(searchTerm: String) {
this.searchTerm = searchTerm
filterResults()
}

private fun filterResults() {
if (searchTerm.isNotEmpty()){
_members.value = _membersUnfiltered.filter {
it.getFullName().lowercase().contains(searchTerm.lowercase())
}
} else {
_members.value = _membersUnfiltered
}
}

@Immutable
sealed interface UiState : BaseState {
data object Loading : UiState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Clear
Expand All @@ -25,6 +26,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation
Expand Down Expand Up @@ -123,6 +125,49 @@ fun EditPasswordTextWidget(
)
}

@Composable
fun SearchTextWidget(
textInput: String = "",
hint: String = "",
onValueChanged: (String) -> Unit = {},
){
val kc = LocalSoftwareKeyboardController.current
var text by remember { mutableStateOf(textInput) }
OutlinedTextField(
modifier = Modifier
.fillMaxWidth()
.padding(bottom = padding_screen_small),
value = text,
singleLine = true,
onValueChange = {
text = it
onValueChanged(text)
},
textStyle = AppTheme.textStyles.regular,
label = {Text(text = hint, style = AppTheme.textStyles.small) },
trailingIcon = {
if (text.isNotEmpty()){
Icon(
Icons.Default.Clear,
contentDescription = "Clear text",
modifier = Modifier.clickable {
text = ""
onValueChanged("")
kc?.hide()
}
)
}
},
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text),
keyboardActions = KeyboardActions {
onValueChanged.invoke(text)
kc?.hide()
},
colors = getAppTextColors(),
shape = RoundedCornerShape(border_radius)
)
}

@Composable
private fun getAppTextColors() = OutlinedTextFieldDefaults.colors(
focusedTextColor = AppTheme.colors.textPrimary,
Expand Down Expand Up @@ -165,6 +210,8 @@ fun EditTextPreviewsNight(){
EditTextWidget(textInput = "Normal")
EditTextWidget(textInput = "Error", isError = true)
EditTextWidget(textInput = "Disabled", isEnabled = false)

SearchTextWidget(textInput = "Disabled")
}
}
}
3 changes: 2 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<string name="error_invalid_amount">Amount entered is invalid, set any number above 0</string>
<string name="error_invalid_month_duration">The month duration is invalid, set any number above 0</string>
<string name="error_invalid_phone_number">The phone number is invalid, leave blank if not present</string>
<string name="error_failed_to_open_link">Failed to open link, please try again later</string>

<!-- Text within screens-->
<string name="txt_ok">OK</string>
Expand Down Expand Up @@ -113,7 +114,7 @@
<string name="txt_app_update_title">App update required</string>
<string name="txt_app_update_desc">Looks like you are using an outdated version of the app, please tap the download button below to get redirected to the latest version</string>
<string name="txt_download">Download</string>
<string name="error_failed_to_open_link">Failed to open link, please try again later</string>
<string name="txt_search_members">Search members</string>

<!-- Plurals-->
<plurals name="plural_months">
Expand Down

0 comments on commit ed8a7f5

Please sign in to comment.