Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
5b1740e
Add nav3 dependencies
zsmb13 Jun 18, 2025
29136ca
Disable non-Android platforms
zsmb13 Oct 2, 2025
ce1a4af
Initial attempt at some nav3 navigation
zsmb13 Jun 18, 2025
7ae855f
Update transition handling code, main screen nested navigation
zsmb13 Oct 2, 2025
037e5fe
Add type param to MainNavigation
zsmb13 Oct 2, 2025
3371314
Fix transitions on main screen
zsmb13 Oct 2, 2025
df27217
Introduce BackStack wrapper
zsmb13 Oct 2, 2025
ad099a0
Try to use dev build for KMP Nav3
zsmb13 Oct 2, 2025
75a8496
Use correct KMP artifact
zsmb13 Oct 2, 2025
2d41719
Fix animation param, add TODOs
zsmb13 Oct 2, 2025
779d9ea
Add entry decorators
zsmb13 Oct 2, 2025
fc4b60f
Use lifecycle-viewmodel-navigation3, update to latest dev build
zsmb13 Oct 20, 2025
be38f3f
Use NavBackStack instead of a custom BackStack class
zsmb13 Oct 27, 2025
8aade02
Simplify setup
zsmb13 Oct 31, 2025
4e80120
Fix start screen handling
zsmb13 Oct 31, 2025
fd27c0b
Fix after rebase
zsmb13 Nov 3, 2025
91a97cd
Replace BackHandler with NavigationBackhandler
zsmb13 Nov 5, 2025
cffda20
Remove custom animation config
zsmb13 Nov 5, 2025
f2b8396
Inline start screen setup in NavDisplay
zsmb13 Nov 5, 2025
63f8fff
Remove PlatformNavHandler
zsmb13 Nov 5, 2025
577c30b
Simplify bottom nav setup
zsmb13 Nov 5, 2025
0196982
Remove dependency on NavKey
zsmb13 Nov 5, 2025
77c5546
Add TODO for browser nav integration
zsmb13 Nov 11, 2025
931167f
Clean up imports after merge
zsmb13 Nov 11, 2025
b1dfdb0
Remove previous nav dependency
zsmb13 Nov 11, 2025
93eabed
Add type constraint to deep link handling
zsmb13 Nov 11, 2025
ddeeb64
Use AnimatedContent instead of nested navigation in MainScreen
zsmb13 Nov 12, 2025
82914e0
Add explicit type for backstack
zsmb13 Nov 12, 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
6 changes: 3 additions & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ androidx-activityCompose = "1.11.0"
androidx-core-ktx = "1.17.0"
androidx-core-splashscreen = "1.0.1"
androidx-lifecycle = "2.10.0-alpha04"
androidx-navigation = "2.9.1"
androidx-navigation3 = "1.0.0-alpha04"
androidx-preference = "1.2.1"
coil = "3.3.0"
compose-multiplatform = "1.10.0-beta01"
Expand Down Expand Up @@ -41,7 +41,8 @@ androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx
androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "androidx-core-splashscreen" }
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-lifecycle-viewmodel-navigation3 = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "androidx-lifecycle" }
androidx-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "androidx-navigation3" }
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" }
Expand All @@ -50,7 +51,6 @@ compose-components-resources = { module = "org.jetbrains.compose.components:comp
compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "compose-multiplatform" }
compose-material-ripple = { module = "org.jetbrains.compose.material:material-ripple", version.ref = "compose-multiplatform" }
compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "compose-multiplatform" }
compose-ui-backhandler = { module = "org.jetbrains.compose.ui:ui-backhandler", version.ref = "compose-multiplatform" }
compose-ui-tooling = { module = "org.jetbrains.compose.ui:ui-tooling", version.ref = "compose-multiplatform" }
compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "compose-multiplatform" }
doistx-normalize = { module = "com.doist.x:normalize", version.ref = "doistx-normalize" }
Expand Down
4 changes: 2 additions & 2 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,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.

9 changes: 1 addition & 8 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,17 +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.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 @@ -53,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
Loading