From 17d218aa4e30a5399bbbe0f171cf5f37a9d64652 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 26 May 2024 08:20:37 -0500 Subject: [PATCH] Add CommonParcelize --- data/build.gradle.kts | 18 +++++++----- .../androidMain/kotlin/org/tasks/Platform.kt | 7 +++++ .../commonMain/kotlin/org/tasks/Platform.kt | 9 ++++++ .../kotlin/org/tasks/data/Location.kt | 29 +++---------------- .../kotlin/org/tasks/data/entity/Geofence.kt | 8 ++--- .../kotlin/org/tasks/data/entity/Place.kt | 8 ++--- .../kotlin/org/tasks/data/entity/TagData.kt | 8 ++--- 7 files changed, 43 insertions(+), 44 deletions(-) create mode 100644 data/src/androidMain/kotlin/org/tasks/Platform.kt create mode 100644 data/src/commonMain/kotlin/org/tasks/Platform.kt diff --git a/data/build.gradle.kts b/data/build.gradle.kts index e26f49970..e7082015f 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -1,3 +1,7 @@ +@file:OptIn(ExperimentalKotlinGradlePluginApi::class) + +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi + plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.androidLibrary) @@ -14,7 +18,9 @@ repositories { kotlin { applyDefaultHierarchyTemplate() androidTarget { - publishLibraryVariants("release") + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=org.tasks.CommonParcelize") + } compilations.all { kotlinOptions { jvmTarget = "17" @@ -22,12 +28,10 @@ kotlin { } } sourceSets { - val commonMain by getting { - dependencies { - implementation(libs.androidx.room) - implementation(libs.kotlinx.serialization) - implementation(libs.kermit) - } + commonMain.dependencies { + implementation(libs.androidx.room) + implementation(libs.kotlinx.serialization) + implementation(libs.kermit) } } } diff --git a/data/src/androidMain/kotlin/org/tasks/Platform.kt b/data/src/androidMain/kotlin/org/tasks/Platform.kt new file mode 100644 index 000000000..984894ea7 --- /dev/null +++ b/data/src/androidMain/kotlin/org/tasks/Platform.kt @@ -0,0 +1,7 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.tasks + +import android.os.Parcelable + +actual typealias CommonParcelable = Parcelable \ No newline at end of file diff --git a/data/src/commonMain/kotlin/org/tasks/Platform.kt b/data/src/commonMain/kotlin/org/tasks/Platform.kt new file mode 100644 index 000000000..244ee24e7 --- /dev/null +++ b/data/src/commonMain/kotlin/org/tasks/Platform.kt @@ -0,0 +1,9 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.tasks + +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.BINARY) +annotation class CommonParcelize + +expect interface CommonParcelable \ No newline at end of file diff --git a/data/src/commonMain/kotlin/org/tasks/data/Location.kt b/data/src/commonMain/kotlin/org/tasks/data/Location.kt index e233e97ca..9f310f971 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/Location.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/Location.kt @@ -1,23 +1,17 @@ package org.tasks.data -import android.os.Parcel -import android.os.Parcelable import androidx.room.Embedded -import androidx.room.Ignore +import org.tasks.CommonParcelable +import org.tasks.CommonParcelize import org.tasks.data.entity.Geofence import org.tasks.data.entity.Place import java.io.Serializable +@CommonParcelize data class Location( @Embedded val geofence: Geofence, @Embedded val place: Place, -) : Serializable, Parcelable { - - @Ignore - private constructor(parcel: Parcel): this( - geofence = parcel.readParcelable(Geofence::class.java.classLoader)!!, - place = parcel.readParcelable(Place::class.java.classLoader)!!, - ) +) : Serializable, CommonParcelable { val task: Long get() = geofence.task @@ -45,19 +39,4 @@ data class Location( val displayAddress: String? get() = place.displayAddress - - override fun describeContents() = 0 - - override fun writeToParcel(dest: Parcel, flags: Int) { - dest.writeParcelable(geofence, flags) - dest.writeParcelable(place, flags) - } - - companion object { - @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(`in`: Parcel): Location = Location(`in`) - - override fun newArray(size: Int): Array = arrayOfNulls(size) - } - } } \ No newline at end of file diff --git a/data/src/commonMain/kotlin/org/tasks/data/entity/Geofence.kt b/data/src/commonMain/kotlin/org/tasks/data/entity/Geofence.kt index c9be5cc95..d1d446988 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/entity/Geofence.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/entity/Geofence.kt @@ -1,17 +1,17 @@ package org.tasks.data.entity -import android.os.Parcelable import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.ForeignKey import androidx.room.Ignore import androidx.room.PrimaryKey -import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import org.tasks.CommonParcelable +import org.tasks.CommonParcelize import org.tasks.data.db.Table @Serializable -@Parcelize +@CommonParcelize @Entity( tableName = Geofence.TABLE_NAME, foreignKeys = [ @@ -37,7 +37,7 @@ data class Geofence( val isArrival: Boolean = false, @ColumnInfo(name = "departure") var isDeparture: Boolean = false, -) : java.io.Serializable, Parcelable { +) : java.io.Serializable, CommonParcelable { @Ignore constructor( task: Long, diff --git a/data/src/commonMain/kotlin/org/tasks/data/entity/Place.kt b/data/src/commonMain/kotlin/org/tasks/data/entity/Place.kt index 4c7231f30..9d94806d1 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/entity/Place.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/entity/Place.kt @@ -1,20 +1,20 @@ package org.tasks.data.entity -import android.os.Parcelable import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey -import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable import kotlinx.serialization.Transient +import org.tasks.CommonParcelable +import org.tasks.CommonParcelize import org.tasks.data.NO_ORDER import org.tasks.data.UUIDHelper import org.tasks.data.db.Table @Serializable -@Parcelize +@CommonParcelize @Entity( tableName = Place.TABLE_NAME, indices = [ @@ -48,7 +48,7 @@ data class Place( val order: Int = NO_ORDER, @ColumnInfo(name = "radius", defaultValue = "250") val radius: Int = 250, -) : java.io.Serializable, Parcelable { +) : java.io.Serializable, CommonParcelable { val displayAddress: String? get() = if (address.isNullOrEmpty()) null else address.replace("$name, ", "") diff --git a/data/src/commonMain/kotlin/org/tasks/data/entity/TagData.kt b/data/src/commonMain/kotlin/org/tasks/data/entity/TagData.kt index 5dd7b74b0..c4bfe06cc 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/entity/TagData.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/entity/TagData.kt @@ -1,17 +1,17 @@ package org.tasks.data.entity -import android.os.Parcelable import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey -import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable import kotlinx.serialization.Transient +import org.tasks.CommonParcelable +import org.tasks.CommonParcelize import org.tasks.data.LABEL import org.tasks.data.NO_ORDER import org.tasks.data.UUIDHelper -@Parcelize +@CommonParcelize @Serializable @Entity(tableName = "tagdata") data class TagData( @@ -31,7 +31,7 @@ data class TagData( private val icon: Int? = -1, @ColumnInfo(name = "td_order") val order: Int = NO_ORDER, -) : Parcelable { +) : CommonParcelable { @Suppress("RedundantNullableReturnType") fun getIcon(): Int? = icon ?: LABEL }