Skip to content

Commit 8bd9ebd

Browse files
Sync and Dispaly Venue Map
1 parent d7cd3b5 commit 8bd9ebd

File tree

10 files changed

+62
-20
lines changed

10 files changed

+62
-20
lines changed

shared-ui/src/commonMain/kotlin/co.touchlab.droidcon/ui/BottomNavigationView.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ internal fun BottomNavigationView(viewModel: ApplicationViewModel, currentConfer
6464
when (selectedTab) {
6565
ApplicationViewModel.Tab.Schedule -> SessionListView(
6666
viewModel = viewModel.schedule,
67-
title = currentConference?.name ?: "Schedule",
67+
title = currentConference.name,
6868
emptyText = "Sessions could not be loaded.",
6969
)
7070

@@ -74,7 +74,7 @@ internal fun BottomNavigationView(viewModel: ApplicationViewModel, currentConfer
7474
emptyText = "Add sessions to your agenda from session detail in schedule.",
7575
)
7676

77-
ApplicationViewModel.Tab.Venue -> VenueView()
77+
ApplicationViewModel.Tab.Venue -> VenueView(currentConference)
7878
ApplicationViewModel.Tab.Sponsors -> SponsorsView(viewModel.sponsors)
7979
ApplicationViewModel.Tab.Settings -> SettingsView(viewModel.settings)
8080
}
Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,57 @@
11
package co.touchlab.droidcon.ui.venue
22

3+
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Column
35
import androidx.compose.foundation.layout.fillMaxSize
46
import androidx.compose.foundation.layout.padding
7+
import androidx.compose.material3.CircularProgressIndicator
58
import androidx.compose.material3.Scaffold
9+
import androidx.compose.material3.Text
610
import androidx.compose.runtime.Composable
11+
import androidx.compose.runtime.collectAsState
12+
import androidx.compose.runtime.getValue
13+
import androidx.compose.ui.Alignment
714
import androidx.compose.ui.Modifier
15+
import co.touchlab.droidcon.domain.entity.Conference
16+
import coil3.compose.AsyncImagePainter
17+
import coil3.compose.rememberAsyncImagePainter
818
import com.github.panpf.zoomimage.ZoomImage
9-
import droidcon.shared_ui.generated.resources.venue_map_1
10-
import org.jetbrains.compose.resources.painterResource
1119

1220
@Composable
13-
fun VenueView() {
21+
fun VenueView(currentConference: Conference) {
1422
Scaffold { paddingValues ->
1523
VenueBodyView(
1624
modifier = Modifier.padding(paddingValues),
25+
currentConference,
1726
)
1827
}
1928
}
2029

2130
@Composable
22-
fun VenueBodyView(modifier: Modifier = Modifier) {
23-
ZoomImage(
24-
painter = painterResource(droidcon.shared_ui.generated.resources.Res.drawable.venue_map_1),
25-
contentDescription = null,
26-
modifier = modifier.fillMaxSize(),
27-
)
31+
fun VenueBodyView(modifier: Modifier = Modifier, currentConference: Conference) {
32+
val painter = rememberAsyncImagePainter(currentConference.venueMap)
33+
val state by painter.state.collectAsState()
34+
35+
Column(
36+
modifier = Modifier.fillMaxSize(),
37+
horizontalAlignment = Alignment.CenterHorizontally,
38+
verticalArrangement = Arrangement.Center,
39+
) {
40+
when (state) {
41+
is AsyncImagePainter.State.Empty,
42+
is AsyncImagePainter.State.Loading -> {
43+
CircularProgressIndicator()
44+
}
45+
is AsyncImagePainter.State.Error -> {
46+
Text("Error loading venue map.")
47+
}
48+
is AsyncImagePainter.State.Success -> {
49+
ZoomImage(
50+
painter = painter,
51+
contentDescription = null,
52+
modifier = modifier.fillMaxSize(),
53+
)
54+
}
55+
}
56+
}
2857
}

shared/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,6 @@ kotlin {
108108
sqldelight {
109109
databases.create("DroidconDatabase") {
110110
packageName.set("co.touchlab.droidcon.db")
111+
schemaOutputDirectory.set(file("src/commonMain/sqldelight/databases"))
111112
}
112113
}

shared/src/commonMain/kotlin/co/touchlab/droidcon/domain/entity/Conference.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ data class Conference(
1212
val scheduleId: String,
1313
val selected: Boolean = false,
1414
val active: Boolean = true,
15+
val venueMap: String?,
1516
) : DomainEntity<Long>() {
16-
val showVenueMap: Boolean = false // We'll need to add this to the table
17+
val showVenueMap: Boolean = venueMap != null
1718
override val id: Long
1819
get() = requireNotNull(_id) { "Conference id cannot be null" }
1920
}

shared/src/commonMain/kotlin/co/touchlab/droidcon/domain/repository/impl/SqlDelightConferenceRepository.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class SqlDelightConferenceRepository(
4343
scheduleId = conference.scheduleId,
4444
selected = conference.selected,
4545
active = conference.active,
46+
venueMap = conference.venueMap,
4647
)
4748
// Return the last inserted ID
4849
return conferenceQueries.lastInsertRowId().executeAsOne()
@@ -60,6 +61,7 @@ class SqlDelightConferenceRepository(
6061
selected = conference.selected,
6162
active = conference.active,
6263
id = conference.id,
64+
venueMap = conference.venueMap,
6365
)
6466
return true
6567
} catch (e: Exception) {
@@ -83,6 +85,7 @@ class SqlDelightConferenceRepository(
8385
scheduleId: String,
8486
selected: Boolean,
8587
active: Boolean,
88+
venueMap: String?,
8689
): Conference = Conference(
8790
_id = id,
8891
name = conferenceName,
@@ -93,5 +96,6 @@ class SqlDelightConferenceRepository(
9396
scheduleId = scheduleId,
9497
selected = selected,
9598
active = active,
99+
venueMap = venueMap,
96100
)
97101
}

shared/src/commonMain/kotlin/co/touchlab/droidcon/domain/service/impl/DefaultSyncService.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,13 +240,15 @@ class DefaultSyncService(
240240
val collectionName = conferenceFields.collectionName.stringValue
241241
val apiKey = conferenceFields.apiKey.stringValue
242242
val scheduleId = conferenceFields.scheduleId.stringValue
243+
val venueMap = conferenceFields.venueMap?.stringValue
243244

244245
// Only update if any field has changed
245246
val needsUpdate = existingConference.timeZone != timeZone ||
246247
existingConference.projectId != projectId ||
247248
existingConference.collectionName != collectionName ||
248249
existingConference.apiKey != apiKey ||
249-
existingConference.scheduleId != scheduleId
250+
existingConference.scheduleId != scheduleId ||
251+
existingConference.venueMap != venueMap
250252

251253
if (needsUpdate) {
252254
val updatedConference = Conference(
@@ -259,6 +261,7 @@ class DefaultSyncService(
259261
scheduleId = scheduleId,
260262
selected = existingConference.selected,
261263
active = existingConference.active,
264+
venueMap = venueMap,
262265
)
263266
conferenceRepository.update(updatedConference)
264267
log.d { "Updated conference: $conferenceName (fields changed)" }
@@ -276,6 +279,7 @@ class DefaultSyncService(
276279
scheduleId = conferenceFields.scheduleId.stringValue,
277280
selected = false,
278281
active = true,
282+
venueMap = conferenceFields.venueMap?.stringValue
279283
)
280284
conferenceRepository.add(newConference)
281285
log.d { "Added new conference: $conferenceName" }
@@ -296,6 +300,7 @@ class DefaultSyncService(
296300
scheduleId = conference.scheduleId,
297301
selected = conference.selected,
298302
active = false,
303+
venueMap = conference.venueMap,
299304
)
300305
conferenceRepository.update(deactivatedConference)
301306
log.d { "Marked conference as inactive: $name" }

shared/src/commonMain/kotlin/co/touchlab/droidcon/domain/service/impl/dto/ConferencesDto.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ object ConferencesDto {
2222
val collectionName: StringValue,
2323
val apiKey: StringValue,
2424
val scheduleId: StringValue,
25-
val venueMap: StringValue,
25+
val venueMap: StringValue? = null,
2626
)
2727

2828
@Serializable

shared/src/commonMain/sqldelight/co/touchlab/droidcon/db/Conference.sq

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,17 @@ CREATE TABLE conferenceTable(
1010
apiKey TEXT NOT NULL,
1111
scheduleId TEXT NOT NULL,
1212
selected INTEGER AS Boolean NOT NULL DEFAULT 0,
13-
active INTEGER AS Boolean NOT NULL DEFAULT 1
13+
active INTEGER AS Boolean NOT NULL DEFAULT 1,
14+
venueMap TEXT
1415
);
1516

1617
insert:
17-
INSERT INTO conferenceTable(conferenceName, conferenceTimeZone, projectId, collectionName, apiKey, scheduleId, selected, active)
18-
VALUES (?, ?, ?, ?, ?, ?, ?, ?);
18+
INSERT INTO conferenceTable(conferenceName, conferenceTimeZone, projectId, collectionName, apiKey, scheduleId, selected, active, venueMap)
19+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);
1920

2021
updateConference:
2122
UPDATE conferenceTable
22-
SET conferenceName = ?, conferenceTimeZone = ?, projectId = ?, collectionName = ?, apiKey = ?, scheduleId = ?, selected = ?, active = ?
23+
SET conferenceName = ?, conferenceTimeZone = ?, projectId = ?, collectionName = ?, apiKey = ?, scheduleId = ?, selected = ?, active = ?, venueMap = ?
2324
WHERE id = ?;
2425

2526
selectAll:
@@ -52,8 +53,8 @@ changeSelectedConference {
5253
UPDATE conferenceTable SET selected = 1 WHERE id = :conferenceId;
5354
}
5455

55-
INSERT INTO conferenceTable(conferenceName, conferenceTimeZone, projectId, collectionName, apiKey, scheduleId, selected, active)
56-
VALUES ("Droidcon NYC 2025", "America/New_York", "droidcon-148cc", "sponsors-nyc-2025", "AIzaSyCkD5DH2rUJ8aZuJzANpIFj0AVuCNik1l0", "4lffd9w7", 1, 1);
56+
INSERT INTO conferenceTable(conferenceName, conferenceTimeZone, projectId, collectionName, apiKey, scheduleId, selected, active, venueMap)
57+
VALUES ("Droidcon NYC 2025", "America/New_York", "droidcon-148cc", "sponsors-nyc-2025", "AIzaSyCkD5DH2rUJ8aZuJzANpIFj0AVuCNik1l0", "4lffd9w7", 1, 1, "https://www.google.com");
5758

5859
lastInsertRowId:
5960
SELECT last_insert_rowid();
76 KB
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE conferenceTable ADD COLUMN venueMap TEXT;

0 commit comments

Comments
 (0)