diff --git a/app/src/main/java/ru/myitschool/work/data/repo/AuthRepository.kt b/app/src/main/java/ru/myitschool/work/data/repo/AuthRepository.kt index 760e2b9..d0d17e2 100644 --- a/app/src/main/java/ru/myitschool/work/data/repo/AuthRepository.kt +++ b/app/src/main/java/ru/myitschool/work/data/repo/AuthRepository.kt @@ -45,6 +45,8 @@ class AuthRepository private constructor(context: Context) { if (codeCache != null && name != null) { userCache = UserCache(name, photo) _isAuthorized.value = true + } else { + clear() } } diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/book/BookScreen.kt b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookScreen.kt index b253bf3..c010c88 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/book/BookScreen.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookScreen.kt @@ -158,7 +158,7 @@ fun BookScreen( modifier = Modifier .fillMaxSize() .padding(paddingValues) - .padding(16.dp) + .padding(horizontal = 16.dp, vertical = 8.dp) ) { Content( state = currentState, @@ -185,7 +185,6 @@ private fun Content( .fillMaxSize() .verticalScroll(rememberScrollState()) ) { - ScrollableTabRow( selectedTabIndex = state.selectedDateIndex, modifier = Modifier.fillMaxWidth(), @@ -211,30 +210,32 @@ private fun Content( Spacer(modifier = Modifier.height(16.dp)) - val selectedDate = state.dates[state.selectedDateIndex] - Column { - selectedDate.places.forEachIndexed { index, placeItem -> - Row( - modifier = Modifier - .fillMaxWidth() - .selectable( + val selectedDate = state.dates.getOrNull(state.selectedDateIndex) + if (selectedDate != null) { + Column { + selectedDate.places.forEachIndexed { index, placeItem -> + Row( + modifier = Modifier + .fillMaxWidth() + .selectable( + selected = state.selectedPlaceIndex == index, + onClick = { onPlaceSelect(index) } + ) + .padding(vertical = 8.dp, horizontal = 16.dp) + .testTag(TestIds.Book.getIdPlaceItemByPosition(index)) + ) { + RadioButton( selected = state.selectedPlaceIndex == index, - onClick = { onPlaceSelect(index) } + onClick = { onPlaceSelect(index) }, + modifier = Modifier.testTag(TestIds.Book.ITEM_PLACE_SELECTOR) ) - .padding(vertical = 8.dp, horizontal = 16.dp) - .testTag(TestIds.Book.getIdPlaceItemByPosition(index)) - ) { - RadioButton( - selected = state.selectedPlaceIndex == index, - onClick = { onPlaceSelect(index) }, - modifier = Modifier.testTag(TestIds.Book.ITEM_PLACE_SELECTOR) - ) - Spacer(modifier = Modifier.width(16.dp)) - Text( - text = placeItem.name, - modifier = Modifier.testTag(TestIds.Book.ITEM_PLACE_TEXT), - style = MaterialTheme.typography.bodyLarge - ) + Spacer(modifier = Modifier.width(16.dp)) + Text( + text = placeItem.name, + modifier = Modifier.testTag(TestIds.Book.ITEM_PLACE_TEXT), + style = MaterialTheme.typography.bodyLarge + ) + } } } } diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt index 763fc54..ee30e3c 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt @@ -99,9 +99,10 @@ fun MainScreen( Text( text = currentState.error, color = Color.Red, - modifier = Modifier.testTag(TestIds.Main.ERROR) + modifier = Modifier + .testTag(TestIds.Main.ERROR) + .padding(bottom = 16.dp) ) - Spacer(modifier = Modifier.height(16.dp)) Button( onClick = { viewModel.onIntent(MainIntent.Refresh) }, modifier = Modifier.testTag(TestIds.Main.REFRESH_BUTTON) @@ -111,20 +112,14 @@ fun MainScreen( } } else { Column( - modifier = Modifier.fillMaxSize() + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 16.dp) ) { - Text( - text = "", - color = Color.Red, - modifier = Modifier - .testTag(TestIds.Main.ERROR) - .height(0.dp) - ) - Card( modifier = Modifier .fillMaxWidth() - .padding(16.dp), + .padding(vertical = 16.dp), elevation = CardDefaults.cardElevation(defaultElevation = 4.dp) ) { Row( @@ -179,7 +174,7 @@ fun MainScreen( Row( modifier = Modifier .fillMaxWidth() - .padding(horizontal = 16.dp), + .padding(bottom = 16.dp), horizontalArrangement = Arrangement.spacedBy(8.dp) ) { Button( @@ -210,19 +205,34 @@ fun MainScreen( } } - Spacer(modifier = Modifier.height(8.dp)) - if (currentState.bookings.isNotEmpty()) { Text( text = "Мои бронирования:", style = MaterialTheme.typography.titleMedium, - modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp) + modifier = Modifier.padding(bottom = 8.dp) ) + + LazyColumn( + modifier = Modifier + .fillMaxWidth() + .weight(1f) + ) { + itemsIndexed(currentState.bookings) { index, booking -> + BookingItem( + booking = booking, + position = index, + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 4.dp) + .testTag(TestIds.Main.getIdItemByPosition(index)) + ) + } + } } else { Box( modifier = Modifier .fillMaxWidth() - .padding(16.dp), + .weight(1f), contentAlignment = Alignment.Center ) { Text( @@ -231,23 +241,6 @@ fun MainScreen( ) } } - - LazyColumn( - modifier = Modifier - .fillMaxWidth() - .weight(1f) - .padding(horizontal = 16.dp, vertical = 8.dp) - ) { - itemsIndexed(currentState.bookings) { index, booking -> - BookingItem( - booking = booking, - position = index, - modifier = Modifier.testTag( - TestIds.Main.getIdItemByPosition(index) - ) - ) - } - } } } } @@ -261,25 +254,27 @@ private fun BookingItem( position: Int, modifier: Modifier = Modifier ) { - Card( + Box( modifier = modifier - .fillMaxWidth() - .padding(vertical = 4.dp), - elevation = CardDefaults.cardElevation(defaultElevation = 2.dp) ) { - Column( - modifier = Modifier.padding(16.dp) + Card( + modifier = Modifier.fillMaxWidth(), + elevation = CardDefaults.cardElevation(defaultElevation = 2.dp) ) { - Text( - text = booking.place, - style = MaterialTheme.typography.titleMedium, - modifier = Modifier.testTag(TestIds.Main.ITEM_PLACE) - ) - Text( - text = booking.getFormattedDate(), - style = MaterialTheme.typography.bodyMedium, - modifier = Modifier.testTag(TestIds.Main.ITEM_DATE) - ) + Column( + modifier = Modifier.padding(16.dp) + ) { + Text( + text = booking.place, + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.testTag(TestIds.Main.ITEM_PLACE) + ) + Text( + text = booking.getFormattedDate(), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.testTag(TestIds.Main.ITEM_DATE) + ) + } } } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainViewModel.kt index c63a509..6efbb7a 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainViewModel.kt @@ -35,10 +35,6 @@ class MainViewModel( fun onIntent(intent: MainIntent) { when (intent) { MainIntent.Logout -> { - val currentState = _uiState.value - if (currentState is MainState.Data) { - authRepo.saveUserInfo(currentState.userName, currentState.userPhotoUrl) - } authRepo.clear() viewModelScope.launch { _actionFlow.emit(MainAction.NavigateToAuth) @@ -89,7 +85,7 @@ class MainViewModel( MainState.Data( userName = authRepo.getUserInfo()?.name ?: "", userPhotoUrl = authRepo.getUserInfo()?.photo, - error = error.message ?: "data load error" + error = error.message ?: "Ошибка загрузки данных" ) } }