Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions android/src/main/java/co/touchlab/droidcon/android/MainApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import co.touchlab.droidcon.initKoin
import co.touchlab.droidcon.service.ParseUrlViewService
import co.touchlab.droidcon.ui.uiModule
import co.touchlab.droidcon.util.ClasspathResourceReader
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase
import com.google.firebase.Firebase
import com.google.firebase.analytics.analytics
import com.russhwolf.settings.ExperimentalSettingsApi
import com.russhwolf.settings.ObservableSettings
import com.russhwolf.settings.SharedPreferencesSettings
Expand Down
12 changes: 10 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
Expand All @@ -24,8 +25,15 @@ subprojects {
}

tasks.withType(KotlinCompile::class).all {
kotlinOptions {
jvmTarget = "1.8"
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8)
freeCompilerArgs.add("-opt-in=kotlin.time.ExperimentalTime")
}
}

tasks.withType(KotlinNativeCompile::class).all {
compilerOptions {
freeCompilerArgs.add("-opt-in=kotlin.time.ExperimentalTime")
}
}
configure<org.jlleitschuh.gradle.ktlint.KtlintExtension> {
Expand Down
69 changes: 36 additions & 33 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,55 +1,58 @@
[versions]
## SDK Versions
minSdk = "21"
targetSdk = "35"
compileSdk = "35"
minSdk = "23"
targetSdk = "36"
compileSdk = "36"

# Dependencies
kotlin = "2.1.10"
kotlin = "2.2.21"

## Gradle Plugin version must be compatible with Multiplatform
## https://kotlinlang.org/docs/multiplatform-compatibility-guide.html#version-compatibility
android-gradle-plugin = "8.9.0"
coroutines = "1.10.1"
kotlinx-datetime = "0.6.1"
ktor = "3.0.3"
android-gradle-plugin = "8.13.1"
coroutines = "1.10.2"
kotlinx-datetime = "0.7.1"
ktor = "3.3.2"

stately = "2.1.0"
java = "21"
kermit = "2.0.5"
sqliter = "1.3.1"
kermit = "2.0.8"
sqliter = "1.3.3"

hyperdrive = "0.1.148"

multiplatformSettings = "1.2.0"
sqlDelight = "2.0.2"
firebase-bom = "33.10.0"
firebase-crashlytics-gradle = "3.0.3"
gms-google-services = "4.4.2"
multiplatformSettings = "1.3.0"
sqlDelight = "2.2.1"
firebase-analytics = "22.5.0"
firebase-crashlytics = "19.4.4"
firebase-messaging = "24.1.2"
firebase-bom = "34.6.0"
firebase-crashlytics-gradle = "3.0.6"
gms-google-services = "4.4.4"

# TODO: Update Compose libraries. There is currently a conflicing issue with the HorizontalPager
compose-androidx-ui = "1.7.8"
compose-androidx-ui = "1.9.5"
compose-compiler = "1.5.15"
composeNavigation = "2.9.5"
compose-jb = "1.7.3"
composeNavigation = "2.9.6"
compose-jb = "1.9.3"

splashscreen = "1.0.1"
splashscreen = "1.2.0"
junit = "4.13.2"
junitKtx = "1.2.1"
imageLoader = "1.2.2.1"
junitKtx = "1.3.0"
imageLoader = "1.10.0"
korio = "4.0.10"

# Sample - Android
androidx-core = "1.15.0"
androidx-lifecycle = "2.8.7"
androidx-activity-compose = "1.10.1"
androidx-core = "1.17.0"
androidx-lifecycle = "2.10.0"
androidx-activity-compose = "1.12.0"
android-desugaring = "2.1.5"
koin = "4.0.2"
uuid = "0.8.3"
ktlint = "12.1.1"
coil = "3.1.0"
zoomimage = "1.1.0-alpha06"
skie = "0.10.1"
koin = "4.1.1"
uuid = "0.8.4"
ktlint = "14.0.1"
coil = "3.3.0"
zoomimage = "1.4.0"
skie = "0.10.8"

[libraries]
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
Expand All @@ -59,9 +62,9 @@ compose-compiler = { module = "androidx.compose.compiler:compiler", version.ref
androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "splashscreen" }

firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase-bom" }
firebase-analytics = { module = "com.google.firebase:firebase-analytics-ktx", version = "_" }
firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics-ktx", version = "_" }
firebase-messaging = { module = "com.google.firebase:firebase-messaging-ktx", version = "_" }
firebase-analytics = { module = "com.google.firebase:firebase-analytics-ktx", version.ref = "firebase-analytics" }
firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics-ktx", version.ref = "firebase-crashlytics" }
firebase-messaging = { module = "com.google.firebase:firebase-messaging-ktx", version.ref = "firebase-messaging" }
hyperdrive-multiplatformx-api = { module = "org.brightify.hyperdrive:multiplatformx-api", version.ref = "hyperdrive" }
android-desugar = { module = "com.android.tools:desugar_jdk_libs", version.ref = "android-desugaring" }
uuid = { module = "com.benasher44:uuid", version.ref = "uuid" }
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
3 changes: 1 addition & 2 deletions ios/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
Expand All @@ -23,6 +22,7 @@ kotlin {
languageSettings.apply {
optIn("kotlin.RequiresOptIn")
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
optIn("kotlin.time.ExperimentalTime")
}
}
iosMain.dependencies {
Expand All @@ -49,7 +49,6 @@ kotlin {
framework {
baseName = "DroidconKit"
isStatic = true
embedBitcodeMode = BitcodeEmbeddingMode.DISABLE

freeCompilerArgs += listOf(
"-linker-option", "-framework", "-linker-option", "Metal",
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ dependencyResolutionManagement {
}

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0")
id("org.gradle.toolchains.foojay-resolver-convention") version ("0.8.0")
}

include(":shared", ":shared-ui", ":android", ":ios")
Expand Down
1 change: 1 addition & 0 deletions shared-ui/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ kotlin {
languageSettings.apply {
optIn("kotlin.RequiresOptIn")
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
optIn("kotlin.time.ExperimentalTime")
}
}
matching { it.name.endsWith("Test") }.configureEach {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ import androidx.compose.material.icons.filled.Description
import androidx.compose.material.icons.filled.Info
import androidx.compose.material.icons.outlined.BookmarkAdd
import androidx.compose.material3.Button
import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
Expand Down Expand Up @@ -102,7 +102,7 @@ internal fun SessionDetailView(viewModel: SessionDetailViewModel) {
val title by viewModel.observeTitle.observeAsState()
val locationInfo by viewModel.observeInfo.observeAsState()
HeaderView(title, locationInfo)
Divider()
HorizontalDivider()
}
if (state != SessionDetailViewModel.SessionState.Ended) {
val isAttending by viewModel.observeIsAttending.observeAsState()
Expand Down Expand Up @@ -167,7 +167,7 @@ internal fun SessionDetailView(viewModel: SessionDetailViewModel) {
textAlign = TextAlign.Center,
)

Divider()
HorizontalDivider()

speakers.forEach { speaker ->
SpeakerView(speaker)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Description
import androidx.compose.material.icons.filled.Language
import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
Expand Down Expand Up @@ -80,7 +80,7 @@ internal fun SpeakerDetailView(viewModel: SpeakerDetailViewModel) {
SocialView(WebLink.fromUrl(it), "linkedin")
}

Divider()
HorizontalDivider()

viewModel.bio?.let {
BioView(it, viewModel.bioWebLinks)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ package co.touchlab.droidcon.util
import kotlinx.datetime.LocalDateTime

val LocalDateTime.startOfMinute: LocalDateTime
get() = LocalDateTime(year, month, dayOfMonth, hour, minute)
get() = LocalDateTime(year, month, day, hour, minute)
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideOutHorizontally
import androidx.compose.animation.with
import androidx.compose.animation.togetherWith
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.RememberObserver
Expand Down Expand Up @@ -260,9 +260,9 @@ internal fun NavigationStack(key: Any?, links: NavigationStackScope.() -> Unit,
targetState = activeLinkComposables,
transitionSpec = {
if (initialState.indexOfLast { it.body != null } < targetState.indexOfLast { it.body != null }) {
slideInHorizontally(initialOffsetX = { it }) with slideOutHorizontally(targetOffsetX = { -it })
slideInHorizontally(initialOffsetX = { it }).togetherWith(slideOutHorizontally(targetOffsetX = { -it }))
} else {
slideInHorizontally(initialOffsetX = { -it }) with slideOutHorizontally(targetOffsetX = { it })
slideInHorizontally(initialOffsetX = { -it }).togetherWith(slideOutHorizontally(targetOffsetX = { it }))
}
},
contentAlignment = Alignment.BottomCenter,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ import co.touchlab.droidcon.dto.WebLink
import co.touchlab.droidcon.service.ParseUrlViewService
import co.touchlab.droidcon.util.formatter.DateFormatter
import co.touchlab.droidcon.viewmodel.FeedbackDialogViewModel
import kotlin.time.Instant
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.map
import kotlinx.datetime.Instant
import org.brightify.hyperdrive.multiplatformx.BaseViewModel
import org.brightify.hyperdrive.multiplatformx.property.asFlow
import org.brightify.hyperdrive.multiplatformx.property.flatMapLatest
Expand Down
1 change: 1 addition & 0 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ kotlin {
languageSettings.apply {
optIn("kotlin.RequiresOptIn")
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
optIn("kotlin.time.ExperimentalTime")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import co.touchlab.kermit.Logger
import com.russhwolf.settings.ObservableSettings
import com.russhwolf.settings.get
import com.russhwolf.settings.set
import kotlinx.datetime.Instant
import kotlin.time.Instant
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

Expand Down
2 changes: 1 addition & 1 deletion shared/src/commonMain/kotlin/co/touchlab/droidcon/Koin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ import co.touchlab.droidcon.domain.service.impl.json.AboutJsonResourceDataSource
import co.touchlab.droidcon.domain.service.impl.json.JsonResourceReader
import io.ktor.client.HttpClient
import io.ktor.client.plugins.HttpTimeout
import kotlin.time.Clock
import kotlinx.coroutines.runBlocking
import kotlinx.datetime.Clock
import kotlinx.datetime.TimeZone
import kotlinx.serialization.json.Json
import org.koin.core.KoinApplication
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package co.touchlab.droidcon.application.service

import co.touchlab.droidcon.domain.entity.Session
import co.touchlab.droidcon.service.DeepLinkNotificationHandler
import kotlinx.datetime.Instant
import kotlin.time.Instant

interface NotificationService {
suspend fun initialize(): Boolean
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package co.touchlab.droidcon.domain.entity

import co.touchlab.droidcon.domain.service.DateTimeService
import kotlinx.datetime.Instant
import kotlin.time.Instant

class Session(
private val dateTimeService: DateTimeService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import co.touchlab.droidcon.domain.entity.Room
import co.touchlab.droidcon.domain.entity.Session
import co.touchlab.droidcon.domain.repository.SessionRepository
import co.touchlab.droidcon.domain.service.DateTimeService
import kotlin.time.Instant
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first
import kotlinx.datetime.Instant

class SqlDelightSessionRepository(private val dateTimeService: DateTimeService, private val sessionQueries: SessionQueries) :
BaseRepository<Session.Id, Session>(),
Expand Down Expand Up @@ -73,7 +73,9 @@ class SqlDelightSessionRepository(private val dateTimeService: DateTimeService,
)
}

override fun doDelete(id: Session.Id, conferenceId: Long) = sessionQueries.deleteById(id.value, conferenceId)
override fun doDelete(id: Session.Id, conferenceId: Long) {
sessionQueries.deleteById(id.value, conferenceId)
}

override fun contains(id: Session.Id, conferenceId: Long): Boolean =
sessionQueries.existsById(id.value, conferenceId).executeAsOne().toBoolean()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package co.touchlab.droidcon.domain.repository.impl.adapter

import app.cash.sqldelight.ColumnAdapter
import kotlinx.datetime.Instant
import kotlin.time.Instant

object InstantSqlDelightAdapter : ColumnAdapter<Instant, Long> {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package co.touchlab.droidcon.domain.service

import kotlinx.datetime.Instant
import kotlin.time.Instant
import kotlinx.datetime.LocalDateTime
import kotlinx.datetime.TimeZone

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package co.touchlab.droidcon.domain.service.impl

import co.touchlab.droidcon.domain.service.DateTimeService
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import kotlin.time.Clock
import kotlin.time.Instant
import kotlinx.datetime.LocalDateTime
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toInstant
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ import co.touchlab.droidcon.domain.service.FeedbackService
import com.russhwolf.settings.ExperimentalSettingsApi
import com.russhwolf.settings.ObservableSettings
import com.russhwolf.settings.set
import kotlin.time.Clock
import kotlinx.coroutines.flow.first
import kotlinx.datetime.Clock
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

@OptIn(ExperimentalSettingsApi::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import co.touchlab.droidcon.domain.entity.Session
import co.touchlab.droidcon.domain.repository.SessionRepository
import co.touchlab.droidcon.domain.service.ConferenceConfigProvider
import co.touchlab.droidcon.domain.service.ScheduleService
import kotlinx.datetime.Instant
import kotlin.time.Instant

class DefaultScheduleService(
private val sessionRepository: SessionRepository,
Expand Down
Loading