Skip to content

Commit

Permalink
Upgrade compose version to 1.7.0-alpha01
Browse files Browse the repository at this point in the history
- Using compose navigation
- Using shared element transition
  • Loading branch information
linroid committed Jul 11, 2024
1 parent d3007f0 commit 3ba9497
Show file tree
Hide file tree
Showing 20 changed files with 739 additions and 316 deletions.
4 changes: 1 addition & 3 deletions composeApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,13 @@ kotlin {
implementation(compose.material3)
implementation(compose.components.resources)
implementation(compose.components.uiToolingPreview)
implementation(libs.voyager.navigator)
implementation(libs.voyager.screenmodel)
implementation(libs.voyager.transitions)
implementation(libs.coil)
implementation(libs.coil.network.ktor)
implementation(libs.napier)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.koin.core)
implementation(libs.ktor.client.serialization.kotlinx.json)
implementation(libs.androidx.navigation.compose)
implementation(project(":pexels-api"))
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
package com.linroid.pexels.theme

import android.app.Activity
import android.os.Build
import androidx.compose.material3.ColorScheme
import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowInsetsControllerCompat


@Composable
internal actual fun SystemAppearance(isDark: Boolean) {
val view = LocalView.current
Expand All @@ -16,4 +22,17 @@ internal actual fun SystemAppearance(isDark: Boolean) {
isAppearanceLightNavigationBars = isDark
}
}
}

@Composable
internal actual fun provideColorScheme(isSystemDark: Boolean): ColorScheme {
return when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
val context = LocalContext.current
if (isSystemDark) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
}

isSystemDark -> darkScheme
else -> lightScheme
}
}
54 changes: 48 additions & 6 deletions composeApp/src/commonMain/kotlin/com/linroid/pexels/App.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,56 @@
@file:OptIn(ExperimentalSharedTransitionApi::class)

package com.linroid.pexels

import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionLayout
import androidx.compose.runtime.Composable
import cafe.adriel.voyager.navigator.Navigator
import cafe.adriel.voyager.transitions.FadeTransition
import com.linroid.pexels.screen.feed.CuratedScreen
import androidx.navigation.NavHostController
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.linroid.pexels.screen.feed.HomeScreen
import com.linroid.pexels.screen.photo.PhotoScreen
import com.linroid.pexels.storage.PhotoMemoryCache
import com.linroid.pexels.theme.AppTheme

@Composable
internal fun App() = AppTheme {
Navigator(CuratedScreen()) {navigator->
FadeTransition(navigator)
internal fun App(navController: NavHostController = rememberNavController()) = AppTheme {
SharedTransitionLayout {
NavHost(
navController = navController, startDestination = PexelsScreen.Home.name
) {
composable(PexelsScreen.Home.name) {
HomeScreen(
sharedTransitionScope = this@SharedTransitionLayout,
animatedContentScope = this@composable,
onViewPhoto = { photo ->
PhotoMemoryCache.put(photo)
navController.navigate(
"${PexelsScreen.Photo.name}/${photo.id}",
null,
)
}
)
}
composable(
"${PexelsScreen.Photo.name}/{photoId}", arguments = listOf(navArgument("photoId") {
type = NavType.IntType
nullable = false
})
) { backStackEntry ->
val photo = PhotoMemoryCache.getById(backStackEntry.arguments?.getInt("photoId")!!)
PhotoScreen(
sharedTransitionScope = this@SharedTransitionLayout,
animatedContentScope = this@composable,
photo = photo,
onExit = {
navController.navigateUp()
}
)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.linroid.pexels

enum class PexelsScreen {
Home,
Photo
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
@file:OptIn(ExperimentalMaterial3Api::class)

package com.linroid.pexels.components

import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.stringResource
import pexels.composeapp.generated.resources.Res
import pexels.composeapp.generated.resources.app_name


@Composable
fun PexelsAppBar() {
Surface(shadowElevation = 4.dp) {
TopAppBar(
colors = TopAppBarDefaults.topAppBarColors(
containerColor = Color(0xFF07A080),
titleContentColor = Color.White,
actionIconContentColor = Color.White,
),
title = {
Text(stringResource(Res.string.app_name))
},
)
}
}
Loading

0 comments on commit 3ba9497

Please sign in to comment.