Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
8cda8af
Add nav3 dependencies
zsmb13 Jun 18, 2025
f79d4b8
Disable non-Android platforms
zsmb13 Oct 2, 2025
fb71635
Initial attempt at some nav3 navigation
zsmb13 Jun 18, 2025
a5098ba
Update transition handling code, main screen nested navigation
zsmb13 Oct 2, 2025
bd610c2
Add type param to MainNavigation
zsmb13 Oct 2, 2025
c07892f
Fix transitions on main screen
zsmb13 Oct 2, 2025
58185ce
Introduce BackStack wrapper
zsmb13 Oct 2, 2025
d8fa8b9
Try to use dev build for KMP Nav3
zsmb13 Oct 2, 2025
cfae48d
Use correct KMP artifact
zsmb13 Oct 2, 2025
3805bf5
Upgrade `yarn.lock`
zsmb13 Oct 2, 2025
f228a56
Fix animation param, add TODOs
zsmb13 Oct 2, 2025
dc6e7f8
Add entry decorators
zsmb13 Oct 2, 2025
db7af4a
Re-enable backend module
zsmb13 Oct 2, 2025
b738ae9
Use lifecycle-viewmodel-navigation3, update to latest dev build
zsmb13 Oct 20, 2025
0939f2b
Bump library versions to CMP 1.10.0-alpha03
zsmb13 Oct 22, 2025
8930875
Use NavBackStack instead of a custom BackStack class
zsmb13 Oct 27, 2025
b994e3b
Simplify setup
zsmb13 Oct 31, 2025
d9221a3
Fix start screen handling
zsmb13 Oct 31, 2025
35be9dd
Fix after rebase
zsmb13 Nov 3, 2025
98217dc
Replace BackHandler with NavigationBackhandler
zsmb13 Nov 5, 2025
6611582
Remove custom animation config
zsmb13 Nov 5, 2025
05aa500
Inline start screen setup in NavDisplay
zsmb13 Nov 5, 2025
2113f5e
Remove Compose dev repo
zsmb13 Nov 5, 2025
79e6894
Remove PlatformNavHandler
zsmb13 Nov 5, 2025
c7437a3
Simplify bottom nav setup
zsmb13 Nov 5, 2025
358aa18
Remove dependency on NavKey
zsmb13 Nov 5, 2025
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
1 change: 1 addition & 0 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ kotlin {
implementation(libs.compose.ui.tooling.preview)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.splashscreen)
implementation(libs.androidx.navigation3.ui)
}

androidUnitTest.dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,6 @@ import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.scaleIn
import androidx.compose.animation.scaleOut
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import com.mmk.kmpnotifier.extensions.onCreateOrOnNewIntent
import com.mmk.kmpnotifier.notification.NotifierManager
Expand Down Expand Up @@ -48,14 +43,6 @@ class MainActivity : ComponentActivity() {
window.isNavigationBarContrastEnforced = false
}
},
popEnterTransition = {
scaleIn(initialScale = 1.05f) +
fadeIn(animationSpec = tween(50))
},
popExitTransition = {
scaleOut(targetScale = 0.9f, animationSpec = tween(50)) +
fadeOut(animationSpec = tween(50, delayMillis = 50))
},
)
}
}
Expand Down
12 changes: 7 additions & 5 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ android-targetSdk = "36"
androidx-activityCompose = "1.11.0"
androidx-core-ktx = "1.17.0"
androidx-core-splashscreen = "1.0.1"
androidx-lifecycle = "2.9.4"
androidx-lifecycle = "2.10.0-alpha03"
androidx-navigation = "2.9.0"
androidx-preference = "1.2.1"
coil = "3.3.0"
compose-android = "1.9.0"
compose-hot-reload = "1.0.0-beta09"
compose-multiplatform = "1.9.0"
compose-hot-reload = "1.0.0-rc02"
compose-multiplatform = "1.10.0-alpha03"
coroutines = "1.10.2"
doistx-normalize = "1.2.0"
exposed = "0.61.0"
Expand All @@ -34,21 +34,23 @@ markdown = "0.37.0"
multiplatform-settings = "1.3.0"
postgresql = "42.7.7"
slf4jNop = "2.0.17"
nav3Core = "1.0.0-alpha03"

