mirror of
https://github.com/fankes/pagecurl-multiplatform.git
synced 2025-09-04 09:45:34 +08:00
Update compose to 2023.08.00
This commit is contained in:
15
.github/workflows/publish.yml
vendored
15
.github/workflows/publish.yml
vendored
@@ -6,8 +6,8 @@ name: Publish To Maven Central
|
|||||||
on:
|
on:
|
||||||
# Triggers the workflow when tag is pushed
|
# Triggers the workflow when tag is pushed
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- 'v*'
|
- 'v*'
|
||||||
|
|
||||||
# Allows you to run this workflow manually from the Actions tab
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
@@ -17,17 +17,22 @@ jobs:
|
|||||||
# This workflow contains a single job called "publish"
|
# This workflow contains a single job called "publish"
|
||||||
publish:
|
publish:
|
||||||
# The type of runner that the job will run on
|
# The type of runner that the job will run on
|
||||||
runs-on: ubuntu-latest
|
runs-on: macos-latest
|
||||||
|
|
||||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
steps:
|
steps:
|
||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
java-version: '17'
|
||||||
|
distribution: 'temurin'
|
||||||
|
|
||||||
# Runs a single command using the runners shell
|
# Runs a single command using the runners shell
|
||||||
- name: publish
|
- name: publish
|
||||||
run: ./gradlew publish --no-daemon --no-parallel --stacktrace --info
|
run: ./gradlew publish --no-daemon --no-parallel
|
||||||
env:
|
env:
|
||||||
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
|
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
|
||||||
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
|
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
|
||||||
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_KEY }}
|
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_KEY }}
|
||||||
|
18
.github/workflows/static-analysis.yml
vendored
18
.github/workflows/static-analysis.yml
vendored
@@ -12,12 +12,17 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
detekt:
|
detekt:
|
||||||
name: Detekt
|
name: Detekt
|
||||||
runs-on: ubuntu-latest
|
runs-on: macos-latest
|
||||||
|
|
||||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
steps:
|
steps:
|
||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
java-version: '17'
|
||||||
|
distribution: 'temurin'
|
||||||
|
|
||||||
# Runs a single command using the runners shell
|
# Runs a single command using the runners shell
|
||||||
- name: detekt
|
- name: detekt
|
||||||
@@ -25,12 +30,17 @@ jobs:
|
|||||||
|
|
||||||
spotless:
|
spotless:
|
||||||
name: Spotless
|
name: Spotless
|
||||||
runs-on: ubuntu-latest
|
runs-on: macos-latest
|
||||||
|
|
||||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
steps:
|
steps:
|
||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
java-version: '17'
|
||||||
|
distribution: 'temurin'
|
||||||
|
|
||||||
# Runs a single command using the runners shell
|
# Runs a single command using the runners shell
|
||||||
- name: spotless
|
- name: spotless
|
||||||
|
14
.gitignore
vendored
14
.gitignore
vendored
@@ -1,19 +1,9 @@
|
|||||||
*.iml
|
*.iml
|
||||||
.gradle
|
.gradle
|
||||||
/local.properties
|
/local.properties
|
||||||
/.idea/caches
|
/.idea
|
||||||
/.idea/libraries
|
|
||||||
/.idea/inspectionProfiles
|
|
||||||
/.idea/modules.xml
|
|
||||||
/.idea/workspace.xml
|
|
||||||
/.idea/navEditor.xml
|
|
||||||
/.idea/assetWizardSettings.xml
|
|
||||||
/.idea/misc.xml
|
|
||||||
/.idea/deploymentTargetDropDown.xml
|
|
||||||
/.idea/kotlinc.xml
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
/build
|
build/
|
||||||
/captures
|
/captures
|
||||||
.externalNativeBuild
|
.externalNativeBuild
|
||||||
.cxx
|
.cxx
|
||||||
local.properties
|
|
||||||
|
14
.idea/gradle.xml
generated
14
.idea/gradle.xml
generated
@@ -4,12 +4,26 @@
|
|||||||
<component name="GradleSettings">
|
<component name="GradleSettings">
|
||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
|
<compositeConfiguration>
|
||||||
|
<compositeBuild compositeDefinitionSource="SCRIPT">
|
||||||
|
<builds>
|
||||||
|
<build path="$PROJECT_DIR$/build-logic" name="build-logic">
|
||||||
|
<projects>
|
||||||
|
<project path="$PROJECT_DIR$/build-logic" />
|
||||||
|
<project path="$PROJECT_DIR$/build-logic/convention" />
|
||||||
|
</projects>
|
||||||
|
</build>
|
||||||
|
</builds>
|
||||||
|
</compositeBuild>
|
||||||
|
</compositeConfiguration>
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
<option name="gradleHome" value="/usr/local/Cellar/gradle/6.0.1/libexec" />
|
<option name="gradleHome" value="/usr/local/Cellar/gradle/6.0.1/libexec" />
|
||||||
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
||||||
<option name="modules">
|
<option name="modules">
|
||||||
<set>
|
<set>
|
||||||
<option value="$PROJECT_DIR$" />
|
<option value="$PROJECT_DIR$" />
|
||||||
|
<option value="$PROJECT_DIR$/build-logic" />
|
||||||
|
<option value="$PROJECT_DIR$/build-logic/convention" />
|
||||||
<option value="$PROJECT_DIR$/demo" />
|
<option value="$PROJECT_DIR$/demo" />
|
||||||
<option value="$PROJECT_DIR$/pagecurl" />
|
<option value="$PROJECT_DIR$/pagecurl" />
|
||||||
</set>
|
</set>
|
||||||
|
12
README.md
12
README.md
@@ -15,8 +15,8 @@ This library allows to create an effect of turning pages, which can be used in b
|
|||||||
### Get a dependency
|
### Get a dependency
|
||||||
|
|
||||||
**Step 1.** Add the MavenCentral repository to your build file.
|
**Step 1.** Add the MavenCentral repository to your build file.
|
||||||
Add it in your root `build.gradle` at the end of repositories:
|
Add it in your root `build.gradle.kts` at the end of repositories:
|
||||||
```
|
```kotlin
|
||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
...
|
...
|
||||||
@@ -25,8 +25,8 @@ allprojects {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Or in `settings.gradle`:
|
Or in `settings.gradle.kts`:
|
||||||
```
|
```kotlin
|
||||||
pluginManagement {
|
pluginManagement {
|
||||||
repositories {
|
repositories {
|
||||||
...
|
...
|
||||||
@@ -37,9 +37,9 @@ pluginManagement {
|
|||||||
|
|
||||||
**Step 2.** Add the dependency.
|
**Step 2.** Add the dependency.
|
||||||
Check latest version on the [releases page](https://github.com/oleksandrbalan/pagecurl/releases).
|
Check latest version on the [releases page](https://github.com/oleksandrbalan/pagecurl/releases).
|
||||||
```
|
```kotlin
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'io.github.oleksandrbalan:pagecurl:$version'
|
implementation("io.github.oleksandrbalan:pagecurl:$version")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
1
build-logic/.gitignore
vendored
Normal file
1
build-logic/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/build
|
1
build-logic/convention/.gitignore
vendored
Normal file
1
build-logic/convention/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/build
|
19
build-logic/convention/build.gradle.kts
Normal file
19
build-logic/convention/build.gradle.kts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
plugins {
|
||||||
|
`kotlin-dsl`
|
||||||
|
}
|
||||||
|
|
||||||
|
java {
|
||||||
|
toolchain {
|
||||||
|
val version = libs.versions.java.toolchain.get()
|
||||||
|
languageVersion.set(JavaLanguageVersion.of(version))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gradlePlugin {
|
||||||
|
plugins {
|
||||||
|
register("conventionJvmToolchain") {
|
||||||
|
id = "convention.jvm.toolchain"
|
||||||
|
implementationClass = "JvmToolchainConventionPlugin"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,18 @@
|
|||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.plugins.JavaPluginExtension
|
||||||
|
import org.gradle.jvm.toolchain.JavaLanguageVersion
|
||||||
|
import org.gradle.kotlin.dsl.configure
|
||||||
|
import utils.libs
|
||||||
|
|
||||||
|
class JvmToolchainConventionPlugin : Plugin<Project> {
|
||||||
|
override fun apply(target: Project) =
|
||||||
|
with(target) {
|
||||||
|
extensions.configure<JavaPluginExtension> {
|
||||||
|
toolchain {
|
||||||
|
val version = libs.findVersion("java-toolchain").get().displayName
|
||||||
|
languageVersion.set(JavaLanguageVersion.of(version))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,9 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.artifacts.VersionCatalog
|
||||||
|
import org.gradle.api.artifacts.VersionCatalogsExtension
|
||||||
|
import org.gradle.kotlin.dsl.getByType
|
||||||
|
|
||||||
|
val Project.libs: VersionCatalog
|
||||||
|
get() = extensions.getByType<VersionCatalogsExtension>().named("libs")
|
18
build-logic/settings.gradle.kts
Normal file
18
build-logic/settings.gradle.kts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
dependencyResolutionManagement {
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
versionCatalogs {
|
||||||
|
create("libs") {
|
||||||
|
from(files("../gradle/libs.versions.toml"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("org.gradle.toolchains.foojay-resolver-convention") version ("0.7.0")
|
||||||
|
}
|
||||||
|
|
||||||
|
rootProject.name = "build-logic"
|
||||||
|
include(":convention")
|
34
build.gradle
34
build.gradle
@@ -1,34 +0,0 @@
|
|||||||
buildscript {
|
|
||||||
ext {
|
|
||||||
compile_sdk_version = 33
|
|
||||||
min_sdk_version = 24
|
|
||||||
target_sdk_version = 33
|
|
||||||
|
|
||||||
compose_bom_version = "2023.03.00"
|
|
||||||
compose_compiler_version = "1.4.2"
|
|
||||||
accompanist_version = "0.28.0"
|
|
||||||
activity_version = "1.6.1"
|
|
||||||
paging_version = "3.1.1"
|
|
||||||
paging_compose_version = "1.0.0-alpha18"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
plugins {
|
|
||||||
id "com.android.application" version '7.4.2' apply false
|
|
||||||
id "com.android.library" version '7.4.2' apply false
|
|
||||||
id "org.jetbrains.kotlin.android" version "1.8.10" apply false
|
|
||||||
id "io.gitlab.arturbosch.detekt" version "1.21.0"
|
|
||||||
id "com.diffplug.spotless" version "6.5.1"
|
|
||||||
id "com.vanniktech.maven.publish" version "0.21.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
configure(subprojects) {
|
|
||||||
apply plugin: "io.gitlab.arturbosch.detekt"
|
|
||||||
apply plugin: "com.diffplug.spotless"
|
|
||||||
|
|
||||||
spotless {
|
|
||||||
kotlin {
|
|
||||||
target("**/*.kt")
|
|
||||||
ktlint("0.43.2")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
23
build.gradle.kts
Normal file
23
build.gradle.kts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import com.diffplug.gradle.spotless.SpotlessPlugin
|
||||||
|
import io.gitlab.arturbosch.detekt.DetektPlugin
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
alias(libs.plugins.android.application) apply false
|
||||||
|
alias(libs.plugins.android.library) apply false
|
||||||
|
alias(libs.plugins.kotlin) apply false
|
||||||
|
alias(libs.plugins.detekt)
|
||||||
|
alias(libs.plugins.spotless)
|
||||||
|
alias(libs.plugins.mavenpublish)
|
||||||
|
}
|
||||||
|
|
||||||
|
configure(subprojects) {
|
||||||
|
apply<DetektPlugin>()
|
||||||
|
apply<SpotlessPlugin>()
|
||||||
|
|
||||||
|
spotless {
|
||||||
|
kotlin {
|
||||||
|
target("**/*.kt")
|
||||||
|
ktlint("0.43.2")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -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
61
demo/build.gradle.kts
Normal 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)
|
||||||
|
}
|
@@ -4,31 +4,17 @@ import android.os.Bundle
|
|||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.compose.animation.Crossfade
|
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.layout.safeDrawingPadding
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.material3.Surface
|
||||||
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.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import eu.wewox.pagecurl.components.TopBar
|
|
||||||
import eu.wewox.pagecurl.screens.BackPagePageCurlScreen
|
import eu.wewox.pagecurl.screens.BackPagePageCurlScreen
|
||||||
import eu.wewox.pagecurl.screens.InteractionConfigInPageCurlScreen
|
import eu.wewox.pagecurl.screens.InteractionConfigInPageCurlScreen
|
||||||
import eu.wewox.pagecurl.screens.PagingPageCurlScreen
|
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.ShadowInPageCurlScreen
|
||||||
import eu.wewox.pagecurl.screens.SimplePageCurlScreen
|
import eu.wewox.pagecurl.screens.SimplePageCurlScreen
|
||||||
import eu.wewox.pagecurl.screens.StateInPageCurlScreen
|
import eu.wewox.pagecurl.screens.StateInPageCurlScreen
|
||||||
import eu.wewox.pagecurl.ui.SpacingMedium
|
|
||||||
import eu.wewox.pagecurl.ui.theme.PageCurlTheme
|
import eu.wewox.pagecurl.ui.theme.PageCurlTheme
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,6 +31,7 @@ import eu.wewox.pagecurl.ui.theme.PageCurlTheme
|
|||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
enableEdgeToEdge()
|
||||||
|
|
||||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||||
|
|
||||||
@@ -57,8 +43,8 @@ class MainActivity : ComponentActivity() {
|
|||||||
example = null
|
example = null
|
||||||
}
|
}
|
||||||
|
|
||||||
Surface(color = MaterialTheme.colors.background) {
|
Surface(color = MaterialTheme.colorScheme.background) {
|
||||||
Crossfade(targetState = example, Modifier.safeDrawingPadding()) { selected ->
|
Crossfade(targetState = example, Modifier.safeDrawingPadding(), label = "Crossfade") { selected ->
|
||||||
when (selected) {
|
when (selected) {
|
||||||
null -> RootScreen(onExampleClick = { example = it })
|
null -> RootScreen(onExampleClick = { example = it })
|
||||||
Example.SimplePageCurl -> SimplePageCurlScreen()
|
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
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
54
demo/src/main/kotlin/eu/wewox/pagecurl/RootScreen.kt
Normal file
54
demo/src/main/kotlin/eu/wewox/pagecurl/RootScreen.kt
Normal 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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.fillMaxSize
|
|||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
@@ -34,7 +34,7 @@ fun HowToPage(
|
|||||||
Box(
|
Box(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.background(MaterialTheme.colors.background)
|
.background(MaterialTheme.colorScheme.background)
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
verticalArrangement = Arrangement.spacedBy(SpacingMedium, Alignment.CenterVertically),
|
verticalArrangement = Arrangement.spacedBy(SpacingMedium, Alignment.CenterVertically),
|
||||||
@@ -44,24 +44,24 @@ fun HowToPage(
|
|||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = page.title,
|
text = page.title,
|
||||||
style = MaterialTheme.typography.h4,
|
style = MaterialTheme.typography.headlineMedium,
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
)
|
)
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = page.message,
|
text = page.message,
|
||||||
style = MaterialTheme.typography.body1,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Text(
|
Text(
|
||||||
text = index.toString(),
|
text = index.toString(),
|
||||||
color = MaterialTheme.colors.background,
|
color = MaterialTheme.colorScheme.background,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.align(Alignment.BottomEnd)
|
.align(Alignment.BottomEnd)
|
||||||
.background(MaterialTheme.colors.onBackground, RoundedCornerShape(topStartPercent = 100))
|
.background(MaterialTheme.colorScheme.onBackground, RoundedCornerShape(topStartPercent = 100))
|
||||||
.padding(SpacingMedium)
|
.padding(SpacingMedium)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -10,9 +10,10 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material.Card
|
import androidx.compose.material3.Card
|
||||||
import androidx.compose.material.Switch
|
import androidx.compose.material3.CardDefaults
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material3.Switch
|
||||||
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
@@ -34,7 +35,7 @@ internal fun SettingsPopup(
|
|||||||
) {
|
) {
|
||||||
Card(
|
Card(
|
||||||
shape = RoundedCornerShape(24.dp),
|
shape = RoundedCornerShape(24.dp),
|
||||||
elevation = 8.dp,
|
elevation = CardDefaults.cardElevation(8.dp),
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
|
@@ -1,25 +1,47 @@
|
|||||||
package eu.wewox.pagecurl.components
|
package eu.wewox.pagecurl.components
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.foundation.layout.statusBarsPadding
|
import androidx.compose.material.icons.filled.ArrowBack
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material.Text
|
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.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import eu.wewox.pagecurl.ui.SpacingMedium
|
import androidx.compose.ui.graphics.Color
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The reusable component for top bar.
|
* The reusable component for top bar.
|
||||||
*
|
*
|
||||||
* @param title The text to show in top bar.
|
* @param title The text to show in top bar.
|
||||||
|
* @param modifier The modifier instance for the root composable.
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun TopBar(title: String) {
|
fun TopBar(
|
||||||
Text(
|
title: String,
|
||||||
text = title,
|
modifier: Modifier = Modifier,
|
||||||
style = MaterialTheme.typography.h4,
|
onBackClick: (() -> Unit)? = null,
|
||||||
modifier = Modifier
|
) {
|
||||||
.padding(SpacingMedium)
|
TopAppBar(
|
||||||
.statusBarsPadding()
|
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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,8 @@ import androidx.compose.animation.expandIn
|
|||||||
import androidx.compose.animation.shrinkOut
|
import androidx.compose.animation.shrinkOut
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
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.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@@ -58,8 +59,8 @@ fun ZoomOutLayout(
|
|||||||
if (cornersAndElevation != 0.dp) {
|
if (cornersAndElevation != 0.dp) {
|
||||||
Card(
|
Card(
|
||||||
shape = RoundedCornerShape(cornersAndElevation),
|
shape = RoundedCornerShape(cornersAndElevation),
|
||||||
elevation = cornersAndElevation,
|
elevation = CardDefaults.cardElevation(cornersAndElevation),
|
||||||
content = pageCurl,
|
content = { pageCurl() },
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
pageCurl()
|
pageCurl()
|
||||||
|
@@ -18,8 +18,8 @@ import androidx.compose.foundation.layout.padding
|
|||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
import androidx.compose.material.Slider
|
import androidx.compose.material3.Slider
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
@@ -11,9 +11,9 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.selection.selectable
|
import androidx.compose.foundation.selection.selectable
|
||||||
import androidx.compose.foundation.selection.selectableGroup
|
import androidx.compose.foundation.selection.selectableGroup
|
||||||
import androidx.compose.material.RadioButton
|
import androidx.compose.material3.RadioButton
|
||||||
import androidx.compose.material.Slider
|
import androidx.compose.material3.Slider
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
@@ -7,9 +7,9 @@ import androidx.compose.foundation.layout.Arrangement
|
|||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.material.CircularProgressIndicator
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
@@ -46,7 +46,7 @@ fun PagingPageCurlScreen() {
|
|||||||
contentAlignment = Alignment.Center,
|
contentAlignment = Alignment.Center,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.background(MaterialTheme.colors.background)
|
.background(MaterialTheme.colorScheme.background)
|
||||||
) {
|
) {
|
||||||
CircularProgressIndicator()
|
CircularProgressIndicator()
|
||||||
}
|
}
|
||||||
@@ -61,7 +61,7 @@ fun PagingPageCurlScreen() {
|
|||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.background(MaterialTheme.colors.background)
|
.background(MaterialTheme.colorScheme.background)
|
||||||
) {
|
) {
|
||||||
Text(items[index]?.content.orEmpty())
|
Text(items[index]?.content.orEmpty())
|
||||||
Text(if (loading) "Loading..." else "")
|
Text(if (loading) "Loading..." else "")
|
||||||
|
@@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.Column
|
|||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material.Slider
|
import androidx.compose.material3.Slider
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
@@ -10,8 +10,8 @@ import androidx.compose.foundation.layout.fillMaxSize
|
|||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.material.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
@@ -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)
|
|
||||||
)
|
|
@@ -1,59 +1,61 @@
|
|||||||
package eu.wewox.pagecurl.ui.theme
|
package eu.wewox.pagecurl.ui.theme
|
||||||
|
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material.Typography
|
import androidx.compose.material3.Typography
|
||||||
import androidx.compose.material.darkColors
|
import androidx.compose.material3.darkColorScheme
|
||||||
import androidx.compose.material.lightColors
|
import androidx.compose.material3.lightColorScheme
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.SideEffect
|
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
|
||||||
|
|
||||||
private val DarkColorPalette = darkColors(
|
private val DarkColorScheme = darkColorScheme(
|
||||||
primary = LightBlue,
|
primary = LightBlue,
|
||||||
primaryVariant = LightBlue,
|
secondary = LightBlue,
|
||||||
secondary = LightYellow,
|
tertiary = LightYellow,
|
||||||
secondaryVariant = LightYellow,
|
|
||||||
|
|
||||||
onPrimary = Color.Black,
|
onPrimary = Color.Black,
|
||||||
onSecondary = 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,
|
primary = LightBlue,
|
||||||
primaryVariant = LightBlue,
|
secondary = LightBlue,
|
||||||
secondary = LightYellow,
|
tertiary = LightYellow,
|
||||||
secondaryVariant = LightYellow,
|
|
||||||
|
|
||||||
onPrimary = Color.Black,
|
onPrimary = Color.Black,
|
||||||
onSecondary = 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.
|
* The theme to use for demo application.
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun PageCurlTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) {
|
fun PageCurlTheme(
|
||||||
val sysUiController = rememberSystemUiController()
|
darkTheme: Boolean = isSystemInDarkTheme(),
|
||||||
SideEffect {
|
content: @Composable () -> Unit
|
||||||
sysUiController.setSystemBarsColor(
|
) {
|
||||||
color = Color.Transparent,
|
val colorScheme = when {
|
||||||
darkIcons = !darkTheme,
|
darkTheme -> DarkColorScheme
|
||||||
isNavigationBarContrastEnforced = false
|
else -> LightColorScheme
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val colors = if (darkTheme) {
|
|
||||||
DarkColorPalette
|
|
||||||
} else {
|
|
||||||
LightColorPalette
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialTheme(
|
MaterialTheme(
|
||||||
colors = colors,
|
colorScheme = colorScheme,
|
||||||
typography = Typography(),
|
typography = Typography(),
|
||||||
shapes = Shapes,
|
|
||||||
content = content
|
content = content
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
34
gradle/libs.versions.toml
Normal file
34
gradle/libs.versions.toml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[versions]
|
||||||
|
sdk-compile = "34"
|
||||||
|
sdk-min = "21"
|
||||||
|
sdk-target = "33"
|
||||||
|
|
||||||
|
compose-bom = "2023.08.00"
|
||||||
|
compose-compiler = "1.5.3"
|
||||||
|
activity-compose = "1.8.0-beta01"
|
||||||
|
paging = "3.2.1"
|
||||||
|
|
||||||
|
plugin-android-gradle = "8.1.1"
|
||||||
|
plugin-kotlin = "1.9.10"
|
||||||
|
plugin-detekt = "1.21.0"
|
||||||
|
plugin-spotless = "6.5.1"
|
||||||
|
plugin-mavenpublish = "0.25.3"
|
||||||
|
|
||||||
|
java-toolchain = "17"
|
||||||
|
|
||||||
|
[libraries]
|
||||||
|
compose-bom = { module = "androidx.compose:compose-bom", version.ref = "compose-bom" }
|
||||||
|
compose-foundation = { module = "androidx.compose.foundation:foundation" }
|
||||||
|
compose-material3 = { module = "androidx.compose.material3:material3" }
|
||||||
|
compose-ui = { module = "androidx.compose.ui:ui" }
|
||||||
|
androidx-activitycompose = { module = "androidx.activity:activity-compose", version.ref = "activity-compose" }
|
||||||
|
androidx-pagingruntime = { module = "androidx.paging:paging-runtime", version.ref = "paging" }
|
||||||
|
androidx-pagingcompose = { module = "androidx.paging:paging-compose", version.ref = "paging" }
|
||||||
|
|
||||||
|
[plugins]
|
||||||
|
android-application = { id = "com.android.application", version.ref = "plugin-android-gradle" }
|
||||||
|
android-library = { id = "com.android.library", version.ref = "plugin-android-gradle" }
|
||||||
|
kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "plugin-kotlin" }
|
||||||
|
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "plugin-detekt" }
|
||||||
|
spotless = { id = "com.diffplug.spotless", version.ref = "plugin-spotless" }
|
||||||
|
mavenpublish = { id = "com.vanniktech.maven.publish", version.ref = "plugin-mavenpublish" }
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
|||||||
#Wed Mar 15 10:05:21 CET 2023
|
#Wed Sep 06 22:11:14 CEST 2023
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
@@ -1,45 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id "com.android.library"
|
|
||||||
id "org.jetbrains.kotlin.android"
|
|
||||||
id "com.vanniktech.maven.publish"
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdk compile_sdk_version
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
minSdk min_sdk_version
|
|
||||||
targetSdk target_sdk_version
|
|
||||||
|
|
||||||
consumerProguardFiles "consumer-rules.pro"
|
|
||||||
}
|
|
||||||
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled false
|
|
||||||
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
compileOptions {
|
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
|
||||||
}
|
|
||||||
buildFeatures {
|
|
||||||
compose true
|
|
||||||
}
|
|
||||||
composeOptions {
|
|
||||||
kotlinCompilerExtensionVersion compose_compiler_version
|
|
||||||
}
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = "1.8"
|
|
||||||
freeCompilerArgs = freeCompilerArgs +
|
|
||||||
"-Xexplicit-api=strict" +
|
|
||||||
"-Xopt-in=kotlin.RequiresOptIn"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation(platform("androidx.compose:compose-bom:$compose_bom_version"))
|
|
||||||
implementation("androidx.compose.ui:ui")
|
|
||||||
implementation("androidx.compose.foundation:foundation")
|
|
||||||
}
|
|
32
pagecurl/build.gradle.kts
Normal file
32
pagecurl/build.gradle.kts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
plugins {
|
||||||
|
alias(libs.plugins.android.library)
|
||||||
|
alias(libs.plugins.kotlin)
|
||||||
|
alias(libs.plugins.mavenpublish)
|
||||||
|
id("convention.jvm.toolchain")
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "eu.wewox.pagecurl"
|
||||||
|
|
||||||
|
compileSdk = libs.versions.sdk.compile.get().toInt()
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
minSdk = libs.versions.sdk.min.get().toInt()
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
compose = true
|
||||||
|
}
|
||||||
|
composeOptions {
|
||||||
|
kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
|
||||||
|
}
|
||||||
|
kotlinOptions {
|
||||||
|
freeCompilerArgs = freeCompilerArgs +
|
||||||
|
"-Xexplicit-api=strict"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(platform(libs.compose.bom))
|
||||||
|
implementation(libs.compose.foundation)
|
||||||
|
implementation(libs.compose.ui)
|
||||||
|
}
|
21
pagecurl/proguard-rules.pro
vendored
21
pagecurl/proguard-rules.pro
vendored
@@ -1,21 +0,0 @@
|
|||||||
# Add project specific ProGuard rules here.
|
|
||||||
# You can control the set of applied configuration files using the
|
|
||||||
# proguardFiles setting in build.gradle.
|
|
||||||
#
|
|
||||||
# For more details, see
|
|
||||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
||||||
|
|
||||||
# If your project uses WebView with JS, uncomment the following
|
|
||||||
# and specify the fully qualified class name to the JavaScript interface
|
|
||||||
# class:
|
|
||||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
|
||||||
# public *;
|
|
||||||
#}
|
|
||||||
|
|
||||||
# Uncomment this to preserve the line number information for
|
|
||||||
# debugging stack traces.
|
|
||||||
#-keepattributes SourceFile,LineNumberTable
|
|
||||||
|
|
||||||
# If you keep the line number information, uncomment this to
|
|
||||||
# hide the original source file name.
|
|
||||||
#-renamesourcefileattribute SourceFile
|
|
@@ -1,17 +1,23 @@
|
|||||||
pluginManagement {
|
pluginManagement {
|
||||||
|
includeBuild("build-logic")
|
||||||
repositories {
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
google()
|
|
||||||
mavenCentral()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("org.gradle.toolchains.foojay-resolver-convention") version ("0.7.0")
|
||||||
|
}
|
||||||
|
|
||||||
dependencyResolutionManagement {
|
dependencyResolutionManagement {
|
||||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rootProject.name = "PageCurl"
|
rootProject.name = "PageCurl"
|
||||||
include ':demo'
|
include(":demo")
|
||||||
include ':pagecurl'
|
include(":pagecurl")
|
Reference in New Issue
Block a user