From 72937b35d907ce9abedec680fc6a346b36547875 Mon Sep 17 00:00:00 2001 From: Ankit Suda Date: Tue, 22 Nov 2022 18:30:55 +0530 Subject: [PATCH] Improve exercises screen --- .../ankitsuda/rebound/ui/components/TopBar.kt | 8 +++-- .../ankitsuda/rebound/data/db/AppDatabase.kt | 1 - .../rebound/data/db/daos/ExercisesDao.kt | 5 ++- .../data/repositories/ExercisesRepository.kt | 11 +++++-- .../rebound/ui/exercises/ExercisesScreen.kt | 9 ++++-- .../ui/exercises/ExercisesScreenViewModel.kt | 32 ++----------------- 6 files changed, 28 insertions(+), 38 deletions(-) diff --git a/modules/common-ui-components/src/main/java/com/ankitsuda/rebound/ui/components/TopBar.kt b/modules/common-ui-components/src/main/java/com/ankitsuda/rebound/ui/components/TopBar.kt index 87b9d8e1..ecca5925 100644 --- a/modules/common-ui-components/src/main/java/com/ankitsuda/rebound/ui/components/TopBar.kt +++ b/modules/common-ui-components/src/main/java/com/ankitsuda/rebound/ui/components/TopBar.kt @@ -219,7 +219,7 @@ fun TopSearchBar( Icon( imageVector = Icons.Outlined.ArrowBack, contentDescription = stringResource(R.string.back), - tint = /*if (backgroundColor.isDark()) Color.White else*/ Color.Black, + tint = /*if (backgroundColor.isDark()) Color.White else*/ ReboundTheme.colors.onBackground, ) } // TextField @@ -298,5 +298,9 @@ fun TopBarIconButton( @Composable fun TopBarBackIconButton(onClick: () -> Unit) { - TopBarIconButton(icon = Icons.Outlined.ArrowBack, title = stringResource(R.string.back), onClick = onClick) + TopBarIconButton( + icon = Icons.Outlined.ArrowBack, + title = stringResource(R.string.back), + onClick = onClick + ) } \ No newline at end of file diff --git a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/AppDatabase.kt b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/AppDatabase.kt index ddc4832e..63a0a672 100644 --- a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/AppDatabase.kt +++ b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/AppDatabase.kt @@ -22,7 +22,6 @@ import com.ankitsuda.rebound.domain.entities.* import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch -import java.util.concurrent.Executors @Database( entities = [ diff --git a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/daos/ExercisesDao.kt b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/daos/ExercisesDao.kt index 506424ae..97a29b24 100644 --- a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/daos/ExercisesDao.kt +++ b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/daos/ExercisesDao.kt @@ -43,7 +43,10 @@ interface ExercisesDao { FROM exercise_workout_junctions ewj JOIN workouts w ON ewj.workout_id = w.id AND e.exercise_id = ewj.exercise_id WHERE w.id = ewj.workout_id AND w.is_hidden = 0 AND w.in_progress = 0) as logs_count - FROM exercises e ORDER BY name COLLATE NOCASE ASC + FROM exercises e WHERE CASE WHEN :searchQuery IS NOT NULL + THEN e.name LIKE '%' || :searchQuery || '%' + ELSE 1 + END ORDER BY e.name COLLATE NOCASE ASC """ ) fun getAllExercisesWithExtraInfoPaged(searchQuery: String?): PagingSource diff --git a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/repositories/ExercisesRepository.kt b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/repositories/ExercisesRepository.kt index 10677f7d..f7c3f7d5 100644 --- a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/repositories/ExercisesRepository.kt +++ b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/repositories/ExercisesRepository.kt @@ -64,9 +64,14 @@ class ExercisesRepository @Inject constructor( list } - fun getExercisesWithExtraInfoPaged(searchQuery: String? = null) = Pager(PagingConfig(pageSize = 15)) { - exercisesDao.getAllExercisesWithExtraInfoPaged(searchQuery = searchQuery) - }.flow + fun getExercisesWithExtraInfoPaged(searchQuery: String? = null) = + Pager(PagingConfig(pageSize = 15)) { +// if (searchQuery != null) { + exercisesDao.getAllExercisesWithExtraInfoPaged(searchQuery = searchQuery) +// } else { +// exercisesDao.getAllExercisesWithExtraInfoPaged() +// } + }.flow suspend fun createExercise( diff --git a/modules/ui-exercises/src/main/java/com/ankitsuda/rebound/ui/exercises/ExercisesScreen.kt b/modules/ui-exercises/src/main/java/com/ankitsuda/rebound/ui/exercises/ExercisesScreen.kt index 50198c83..756b9367 100644 --- a/modules/ui-exercises/src/main/java/com/ankitsuda/rebound/ui/exercises/ExercisesScreen.kt +++ b/modules/ui-exercises/src/main/java/com/ankitsuda/rebound/ui/exercises/ExercisesScreen.kt @@ -14,6 +14,7 @@ package com.ankitsuda.rebound.ui.exercises +import androidx.activity.compose.BackHandler import androidx.compose.animation.* import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background @@ -55,8 +56,8 @@ fun ExercisesScreen( navigator: Navigator = LocalNavigator.current, viewModel: ExercisesScreenViewModel = hiltViewModel() ) { - val isSearchMode by viewModel.isSearchMode.observeAsState(false) - val searchTerm by viewModel.searchTerm.observeAsState("") + val isSearchMode by viewModel.isSearchMode.collectAsState(false) + val searchTerm by viewModel.searchTerm.collectAsState("") val exercisesPaged = viewModel.exercisesPaged.collectAsLazyPagingItems() @@ -99,6 +100,10 @@ private fun ExercisesScreenContent( ) { val collapsingState = rememberCollapsingToolbarScaffoldState() + BackHandler(isSearchMode) { + onToggleSearchMode() + } + Column { CollapsingToolbarScaffold( modifier = Modifier.fillMaxSize(), diff --git a/modules/ui-exercises/src/main/java/com/ankitsuda/rebound/ui/exercises/ExercisesScreenViewModel.kt b/modules/ui-exercises/src/main/java/com/ankitsuda/rebound/ui/exercises/ExercisesScreenViewModel.kt index d3e7044d..b7ef33cd 100644 --- a/modules/ui-exercises/src/main/java/com/ankitsuda/rebound/ui/exercises/ExercisesScreenViewModel.kt +++ b/modules/ui-exercises/src/main/java/com/ankitsuda/rebound/ui/exercises/ExercisesScreenViewModel.kt @@ -14,8 +14,6 @@ package com.ankitsuda.rebound.ui.exercises -import androidx.compose.runtime.snapshots.SnapshotStateList -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.paging.PagingData @@ -23,13 +21,11 @@ import androidx.paging.cachedIn import androidx.paging.insertSeparators import com.ankitsuda.base.utils.extensions.shareWhileObserved import com.ankitsuda.rebound.data.repositories.ExercisesRepository -import com.ankitsuda.rebound.data.repositories.MusclesRepository import com.ankitsuda.rebound.domain.entities.ExerciseWithExtraInfo import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.* -import kotlinx.coroutines.launch -import timber.log.Timber -import java.util.* +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map import javax.inject.Inject @HiltViewModel @@ -74,26 +70,4 @@ class ExercisesScreenViewModel @Inject constructor( fun setSearchTerm(term: String) { _searchTerm.value = term } - -// private fun filterExercises() { -// viewModelScope.launch { -// _filteredExercises.clear() -// if (_isSearchMode.value == true) { -// _filteredExercises.addAll(allExercises.filter { -// it.exercise.name?.contains( -// _searchTerm.value!!, -// true -// ) == true -// }) -// } else { -// _filteredExercises.addAll(allExercises) -// } -// -// _groupedExercises.emit(_filteredExercises.groupBy { -// (it.exercise.name?.firstOrNull() ?: "#").toString().uppercase(Locale.getDefault()) -// }) -//// } -// } -// } - } \ No newline at end of file