Skip to content

Commit a63a59b

Browse files
authored
Merge pull request #158 from ellenhp/ellenhp/v0_10_1_fixes
Fixes for a few bugs in v0.10.1
2 parents 1cee047 + 7465aea commit a63a59b

File tree

5 files changed

+98
-92
lines changed

5 files changed

+98
-92
lines changed

cardinal-android/app/src/main/java/earth/maps/cardinal/ui/AppContent.kt

Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -788,54 +788,58 @@ private fun HomeScreenComposable(
788788
onFabHeightChange(it)
789789
}
790790
},
791-
toolbarContent = {
792-
val prev = remember(homeBottomSheetState) {
793-
HomeBottomSheetState.fromValue((homeBottomSheetState.value + HomeBottomSheetState.COUNT - 1) % HomeBottomSheetState.COUNT)
794-
}
795-
val next = remember(homeBottomSheetState) {
796-
HomeBottomSheetState.fromValue((homeBottomSheetState.value + 1) % HomeBottomSheetState.COUNT)
797-
}
798-
OutlinedButton(onClick = {
799-
homeBottomSheetState = prev
800-
}) {
801-
Icon(
802-
painter = painterResource(drawable.ic_arrow_back),
803-
contentDescription = stringResource(string.content_description_previous_page)
804-
)
805-
Text(
806-
modifier = Modifier.padding(start = 4.dp), text = stringResource(prev.label)
807-
)
808-
}
809-
when (homeBottomSheetState) {
810-
HomeBottomSheetState.SAVED -> {
811-
IconButton(onClick = {
812-
showManagePlacesDialog = true
813-
}) {
814-
Icon(
815-
painter = painterResource(drawable.ic_edit),
816-
contentDescription = stringResource(string.content_description_edit_saved_places)
817-
)
818-
}
791+
toolbarContent = if (!homeInSearchScreen) {
792+
{
793+
val prev = remember(homeBottomSheetState) {
794+
HomeBottomSheetState.fromValue((homeBottomSheetState.value + HomeBottomSheetState.COUNT - 1) % HomeBottomSheetState.COUNT)
819795
}
820-
821-
HomeBottomSheetState.NEARBY -> {
796+
val next = remember(homeBottomSheetState) {
797+
HomeBottomSheetState.fromValue((homeBottomSheetState.value + 1) % HomeBottomSheetState.COUNT)
822798
}
799+
OutlinedButton(onClick = {
800+
homeBottomSheetState = prev
801+
}) {
802+
Icon(
803+
painter = painterResource(drawable.ic_arrow_back),
804+
contentDescription = stringResource(string.content_description_previous_page)
805+
)
806+
Text(
807+
modifier = Modifier.padding(start = 4.dp), text = stringResource(prev.label)
808+
)
809+
}
810+
when (homeBottomSheetState) {
811+
HomeBottomSheetState.SAVED -> {
812+
IconButton(onClick = {
813+
showManagePlacesDialog = true
814+
}) {
815+
Icon(
816+
painter = painterResource(drawable.ic_edit),
817+
contentDescription = stringResource(string.content_description_edit_saved_places)
818+
)
819+
}
820+
}
823821

824-
HomeBottomSheetState.TRANSIT -> {
822+
HomeBottomSheetState.NEARBY -> {
823+
}
824+
825+
HomeBottomSheetState.TRANSIT -> {
825826

827+
}
828+
}
829+
OutlinedButton(onClick = {
830+
homeBottomSheetState = next
831+
}) {
832+
Text(
833+
modifier = Modifier.padding(end = 4.dp), text = stringResource(next.label)
834+
)
835+
Icon(
836+
painter = painterResource(drawable.ic_arrow_forward),
837+
contentDescription = stringResource(string.content_description_next_page)
838+
)
826839
}
827840
}
828-
OutlinedButton(onClick = {
829-
homeBottomSheetState = next
830-
}) {
831-
Text(
832-
modifier = Modifier.padding(end = 4.dp), text = stringResource(next.label)
833-
)
834-
Icon(
835-
painter = painterResource(drawable.ic_arrow_forward),
836-
contentDescription = stringResource(string.content_description_next_page)
837-
)
838-
}
841+
} else {
842+
null
839843
},
840844
content = {
841845
HomeScreen(
@@ -859,12 +863,7 @@ private fun HomeScreenComposable(
859863
},
860864
homeInSearchScreen = homeInSearchScreen,
861865
onSearchFocusChange = {
862-
if (it) {
863-
coroutineScope.launch {
864-
bottomSheetState.expand()
865-
}
866-
homeInSearchScreen = true
867-
}
866+
homeInSearchScreen = it
868867
},
869868
onDismissShowPlaces = {
870869
showManagePlacesDialog = false

cardinal-android/app/src/main/java/earth/maps/cardinal/ui/HomeScreen.kt

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import androidx.compose.foundation.layout.fillMaxSize
2828
import androidx.compose.foundation.layout.fillMaxWidth
2929
import androidx.compose.foundation.layout.padding
3030
import androidx.compose.foundation.layout.size
31+
import androidx.compose.foundation.lazy.LazyColumn
32+
import androidx.compose.foundation.lazy.items
3133
import androidx.compose.foundation.rememberScrollState
3234
import androidx.compose.foundation.shape.RoundedCornerShape
3335
import androidx.compose.foundation.verticalScroll
@@ -234,16 +236,19 @@ private fun SearchPanelContent(
234236
)
235237
}
236238

237-
viewModel.geocodeResults.value.forEach {
238-
SearchResultItem(
239-
addressFormatter = addressFormatter,
240-
viewModel.geocodeResultToPlace(it),
241-
onPlaceSelected
242-
)
243-
}
244-
245239
if (homeInSearchScreen) {
246-
Spacer(modifier = Modifier.fillMaxSize())
240+
LazyColumn {
241+
items(viewModel.geocodeResults.value) {
242+
SearchResultItem(
243+
addressFormatter = addressFormatter,
244+
viewModel.geocodeResultToPlace(it),
245+
onPlaceSelected
246+
)
247+
}
248+
}
249+
if (searchQuery.text.isNotEmpty()) {
250+
Spacer(modifier = Modifier.fillMaxSize())
251+
}
247252
}
248253
}
249254
}

cardinal-android/app/src/main/java/earth/maps/cardinal/ui/TransitScreen.kt

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,14 @@ import androidx.compose.material3.LinearProgressIndicator
4848
import androidx.compose.material3.MaterialTheme
4949
import androidx.compose.material3.Text
5050
import androidx.compose.runtime.Composable
51+
import androidx.compose.runtime.LaunchedEffect
5152
import androidx.compose.runtime.collectAsState
5253
import androidx.compose.runtime.getValue
54+
import androidx.compose.runtime.mutableIntStateOf
5355
import androidx.compose.runtime.remember
5456
import androidx.compose.runtime.rememberCoroutineScope
57+
import androidx.compose.runtime.saveable.rememberSaveable
58+
import androidx.compose.runtime.setValue
5559
import androidx.compose.ui.Alignment
5660
import androidx.compose.ui.Modifier
5761
import androidx.compose.ui.graphics.Color
@@ -69,20 +73,35 @@ import earth.maps.cardinal.data.Place
6973
import earth.maps.cardinal.data.isYellow
7074
import earth.maps.cardinal.transit.StopTime
7175
import earth.maps.cardinal.viewmodel.TransitScreenViewModel
76+
import kotlinx.coroutines.delay
7277
import kotlinx.coroutines.launch
78+
import kotlin.time.Duration.Companion.seconds
7379
import kotlin.time.ExperimentalTime
7480

7581
@Composable
7682
fun TransitScreenContent(
7783
viewModel: TransitScreenViewModel,
7884
onRouteClicked: (Place) -> Unit,
7985
) {
86+
var secondsSinceStart by rememberSaveable(viewModel) { mutableIntStateOf(0) }
87+
LaunchedEffect(Unit) {
88+
while (true) {
89+
delay(1.seconds)
90+
secondsSinceStart++
91+
}
92+
}
8093
val coroutineScope = rememberCoroutineScope()
8194
val isRefreshingDepartures = viewModel.isRefreshingDepartures.collectAsState()
82-
val isInitiallyLoading = viewModel.isLoading.collectAsState()
95+
val isLoading = viewModel.isLoading.collectAsState()
8396
val didLoadingFail = viewModel.didLoadingFail.collectAsState()
8497
val scrollState = rememberScrollState()
8598

99+
LaunchedEffect(secondsSinceStart) {
100+
if (secondsSinceStart % 30 == 0) {
101+
viewModel.refreshData()
102+
}
103+
}
104+
86105
Column(
87106
modifier = Modifier
88107
.fillMaxSize()
@@ -120,7 +139,14 @@ fun TransitScreenContent(
120139
}
121140
}
122141

123-
if (isInitiallyLoading.value) {
142+
if (didLoadingFail.value) {
143+
Text(
144+
modifier = Modifier
145+
.fillMaxWidth()
146+
.padding(16.dp),
147+
text = stringResource(string.failed_to_load_departures)
148+
)
149+
} else if (isLoading.value && viewModel.departures.value.isEmpty()) {
124150
Text(
125151
modifier = Modifier
126152
.fillMaxWidth()
@@ -133,13 +159,6 @@ fun TransitScreenContent(
133159
.fillMaxWidth()
134160
.padding(16.dp)
135161
)
136-
} else if (didLoadingFail.value) {
137-
Text(
138-
modifier = Modifier
139-
.fillMaxWidth()
140-
.padding(16.dp),
141-
text = stringResource(string.failed_to_load_departures)
142-
)
143162
} else if (viewModel.departures.value.isEmpty()) {
144163
Text(
145164
text = stringResource(string.no_upcoming_departures),

cardinal-android/app/src/main/java/earth/maps/cardinal/ui/TransitStopScreen.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ fun TransitStopInformation(viewModel: TransitStopCardViewModel, onRouteClicked:
9494
val scrollState = rememberScrollState()
9595
val coroutineScope = rememberCoroutineScope()
9696
val isRefreshingDepartures = viewModel.isRefreshingDepartures.collectAsState()
97-
val isInitiallyLoading = viewModel.isLoading.collectAsState()
97+
val isLoading = viewModel.isLoading.collectAsState()
9898
val didLoadingFail = viewModel.didLoadingFail.collectAsState()
9999

100100
LaunchedEffect(Unit) {
@@ -134,7 +134,14 @@ fun TransitStopInformation(viewModel: TransitStopCardViewModel, onRouteClicked:
134134
}
135135
}
136136

137-
if (isInitiallyLoading.value) {
137+
if (didLoadingFail.value) {
138+
Text(
139+
modifier = Modifier
140+
.fillMaxWidth()
141+
.padding(16.dp),
142+
text = stringResource(string.failed_to_load_departures)
143+
)
144+
} else if (isLoading.value && viewModel.departures.value.isEmpty()) {
138145
Text(
139146
modifier = Modifier
140147
.fillMaxWidth()
@@ -147,13 +154,6 @@ fun TransitStopInformation(viewModel: TransitStopCardViewModel, onRouteClicked:
147154
.fillMaxWidth()
148155
.padding(16.dp)
149156
)
150-
} else if (didLoadingFail.value) {
151-
Text(
152-
modifier = Modifier
153-
.fillMaxWidth()
154-
.padding(16.dp),
155-
text = stringResource(string.failed_to_load_departures)
156-
)
157157
} else if (viewModel.departures.value.isEmpty()) {
158158
Text(
159159
text = stringResource(string.no_upcoming_departures),

cardinal-android/app/src/main/java/earth/maps/cardinal/viewmodel/TransitScreenViewModel.kt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,12 @@ import earth.maps.cardinal.transit.StopTime
3030
import earth.maps.cardinal.transit.TransitStop
3131
import earth.maps.cardinal.transit.TransitousService
3232
import kotlinx.coroutines.FlowPreview
33-
import kotlinx.coroutines.Job
34-
import kotlinx.coroutines.delay
3533
import kotlinx.coroutines.flow.MutableStateFlow
3634
import kotlinx.coroutines.flow.StateFlow
3735
import kotlinx.coroutines.flow.collectLatest
3836
import kotlinx.coroutines.flow.distinctUntilChanged
3937
import kotlinx.coroutines.launch
4038
import javax.inject.Inject
41-
import kotlin.time.Duration.Companion.seconds
4239

4340
@HiltViewModel
4441
class TransitScreenViewModel @Inject constructor(
@@ -53,8 +50,6 @@ class TransitScreenViewModel @Inject constructor(
5350
private const val NUM_EVENTS = 200
5451
}
5552

56-
private var refreshJob: Job? = null
57-
5853
val stop = mutableStateOf<String?>(null)
5954
val reverseGeocodedStop = mutableStateOf<TransitStop?>(null)
6055
val departures = mutableStateOf<List<StopTime>>(emptyList())
@@ -86,13 +81,6 @@ class TransitScreenViewModel @Inject constructor(
8681
// Start observing location updates
8782
locationRepository.startContinuousLocationUpdates(context)
8883
observeLocationUpdates()
89-
90-
refreshJob = viewModelScope.launch {
91-
while (true) {
92-
refreshData()
93-
delay(60.seconds)
94-
}
95-
}
9684
}
9785

9886
/**
@@ -196,10 +184,5 @@ class TransitScreenViewModel @Inject constructor(
196184
}
197185
}
198186
}
199-
200-
override fun onCleared() {
201-
super.onCleared()
202-
refreshJob?.cancel()
203-
}
204187
}
205188

0 commit comments

Comments
 (0)