Update compose to 2023.08.00

This commit is contained in:
Oleksandr Balan
2023-09-06 22:37:10 +02:00
parent 9addca8f27
commit 23a394897a
35 changed files with 431 additions and 332 deletions

View File

@@ -1,60 +0,0 @@
plugins {
id "com.android.application"
id "org.jetbrains.kotlin.android"
}
android {
compileSdk compile_sdk_version
defaultConfig {
applicationId "eu.wewox.pagecurl"
minSdk min_sdk_version
targetSdk target_sdk_version
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs = freeCompilerArgs +
"-Xopt-in=kotlin.RequiresOptIn"
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion compose_compiler_version
}
packagingOptions {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}
dependencies {
implementation(project(":pagecurl"))
implementation(platform("androidx.compose:compose-bom:$compose_bom_version"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.material:material")
implementation("androidx.activity:activity-compose:$activity_version")
implementation("com.google.accompanist:accompanist-systemuicontroller:$accompanist_version")
implementation("androidx.paging:paging-runtime:$paging_version")
implementation("androidx.paging:paging-compose:$paging_compose_version")
}

61
demo/build.gradle.kts Normal file
View File

@@ -0,0 +1,61 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin)
id("convention.jvm.toolchain")
}
android {
namespace = "eu.wewox.pagecurl"
compileSdk = libs.versions.sdk.compile.get().toInt()
defaultConfig {
applicationId = "eu.wewox.pagecurl"
minSdk = libs.versions.sdk.min.get().toInt()
targetSdk = libs.versions.sdk.target.get().toInt()
versionCode = 1
versionName = "1.0"
vectorDrawables {
useSupportLibrary = true
}
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
}
kotlinOptions {
freeCompilerArgs = freeCompilerArgs +
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api"
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}
dependencies {
implementation(project(":pagecurl"))
implementation(platform(libs.compose.bom))
implementation(libs.compose.material3)
implementation(libs.compose.ui)
implementation(libs.androidx.activitycompose)
implementation(libs.androidx.pagingruntime)
implementation(libs.androidx.pagingcompose)
}

View File

@@ -4,31 +4,17 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.BackHandler
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.animation.Crossfade
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowRight
import androidx.compose.runtime.Composable
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.core.view.WindowCompat
import eu.wewox.pagecurl.components.TopBar
import eu.wewox.pagecurl.screens.BackPagePageCurlScreen
import eu.wewox.pagecurl.screens.InteractionConfigInPageCurlScreen
import eu.wewox.pagecurl.screens.PagingPageCurlScreen
@@ -36,7 +22,6 @@ import eu.wewox.pagecurl.screens.SettingsPageCurlScreen
import eu.wewox.pagecurl.screens.ShadowInPageCurlScreen
import eu.wewox.pagecurl.screens.SimplePageCurlScreen
import eu.wewox.pagecurl.screens.StateInPageCurlScreen
import eu.wewox.pagecurl.ui.SpacingMedium
import eu.wewox.pagecurl.ui.theme.PageCurlTheme
/**
@@ -46,6 +31,7 @@ import eu.wewox.pagecurl.ui.theme.PageCurlTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
WindowCompat.setDecorFitsSystemWindows(window, false)
@@ -57,8 +43,8 @@ class MainActivity : ComponentActivity() {
example = null
}
Surface(color = MaterialTheme.colors.background) {
Crossfade(targetState = example, Modifier.safeDrawingPadding()) { selected ->
Surface(color = MaterialTheme.colorScheme.background) {
Crossfade(targetState = example, Modifier.safeDrawingPadding(), label = "Crossfade") { selected ->
when (selected) {
null -> RootScreen(onExampleClick = { example = it })
Example.SimplePageCurl -> SimplePageCurlScreen()
@@ -75,37 +61,3 @@ class MainActivity : ComponentActivity() {
}
}
}
@Composable
private fun RootScreen(onExampleClick: (Example) -> Unit) {
Scaffold(
topBar = { TopBar("Page Curl Demo") }
) { padding ->
LazyColumn(Modifier.padding(padding)) {
items(Example.values()) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.clickable { onExampleClick(it) }
.padding(SpacingMedium)
) {
Column(modifier = Modifier.weight(1f)) {
Text(
text = it.label,
style = MaterialTheme.typography.h6
)
Text(
text = it.description,
style = MaterialTheme.typography.body2
)
}
Icon(
imageVector = Icons.Default.KeyboardArrowRight,
contentDescription = null
)
}
}
}
}
}

View File

@@ -0,0 +1,54 @@
package eu.wewox.pagecurl
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowRight
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import eu.wewox.pagecurl.components.TopBar
import eu.wewox.pagecurl.ui.SpacingMedium
@Composable
internal fun RootScreen(onExampleClick: (Example) -> Unit) {
Scaffold(
topBar = { TopBar("PageCurl Demo") }
) { padding ->
LazyColumn(Modifier.padding(padding)) {
items(Example.entries) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.clickable { onExampleClick(it) }
.padding(SpacingMedium)
) {
Column(modifier = Modifier.weight(1f)) {
Text(
text = it.label,
style = MaterialTheme.typography.titleMedium
)
Text(
text = it.description,
style = MaterialTheme.typography.bodyMedium
)
}
Icon(
imageVector = Icons.Default.KeyboardArrowRight,
contentDescription = null
)
}
}
}
}
}

View File

@@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -34,7 +34,7 @@ fun HowToPage(
Box(
modifier = modifier
.fillMaxSize()
.background(MaterialTheme.colors.background)
.background(MaterialTheme.colorScheme.background)
) {
Column(
verticalArrangement = Arrangement.spacedBy(SpacingMedium, Alignment.CenterVertically),
@@ -44,24 +44,24 @@ fun HowToPage(
) {
Text(
text = page.title,
style = MaterialTheme.typography.h4,
style = MaterialTheme.typography.headlineMedium,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth()
)
Text(
text = page.message,
style = MaterialTheme.typography.body1,
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth()
)
}
Text(
text = index.toString(),
color = MaterialTheme.colors.background,
color = MaterialTheme.colorScheme.background,
modifier = Modifier
.align(Alignment.BottomEnd)
.background(MaterialTheme.colors.onBackground, RoundedCornerShape(topStartPercent = 100))
.background(MaterialTheme.colorScheme.onBackground, RoundedCornerShape(topStartPercent = 100))
.padding(SpacingMedium)
)
}

View File

@@ -10,9 +10,10 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Card
import androidx.compose.material.Switch
import androidx.compose.material.Text
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -34,7 +35,7 @@ internal fun SettingsPopup(
) {
Card(
shape = RoundedCornerShape(24.dp),
elevation = 8.dp,
elevation = CardDefaults.cardElevation(8.dp),
) {
Column(
verticalArrangement = Arrangement.spacedBy(8.dp),

View File

@@ -1,25 +1,47 @@
package eu.wewox.pagecurl.components
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import eu.wewox.pagecurl.ui.SpacingMedium
import androidx.compose.ui.graphics.Color
/**
* The reusable component for top bar.
*
* @param title The text to show in top bar.
* @param modifier The modifier instance for the root composable.
*/
@Composable
fun TopBar(title: String) {
Text(
text = title,
style = MaterialTheme.typography.h4,
modifier = Modifier
.padding(SpacingMedium)
.statusBarsPadding()
fun TopBar(
title: String,
modifier: Modifier = Modifier,
onBackClick: (() -> Unit)? = null,
) {
TopAppBar(
title = {
Text(
text = title,
style = MaterialTheme.typography.titleLarge,
)
},
navigationIcon = {
if (onBackClick != null) {
IconButton(onClick = onBackClick) {
Icon(
imageVector = Icons.Filled.ArrowBack,
contentDescription = "Back button"
)
}
}
},
colors = TopAppBarDefaults.centerAlignedTopAppBarColors(Color.Transparent),
modifier = modifier,
)
}

View File

@@ -8,7 +8,8 @@ import androidx.compose.animation.expandIn
import androidx.compose.animation.shrinkOut
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Card
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -58,8 +59,8 @@ fun ZoomOutLayout(
if (cornersAndElevation != 0.dp) {
Card(
shape = RoundedCornerShape(cornersAndElevation),
elevation = cornersAndElevation,
content = pageCurl,
elevation = CardDefaults.cardElevation(cornersAndElevation),
content = { pageCurl() },
)
} else {
pageCurl()

View File

@@ -18,8 +18,8 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.Slider
import androidx.compose.material.Text
import androidx.compose.material3.Slider
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf

View File

@@ -11,9 +11,9 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.selection.selectable
import androidx.compose.foundation.selection.selectableGroup
import androidx.compose.material.RadioButton
import androidx.compose.material.Slider
import androidx.compose.material.Text
import androidx.compose.material3.RadioButton
import androidx.compose.material3.Slider
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf

View File

@@ -7,9 +7,9 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@@ -46,7 +46,7 @@ fun PagingPageCurlScreen() {
contentAlignment = Alignment.Center,
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colors.background)
.background(MaterialTheme.colorScheme.background)
) {
CircularProgressIndicator()
}
@@ -61,7 +61,7 @@ fun PagingPageCurlScreen() {
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colors.background)
.background(MaterialTheme.colorScheme.background)
) {
Text(items[index]?.content.orEmpty())
Text(if (loading) "Loading..." else "")

View File

@@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Slider
import androidx.compose.material.Text
import androidx.compose.material3.Slider
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf

View File

@@ -10,8 +10,8 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf

View File

@@ -1,14 +0,0 @@
package eu.wewox.pagecurl.ui.theme
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Shapes
import androidx.compose.ui.unit.dp
/**
* The application shapes.
*/
val Shapes = Shapes(
small = RoundedCornerShape(4.dp),
medium = RoundedCornerShape(4.dp),
large = RoundedCornerShape(0.dp)
)

View File

@@ -1,59 +1,61 @@
package eu.wewox.pagecurl.ui.theme
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Typography
import androidx.compose.material.darkColors
import androidx.compose.material.lightColors
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Typography
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.ui.graphics.Color
import com.google.accompanist.systemuicontroller.rememberSystemUiController
private val DarkColorPalette = darkColors(
private val DarkColorScheme = darkColorScheme(
primary = LightBlue,
primaryVariant = LightBlue,
secondary = LightYellow,
secondaryVariant = LightYellow,
secondary = LightBlue,
tertiary = LightYellow,
onPrimary = Color.Black,
onSecondary = Color.Black,
onTertiary = Color.Black,
surface = Color.Black,
background = Color.Black,
onSurface = Color.White,
onBackground = Color.White,
)
private val LightColorPalette = lightColors(
private val LightColorScheme = lightColorScheme(
primary = LightBlue,
primaryVariant = LightBlue,
secondary = LightYellow,
secondaryVariant = LightYellow,
secondary = LightBlue,
tertiary = LightYellow,
onPrimary = Color.Black,
onSecondary = Color.Black,
onTertiary = Color.Black,
surface = Color.White,
background = Color.White,
onSurface = Color.Black,
onBackground = Color.Black,
)
/**
* The theme to use for demo application.
*/
@Composable
fun PageCurlTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) {
val sysUiController = rememberSystemUiController()
SideEffect {
sysUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = !darkTheme,
isNavigationBarContrastEnforced = false
)
}
val colors = if (darkTheme) {
DarkColorPalette
} else {
LightColorPalette
fun PageCurlTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
val colorScheme = when {
darkTheme -> DarkColorScheme
else -> LightColorScheme
}
MaterialTheme(
colors = colors,
colorScheme = colorScheme,
typography = Typography(),
shapes = Shapes,
content = content
)
}