From 8ae5981f0cff0563def96dbc9462f3e0be0ffd2a Mon Sep 17 00:00:00 2001 From: Kizito Nwose Date: Sun, 26 May 2024 11:34:58 +0200 Subject: [PATCH 1/7] Remove desugar from core and data modules. --- .../calendar/buildsrc/Dependencies.kt | 2 ++ core/build.gradle | 27 +++++++------------ data/build.gradle | 27 +++++++------------ 3 files changed, 20 insertions(+), 36 deletions(-) diff --git a/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt b/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt index 0f5417d4..b09791b5 100644 --- a/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt +++ b/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt @@ -3,9 +3,11 @@ package com.kizitonwose.calendar.buildsrc import org.gradle.api.JavaVersion +import org.gradle.jvm.toolchain.JavaLanguageVersion object Config { val compatibleJavaVersion = JavaVersion.VERSION_17 + val compatibleJavaLanguageVersion = JavaLanguageVersion.of(compatibleJavaVersion.majorVersion.toInt()) } object Android { diff --git a/core/build.gradle b/core/build.gradle index 59845487..76651cde 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,30 +1,21 @@ -import com.kizitonwose.calendar.buildsrc.Android import com.kizitonwose.calendar.buildsrc.Config import com.kizitonwose.calendar.buildsrc.Libs -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +apply plugin: 'kotlin' apply plugin: 'com.vanniktech.maven.publish' -android { - compileSdk Android.compileSdk - namespace 'com.kizitonwose.calendar.core' - defaultConfig { - minSdkVersion Android.minSdkLibraryCore - targetSdkVersion Android.targetSdk - multiDexEnabled true // Needed for desugar because minSdk < 21 +java { + toolchain { + languageVersion = Config.compatibleJavaLanguageVersion } - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility = Config.compatibleJavaVersion - targetCompatibility = Config.compatibleJavaVersion - } - kotlinOptions { - jvmTarget = Config.compatibleJavaVersion +} + +kotlin { + jvmToolchain { + languageVersion = Config.compatibleJavaLanguageVersion } } dependencies { - coreLibraryDesugaring Libs.Core.deSugar implementation Libs.Compose.runtime // Only needed for @Immutable annotation. } diff --git a/data/build.gradle b/data/build.gradle index 3da9fe56..de1a61b5 100644 --- a/data/build.gradle +++ b/data/build.gradle @@ -1,33 +1,24 @@ -import com.kizitonwose.calendar.buildsrc.Android import com.kizitonwose.calendar.buildsrc.Config import com.kizitonwose.calendar.buildsrc.Kotlin import com.kizitonwose.calendar.buildsrc.Libs -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +apply plugin: 'kotlin' apply plugin: 'com.vanniktech.maven.publish' -android { - compileSdk Android.compileSdk - namespace 'com.kizitonwose.calendar.data' - defaultConfig { - minSdkVersion Android.minSdkLibraryCore - targetSdkVersion Android.targetSdk - multiDexEnabled true // Needed for desugar because minSdk < 21 +java { + toolchain { + languageVersion = Config.compatibleJavaLanguageVersion } - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility = Config.compatibleJavaVersion - targetCompatibility = Config.compatibleJavaVersion - } - kotlinOptions { - jvmTarget = Config.compatibleJavaVersion +} + +kotlin { + jvmToolchain { + languageVersion = Config.compatibleJavaLanguageVersion } } dependencies { implementation project(':core') - coreLibraryDesugaring Libs.Core.deSugar implementation Kotlin.stdLib testImplementation Libs.Core.Test.junit From 5b6b0e1178c5a58e8d8d0b2dbef9311cf6c8f1d3 Mon Sep 17 00:00:00 2001 From: Kizito Nwose Date: Sun, 26 May 2024 12:01:13 +0200 Subject: [PATCH 2/7] Prepare version 2.6.0-beta01 --- .../calendar/buildsrc/Dependencies.kt | 2 +- .../calendar/compose/CalendarDefaults.kt | 10 +++---- gradle.properties | 3 +-- .../calendar/sample/compose/Example3Page.kt | 27 ++++++++++++------- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt b/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt index 0f5417d4..1b34667e 100644 --- a/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt +++ b/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt @@ -64,7 +64,7 @@ object Libs { } object Compose { - private const val composeVersion = "1.6.1" + private const val composeVersion = "1.7.0-beta01" const val ui = "androidx.compose.ui:ui:$composeVersion" const val foundation = "androidx.compose.foundation:foundation:$composeVersion" const val tooling = "androidx.compose.ui:ui-tooling:$composeVersion" diff --git a/compose/src/main/java/com/kizitonwose/calendar/compose/CalendarDefaults.kt b/compose/src/main/java/com/kizitonwose/calendar/compose/CalendarDefaults.kt index 3856d891..5bb39f4e 100644 --- a/compose/src/main/java/com/kizitonwose/calendar/compose/CalendarDefaults.kt +++ b/compose/src/main/java/com/kizitonwose/calendar/compose/CalendarDefaults.kt @@ -4,7 +4,7 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.gestures.FlingBehavior import androidx.compose.foundation.gestures.ScrollableDefaults import androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider -import androidx.compose.foundation.gestures.snapping.SnapPositionInLayout +import androidx.compose.foundation.gestures.snapping.SnapPosition import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable @@ -22,7 +22,7 @@ internal object CalendarDefaults { @Composable private fun pagedFlingBehavior(state: LazyListState): FlingBehavior { val snappingLayout = remember(state) { - val provider = SnapLayoutInfoProvider(state, CalendarSnapPositionInLayout()) + val provider = SnapLayoutInfoProvider(state, SnapPosition.Start) CalendarSnapLayoutInfoProvider(provider) } return rememberSnapFlingBehavior(snappingLayout) @@ -46,9 +46,5 @@ private fun CalendarSnapLayoutInfoProvider( * In compose 1.3, the default was single page snapping (zero), but this changed * in compose 1.4 to decayed page snapping which is not great for calendar usage. */ - override fun calculateApproachOffset(initialVelocity: Float): Float = 0f + override fun calculateApproachOffset(velocity: Float, decayOffset: Float): Float = 0f } - -@OptIn(ExperimentalFoundationApi::class) -@Suppress("FunctionName") -private fun CalendarSnapPositionInLayout() = SnapPositionInLayout { _, _, _, _, _ -> 0 } diff --git a/gradle.properties b/gradle.properties index 82024a69..11f7840d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,10 +6,9 @@ SONATYPE_HOST=S01 RELEASE_SIGNING_ENABLED=true GROUP=com.kizitonwose.calendar -VERSION_NAME=2.5.2-SNAPSHOT +VERSION_NAME=2.6.0-beta01 POM_NAME=Calendar - POM_INCEPTION_YEAR=2019 POM_URL=https://github.com/kizitonwose/calendar POM_SCM_URL=https://github.com/kizitonwose/calendar diff --git a/sample/src/main/java/com/kizitonwose/calendar/sample/compose/Example3Page.kt b/sample/src/main/java/com/kizitonwose/calendar/sample/compose/Example3Page.kt index f494f6b6..225307de 100644 --- a/sample/src/main/java/com/kizitonwose/calendar/sample/compose/Example3Page.kt +++ b/sample/src/main/java/com/kizitonwose/calendar/sample/compose/Example3Page.kt @@ -20,11 +20,13 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.items import androidx.compose.material.Divider +import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.LocalContentColor +import androidx.compose.material.LocalRippleConfiguration +import androidx.compose.material.RippleConfiguration import androidx.compose.material.Text import androidx.compose.material.darkColors -import androidx.compose.material.ripple.LocalRippleTheme -import androidx.compose.material.ripple.RippleTheme +import androidx.compose.material.ripple.RippleAlpha import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect @@ -126,7 +128,8 @@ fun Example3Page() { modifier = Modifier.wrapContentWidth(), state = state, dayContent = { day -> - CompositionLocalProvider(LocalRippleTheme provides Example3RippleTheme) { + @OptIn(ExperimentalMaterialApi::class) + CompositionLocalProvider(LocalRippleConfiguration provides Example3RippleConfiguration) { val colors = if (day.position == DayPosition.MonthDate) { flights[day.date].orEmpty().map { colorResource(it.color) } } else { @@ -319,13 +322,17 @@ private fun AirportInformation(airport: Airport, isDeparture: Boolean) { } // The default dark them ripple is too bright so we tone it down. -private object Example3RippleTheme : RippleTheme { - @Composable - override fun defaultColor() = RippleTheme.defaultRippleColor(Color.Gray, lightTheme = false) - - @Composable - override fun rippleAlpha() = RippleTheme.defaultRippleAlpha(Color.Gray, lightTheme = false) -} +@OptIn(ExperimentalMaterialApi::class) +private val Example3RippleConfiguration = RippleConfiguration( + color = Color.Gray, + // Copied from RippleTheme#DarkThemeRippleAlpha + rippleAlpha = RippleAlpha( + pressedAlpha = 0.10f, + focusedAlpha = 0.12f, + draggedAlpha = 0.08f, + hoveredAlpha = 0.04f, + ), +) @Preview(heightDp = 600) @Composable From 0126fad213701fed9be2bcca4e60ac441e70a7d8 Mon Sep 17 00:00:00 2001 From: Kizito Nwose Date: Mon, 27 May 2024 17:47:57 +0200 Subject: [PATCH 3/7] Remove desugar from view and compose modules. --- .../calendar/buildsrc/Dependencies.kt | 4 ++-- compose/build.gradle | 15 ++++++++------- sample/build.gradle | 15 ++++++++++----- view/build.gradle | 16 ++++++++-------- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt b/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt index b09791b5..bb65dc69 100644 --- a/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt +++ b/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt @@ -4,6 +4,7 @@ package com.kizitonwose.calendar.buildsrc import org.gradle.api.JavaVersion import org.gradle.jvm.toolchain.JavaLanguageVersion +import kotlin.math.max object Config { val compatibleJavaVersion = JavaVersion.VERSION_17 @@ -11,10 +12,9 @@ object Config { } object Android { - const val minSdkLibraryCore = 4 const val minSdkLibraryView = 15 const val minSdkLibraryCompose = 21 - const val minSdkSample = 21 + val minSdkSample = max(minSdkLibraryView, minSdkLibraryCompose) const val targetSdk = 33 const val compileSdk = 34 diff --git a/compose/build.gradle b/compose/build.gradle index 28ae5cb9..e87226ec 100644 --- a/compose/build.gradle +++ b/compose/build.gradle @@ -14,13 +14,15 @@ android { minSdkVersion Android.minSdkLibraryCompose targetSdkVersion Android.targetSdk } - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility = Config.compatibleJavaVersion - targetCompatibility = Config.compatibleJavaVersion + java { + toolchain { + languageVersion = Config.compatibleJavaLanguageVersion + } } - kotlinOptions { - jvmTarget = Config.compatibleJavaVersion + kotlin { + jvmToolchain { + languageVersion = Config.compatibleJavaLanguageVersion + } } buildFeatures { compose true @@ -33,7 +35,6 @@ android { dependencies { api project(':core') implementation project(':data') - coreLibraryDesugaring Libs.Core.deSugar implementation Kotlin.stdLib implementation Libs.Compose.ui diff --git a/sample/build.gradle b/sample/build.gradle index 668aa10e..091d632c 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -26,13 +26,18 @@ android { minifyEnabled false } } + java { + toolchain { + languageVersion = Config.compatibleJavaLanguageVersion + } + } + kotlin { + jvmToolchain { + languageVersion = Config.compatibleJavaLanguageVersion + } + } compileOptions { coreLibraryDesugaringEnabled true - sourceCompatibility = Config.compatibleJavaVersion - targetCompatibility = Config.compatibleJavaVersion - } - kotlinOptions { - jvmTarget = Config.compatibleJavaVersion } composeOptions { kotlinCompilerExtensionVersion Android.composeCompiler diff --git a/view/build.gradle b/view/build.gradle index d4c8caad..7e986370 100644 --- a/view/build.gradle +++ b/view/build.gradle @@ -13,22 +13,22 @@ android { defaultConfig { minSdkVersion Android.minSdkLibraryView targetSdkVersion Android.targetSdk - multiDexEnabled true // Needed for desugar because minSdk < 21 } - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility = Config.compatibleJavaVersion - targetCompatibility = Config.compatibleJavaVersion + java { + toolchain { + languageVersion = Config.compatibleJavaLanguageVersion + } } - kotlinOptions { - jvmTarget = Config.compatibleJavaVersion + kotlin { + jvmToolchain { + languageVersion = Config.compatibleJavaLanguageVersion + } } } dependencies { api project(':core') implementation project(':data') - coreLibraryDesugaring Libs.Core.deSugar implementation Kotlin.stdLib implementation Libs.View.coreKtx From a180b9c8a1672f96556e94bae456867faed43a9f Mon Sep 17 00:00:00 2001 From: Kizito Nwose Date: Mon, 27 May 2024 17:05:47 +0200 Subject: [PATCH 4/7] Use kotlin dsl --- build.gradle | 31 ------- build.gradle.kts | 15 ++++ .../calendar/buildsrc/Dependencies.kt | 42 ++++++---- compose/build.gradle | 45 ---------- compose/build.gradle.kts | 48 +++++++++++ core/build.gradle | 21 ----- core/build.gradle.kts | 25 ++++++ data/build.gradle | 25 ------ data/build.gradle.kts | 29 +++++++ gradle/wrapper/gradle-wrapper.properties | 4 +- sample/build.gradle | 77 ----------------- sample/build.gradle.kts | 82 +++++++++++++++++++ .../calendar/sample/compose/Utils.kt | 4 +- .../shared/StatusBarColorLifecycleObserver.kt | 1 + .../calendar/sample/view/Example3Fragment.kt | 6 +- settings.gradle | 1 - settings.gradle.kts | 20 +++++ view/build.gradle | 37 --------- view/build.gradle.kts | 40 +++++++++ 19 files changed, 296 insertions(+), 257 deletions(-) delete mode 100644 build.gradle create mode 100644 build.gradle.kts delete mode 100644 compose/build.gradle create mode 100644 compose/build.gradle.kts delete mode 100644 core/build.gradle create mode 100644 core/build.gradle.kts delete mode 100644 data/build.gradle create mode 100644 data/build.gradle.kts delete mode 100644 sample/build.gradle create mode 100644 sample/build.gradle.kts delete mode 100644 settings.gradle create mode 100644 settings.gradle.kts delete mode 100644 view/build.gradle create mode 100644 view/build.gradle.kts diff --git a/build.gradle b/build.gradle deleted file mode 100644 index f60bcc51..00000000 --- a/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -import com.kizitonwose.calendar.buildsrc.Plugins - -apply plugin: 'com.github.ben-manes.versions' - -buildscript { - repositories { - google() - gradlePluginPortal() - mavenCentral() - } - dependencies { - classpath Plugins.android - classpath Plugins.kotlin - classpath Plugins.kotlinter - classpath Plugins.versions - classpath Plugins.mavenPublish - } -} - -allprojects { - repositories { - google() - mavenCentral() - } - - apply plugin: 'org.jmailen.kotlinter' -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..3574324b --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,15 @@ +import com.kizitonwose.calendar.buildsrc.Plugins + +plugins { + with(com.kizitonwose.calendar.buildsrc.Plugins) { + applyRootPlugins() + } +} + +allprojects { + apply(plugin = Plugins.kotlinter) +} + +tasks.register("clean").configure { + delete(rootProject.layout.buildDirectory) +} diff --git a/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt b/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt index bb65dc69..bc1092b6 100644 --- a/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt +++ b/buildSrc/src/main/java/com/kizitonwose/calendar/buildsrc/Dependencies.kt @@ -4,6 +4,7 @@ package com.kizitonwose.calendar.buildsrc import org.gradle.api.JavaVersion import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.kotlin.dsl.PluginDependenciesSpecScope import kotlin.math.max object Config { @@ -12,28 +13,39 @@ object Config { } object Android { - const val minSdkLibraryView = 15 - const val minSdkLibraryCompose = 21 - val minSdkSample = max(minSdkLibraryView, minSdkLibraryCompose) - const val targetSdk = 33 + const val minSdkViewLibrary = 15 + const val minSdkComposeLibrary = 21 + val minSdkSampleApp = max(minSdkViewLibrary, minSdkComposeLibrary) + const val targetSdk = 34 const val compileSdk = 34 // See compose/kotlin version mapping // https://developer.android.com/jetpack/androidx/releases/compose-kotlin - const val composeCompiler = "1.5.9" + const val composeCompiler = "1.5.14" } object Plugins { - const val android = "com.android.tools.build:gradle:8.2.2" - const val kotlin = Kotlin.gradlePlugin - const val kotlinter = "org.jmailen.gradle:kotlinter-gradle:4.2.0" - const val versions = "com.github.ben-manes:gradle-versions-plugin:0.51.0" - const val mavenPublish = "com.vanniktech:gradle-maven-publish-plugin:0.27.0" + private const val agpVersion = "8.4.0" + const val androidApp = "com.android.application" + const val androidLibrary = "com.android.library" + const val kotlinJvm = "org.jetbrains.kotlin.jvm" + const val kotlinAndroid = "org.jetbrains.kotlin.android" + const val kotlinter = "org.jmailen.kotlinter" + const val mavenPublish = "com.vanniktech.maven.publish" + const val versionCheck = "com.github.ben-manes.versions" + + fun PluginDependenciesSpecScope.applyRootPlugins() { + id(androidApp).version(agpVersion).apply(false) + id(androidLibrary).version(agpVersion).apply(false) + id(kotlinAndroid).version(Kotlin.version).apply(false) + id(kotlinter).version("4.3.0").apply(false) + id(mavenPublish).version("0.28.0").apply(false) + id(versionCheck).version("0.51.0").apply(true) + } } object Kotlin { - private const val version = "1.9.22" - const val gradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:$version" + internal const val version = "1.9.24" const val stdLib = "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$version" } @@ -49,11 +61,11 @@ object Libs { object View { const val legacySupport = "androidx.legacy:legacy-support-v4:1.0.0" const val appCompat = "androidx.appcompat:appcompat:1.6.1" - const val coreKtx = "androidx.core:core-ktx:1.12.0" + const val coreKtx = "androidx.core:core-ktx:1.13.1" const val constraintLayout = "androidx.constraintlayout:constraintlayout:2.1.4" const val cardView = "androidx.cardview:cardview:1.0.0" const val recyclerView = "androidx.recyclerview:recyclerview:1.3.2" - const val material = "com.google.android.material:material:1.9.0" + const val material = "com.google.android.material:material:1.12.0" object Test { private const val espressoVersion = "3.5.1" @@ -72,7 +84,7 @@ object Libs { const val tooling = "androidx.compose.ui:ui-tooling:$composeVersion" const val runtime = "androidx.compose.runtime:runtime:$composeVersion" const val material = "androidx.compose.material:material:$composeVersion" - const val activity = "androidx.activity:activity-compose:1.8.2" + const val activity = "androidx.activity:activity-compose:1.9.0" const val navigation = "androidx.navigation:navigation-compose:2.7.7" object Test { diff --git a/compose/build.gradle b/compose/build.gradle deleted file mode 100644 index e87226ec..00000000 --- a/compose/build.gradle +++ /dev/null @@ -1,45 +0,0 @@ -import com.kizitonwose.calendar.buildsrc.Android -import com.kizitonwose.calendar.buildsrc.Config -import com.kizitonwose.calendar.buildsrc.Kotlin -import com.kizitonwose.calendar.buildsrc.Libs - -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply plugin: 'com.vanniktech.maven.publish' - -android { - compileSdk Android.compileSdk - namespace 'com.kizitonwose.calendar.compose' - defaultConfig { - minSdkVersion Android.minSdkLibraryCompose - targetSdkVersion Android.targetSdk - } - java { - toolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } - } - kotlin { - jvmToolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } - } - buildFeatures { - compose true - } - composeOptions { - kotlinCompilerExtensionVersion Android.composeCompiler - } -} - -dependencies { - api project(':core') - implementation project(':data') - implementation Kotlin.stdLib - - implementation Libs.Compose.ui - implementation Libs.Compose.tooling - implementation Libs.Compose.foundation - - testImplementation Libs.Core.Test.junit -} diff --git a/compose/build.gradle.kts b/compose/build.gradle.kts new file mode 100644 index 00000000..d69ad895 --- /dev/null +++ b/compose/build.gradle.kts @@ -0,0 +1,48 @@ +import com.kizitonwose.calendar.buildsrc.Android +import com.kizitonwose.calendar.buildsrc.Config +import com.kizitonwose.calendar.buildsrc.Kotlin +import com.kizitonwose.calendar.buildsrc.Libs + +plugins { + with(com.kizitonwose.calendar.buildsrc.Plugins) { + id(androidLibrary) + id(kotlinAndroid) + id(mavenPublish) + } +} + +android { + compileSdk = Android.compileSdk + namespace = "com.kizitonwose.calendar.compose" + defaultConfig { + minSdk = Android.minSdkComposeLibrary + } + java { + toolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } + } + kotlin { + jvmToolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } + } + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = Android.composeCompiler + } +} + +dependencies { + api(project(":core")) + implementation(project(":data")) + implementation(Kotlin.stdLib) + + implementation(Libs.Compose.ui) + implementation(Libs.Compose.tooling) + implementation(Libs.Compose.foundation) + + testImplementation(Libs.Core.Test.junit) +} diff --git a/core/build.gradle b/core/build.gradle deleted file mode 100644 index 76651cde..00000000 --- a/core/build.gradle +++ /dev/null @@ -1,21 +0,0 @@ -import com.kizitonwose.calendar.buildsrc.Config -import com.kizitonwose.calendar.buildsrc.Libs - -apply plugin: 'kotlin' -apply plugin: 'com.vanniktech.maven.publish' - -java { - toolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } -} - -kotlin { - jvmToolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } -} - -dependencies { - implementation Libs.Compose.runtime // Only needed for @Immutable annotation. -} diff --git a/core/build.gradle.kts b/core/build.gradle.kts new file mode 100644 index 00000000..daf1333c --- /dev/null +++ b/core/build.gradle.kts @@ -0,0 +1,25 @@ +import com.kizitonwose.calendar.buildsrc.Config +import com.kizitonwose.calendar.buildsrc.Libs + +plugins { + with(com.kizitonwose.calendar.buildsrc.Plugins) { + id(kotlinJvm) + id(mavenPublish) + } +} + +java { + toolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } +} + +kotlin { + jvmToolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } +} + +dependencies { + implementation(Libs.Compose.runtime) // Only needed for @Immutable annotation. +} diff --git a/data/build.gradle b/data/build.gradle deleted file mode 100644 index de1a61b5..00000000 --- a/data/build.gradle +++ /dev/null @@ -1,25 +0,0 @@ -import com.kizitonwose.calendar.buildsrc.Config -import com.kizitonwose.calendar.buildsrc.Kotlin -import com.kizitonwose.calendar.buildsrc.Libs - -apply plugin: 'kotlin' -apply plugin: 'com.vanniktech.maven.publish' - -java { - toolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } -} - -kotlin { - jvmToolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } -} - -dependencies { - implementation project(':core') - implementation Kotlin.stdLib - - testImplementation Libs.Core.Test.junit -} diff --git a/data/build.gradle.kts b/data/build.gradle.kts new file mode 100644 index 00000000..ad18c0cb --- /dev/null +++ b/data/build.gradle.kts @@ -0,0 +1,29 @@ +import com.kizitonwose.calendar.buildsrc.Config +import com.kizitonwose.calendar.buildsrc.Kotlin +import com.kizitonwose.calendar.buildsrc.Libs + +plugins { + with(com.kizitonwose.calendar.buildsrc.Plugins) { + id(kotlinJvm) + id(mavenPublish) + } +} + +java { + toolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } +} + +kotlin { + jvmToolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } +} + +dependencies { + implementation(project(":core")) + implementation(Kotlin.stdLib) + + testImplementation(Libs.Core.Test.junit) +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a9bae233..fb5d56ba 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Feb 11 17:28:19 CET 2024 +#Mon May 27 16:10:41 CEST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/sample/build.gradle b/sample/build.gradle deleted file mode 100644 index 091d632c..00000000 --- a/sample/build.gradle +++ /dev/null @@ -1,77 +0,0 @@ -import com.kizitonwose.calendar.buildsrc.Android -import com.kizitonwose.calendar.buildsrc.Config -import com.kizitonwose.calendar.buildsrc.Kotlin -import com.kizitonwose.calendar.buildsrc.Libs - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -android { - compileSdk Android.compileSdk - namespace 'com.kizitonwose.calendar.sample' - defaultConfig { - applicationId "com.kizitonwose.calendar.sample" - minSdkVersion Android.minSdkSample - targetSdkVersion Android.targetSdk - versionCode 1 - versionName "1.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - buildFeatures { - viewBinding = true - compose = true - } - buildTypes { - release { - minifyEnabled false - } - } - java { - toolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } - } - kotlin { - jvmToolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } - } - compileOptions { - coreLibraryDesugaringEnabled true - } - composeOptions { - kotlinCompilerExtensionVersion Android.composeCompiler - } -} - -dependencies { - implementation project(':view') - implementation project(':compose') - coreLibraryDesugaring Libs.Core.deSugar - implementation Kotlin.stdLib - - implementation Libs.View.legacySupport - implementation Libs.View.appCompat - implementation Libs.View.coreKtx - implementation Libs.View.constraintLayout - implementation Libs.View.cardView - implementation Libs.View.material - - implementation Libs.Compose.ui - implementation Libs.Compose.tooling - implementation Libs.Compose.foundation - implementation Libs.Compose.material - implementation Libs.Compose.activity - implementation Libs.Compose.navigation - - testImplementation Libs.Core.Test.junit - - androidTestImplementation Libs.View.Test.espressoCore - androidTestImplementation Libs.View.Test.espressoContrib // RecyclerView actions. - androidTestImplementation Libs.View.Test.runner - androidTestImplementation Libs.View.Test.rules - androidTestImplementation Libs.View.Test.extJunit - - androidTestImplementation Libs.Compose.Test.uiJunit - debugImplementation Libs.Compose.Test.uiManifest // Compose test runner activity -} diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts new file mode 100644 index 00000000..55cd7389 --- /dev/null +++ b/sample/build.gradle.kts @@ -0,0 +1,82 @@ + +import com.kizitonwose.calendar.buildsrc.Android +import com.kizitonwose.calendar.buildsrc.Config +import com.kizitonwose.calendar.buildsrc.Kotlin +import com.kizitonwose.calendar.buildsrc.Libs + +plugins { + with(com.kizitonwose.calendar.buildsrc.Plugins) { + id(androidApp) + id(kotlinAndroid) + } +} + +android { + compileSdk = Android.compileSdk + namespace = "com.kizitonwose.calendar.sample" + defaultConfig { + applicationId = "com.kizitonwose.calendar.sample" + minSdk = Android.minSdkSampleApp + targetSdk = Android.targetSdk + versionCode = 1 + versionName = "1.0" + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + buildFeatures { + viewBinding = true + compose = true + } + buildTypes { + named("release") { + isMinifyEnabled = false + } + } + java { + toolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } + } + kotlin { + jvmToolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } + } + compileOptions { + isCoreLibraryDesugaringEnabled = true + } + composeOptions { + kotlinCompilerExtensionVersion = Android.composeCompiler + } +} + +dependencies { + implementation(project(":view")) + implementation(project(":compose")) + coreLibraryDesugaring(Libs.Core.deSugar) + implementation(Kotlin.stdLib) + + implementation(Libs.View.legacySupport) + implementation(Libs.View.appCompat) + implementation(Libs.View.coreKtx) + implementation(Libs.View.constraintLayout) + implementation(Libs.View.cardView) + implementation(Libs.View.material) + + implementation(Libs.Compose.ui) + implementation(Libs.Compose.tooling) + implementation(Libs.Compose.foundation) + implementation(Libs.Compose.material) + implementation(Libs.Compose.activity) + implementation(Libs.Compose.navigation) + + testImplementation(Libs.Core.Test.junit) + + androidTestImplementation(Libs.View.Test.espressoCore) + androidTestImplementation(Libs.View.Test.espressoContrib) // RecyclerView actions. + androidTestImplementation(Libs.View.Test.runner) + androidTestImplementation(Libs.View.Test.rules) + androidTestImplementation(Libs.View.Test.extJunit) + + androidTestImplementation(Libs.Compose.Test.uiJunit) + debugImplementation(Libs.Compose.Test.uiManifest) // Compose test runner activity +} diff --git a/sample/src/main/java/com/kizitonwose/calendar/sample/compose/Utils.kt b/sample/src/main/java/com/kizitonwose/calendar/sample/compose/Utils.kt index 517e9c44..97528f45 100644 --- a/sample/src/main/java/com/kizitonwose/calendar/sample/compose/Utils.kt +++ b/sample/src/main/java/com/kizitonwose/calendar/sample/compose/Utils.kt @@ -10,7 +10,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.Icon import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableStateOf @@ -80,7 +80,7 @@ fun NavigationIcon(onBackClick: () -> Unit) { Icon( tint = Color.White, modifier = Modifier.align(Alignment.Center), - imageVector = Icons.Default.ArrowBack, + imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back", ) } diff --git a/sample/src/main/java/com/kizitonwose/calendar/sample/shared/StatusBarColorLifecycleObserver.kt b/sample/src/main/java/com/kizitonwose/calendar/sample/shared/StatusBarColorLifecycleObserver.kt index 9668ce0e..18c1324a 100644 --- a/sample/src/main/java/com/kizitonwose/calendar/sample/shared/StatusBarColorLifecycleObserver.kt +++ b/sample/src/main/java/com/kizitonwose/calendar/sample/shared/StatusBarColorLifecycleObserver.kt @@ -11,6 +11,7 @@ import com.kizitonwose.calendar.sample.R import com.kizitonwose.calendar.sample.view.getColorCompat import java.lang.ref.WeakReference +@Suppress("DEPRECATION") class StatusBarColorLifecycleObserver( activity: Activity, @ColorInt private val color: Int, diff --git a/sample/src/main/java/com/kizitonwose/calendar/sample/view/Example3Fragment.kt b/sample/src/main/java/com/kizitonwose/calendar/sample/view/Example3Fragment.kt index 2c70aead..69b04004 100644 --- a/sample/src/main/java/com/kizitonwose/calendar/sample/view/Example3Fragment.kt +++ b/sample/src/main/java/com/kizitonwose/calendar/sample/view/Example3Fragment.kt @@ -1,5 +1,6 @@ package com.kizitonwose.calendar.sample.view +import android.annotation.SuppressLint import android.os.Bundle import android.view.View import android.view.ViewGroup @@ -96,7 +97,7 @@ class Example3Fragment : BaseFragment(R.layout.example_3_fragment), HasBackButto } .setNegativeButton(R.string.close, null) .create() - .apply { + .apply @Suppress("DEPRECATION") { setOnShowListener { // Show the keyboard editText.requestFocus() @@ -189,6 +190,7 @@ class Example3Fragment : BaseFragment(R.layout.example_3_fragment), HasBackButto updateAdapterForDate(date) } + @SuppressLint("NotifyDataSetChanged") private fun updateAdapterForDate(date: LocalDate) { eventsAdapter.apply { events.clear() @@ -242,11 +244,13 @@ class Example3Fragment : BaseFragment(R.layout.example_3_fragment), HasBackButto textView.setBackgroundResource(R.drawable.example_3_today_bg) dotView.makeInVisible() } + selectedDate -> { textView.setTextColorRes(R.color.example_3_blue) textView.setBackgroundResource(R.drawable.example_3_selected_bg) dotView.makeInVisible() } + else -> { textView.setTextColorRes(R.color.example_3_black) textView.background = null diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index edb9d0b3..00000000 --- a/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -include ':core', ':data', ':view', ':compose', ':sample' diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..eb300931 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,20 @@ +pluginManagement { + repositories { + google() + gradlePluginPortal() + mavenCentral() + } +} +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} +include(":core") +include(":data") +include(":view") +include(":compose") +include(":sample") diff --git a/view/build.gradle b/view/build.gradle deleted file mode 100644 index 7e986370..00000000 --- a/view/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -import com.kizitonwose.calendar.buildsrc.Android -import com.kizitonwose.calendar.buildsrc.Config -import com.kizitonwose.calendar.buildsrc.Kotlin -import com.kizitonwose.calendar.buildsrc.Libs - -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply plugin: 'com.vanniktech.maven.publish' - -android { - compileSdk Android.compileSdk - namespace 'com.kizitonwose.calendar.view' - defaultConfig { - minSdkVersion Android.minSdkLibraryView - targetSdkVersion Android.targetSdk - } - java { - toolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } - } - kotlin { - jvmToolchain { - languageVersion = Config.compatibleJavaLanguageVersion - } - } -} - -dependencies { - api project(':core') - implementation project(':data') - implementation Kotlin.stdLib - implementation Libs.View.coreKtx - - // Expose RecyclerView which is CalendarView's superclass. - api Libs.View.recyclerView -} diff --git a/view/build.gradle.kts b/view/build.gradle.kts new file mode 100644 index 00000000..67d51511 --- /dev/null +++ b/view/build.gradle.kts @@ -0,0 +1,40 @@ +import com.kizitonwose.calendar.buildsrc.Android +import com.kizitonwose.calendar.buildsrc.Config +import com.kizitonwose.calendar.buildsrc.Kotlin +import com.kizitonwose.calendar.buildsrc.Libs + +plugins { + with(com.kizitonwose.calendar.buildsrc.Plugins) { + id(androidLibrary) + id(kotlinAndroid) + id(mavenPublish) + } +} + +android { + compileSdk = Android.compileSdk + namespace = "com.kizitonwose.calendar.view" + defaultConfig { + minSdk = Android.minSdkViewLibrary + } + java { + toolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } + } + kotlin { + jvmToolchain { + languageVersion.set(Config.compatibleJavaLanguageVersion) + } + } +} + +dependencies { + api(project(":core")) + implementation(project(":data")) + implementation(Kotlin.stdLib) + implementation(Libs.View.coreKtx) + + // Expose RecyclerView which is CalendarView"s superclass. + api(Libs.View.recyclerView) +} From bea40b62e9e52c16069d5ccab47c948fd05573a7 Mon Sep 17 00:00:00 2001 From: Kizito Nwose Date: Mon, 27 May 2024 16:45:26 +0200 Subject: [PATCH 5/7] Prepare next development version. --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 82024a69..79416573 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ SONATYPE_HOST=S01 RELEASE_SIGNING_ENABLED=true GROUP=com.kizitonwose.calendar -VERSION_NAME=2.5.2-SNAPSHOT +VERSION_NAME=2.6.0-SNAPSHOT POM_NAME=Calendar From 1c00c3f6272e217813a941106158bc4d14a1c7cd Mon Sep 17 00:00:00 2001 From: Kizito Nwose Date: Wed, 29 May 2024 15:04:00 +0200 Subject: [PATCH 6/7] Update README --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b0bdfbfa..a2c1fa29 100644 --- a/README.md +++ b/README.md @@ -46,15 +46,13 @@ View the sample app's source code [here](https://github.com/kizitonwose/Calendar ## Setup -The library uses `java.time` classes via [Java 8+ API desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) for backward compatibility since these classes were added in Java 8. - #### Step 1 -This step is required ONLY if your app's `minSdkVersion` is below 26. Jump to [step 2](#step-2) if this does not apply to you. +**This step is required ONLY if your app's `minSdkVersion` is below 26. Jump to [step 2](#step-2) if this does not apply to you.** -To set up your project for desugaring, you need to first ensure that you are using [Android Gradle plugin](https://developer.android.com/studio/releases/gradle-plugin#updating-plugin) 4.0.0 or higher. +Apps with `minSdkVersion` below 26 have to enable [Java 8+ API desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) for backward compatibility since `java.time` classes were added in Java 8 which is supported natively starting from Android SDK 26. To set up your project for desugaring, you need to first ensure that you are using [Android Gradle plugin](https://developer.android.com/studio/releases/gradle-plugin#updating-plugin) 4.0.0 or higher. -Then include the following in your app's build.gradle file: +Then include the following in your app's `build.gradle` file: ```groovy android { From e4afc446985264523e2e8c65e0d53d09ff46eb70 Mon Sep 17 00:00:00 2001 From: Kizito Nwose Date: Mon, 3 Jun 2024 20:01:00 +0200 Subject: [PATCH 7/7] Add Locale param to `firstDayOfWeekFromLocale` function. --- .../main/java/com/kizitonwose/calendar/core/Extensions.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/kizitonwose/calendar/core/Extensions.kt b/core/src/main/java/com/kizitonwose/calendar/core/Extensions.kt index f63f5ee1..8ee5e512 100644 --- a/core/src/main/java/com/kizitonwose/calendar/core/Extensions.kt +++ b/core/src/main/java/com/kizitonwose/calendar/core/Extensions.kt @@ -21,9 +21,10 @@ fun daysOfWeek(firstDayOfWeek: DayOfWeek = firstDayOfWeekFromLocale()): List