[libraries]
aboutlibraries-core = { module = "com.mikepenz:aboutlibraries-core", version.ref = "aboutlibraries" }
android-svg = { module = "com.caverock:androidsvg-aar", version.ref = "android-svg" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core-ktx" }
androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "androidx-core-splashscreen" }
androidx-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "androidx-navigation" }
androidx-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "nav3Core" }
androidx-lifecycle-viewmodel-navigation3 = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "androidx-lifecycle" }
androidx-lifecycle-runtime-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
androidx-lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
androidx-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "androidx-navigation" }
androidx-preference = { module = "androidx.preference:preference-ktx", version.ref = "androidx-preference" }
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
coil-network-ktor3 = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" }
components-ui-tooling-preview = { module = "org.jetbrains.compose.components:components-ui-tooling-preview", version.ref = "compose-multiplatform" }
compose-ui-backhandler = { module = "org.jetbrains.compose.ui:ui-backhandler", version.ref = "compose-multiplatform" }
compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose-android" }
compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose-android" }
doistx-normalize = { module = "com.doist.x:normalize", version.ref = "doistx-normalize" }
Expand Down
5 changes: 0 additions & 5 deletions kotlin-js-store/wasm/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,6 @@
resolved "https://registry.yarnpkg.com/@js-joda/timezone/-/timezone-2.3.0.tgz#72878f6dc8afef20c29906e5d8d946f91618a2c3"
integrity sha512-DHXdNs0SydSqC5f0oRJPpTcNfnpRojgBqMCFupQFv6WgeZAjU3DBx+A7JtaGPP3dHrP2Odi2N8Vf+uAm/8ynCQ==

format-util@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271"
integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==

[email protected]:
version "8.18.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
Expand Down
12 changes: 0 additions & 12 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,6 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")

