Add CommonParcelize

pull/2898/head
Alex Baker 2 years ago
parent 505c8c29d5
commit 17d218aa4e

@ -1,3 +1,7 @@
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
plugins { plugins {
alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidLibrary) alias(libs.plugins.androidLibrary)
@ -14,7 +18,9 @@ repositories {
kotlin { kotlin {
applyDefaultHierarchyTemplate() applyDefaultHierarchyTemplate()
androidTarget { androidTarget {
publishLibraryVariants("release") compilerOptions {
freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=org.tasks.CommonParcelize")
}
compilations.all { compilations.all {
kotlinOptions { kotlinOptions {
jvmTarget = "17" jvmTarget = "17"
@ -22,12 +28,10 @@ kotlin {
} }
} }
sourceSets { sourceSets {
val commonMain by getting { commonMain.dependencies {
dependencies { implementation(libs.androidx.room)
implementation(libs.androidx.room) implementation(libs.kotlinx.serialization)
implementation(libs.kotlinx.serialization) implementation(libs.kermit)
implementation(libs.kermit)
}
} }
} }
} }

@ -0,0 +1,7 @@
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package org.tasks
import android.os.Parcelable
actual typealias CommonParcelable = Parcelable

@ -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

@ -1,23 +1,17 @@
package org.tasks.data package org.tasks.data
import android.os.Parcel
import android.os.Parcelable
import androidx.room.Embedded 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.Geofence
import org.tasks.data.entity.Place import org.tasks.data.entity.Place
import java.io.Serializable import java.io.Serializable
@CommonParcelize
data class Location( data class Location(
@Embedded val geofence: Geofence, @Embedded val geofence: Geofence,
@Embedded val place: Place, @Embedded val place: Place,
) : Serializable, Parcelable { ) : Serializable, CommonParcelable {
@Ignore
private constructor(parcel: Parcel): this(
geofence = parcel.readParcelable(Geofence::class.java.classLoader)!!,
place = parcel.readParcelable(Place::class.java.classLoader)!!,
)
val task: Long val task: Long
get() = geofence.task get() = geofence.task
@ -45,19 +39,4 @@ data class Location(
val displayAddress: String? val displayAddress: String?
get() = place.displayAddress 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<Location> = object : Parcelable.Creator<Location> {
override fun createFromParcel(`in`: Parcel): Location = Location(`in`)
override fun newArray(size: Int): Array<Location?> = arrayOfNulls(size)
}
}
} }

@ -1,17 +1,17 @@
package org.tasks.data.entity package org.tasks.data.entity
import android.os.Parcelable
import androidx.room.ColumnInfo import androidx.room.ColumnInfo
import androidx.room.Entity import androidx.room.Entity
import androidx.room.ForeignKey import androidx.room.ForeignKey
import androidx.room.Ignore import androidx.room.Ignore
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import org.tasks.CommonParcelable
import org.tasks.CommonParcelize
import org.tasks.data.db.Table import org.tasks.data.db.Table
@Serializable @Serializable
@Parcelize @CommonParcelize
@Entity( @Entity(
tableName = Geofence.TABLE_NAME, tableName = Geofence.TABLE_NAME,
foreignKeys = [ foreignKeys = [
@ -37,7 +37,7 @@ data class Geofence(
val isArrival: Boolean = false, val isArrival: Boolean = false,
@ColumnInfo(name = "departure") @ColumnInfo(name = "departure")
var isDeparture: Boolean = false, var isDeparture: Boolean = false,
) : java.io.Serializable, Parcelable { ) : java.io.Serializable, CommonParcelable {
@Ignore @Ignore
constructor( constructor(
task: Long, task: Long,

@ -1,20 +1,20 @@
package org.tasks.data.entity package org.tasks.data.entity
import android.os.Parcelable
import androidx.room.ColumnInfo import androidx.room.ColumnInfo
import androidx.room.Entity import androidx.room.Entity
import androidx.room.Index import androidx.room.Index
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
import org.tasks.CommonParcelable
import org.tasks.CommonParcelize
import org.tasks.data.NO_ORDER import org.tasks.data.NO_ORDER
import org.tasks.data.UUIDHelper import org.tasks.data.UUIDHelper
import org.tasks.data.db.Table import org.tasks.data.db.Table
@Serializable @Serializable
@Parcelize @CommonParcelize
@Entity( @Entity(
tableName = Place.TABLE_NAME, tableName = Place.TABLE_NAME,
indices = [ indices = [
@ -48,7 +48,7 @@ data class Place(
val order: Int = NO_ORDER, val order: Int = NO_ORDER,
@ColumnInfo(name = "radius", defaultValue = "250") @ColumnInfo(name = "radius", defaultValue = "250")
val radius: Int = 250, val radius: Int = 250,
) : java.io.Serializable, Parcelable { ) : java.io.Serializable, CommonParcelable {
val displayAddress: String? val displayAddress: String?
get() = if (address.isNullOrEmpty()) null else address.replace("$name, ", "") get() = if (address.isNullOrEmpty()) null else address.replace("$name, ", "")

@ -1,17 +1,17 @@
package org.tasks.data.entity package org.tasks.data.entity
import android.os.Parcelable
import androidx.room.ColumnInfo import androidx.room.ColumnInfo
import androidx.room.Entity import androidx.room.Entity
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
import org.tasks.CommonParcelable
import org.tasks.CommonParcelize
import org.tasks.data.LABEL import org.tasks.data.LABEL
import org.tasks.data.NO_ORDER import org.tasks.data.NO_ORDER
import org.tasks.data.UUIDHelper import org.tasks.data.UUIDHelper
@Parcelize @CommonParcelize
@Serializable @Serializable
@Entity(tableName = "tagdata") @Entity(tableName = "tagdata")
data class TagData( data class TagData(
@ -31,7 +31,7 @@ data class TagData(
private val icon: Int? = -1, private val icon: Int? = -1,
@ColumnInfo(name = "td_order") @ColumnInfo(name = "td_order")
val order: Int = NO_ORDER, val order: Int = NO_ORDER,
) : Parcelable { ) : CommonParcelable {
@Suppress("RedundantNullableReturnType") @Suppress("RedundantNullableReturnType")
fun getIcon(): Int? = icon ?: LABEL fun getIcon(): Int? = icon ?: LABEL
} }

Loading…
Cancel
Save