From 81d8898d24832dc43802abd4f5f12b224f22eb6f Mon Sep 17 00:00:00 2001 From: Oleksandr Balan Date: Sat, 14 May 2022 22:08:29 +0200 Subject: [PATCH] Extract to library --- .gitignore | 1 + .idea/codeStyles/Project.xml | 207 ++++++++++++++++++ .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/gradle.xml | 3 +- app/build.gradle | 61 ------ .../main/java/eu/wewox/pagecurl/utils/Data.kt | 8 - build.gradle | 9 +- {app => demo}/.gitignore | 0 demo/build.gradle | 56 +++++ {app => demo}/proguard-rules.pro | 0 {app => demo}/src/main/AndroidManifest.xml | 1 - .../src/main/ic_launcher-playstore.png | Bin .../kotlin}/eu/wewox/pagecurl/MainActivity.kt | 10 +- .../eu/wewox/pagecurl/ui/theme/Color.kt | 0 .../eu/wewox/pagecurl/ui/theme/Shape.kt | 0 .../eu/wewox/pagecurl/ui/theme/Theme.kt | 0 .../eu/wewox/pagecurl/ui/theme/Type.kt | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../src/main/res/drawable/img_sit.jpg | Bin .../src/main/res/drawable/img_sleep.jpg | Bin .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin {app => demo}/src/main/res/values/colors.xml | 0 .../res/values/ic_launcher_background.xml | 0 {app => demo}/src/main/res/values/strings.xml | 0 {app => demo}/src/main/res/values/themes.xml | 0 pagecurl/.gitignore | 1 + pagecurl/build.gradle | 43 ++++ pagecurl/consumer-rules.pro | 0 pagecurl/proguard-rules.pro | 21 ++ pagecurl/src/main/AndroidManifest.xml | 2 + .../wewox/pagecurl/ExperimentalPageCurlApi.kt | 9 + .../eu/wewox/pagecurl/config/CurlConfig.kt | 27 ++- .../eu/wewox/pagecurl/page/CurlDraw.kt | 7 +- .../eu/wewox/pagecurl/page/CurlGesture.kt | 4 +- .../eu/wewox/pagecurl/page/PageCurl.kt | 5 +- .../eu/wewox/pagecurl/utils/MathUtils.kt | 0 settings.gradle | 3 +- 48 files changed, 393 insertions(+), 90 deletions(-) create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 app/build.gradle delete mode 100644 app/src/main/java/eu/wewox/pagecurl/utils/Data.kt rename {app => demo}/.gitignore (100%) create mode 100644 demo/build.gradle rename {app => demo}/proguard-rules.pro (100%) rename {app => demo}/src/main/AndroidManifest.xml (94%) rename {app => demo}/src/main/ic_launcher-playstore.png (100%) rename {app/src/main/java => demo/src/main/kotlin}/eu/wewox/pagecurl/MainActivity.kt (62%) rename {app/src/main/java => demo/src/main/kotlin}/eu/wewox/pagecurl/ui/theme/Color.kt (100%) rename {app/src/main/java => demo/src/main/kotlin}/eu/wewox/pagecurl/ui/theme/Shape.kt (100%) rename {app/src/main/java => demo/src/main/kotlin}/eu/wewox/pagecurl/ui/theme/Theme.kt (100%) rename {app/src/main/java => demo/src/main/kotlin}/eu/wewox/pagecurl/ui/theme/Type.kt (100%) rename {app => demo}/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {app => demo}/src/main/res/drawable/img_sit.jpg (100%) rename {app => demo}/src/main/res/drawable/img_sleep.jpg (100%) rename {app => demo}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {app => demo}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {app => demo}/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {app => demo}/src/main/res/mipmap-hdpi/ic_launcher_round.png (100%) rename {app => demo}/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {app => demo}/src/main/res/mipmap-mdpi/ic_launcher_round.png (100%) rename {app => demo}/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {app => demo}/src/main/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename {app => demo}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {app => demo}/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename {app => demo}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {app => demo}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename {app => demo}/src/main/res/values/colors.xml (100%) rename {app => demo}/src/main/res/values/ic_launcher_background.xml (100%) rename {app => demo}/src/main/res/values/strings.xml (100%) rename {app => demo}/src/main/res/values/themes.xml (100%) create mode 100644 pagecurl/.gitignore create mode 100644 pagecurl/build.gradle create mode 100644 pagecurl/consumer-rules.pro create mode 100644 pagecurl/proguard-rules.pro create mode 100644 pagecurl/src/main/AndroidManifest.xml create mode 100644 pagecurl/src/main/kotlin/eu/wewox/pagecurl/ExperimentalPageCurlApi.kt rename {app/src/main/java => pagecurl/src/main/kotlin}/eu/wewox/pagecurl/config/CurlConfig.kt (60%) rename {app/src/main/java => pagecurl/src/main/kotlin}/eu/wewox/pagecurl/page/CurlDraw.kt (97%) rename {app/src/main/java => pagecurl/src/main/kotlin}/eu/wewox/pagecurl/page/CurlGesture.kt (96%) rename {app/src/main/java => pagecurl/src/main/kotlin}/eu/wewox/pagecurl/page/PageCurl.kt (97%) rename {app/src/main/java => pagecurl/src/main/kotlin}/eu/wewox/pagecurl/utils/MathUtils.kt (100%) diff --git a/.gitignore b/.gitignore index aa724b7..855cfb3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /local.properties /.idea/caches /.idea/libraries +/.idea/inspectionProfiles /.idea/modules.xml /.idea/workspace.xml /.idea/navEditor.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..04f7afe --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,207 @@ + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 4309c91..a6b0906 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -11,7 +11,8 @@ diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100644 index a4d24cb..0000000 --- a/app/build.gradle +++ /dev/null @@ -1,61 +0,0 @@ -plugins { - id 'com.android.application' - id 'org.jetbrains.kotlin.android' -} - -android { - compileSdk 32 - - defaultConfig { - applicationId "eu.wewox.pagecurl" - minSdk 24 - targetSdk 32 - 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' - } - buildFeatures { - compose true - } - composeOptions { - kotlinCompilerExtensionVersion compose_version - } - packagingOptions { - resources { - excludes += '/META-INF/{AL2.0,LGPL2.1}' - } - } -} - -dependencies { - - implementation 'androidx.core:core-ktx:1.7.0' - implementation "androidx.compose.ui:ui:$compose_version" - implementation "androidx.compose.material:material:$compose_version" - implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' - implementation 'androidx.activity:activity-compose:1.3.1' - testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" - debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" -} diff --git a/app/src/main/java/eu/wewox/pagecurl/utils/Data.kt b/app/src/main/java/eu/wewox/pagecurl/utils/Data.kt deleted file mode 100644 index 977de68..0000000 --- a/app/src/main/java/eu/wewox/pagecurl/utils/Data.kt +++ /dev/null @@ -1,8 +0,0 @@ -package eu.wewox.pagecurl.utils - -object Data { - - val Lorem1 = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam erat volutpat. Phasellus enim erat, vestibulum vel, aliquam a, posuere eu, velit. Et harum quidem rerum facilis est et expedita distinctio. In sem justo, commodo ut, suscipit at, pharetra vitae, orci. Vestibulum fermentum tortor id mi. Sed elit dui, pellentesque a, faucibus vel, interdum nec, diam. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. Nunc tincidunt ante vitae massa. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio a lectus. Proin in tellus sit amet nibh dignissim sagittis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Etiam posuere lacus quis dolor. Class aptent taciti sociosqu ad litora." - val Lorem2 = "Phasellus enim erat, vestibulum vel, aliquam a, posuere eu, velit. Duis ante orci, molestie vitae vehicula venenatis, tincidunt ac pede. Aliquam in lorem sit amet leo accumsan lacinia. Morbi imperdiet, mauris ac auctor dictum, nisl ligula egestas nulla, et sollicitudin sem purus in lacus. Ut tempus purus at lorem. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer malesuada. Sed vel lectus. Donec odio tempus molestie, porttitor ut, iaculis quis, sem. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Etiam egestas wisi a erat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Maecenas lorem. Mauris dolor felis, sagittis at, luctus sed, aliquam non, tellus. Aenean id metus id velit ullamcorper pulvinar. Integer malesuada." - -} diff --git a/build.gradle b/build.gradle index 01af8cf..b026de1 100644 --- a/build.gradle +++ b/build.gradle @@ -1,12 +1,13 @@ buildscript { ext { - compose_version = '1.2.0-beta01' + compose_version = "1.2.0-beta01" + activity = "1.4.0" } } plugins { - id 'com.android.application' version '7.1.1' apply false - id 'com.android.library' version '7.1.1' apply false - id 'org.jetbrains.kotlin.android' version '1.6.21' apply false + id "com.android.application" version "7.1.1" apply false + id "com.android.library" version "7.1.1" apply false + id "org.jetbrains.kotlin.android" version "1.6.21" apply false } task clean(type: Delete) { diff --git a/app/.gitignore b/demo/.gitignore similarity index 100% rename from app/.gitignore rename to demo/.gitignore diff --git a/demo/build.gradle b/demo/build.gradle new file mode 100644 index 0000000..f3b0ffb --- /dev/null +++ b/demo/build.gradle @@ -0,0 +1,56 @@ +plugins { + id "com.android.application" + id "org.jetbrains.kotlin.android" +} + +android { + compileSdk 32 + + defaultConfig { + applicationId "eu.wewox.pagecurl" + minSdk 24 + targetSdk 32 + 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_version + } + packagingOptions { + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + } + } +} + +dependencies { + implementation(project(":pagecurl")) + + implementation("androidx.compose.ui:ui:$compose_version") + implementation("androidx.compose.material:material:$compose_version") + implementation("androidx.activity:activity-compose:$activity") +} diff --git a/app/proguard-rules.pro b/demo/proguard-rules.pro similarity index 100% rename from app/proguard-rules.pro rename to demo/proguard-rules.pro diff --git a/app/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml similarity index 94% rename from app/src/main/AndroidManifest.xml rename to demo/src/main/AndroidManifest.xml index 8e5acdc..b32aa5c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -12,7 +12,6 @@ diff --git a/app/src/main/ic_launcher-playstore.png b/demo/src/main/ic_launcher-playstore.png similarity index 100% rename from app/src/main/ic_launcher-playstore.png rename to demo/src/main/ic_launcher-playstore.png diff --git a/app/src/main/java/eu/wewox/pagecurl/MainActivity.kt b/demo/src/main/kotlin/eu/wewox/pagecurl/MainActivity.kt similarity index 62% rename from app/src/main/java/eu/wewox/pagecurl/MainActivity.kt rename to demo/src/main/kotlin/eu/wewox/pagecurl/MainActivity.kt index c17db36..8060404 100644 --- a/app/src/main/java/eu/wewox/pagecurl/MainActivity.kt +++ b/demo/src/main/kotlin/eu/wewox/pagecurl/MainActivity.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalPageCurlApi::class) + package eu.wewox.pagecurl import android.os.Bundle @@ -25,7 +27,6 @@ import androidx.compose.ui.unit.sp import eu.wewox.pagecurl.config.PageCurlConfig import eu.wewox.pagecurl.page.PageCurl import eu.wewox.pagecurl.ui.theme.PageCurlTheme -import eu.wewox.pagecurl.utils.Data class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -85,3 +86,10 @@ class MainActivity : ComponentActivity() { } } } + +private object Data { + val Lorem1 = + "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam erat volutpat. Phasellus enim erat, vestibulum vel, aliquam a, posuere eu, velit. Et harum quidem rerum facilis est et expedita distinctio. In sem justo, commodo ut, suscipit at, pharetra vitae, orci. Vestibulum fermentum tortor id mi. Sed elit dui, pellentesque a, faucibus vel, interdum nec, diam. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. Nunc tincidunt ante vitae massa. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio a lectus. Proin in tellus sit amet nibh dignissim sagittis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Etiam posuere lacus quis dolor. Class aptent taciti sociosqu ad litora." + val Lorem2 = + "Phasellus enim erat, vestibulum vel, aliquam a, posuere eu, velit. Duis ante orci, molestie vitae vehicula venenatis, tincidunt ac pede. Aliquam in lorem sit amet leo accumsan lacinia. Morbi imperdiet, mauris ac auctor dictum, nisl ligula egestas nulla, et sollicitudin sem purus in lacus. Ut tempus purus at lorem. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer malesuada. Sed vel lectus. Donec odio tempus molestie, porttitor ut, iaculis quis, sem. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Etiam egestas wisi a erat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Maecenas lorem. Mauris dolor felis, sagittis at, luctus sed, aliquam non, tellus. Aenean id metus id velit ullamcorper pulvinar. Integer malesuada." +} diff --git a/app/src/main/java/eu/wewox/pagecurl/ui/theme/Color.kt b/demo/src/main/kotlin/eu/wewox/pagecurl/ui/theme/Color.kt similarity index 100% rename from app/src/main/java/eu/wewox/pagecurl/ui/theme/Color.kt rename to demo/src/main/kotlin/eu/wewox/pagecurl/ui/theme/Color.kt diff --git a/app/src/main/java/eu/wewox/pagecurl/ui/theme/Shape.kt b/demo/src/main/kotlin/eu/wewox/pagecurl/ui/theme/Shape.kt similarity index 100% rename from app/src/main/java/eu/wewox/pagecurl/ui/theme/Shape.kt rename to demo/src/main/kotlin/eu/wewox/pagecurl/ui/theme/Shape.kt diff --git a/app/src/main/java/eu/wewox/pagecurl/ui/theme/Theme.kt b/demo/src/main/kotlin/eu/wewox/pagecurl/ui/theme/Theme.kt similarity index 100% rename from app/src/main/java/eu/wewox/pagecurl/ui/theme/Theme.kt rename to demo/src/main/kotlin/eu/wewox/pagecurl/ui/theme/Theme.kt diff --git a/app/src/main/java/eu/wewox/pagecurl/ui/theme/Type.kt b/demo/src/main/kotlin/eu/wewox/pagecurl/ui/theme/Type.kt similarity index 100% rename from app/src/main/java/eu/wewox/pagecurl/ui/theme/Type.kt rename to demo/src/main/kotlin/eu/wewox/pagecurl/ui/theme/Type.kt diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/demo/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from app/src/main/res/drawable/ic_launcher_foreground.xml rename to demo/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/app/src/main/res/drawable/img_sit.jpg b/demo/src/main/res/drawable/img_sit.jpg similarity index 100% rename from app/src/main/res/drawable/img_sit.jpg rename to demo/src/main/res/drawable/img_sit.jpg diff --git a/app/src/main/res/drawable/img_sleep.jpg b/demo/src/main/res/drawable/img_sleep.jpg similarity index 100% rename from app/src/main/res/drawable/img_sleep.jpg rename to demo/src/main/res/drawable/img_sleep.jpg diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/demo/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-hdpi/ic_launcher.png rename to demo/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/demo/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to demo/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/demo/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-mdpi/ic_launcher.png rename to demo/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/demo/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to demo/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/demo/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to demo/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/demo/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to demo/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/demo/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to demo/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/demo/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to demo/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/app/src/main/res/values/colors.xml b/demo/src/main/res/values/colors.xml similarity index 100% rename from app/src/main/res/values/colors.xml rename to demo/src/main/res/values/colors.xml diff --git a/app/src/main/res/values/ic_launcher_background.xml b/demo/src/main/res/values/ic_launcher_background.xml similarity index 100% rename from app/src/main/res/values/ic_launcher_background.xml rename to demo/src/main/res/values/ic_launcher_background.xml diff --git a/app/src/main/res/values/strings.xml b/demo/src/main/res/values/strings.xml similarity index 100% rename from app/src/main/res/values/strings.xml rename to demo/src/main/res/values/strings.xml diff --git a/app/src/main/res/values/themes.xml b/demo/src/main/res/values/themes.xml similarity index 100% rename from app/src/main/res/values/themes.xml rename to demo/src/main/res/values/themes.xml diff --git a/pagecurl/.gitignore b/pagecurl/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/pagecurl/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/pagecurl/build.gradle b/pagecurl/build.gradle new file mode 100644 index 0000000..4705f4b --- /dev/null +++ b/pagecurl/build.gradle @@ -0,0 +1,43 @@ +plugins { + id "com.android.library" + id "org.jetbrains.kotlin.android" +} + +android { + compileSdk 32 + + defaultConfig { + minSdk 24 + targetSdk 32 + + 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_version + } + kotlinOptions { + jvmTarget = "1.8" + freeCompilerArgs = freeCompilerArgs + + "-Xexplicit-api=strict" + + "-Xopt-in=kotlin.RequiresOptIn" + } +} + +dependencies { + implementation("androidx.compose.ui:ui:$compose_version") + implementation("androidx.compose.foundation:foundation:$compose_version") +} diff --git a/pagecurl/consumer-rules.pro b/pagecurl/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/pagecurl/proguard-rules.pro b/pagecurl/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/pagecurl/proguard-rules.pro @@ -0,0 +1,21 @@ +# 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 \ No newline at end of file diff --git a/pagecurl/src/main/AndroidManifest.xml b/pagecurl/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c191e0f --- /dev/null +++ b/pagecurl/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/pagecurl/src/main/kotlin/eu/wewox/pagecurl/ExperimentalPageCurlApi.kt b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/ExperimentalPageCurlApi.kt new file mode 100644 index 0000000..23f7e74 --- /dev/null +++ b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/ExperimentalPageCurlApi.kt @@ -0,0 +1,9 @@ +package eu.wewox.pagecurl + +/** + * Used for annotating experimental page curl API that is likely to change or be removed in the future. + */ +@RequiresOptIn( + "This API is experimental and is likely to change or to be removed in the future." +) +public annotation class ExperimentalPageCurlApi diff --git a/app/src/main/java/eu/wewox/pagecurl/config/CurlConfig.kt b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/config/CurlConfig.kt similarity index 60% rename from app/src/main/java/eu/wewox/pagecurl/config/CurlConfig.kt rename to pagecurl/src/main/kotlin/eu/wewox/pagecurl/config/CurlConfig.kt index d5e40d8..c57fd49 100644 --- a/app/src/main/java/eu/wewox/pagecurl/config/CurlConfig.kt +++ b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/config/CurlConfig.kt @@ -6,13 +6,16 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp +import eu.wewox.pagecurl.ExperimentalPageCurlApi -data class PageCurlConfig( +@ExperimentalPageCurlApi +public data class PageCurlConfig( val curl: CurlConfig = CurlConfig(), val interaction: InteractionConfig = InteractionConfig() ) -data class InteractionConfig( +@ExperimentalPageCurlApi +public data class InteractionConfig( val forward: CurlDirection.Forward = CurlDirection.Forward( Rect(Offset(0.5f, 0.0f), Offset(1.0f, 1.0f)), Rect(Offset(0.0f, 0.0f), Offset(0.5f, 1.0f)), @@ -20,25 +23,29 @@ data class InteractionConfig( val backward: CurlDirection.Backward = CurlDirection.Backward(forward.end, forward.start), ) -sealed interface CurlDirection { - val start: Rect - val end: Rect +@ExperimentalPageCurlApi +public sealed interface CurlDirection { + public val start: Rect + public val end: Rect - data class Forward(override val start: Rect, override val end: Rect) : CurlDirection - data class Backward(override val start: Rect, override val end: Rect) : CurlDirection + public data class Forward(override val start: Rect, override val end: Rect) : CurlDirection + public data class Backward(override val start: Rect, override val end: Rect) : CurlDirection } -data class CurlConfig( +@ExperimentalPageCurlApi +public data class CurlConfig( val backPage: BackPageConfig = BackPageConfig(), val shadow: ShadowConfig = ShadowConfig(), ) -data class BackPageConfig( +@ExperimentalPageCurlApi +public data class BackPageConfig( val color: Color = Color.White, val contentAlpha: Float = 0.1f, ) -data class ShadowConfig( +@ExperimentalPageCurlApi +public data class ShadowConfig( val color: Color = Color.Black, val alpha: Float = 0.2f, val radius: Dp = 15.dp, diff --git a/app/src/main/java/eu/wewox/pagecurl/page/CurlDraw.kt b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/page/CurlDraw.kt similarity index 97% rename from app/src/main/java/eu/wewox/pagecurl/page/CurlDraw.kt rename to pagecurl/src/main/kotlin/eu/wewox/pagecurl/page/CurlDraw.kt index b32da04..d36af07 100644 --- a/app/src/main/java/eu/wewox/pagecurl/page/CurlDraw.kt +++ b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/page/CurlDraw.kt @@ -19,6 +19,7 @@ import androidx.compose.ui.graphics.drawscope.withTransform import androidx.compose.ui.graphics.nativeCanvas import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.unit.dp +import eu.wewox.pagecurl.ExperimentalPageCurlApi import eu.wewox.pagecurl.config.CurlConfig import eu.wewox.pagecurl.utils.Polygon import eu.wewox.pagecurl.utils.lineLineIntersection @@ -26,7 +27,8 @@ import eu.wewox.pagecurl.utils.rotate import java.lang.Float.max import kotlin.math.atan2 -fun Modifier.drawCurl( +@ExperimentalPageCurlApi +public fun Modifier.drawCurl( config: CurlConfig = CurlConfig(), posA: Offset, posB: Offset, @@ -68,6 +70,7 @@ fun Modifier.drawCurl( } } +@ExperimentalPageCurlApi private fun CacheDrawScope.prepareClippedContent( topCurlOffset: Offset, bottomCurlOffset: Offset, @@ -83,6 +86,7 @@ private fun CacheDrawScope.prepareClippedContent( } } +@ExperimentalPageCurlApi private fun CacheDrawScope.prepareCurl( config: CurlConfig, topCurlOffset: Offset, @@ -134,6 +138,7 @@ private fun CacheDrawScope.prepareCurl( } } +@ExperimentalPageCurlApi private fun CacheDrawScope.prepareShadow( config: CurlConfig, polygon: Polygon, diff --git a/app/src/main/java/eu/wewox/pagecurl/page/CurlGesture.kt b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/page/CurlGesture.kt similarity index 96% rename from app/src/main/java/eu/wewox/pagecurl/page/CurlGesture.kt rename to pagecurl/src/main/kotlin/eu/wewox/pagecurl/page/CurlGesture.kt index e51d447..e156e38 100644 --- a/app/src/main/java/eu/wewox/pagecurl/page/CurlGesture.kt +++ b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/page/CurlGesture.kt @@ -12,11 +12,13 @@ import androidx.compose.ui.geometry.Rect import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.input.pointer.util.VelocityTracker import androidx.compose.ui.unit.IntSize +import eu.wewox.pagecurl.ExperimentalPageCurlApi import eu.wewox.pagecurl.config.CurlDirection import eu.wewox.pagecurl.utils.rotate import kotlin.math.PI -fun Modifier.curlGesture( +@ExperimentalPageCurlApi +public fun Modifier.curlGesture( enabled: Boolean, direction: CurlDirection, onStart: () -> Unit, diff --git a/app/src/main/java/eu/wewox/pagecurl/page/PageCurl.kt b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/page/PageCurl.kt similarity index 97% rename from app/src/main/java/eu/wewox/pagecurl/page/PageCurl.kt rename to pagecurl/src/main/kotlin/eu/wewox/pagecurl/page/PageCurl.kt index f5296aa..f13c8ce 100644 --- a/app/src/main/java/eu/wewox/pagecurl/page/PageCurl.kt +++ b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/page/PageCurl.kt @@ -13,13 +13,15 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset +import eu.wewox.pagecurl.ExperimentalPageCurlApi import eu.wewox.pagecurl.config.CurlDirection import eu.wewox.pagecurl.config.PageCurlConfig import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +@ExperimentalPageCurlApi @Composable -fun PageCurl( +public fun PageCurl( current: Int, count: Int, modifier: Modifier = Modifier, @@ -79,6 +81,7 @@ fun PageCurl( } } +@ExperimentalPageCurlApi private fun Modifier.curlGesture( enabled: Boolean, scope: CoroutineScope, diff --git a/app/src/main/java/eu/wewox/pagecurl/utils/MathUtils.kt b/pagecurl/src/main/kotlin/eu/wewox/pagecurl/utils/MathUtils.kt similarity index 100% rename from app/src/main/java/eu/wewox/pagecurl/utils/MathUtils.kt rename to pagecurl/src/main/kotlin/eu/wewox/pagecurl/utils/MathUtils.kt diff --git a/settings.gradle b/settings.gradle index 56f04d3..d226ec8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -13,4 +13,5 @@ dependencyResolutionManagement { } } rootProject.name = "PageCurl" -include ':app' +include ':demo' +include ':pagecurl'