Skip to content

Commit 822559d

Browse files
author
sds100
committed
#35 fix: adapt territories page for small height screens
Signed-off-by: sds100 <developer.sds100@gmail.com>
1 parent c7f0b19 commit 822559d

2 files changed

Lines changed: 208 additions & 127 deletions

File tree

app/src/main/java/com/mapcode/onboarding/OnboardingScreen.kt

Lines changed: 7 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,27 @@
1717
package com.mapcode.onboarding
1818

1919
import androidx.compose.foundation.layout.*
20-
import androidx.compose.foundation.rememberScrollState
21-
import androidx.compose.foundation.verticalScroll
2220
import androidx.compose.material.*
2321
import androidx.compose.material.icons.Icons
24-
import androidx.compose.material.icons.outlined.*
25-
import androidx.compose.runtime.*
26-
import androidx.compose.runtime.saveable.rememberSaveable
22+
import androidx.compose.material.icons.outlined.ArrowBack
23+
import androidx.compose.material.icons.outlined.ArrowForward
24+
import androidx.compose.material.icons.outlined.Done
25+
import androidx.compose.runtime.Composable
26+
import androidx.compose.runtime.rememberCoroutineScope
2727
import androidx.compose.ui.Alignment
2828
import androidx.compose.ui.Modifier
2929
import androidx.compose.ui.draw.alpha
3030
import androidx.compose.ui.graphics.Color
3131
import androidx.compose.ui.graphics.lerp
3232
import androidx.compose.ui.res.stringResource
33-
import androidx.compose.ui.text.font.FontWeight
34-
import androidx.compose.ui.text.style.TextAlign
3533
import androidx.compose.ui.tooling.preview.Devices
3634
import androidx.compose.ui.tooling.preview.Preview
3735
import androidx.compose.ui.unit.dp
3836
import com.google.accompanist.pager.*
3937
import com.mapcode.AppViewModel
40-
import com.mapcode.Mapcode
4138
import com.mapcode.R
4239
import com.mapcode.destinations.MapScreenDestination
43-
import com.mapcode.map.MapcodeButtons
44-
import com.mapcode.map.MapcodeUi
4540
import com.mapcode.theme.*
46-
import com.mapcode.util.MapcodeUtils
4741
import com.mapcode.util.animateScrollToNextPage
4842
import com.mapcode.util.animateScrollToPreviousPage
4943
import com.mapcode.util.isLastPage
@@ -142,7 +136,7 @@ private fun Pager(state: PagerState, layoutType: OnboardingScreenLayoutType) {
142136
modifier = pageModifier,
143137
pageColors = pageColors
144138
)
145-
1 -> TerritoriesPage(
139+
1 -> TerritoriesPageVertical(
146140
modifier = pageModifier,
147141
pageColors = pageColors
148142
)
@@ -154,7 +148,7 @@ private fun Pager(state: PagerState, layoutType: OnboardingScreenLayoutType) {
154148
modifier = pageModifier,
155149
pageColors = pageColors
156150
)
157-
1 -> TerritoriesPage(
151+
1 -> TerritoriesPageHorizontal(
158152
modifier = pageModifier,
159153
pageColors = pageColors
160154
)
@@ -270,120 +264,6 @@ private fun PreviousPageButton(modifier: Modifier = Modifier, onClick: () -> Uni
270264
}
271265
}
272266

273-
@Composable
274-
private fun TerritoriesPage(modifier: Modifier, pageColors: PageColors) {
275-
Column(modifier) {
276-
Icon(
277-
modifier = Modifier
278-
.align(Alignment.CenterHorizontally)
279-
.fillMaxWidth()
280-
.padding(32.dp)
281-
.weight(0.3f),
282-
imageVector = Icons.Outlined.PinDrop,
283-
contentDescription = null,
284-
tint = pageColors.foreground
285-
)
286-
287-
Text(
288-
modifier = Modifier
289-
.fillMaxWidth()
290-
.weight(0.1f),
291-
text = stringResource(R.string.onboarding_territories_page_title),
292-
style = MaterialTheme.typography.h4,
293-
textAlign = TextAlign.Center,
294-
color = pageColors.foreground
295-
)
296-
297-
Column(
298-
modifier = Modifier
299-
.weight(0.4f)
300-
.verticalScroll(state = rememberScrollState())
301-
) {
302-
Text(
303-
modifier = Modifier.fillMaxWidth(),
304-
text = stringResource(R.string.onboarding_territories_page_text),
305-
style = MaterialTheme.typography.body1
306-
)
307-
}
308-
309-
Spacer(Modifier.height(16.dp))
310-
311-
TerritoriesPageButtons(pageColors = pageColors)
312-
}
313-
}
314-
315-
@Preview
316-
@Composable
317-
private fun TerritoriesPagePreview() {
318-
MapcodeTheme {
319-
Surface(color = pageColors(1).background) {
320-
TerritoriesPage(
321-
modifier = Modifier
322-
.fillMaxSize()
323-
.padding(16.dp),
324-
pageColors = pageColors(1)
325-
)
326-
}
327-
}
328-
}
329-
330-
@Preview(widthDp = 800, heightDp = 300)
331-
@Composable
332-
private fun TerritoriesPageLandscapePreview() {
333-
MapcodeTheme {
334-
Surface(color = pageColors(1).background) {
335-
TerritoriesPage(
336-
modifier = Modifier
337-
.fillMaxSize()
338-
.padding(16.dp),
339-
pageColors = pageColors(1)
340-
)
341-
}
342-
}
343-
}
344-
345-
@Composable
346-
private fun TerritoriesPageButtons(modifier: Modifier = Modifier, pageColors: PageColors) {
347-
val mapcodes: List<Mapcode> = remember { MapcodeUtils.GoogleHqMapcodes() }
348-
var mapcodeIndex by rememberSaveable { mutableStateOf(0) }
349-
350-
val mapcodeUi: MapcodeUi by remember {
351-
derivedStateOf {
352-
MapcodeUi.fromMapcode(mapcodes[mapcodeIndex], mapcodeIndex, mapcodes.size)
353-
}
354-
}
355-
356-
Column(modifier) {
357-
Row {
358-
Spacer(Modifier.width(8.dp))
359-
360-
Text(
361-
text = stringResource(R.string.onboarding_territories_click_territory_tooltip),
362-
color = pageColors.foreground,
363-
style = MaterialTheme.typography.subtitle1.copy(fontWeight = FontWeight.Bold)
364-
)
365-
366-
Icon(
367-
imageVector = Icons.Outlined.KeyboardDoubleArrowDown,
368-
contentDescription = null,
369-
tint = pageColors.foreground
370-
)
371-
}
372-
373-
Spacer(Modifier.height(8.dp))
374-
375-
MapcodeTheme(darkTheme = false) {
376-
MapcodeButtons(
377-
state = mapcodeUi,
378-
onTerritoryClick = {
379-
mapcodeIndex = (mapcodeIndex + 1) % mapcodes.size
380-
},
381-
onMapcodeClick = {}
382-
)
383-
}
384-
}
385-
}
386-
387267
private fun pageColors(page: Int): PageColors {
388268
return when (page) {
389269
0 -> PageColors(
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
/*
2+
* Copyright (C) 2022, Stichting Mapcode Foundation (http://www.mapcode.com)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.mapcode.onboarding
18+
19+
import androidx.compose.foundation.layout.*
20+
import androidx.compose.foundation.rememberScrollState
21+
import androidx.compose.foundation.verticalScroll
22+
import androidx.compose.material.Icon
23+
import androidx.compose.material.MaterialTheme
24+
import androidx.compose.material.Surface
25+
import androidx.compose.material.Text
26+
import androidx.compose.material.icons.Icons
27+
import androidx.compose.material.icons.outlined.KeyboardDoubleArrowDown
28+
import androidx.compose.material.icons.outlined.PinDrop
29+
import androidx.compose.runtime.*
30+
import androidx.compose.runtime.saveable.rememberSaveable
31+
import androidx.compose.ui.Alignment
32+
import androidx.compose.ui.Modifier
33+
import androidx.compose.ui.res.stringResource
34+
import androidx.compose.ui.text.font.FontWeight
35+
import androidx.compose.ui.text.style.TextAlign
36+
import androidx.compose.ui.tooling.preview.Preview
37+
import androidx.compose.ui.unit.dp
38+
import com.mapcode.Mapcode
39+
import com.mapcode.R
40+
import com.mapcode.map.MapcodeButtons
41+
import com.mapcode.map.MapcodeUi
42+
import com.mapcode.theme.Cyan200
43+
import com.mapcode.theme.Cyan500
44+
import com.mapcode.theme.Cyan900
45+
import com.mapcode.theme.MapcodeTheme
46+
import com.mapcode.util.MapcodeUtils
47+
48+
@Composable
49+
fun TerritoriesPageVertical(modifier: Modifier, pageColors: PageColors) {
50+
Column(modifier) {
51+
Icon(
52+
modifier = Modifier
53+
.align(Alignment.CenterHorizontally)
54+
.fillMaxWidth()
55+
.padding(32.dp)
56+
.weight(0.3f),
57+
imageVector = Icons.Outlined.PinDrop,
58+
contentDescription = null,
59+
tint = pageColors.foreground
60+
)
61+
62+
Text(
63+
modifier = Modifier
64+
.fillMaxWidth()
65+
.weight(0.1f),
66+
text = stringResource(R.string.onboarding_territories_page_title),
67+
style = MaterialTheme.typography.h4,
68+
textAlign = TextAlign.Center,
69+
color = pageColors.foreground
70+
)
71+
72+
Column(
73+
modifier = Modifier
74+
.weight(0.4f)
75+
.verticalScroll(state = rememberScrollState())
76+
) {
77+
Text(
78+
modifier = Modifier.fillMaxWidth(),
79+
text = stringResource(R.string.onboarding_territories_page_text),
80+
style = MaterialTheme.typography.body1
81+
)
82+
}
83+
84+
Spacer(Modifier.height(16.dp))
85+
86+
TerritoriesPageButtons(pageColors = pageColors)
87+
}
88+
}
89+
90+
@Composable
91+
fun TerritoriesPageHorizontal(modifier: Modifier, pageColors: PageColors) {
92+
Column(modifier) {
93+
Text(
94+
modifier = Modifier.fillMaxWidth(),
95+
text = stringResource(R.string.onboarding_territories_page_title),
96+
style = MaterialTheme.typography.h5,
97+
textAlign = TextAlign.Center,
98+
color = pageColors.foreground
99+
)
100+
101+
Column(
102+
modifier = Modifier
103+
.weight(1f)
104+
.verticalScroll(state = rememberScrollState())
105+
) {
106+
Text(
107+
modifier = Modifier.fillMaxWidth(),
108+
text = stringResource(R.string.onboarding_territories_page_text),
109+
style = MaterialTheme.typography.body1
110+
)
111+
}
112+
113+
Spacer(Modifier.height(8.dp))
114+
115+
TerritoriesPageButtons(modifier = Modifier.wrapContentWidth(), pageColors = pageColors)
116+
}
117+
}
118+
119+
@Composable
120+
private fun TerritoriesPageButtons(modifier: Modifier = Modifier, pageColors: PageColors) {
121+
val mapcodes: List<Mapcode> = remember { MapcodeUtils.GoogleHqMapcodes() }
122+
var mapcodeIndex by rememberSaveable { mutableStateOf(0) }
123+
124+
val mapcodeUi: MapcodeUi by remember {
125+
derivedStateOf {
126+
MapcodeUi.fromMapcode(mapcodes[mapcodeIndex], mapcodeIndex, mapcodes.size)
127+
}
128+
}
129+
130+
Column(modifier) {
131+
Row {
132+
Spacer(Modifier.width(8.dp))
133+
134+
Text(
135+
text = stringResource(R.string.onboarding_territories_click_territory_tooltip),
136+
color = pageColors.foreground,
137+
style = MaterialTheme.typography.subtitle1.copy(fontWeight = FontWeight.Bold)
138+
)
139+
140+
Icon(
141+
imageVector = Icons.Outlined.KeyboardDoubleArrowDown,
142+
contentDescription = null,
143+
tint = pageColors.foreground
144+
)
145+
}
146+
147+
Spacer(Modifier.height(8.dp))
148+
149+
MapcodeTheme(darkTheme = false) {
150+
MapcodeButtons(
151+
state = mapcodeUi,
152+
onTerritoryClick = {
153+
mapcodeIndex = (mapcodeIndex + 1) % mapcodes.size
154+
},
155+
onMapcodeClick = {}
156+
)
157+
}
158+
}
159+
}
160+
161+
@Preview
162+
@Composable
163+
private fun Preview() {
164+
val pageColors = PageColors(
165+
foreground = Cyan900,
166+
background = Cyan200,
167+
backgroundDark = Cyan500
168+
)
169+
170+
MapcodeTheme {
171+
Surface(color = pageColors.background) {
172+
TerritoriesPageVertical(
173+
modifier = Modifier
174+
.fillMaxSize()
175+
.padding(16.dp),
176+
pageColors = pageColors
177+
)
178+
}
179+
}
180+
}
181+
182+
@Preview(widthDp = 800, heightDp = 300)
183+
@Composable
184+
private fun LandscapePreview() {
185+
val pageColors = PageColors(
186+
foreground = Cyan900,
187+
background = Cyan200,
188+
backgroundDark = Cyan500
189+
)
190+
191+
MapcodeTheme {
192+
Surface(color = pageColors.background) {
193+
TerritoriesPageHorizontal(
194+
modifier = Modifier
195+
.fillMaxSize()
196+
.padding(16.dp),
197+
pageColors = pageColors
198+
)
199+
}
200+
}
201+
}

0 commit comments

Comments
 (0)