diff --git a/app/src/main/java/com/merttoptas/composebase/features/screen/characters/CharactersScreen.kt b/app/src/main/java/com/merttoptas/composebase/features/screen/characters/CharactersScreen.kt index ff63f99..32a6817 100644 --- a/app/src/main/java/com/merttoptas/composebase/features/screen/characters/CharactersScreen.kt +++ b/app/src/main/java/com/merttoptas/composebase/features/screen/characters/CharactersScreen.kt @@ -46,6 +46,8 @@ fun CharactersScreen( }, content = { Content( + modifier = Modifier + .padding(it), isLoading = viewState.isLoading, pagedData = viewState.pagedData, onTriggerEvent = { @@ -62,6 +64,7 @@ fun CharactersScreen( @Composable private fun Content( + modifier: Modifier = Modifier, isLoading: Boolean = false, pagedData: Flow>? = null, onTriggerEvent: (CharactersViewEvent) -> Unit, @@ -73,7 +76,7 @@ private fun Content( } Box( - modifier = Modifier + modifier = modifier .fillMaxSize() .padding(horizontal = 15.dp), ) { diff --git a/app/src/main/java/com/merttoptas/composebase/features/screen/charactersdetail/CharactersDetailScreen.kt b/app/src/main/java/com/merttoptas/composebase/features/screen/charactersdetail/CharactersDetailScreen.kt index f14ea4a..17e0683 100644 --- a/app/src/main/java/com/merttoptas/composebase/features/screen/charactersdetail/CharactersDetailScreen.kt +++ b/app/src/main/java/com/merttoptas/composebase/features/screen/charactersdetail/CharactersDetailScreen.kt @@ -119,7 +119,7 @@ private fun CharacterInfoContainer(data: Result?) { shape = RoundedCornerShape(8.dp), ) { Column( - horizontalAlignment = Alignment.CenterHorizontally, + horizontalAlignment = Alignment.Start, modifier = Modifier.padding(20.dp) ) { CharacterInfoRow( @@ -166,9 +166,9 @@ private fun CharacterInfoContainer(data: Result?) { @Composable private fun CharacterInfoRow(modifier: Modifier, text: String, value: String) { - Row( + Column( modifier = modifier, - horizontalArrangement = Arrangement.SpaceBetween, + verticalArrangement = Arrangement.spacedBy(4.dp), ) { RickAndMortyText( text = text, diff --git a/app/src/main/java/com/merttoptas/composebase/features/screen/search/SearchScreen.kt b/app/src/main/java/com/merttoptas/composebase/features/screen/search/SearchScreen.kt index ab9b391..f4b5ad0 100644 --- a/app/src/main/java/com/merttoptas/composebase/features/screen/search/SearchScreen.kt +++ b/app/src/main/java/com/merttoptas/composebase/features/screen/search/SearchScreen.kt @@ -1,11 +1,19 @@ + package com.merttoptas.composebase.features.screen.search import android.content.res.Configuration import androidx.compose.foundation.Image -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.detectTapGestures -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape @@ -13,20 +21,31 @@ import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Star import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Divider import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.ListItem +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.SheetState +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.platform.SoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.testTag import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout @@ -41,23 +60,17 @@ import com.merttoptas.composebase.R import com.merttoptas.composebase.data.model.Status import com.merttoptas.composebase.data.model.dto.CharacterDto import com.merttoptas.composebase.domain.viewstate.search.SearchViewState -import com.merttoptas.composebase.features.component.* -import com.merttoptas.composebase.features.screen.characters.CharactersViewEvent +import com.merttoptas.composebase.features.component.RickAndMortyButton +import com.merttoptas.composebase.features.component.RickAndMortyCharacterShimmer +import com.merttoptas.composebase.features.component.RickAndMortyCharactersCard +import com.merttoptas.composebase.features.component.RickAndMortyScaffold +import com.merttoptas.composebase.features.component.RickAndMortySearchBar +import com.merttoptas.composebase.features.component.RickAndMortySelectableText +import com.merttoptas.composebase.features.component.RickAndMortyText +import com.merttoptas.composebase.features.component.RickAndMortyTopBar import com.merttoptas.composebase.utils.Utility import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch -import androidx.compose.material3.ListItem -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.ModalBottomSheet -import androidx.compose.material3.SheetState -import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.rememberModalBottomSheetState -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.input.pointer.pointerInput -import androidx.compose.ui.platform.SoftwareKeyboardController /** * Created by merttoptas on 9.04.2022 @@ -87,15 +100,20 @@ fun SearchScreen( RickAndMortyTopBar( text = stringResource(id = R.string.search_screen_title), actions = { - IconButton(onClick = { - scope.launch { bottomSheetState.hide() }.invokeOnCompletion { - if (!bottomSheetState.isVisible) { - viewModel.onOpenBottomSheet(true) + IconButton( + onClick = { + if (viewState.openBottomSheet) { + scope.launch { bottomSheetState.hide() }.invokeOnCompletion { + if (!bottomSheetState.isVisible) { + viewModel.onOpenBottomSheet(false) + } + } } else { - viewModel.onOpenBottomSheet(false) + viewModel.onOpenBottomSheet(true) } - } - }) { + }, + modifier = Modifier.semantics { testTag = "filter_button" } + ) { Image( imageVector = ImageVector.vectorResource(id = R.drawable.ic_filter), contentDescription = null @@ -114,7 +132,7 @@ fun SearchScreen( onActiveChange = viewModel::onActiveChange, onDismissRequest = { scope.launch { bottomSheetState.hide() }.invokeOnCompletion { - if (bottomSheetState.isVisible) { + if (!bottomSheetState.isVisible) { viewModel.onOpenBottomSheet(false) } }