Skip to content

Commit 071857d

Browse files
author
sds100
committed
#40 fix: never show, copy or share AAA for international mapcodes
Signed-off-by: sds100 <developer.sds100@gmail.com>
1 parent 740ea19 commit 071857d

5 files changed

Lines changed: 79 additions & 13 deletions

File tree

app/src/main/java/com/mapcode/map/InfoScreenPart.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ private fun HeaderWithIcon(modifier: Modifier = Modifier, text: String, @Drawabl
421421
private fun MapcodeBox(
422422
modifier: Modifier = Modifier,
423423
code: String,
424-
territory: String
424+
territory: String?
425425
) {
426426
Card(
427427
modifier = modifier,
@@ -438,10 +438,12 @@ private fun MapcodeBox(
438438
MaterialTheme.typography.body1.copy(fontWeight = FontWeight.Bold).toSpanStyle()
439439

440440
val styledString = buildAnnotatedString {
441-
pushStyle(MaterialTheme.typography.body2.toSpanStyle())
442-
append(territory)
443-
pop()
444-
append(" ")
441+
if (territory != null) {
442+
pushStyle(MaterialTheme.typography.body2.toSpanStyle())
443+
append(territory)
444+
pop()
445+
append(" ")
446+
}
445447
pushStyle(codeSpanStyle)
446448
append(code)
447449
pop()

app/src/main/java/com/mapcode/map/MapViewModel.kt

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.google.maps.android.compose.CameraPositionState
1313
import com.google.maps.android.compose.MapProperties
1414
import com.google.maps.android.compose.MapType
1515
import com.mapcode.Mapcode
16+
import com.mapcode.Territory
1617
import com.mapcode.data.Keys
1718
import com.mapcode.data.PreferenceRepository
1819
import com.mapcode.util.*
@@ -51,9 +52,15 @@ class MapViewModel @Inject constructor(
5152
if (mapcode == null) {
5253
MapcodeUi("", "", "", 0, 0)
5354
} else {
55+
val territoryName = if (mapcode.territory == Territory.AAA) {
56+
null
57+
} else {
58+
mapcode.territory.name
59+
}
60+
5461
MapcodeUi(
5562
mapcode.code,
56-
mapcode.territory.name,
63+
territoryName,
5764
mapcode.territory.fullName,
5865
mapcodeIndex + 1,
5966
mapcodes.size
@@ -178,7 +185,14 @@ class MapViewModel @Inject constructor(
178185
}
179186

180187
val mapcode = mapcodes.value[mapcodeIndex.value]
181-
useCase.copyToClipboard("${mapcode.territory.name} ${mapcode.code}")
188+
189+
val text = if (mapcode.territory == Territory.AAA) {
190+
mapcode.code
191+
} else {
192+
"${mapcode.territory.name} ${mapcode.code}"
193+
}
194+
195+
useCase.copyToClipboard(text)
182196
return true
183197
}
184198

@@ -415,7 +429,13 @@ class MapViewModel @Inject constructor(
415429

416430
fun shareMapcode() {
417431
val mapcode = mapcodes.value.getOrNull(mapcodeIndex.value) ?: return
418-
useCase.shareText(text = "$mapcode", description = "Mapcode: $mapcode")
432+
val text = if (mapcode.territory == Territory.AAA) {
433+
mapcode.code
434+
} else {
435+
mapcode.codeWithTerritory
436+
}
437+
438+
useCase.shareText(text = text, description = "Mapcode: $text")
419439
}
420440
}
421441

app/src/main/java/com/mapcode/map/MapcodeUi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ data class MapcodeUi(
88
/**
99
* The short name of the territory. E.g NLD.
1010
*/
11-
val territoryShortName: String,
11+
val territoryShortName: String?,
1212

1313
/**
1414
* The full name of the territory. E.g Netherlands.

app/src/test/java/com/mapcode/map/FakeShowMapcodeUseCase.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ class FakeShowMapcodeUseCase : ShowMapcodeUseCase {
1717
var clipboard: String? = null
1818
private set
1919

20+
var sharedText: String? = null
21+
private set
22+
2023
var hasInternetConnection: Boolean = true
2124
var currentLocation: Location? = null
2225

@@ -81,7 +84,10 @@ class FakeShowMapcodeUseCase : ShowMapcodeUseCase {
8184
return true
8285
}
8386

84-
override fun shareText(text: String, description: String) {}
87+
override fun shareText(text: String, description: String) {
88+
sharedText = text
89+
}
90+
8591
override suspend fun getMatchingAddresses(query: String): Result<List<String>> {
8692
return success(matchingAddresses[query] ?: emptyList())
8793
}

app/src/test/java/com/mapcode/map/MapViewModelTest.kt

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@ internal class MapViewModelTest {
6969
1.0,
7070
1.0,
7171
addresses = emptyList(),
72-
mapcodes = listOf(Mapcode("1AB.XY", Territory.AAA))
72+
mapcodes = listOf(Mapcode("1AB.XY", Territory.NLD))
7373
)
7474
)
7575

7676
viewModel.onCameraMoved(1.0, 1.0, 0f)
7777
viewModel.copyMapcode()
7878

79-
assertThat(useCase.clipboard).isEqualTo("AAA 1AB.XY")
79+
assertThat(useCase.clipboard).isEqualTo("NLD 1AB.XY")
8080
}
8181

8282
@Test
@@ -443,7 +443,7 @@ internal class MapViewModelTest {
443443
runCurrent()
444444

445445
val uiState2 = viewModel.uiState.value
446-
assertThat(uiState2.mapcodeUi).isEqualTo(MapcodeUi("HHH.HHH", "AAA", "International", 2, 3))
446+
assertThat(uiState2.mapcodeUi).isEqualTo(MapcodeUi("HHH.HHH", null, "International", 2, 3))
447447

448448
viewModel.onTerritoryClick()
449449
runCurrent()
@@ -890,4 +890,42 @@ internal class MapViewModelTest {
890890

891891
assertThat(viewModel.uiState.value.addressUi.matchingAddresses).containsExactly("Street 1", "Street 2")
892892
}
893+
894+
@Test
895+
fun `do not show AAA for international mapcode`() = runTest {
896+
useCase.knownLocations.add(
897+
FakeLocation(1.0, 1.0, addresses = emptyList(), mapcodes = listOf(Mapcode("AB.CD", Territory.AAA)))
898+
)
899+
900+
viewModel.onCameraMoved(1.0, 1.0, zoom = 1f)
901+
runCurrent()
902+
903+
assertThat(viewModel.uiState.value.mapcodeUi.territoryShortName).isNull()
904+
}
905+
906+
@Test
907+
fun `do not copy AAA when copying international mapcodes`() = runTest {
908+
useCase.knownLocations.add(
909+
FakeLocation(1.0, 1.0, addresses = emptyList(), mapcodes = listOf(Mapcode("AB.CD", Territory.AAA)))
910+
)
911+
912+
viewModel.onCameraMoved(1.0, 1.0, zoom = 1f)
913+
runCurrent()
914+
viewModel.copyMapcode()
915+
916+
assertThat(useCase.clipboard).isEqualTo("AB.CD")
917+
}
918+
919+
@Test
920+
fun `do not copy AAA when sharing international mapcodes`() = runTest {
921+
useCase.knownLocations.add(
922+
FakeLocation(1.0, 1.0, addresses = emptyList(), mapcodes = listOf(Mapcode("AB.CD", Territory.AAA)))
923+
)
924+
925+
viewModel.onCameraMoved(1.0, 1.0, zoom = 1f)
926+
runCurrent()
927+
viewModel.shareMapcode()
928+
929+
assertThat(useCase.sharedText).isEqualTo("AB.CD")
930+
}
893931
}

0 commit comments

Comments
 (0)