From 0ee68c4a784e84ff51b427683d837cfa015e95d1 Mon Sep 17 00:00:00 2001 From: Goooler Date: Mon, 25 Apr 2022 10:21:03 +0800 Subject: [PATCH 1/4] Apply kotlin-parcelize plugin --- app/build.gradle | 1 + .../com/kronos/sample/entity/TestEntity.kt | 36 ++++--------------- 2 files changed, 8 insertions(+), 29 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5e8c53d..55c2d20 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,7 @@ plugins { id("com.android.application") id("kotlin-android") + id("kotlin-parcelize") } android { diff --git a/app/src/main/java/com/kronos/sample/entity/TestEntity.kt b/app/src/main/java/com/kronos/sample/entity/TestEntity.kt index 0f6a769..549853f 100644 --- a/app/src/main/java/com/kronos/sample/entity/TestEntity.kt +++ b/app/src/main/java/com/kronos/sample/entity/TestEntity.kt @@ -1,16 +1,17 @@ package com.kronos.sample.entity -import android.os.Parcel import android.os.Parcelable - import com.kronos.diffutil.IDifference import com.kronos.diffutil.IEqualsAdapter - +import kotlinx.parcelize.Parcelize import java.util.Random -data class TestEntity(var id: Int = 0, - var displayTime: Long = 0, - var text: String? = Random().nextInt(10000).toString()) : Parcelable, IDifference, IEqualsAdapter { +@Parcelize +data class TestEntity( + var id: Int = 0, + var displayTime: Long = 0, + var text: String? = Random().nextInt(10000).toString() +) : Parcelable, IDifference, IEqualsAdapter { override val uniqueId: String get() = id.toString() @@ -19,27 +20,4 @@ data class TestEntity(var id: Int = 0, displayTime = System.currentTimeMillis() text = "更新数据" } - - - constructor(source: Parcel) : this( - source.readInt(), - source.readLong(), - source.readString() - ) - - override fun describeContents() = 0 - - override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) { - writeInt(id) - writeLong(displayTime) - writeString(text) - } - - companion object { - @JvmField - val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): TestEntity = TestEntity(source) - override fun newArray(size: Int): Array = arrayOfNulls(size) - } - } } \ No newline at end of file From 517b5b1f17d64c27d1a7137bd11e7aef3ea0d960 Mon Sep 17 00:00:00 2001 From: Goooler Date: Mon, 25 Apr 2022 10:23:13 +0800 Subject: [PATCH 2/4] Single import in kotlin files --- .idea/codeStyles/Project.xml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 0d15693..8c4e9b2 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -3,20 +3,12 @@ - + From 8bef56d4be3a4a58c7b521265b3863df718d8ec5 Mon Sep 17 00:00:00 2001 From: Goooler Date: Mon, 25 Apr 2022 10:30:58 +0800 Subject: [PATCH 3/4] Use deepCopy extension in ParcelDiffHelper --- .../com/kronos/diffutil/ParcelDiffHelper.kt | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/diflib/src/main/java/com/kronos/diffutil/ParcelDiffHelper.kt b/diflib/src/main/java/com/kronos/diffutil/ParcelDiffHelper.kt index d861b06..4363865 100644 --- a/diflib/src/main/java/com/kronos/diffutil/ParcelDiffHelper.kt +++ b/diflib/src/main/java/com/kronos/diffutil/ParcelDiffHelper.kt @@ -8,24 +8,25 @@ import java.util.concurrent.CopyOnWriteArrayList class ParcelDiffHelper : BaseDiffHelper() { override fun clone() { - try { - itemsCursor?.apply { - snapshot = CopyOnWriteArrayList() - for (entity in this) { - val parcel = Parcel.obtain() - (entity as Parcelable).writeToParcel(parcel, 0) - parcel.setDataPosition(0) - val constructor = entity.javaClass.getDeclaredConstructor(Parcel::class.java) - constructor.isAccessible = true - val dateEntity = constructor.newInstance(parcel) as T - snapshot?.add(dateEntity) - parcel.recycle() - } + itemsCursor?.run { + snapshot = CopyOnWriteArrayList() + forEach { + snapshot?.add(it.deepCopy() ?: it) } - } catch (e: Exception) { - e.printStackTrace() } } + private fun T.deepCopy(): T? { + var parcel: Parcel? = null + return try { + parcel = Parcel.obtain().also { + it.writeParcelable(this, 0) + it.setDataPosition(0) + } + parcel.readParcelable(this::class.java.classLoader) + } finally { + parcel?.recycle() + } + } } From 6cd9fd452649a9042d0b9d16d25f10b99e7f6c5f Mon Sep 17 00:00:00 2001 From: Goooler Date: Mon, 25 Apr 2022 10:31:38 +0800 Subject: [PATCH 4/4] Only run CI on ubuntu-latest --- .github/workflows/ci.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 856204d..3cd3787 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,10 +40,7 @@ jobs: build: name: Build - strategy: - matrix: - os: [ ubuntu-latest, windows-latest, macos-latest ] - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3