pluginManagement {
repositories {
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") {
mavenContent {
includeGroupAndSubgroups("org.jetbrains.compose")
includeGroupAndSubgroups("org.jetbrains.androidx")
}
}
google {
mavenContent {
includeGroupAndSubgroups("android")
Expand All @@ -28,12 +22,6 @@ pluginManagement {

dependencyResolutionManagement {
repositories {
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") {
mavenContent {
includeGroupAndSubgroups("org.jetbrains.compose")
includeGroupAndSubgroups("org.jetbrains.androidx")
}
}
google {
mavenContent {
includeGroupAndSubgroups("android")
Expand Down
4 changes: 2 additions & 2 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ kotlin {
implementation(libs.kotlinx.datetime)

implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.navigation.compose)
implementation(libs.compose.ui.backhandler)
implementation(libs.androidx.navigation3.ui)
implementation(libs.androidx.lifecycle.viewmodel.navigation3)
implementation(libs.ktor.client.core)

implementation(libs.aboutlibraries.core)
Expand Down

This file was deleted.

10 changes: 1 addition & 9 deletions shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/App.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package org.jetbrains.kotlinconf

import androidx.compose.animation.AnimatedContentTransitionScope
import androidx.compose.animation.EnterTransition
import androidx.compose.animation.ExitTransition
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
Expand All @@ -13,18 +10,13 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavBackStackEntry
import org.jetbrains.kotlinconf.navigation.KotlinConfNavHost
import org.jetbrains.kotlinconf.storage.ApplicationStorage
import org.jetbrains.kotlinconf.ui.theme.KotlinConfTheme
import org.koin.compose.koinInject
import kotlin.jvm.JvmSuppressWildcards

@Composable
fun App(
onThemeChange: ((isDarkTheme: Boolean) -> Unit)? = null,
popEnterTransition: (@JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition)? = null,
popExitTransition: (@JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition)? = null,
) {
val service = koinInject<ConferenceService>()
val currentTheme by service.getTheme().collectAsStateWithLifecycle(initialValue = Theme.SYSTEM)
Expand Down Expand Up @@ -54,7 +46,7 @@ fun App(
.background(KotlinConfTheme.colors.mainBackground)
) {
if (isOnboardingComplete != null) {
KotlinConfNavHost(isOnboardingComplete, popEnterTransition, popExitTransition)
KotlinConfNavHost(isOnboardingComplete)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,109 +6,91 @@ import org.jetbrains.kotlinconf.PartnerId
import org.jetbrains.kotlinconf.SessionId
import org.jetbrains.kotlinconf.SpeakerId

@Serializable
sealed interface AppRoute

@Serializable
@SerialName("AboutConference")
data object AboutConferenceScreen
data object AboutConferenceScreen : AppRoute

@Serializable
@SerialName("CodeOfConduct")
data object CodeOfConductScreen
data object CodeOfConductScreen : AppRoute

@Serializable
@SerialName("AboutApp")
data object AboutAppScreen

@Serializable
@SerialName("Info")
data object InfoScreen

@Serializable
@SerialName("Welcome")
data object StartScreens
data object AboutAppScreen : AppRoute

@Serializable
@SerialName("WelcomePrivacyNotice")
data object StartPrivacyNoticeScreen
data object StartPrivacyNoticeScreen : AppRoute

@Serializable
@SerialName("WelcomeSetupNotifications")
data object StartNotificationsScreen
data object StartNotificationsScreen : AppRoute

@Serializable
@SerialName("AppPrivacyNoticePrompt")
data object AppPrivacyNoticePrompt
data object AppPrivacyNoticePrompt : AppRoute

@Serializable
@SerialName("Settings")
data object SettingsScreen
data object SettingsScreen : AppRoute

@Serializable
@SerialName("VisitorPrivacyNotice")
data object VisitorPrivacyNoticeScreen
data object VisitorPrivacyNoticeScreen : AppRoute

@Serializable
@SerialName("AppPrivacyNotice")
data object AppPrivacyNoticeScreen
data object AppPrivacyNoticeScreen : AppRoute

@Serializable
@SerialName("TermsOfUse")
data object TermsOfUseScreen
data object TermsOfUseScreen : AppRoute

@Serializable
@SerialName("AppTermsOfUse")
data object AppTermsOfUseScreen
data object AppTermsOfUseScreen : AppRoute

@Serializable
@SerialName("Licenses")
data object LicensesScreen
data object LicensesScreen : AppRoute

@Serializable
@SerialName("License")
data class SingleLicenseScreen(
val licenseName: String,
val licenseText: String,
)
) : AppRoute

@Serializable
@SerialName("Partners")
data object PartnersScreen
data object PartnersScreen : AppRoute

@Serializable
@SerialName("Partner")
data class PartnerDetailScreen(val partnerId: PartnerId)
data class PartnerDetailScreen(val partnerId: PartnerId) : AppRoute

@Serializable
@SerialName("Main")
data object MainScreen

@Serializable
@SerialName("Schedule")
data object ScheduleScreen
data object MainScreen : AppRoute

@Serializable
@SerialName("Session")
data class SessionScreen(
val sessionId: SessionId,
val openedForFeedback: Boolean = false,
)

@Serializable
@SerialName("Speakers")
data object SpeakersScreen
) : AppRoute

@Serializable
@SerialName("Speaker")
data class SpeakerDetailScreen(val speakerId: SpeakerId)

@Serializable
@SerialName("Map")
data object MapScreen
data class SpeakerDetailScreen(val speakerId: SpeakerId) : AppRoute

@Serializable
@SerialName("MapDetail")
data class NestedMapScreen(val roomName: String)

data class NestedMapScreen(val roomName: String) : AppRoute

@Serializable
@SerialName("DeveloperMenu")
data object DeveloperMenuScreen
data object DeveloperMenuScreen : AppRoute
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.jetbrains.kotlinconf.navigation

import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.saveable.rememberSerializable
import androidx.navigation3.runtime.NavKey
import androidx.savedstate.compose.serialization.serializers.SnapshotStateListSerializer
import kotlinx.serialization.KSerializer
import kotlinx.serialization.serializer

@Composable
inline fun <reified T : Any> rememberNavBackStack(vararg elements: T): MutableList<T> {
val elementSerializer = serializer<T>()
return rememberSerializable(serializer = SnapshotStateListSerializer(elementSerializer)) {
mutableStateListOf(*elements)
}
}
Loading