From a777b8af6aeda5409b46ca9c9b0e2c31f8a7db35 Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:32:46 +0530 Subject: [PATCH 01/10] feature: filterable for adapter --- .../vshnv/adapt/adapter/AdaptAdapter.kt | 8 ++++-- .../adapter/LifecycleAwareAdaptAdapter.kt | 26 ++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt index c95e994..fdfb323 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt @@ -1,11 +1,15 @@ package io.github.vshnv.adapt.adapter +import android.widget.Filter +import android.widget.Filterable import androidx.recyclerview.widget.RecyclerView -abstract class AdaptAdapter: RecyclerView.Adapter>() { +abstract class AdaptAdapter: RecyclerView.Adapter>(), Filterable { abstract val currentList: List + abstract var searchFilterable: Filter? + abstract fun getFullData(): List abstract suspend fun submitDataSuspending(data: List): Unit - abstract fun submitData(data: List, callback: () -> Unit = {}): Unit + abstract fun submitDataFromFilter(data: List, callback: () -> Unit = {}): Unit } \ No newline at end of file diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt index 83d32b5..8c8a06b 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt @@ -2,6 +2,7 @@ package io.github.vshnv.adapt.adapter import android.view.View import android.view.ViewGroup +import android.widget.Filter import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.recyclerview.widget.AsyncListDiffer @@ -28,12 +29,22 @@ class LifecycleAwareAdaptAdapter(private val viewTypeMapper: ((T, Int) private val mDiffer: AsyncListDiffer = AsyncListDiffer(this, diffCallback) override val currentList: List get() = mDiffer.currentList + private var fullList: MutableList = mutableListOf() + + override var searchFilterable: Filter? = null + + override fun getFilter(): Filter = requireNotNull(searchFilterable) { + "Filterable.Filter of $this accessed before assigning" + } + + override fun getFullData(): List = fullList override fun getItemViewType(position: Int): Int { return viewTypeMapper?.let { it(getItem(position), position) } ?: super.getItemViewType(position) } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AdaptViewHolder { val binderItem: CollectingBindable = viewBinders[viewType] ?: defaultBinder ?: throw AssertionError("Adapt found ViewType with no bound view creator or any default view creator, Cannot proceed!") @@ -61,13 +72,21 @@ class LifecycleAwareAdaptAdapter(private val viewTypeMapper: ((T, Int) return mDiffer.currentList[position] } - override suspend fun submitDataSuspending(data: List) = suspendCoroutine { continuation -> - mDiffer.submitList(data) { - continuation.resumeWith(Result.success(Unit)) + override suspend fun submitDataSuspending(data: List) { + fullList = data.toMutableList() + suspendCoroutine { continuation -> + mDiffer.submitList(data) { + continuation.resumeWith(Result.success(Unit)) + } } } override fun submitData(data: List, callback: () -> Unit) { + fullList = data.toMutableList() + mDiffer.submitList(data, callback) + } + + override fun submitDataFromFilter(data: List, callback: () -> Unit) { mDiffer.submitList(data, callback) } @@ -87,6 +106,7 @@ class LifecycleAwareAdaptAdapter(private val viewTypeMapper: ((T, Int) registry?.highestState = Lifecycle.State.RESUMED knownAffectedViewHolders.add(holder) } + override fun onViewDetachedFromWindow(holder: AdaptViewHolder) { val registry = (holder as LifecycleAwareAdaptViewHolder).lifecycleRegistry registry?.highestState = Lifecycle.State.CREATED From dc25e825c249803007e83bfe30fc86698641d19f Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Tue, 16 Jul 2024 10:43:17 +0530 Subject: [PATCH 02/10] adapter filterable moved to AdaptScope --- .../io/github/vshnv/adapt/adapter/AdaptAdapter.kt | 2 -- .../adapt/adapter/LifecycleAwareAdaptAdapter.kt | 13 +++++++++---- .../java/io/github/vshnv/adapt/dsl/AdaptScope.kt | 2 ++ .../adapt/dsl/collector/CollectingAdaptScope.kt | 9 ++++++++- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt index fdfb323..e61b16b 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt @@ -1,12 +1,10 @@ package io.github.vshnv.adapt.adapter -import android.widget.Filter import android.widget.Filterable import androidx.recyclerview.widget.RecyclerView abstract class AdaptAdapter: RecyclerView.Adapter>(), Filterable { abstract val currentList: List - abstract var searchFilterable: Filter? abstract fun getFullData(): List abstract suspend fun submitDataSuspending(data: List): Unit diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt index 8c8a06b..a692c54 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt @@ -15,7 +15,14 @@ import java.util.Collections import java.util.WeakHashMap import kotlin.coroutines.suspendCoroutine -class LifecycleAwareAdaptAdapter(private val viewTypeMapper: ((T, Int) -> Int)?, private val defaultBinder: CollectingBindable?, private val viewBinders: MutableMap>, private val itemEquals: (T, T) -> Boolean, private val itemContentEquals: (T, T) -> Boolean): AdaptAdapter() { +class LifecycleAwareAdaptAdapter( + private val viewTypeMapper: ((T, Int) -> Int)?, + private val defaultBinder: CollectingBindable?, + private val viewBinders: MutableMap>, + private val itemEquals: (T, T) -> Boolean, + private val itemContentEquals: (T, T) -> Boolean, + private var searchFilter: Filter?, +) : AdaptAdapter() { private val knownAffectedViewHolders = Collections.newSetFromMap(WeakHashMap, Boolean>()) private val diffCallback: DiffUtil.ItemCallback = object : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: T, newItem: T): Boolean { @@ -31,9 +38,7 @@ class LifecycleAwareAdaptAdapter(private val viewTypeMapper: ((T, Int) get() = mDiffer.currentList private var fullList: MutableList = mutableListOf() - override var searchFilterable: Filter? = null - - override fun getFilter(): Filter = requireNotNull(searchFilterable) { + override fun getFilter(): Filter = requireNotNull(searchFilter) { "Filterable.Filter of $this accessed before assigning" } diff --git a/adapt/src/main/java/io/github/vshnv/adapt/dsl/AdaptScope.kt b/adapt/src/main/java/io/github/vshnv/adapt/dsl/AdaptScope.kt index 021fe93..ec37c58 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/dsl/AdaptScope.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/dsl/AdaptScope.kt @@ -1,6 +1,7 @@ package io.github.vshnv.adapt.dsl import android.view.ViewGroup +import android.widget.Filter interface AdaptScope { fun itemEquals(checkEquality: (data: T, otherData: T) -> Boolean) @@ -8,4 +9,5 @@ interface AdaptScope { fun defineViewTypes(mapToViewType: (data: T, position: Int) -> Int) fun create(createView: (parent: ViewGroup) -> ViewSource): Bindable fun create(viewType: Int, createView: (parent: ViewGroup) -> ViewSource): Bindable + fun createFilter(searchFilter: Filter?) } \ No newline at end of file diff --git a/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt b/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt index 44dd318..f9d97e4 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt @@ -1,6 +1,7 @@ package io.github.vshnv.adapt.dsl.collector import android.view.ViewGroup +import android.widget.Filter import io.github.vshnv.adapt.adapter.AdaptAdapter import io.github.vshnv.adapt.adapter.LifecycleAwareAdaptAdapter import io.github.vshnv.adapt.dsl.AdaptScope @@ -13,6 +14,7 @@ internal class CollectingAdaptScope: AdaptScope { private var viewTypeMapper: ((T, Int) -> Int)? = null private var defaultBinder: CollectingBindable? = null private val viewBinders: MutableMap> = mutableMapOf() + private var searchFilterable: Filter? = null override fun defineViewTypes(mapToViewType: (T, Int) -> Int) { viewTypeMapper = mapToViewType @@ -32,7 +34,8 @@ internal class CollectingAdaptScope: AdaptScope { defaultBinder, viewBinders, itemEquals, - itemContentEquals + itemContentEquals, + searchFilterable ) } @@ -50,4 +53,8 @@ internal class CollectingAdaptScope: AdaptScope { viewBinders[viewType] = this } } + + override fun createFilter(searchFilter: Filter?) { + searchFilterable = searchFilter + } } \ No newline at end of file From e3fc49c7cf8c46d531bc17c341c2b55404d52acb Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:47:05 +0530 Subject: [PATCH 03/10] renamed fn name --- .../src/main/java/io/github/vshnv/adapt/dsl/AdaptScope.kt | 2 +- .../vshnv/adapt/dsl/collector/CollectingAdaptScope.kt | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/adapt/src/main/java/io/github/vshnv/adapt/dsl/AdaptScope.kt b/adapt/src/main/java/io/github/vshnv/adapt/dsl/AdaptScope.kt index ec37c58..757783e 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/dsl/AdaptScope.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/dsl/AdaptScope.kt @@ -7,7 +7,7 @@ interface AdaptScope { fun itemEquals(checkEquality: (data: T, otherData: T) -> Boolean) fun contentEquals(checkContentEquality: (data: T, otherData: T) -> Boolean) fun defineViewTypes(mapToViewType: (data: T, position: Int) -> Int) + fun filter(searchFilter: Filter?) fun create(createView: (parent: ViewGroup) -> ViewSource): Bindable fun create(viewType: Int, createView: (parent: ViewGroup) -> ViewSource): Bindable - fun createFilter(searchFilter: Filter?) } \ No newline at end of file diff --git a/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt b/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt index f9d97e4..a856664 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt @@ -28,6 +28,10 @@ internal class CollectingAdaptScope: AdaptScope { itemContentEquals = checkContentEquality } + override fun filter(searchFilter: Filter?) { + searchFilterable = searchFilter + } + internal fun buildAdapter(): AdaptAdapter { return LifecycleAwareAdaptAdapter( viewTypeMapper, @@ -53,8 +57,4 @@ internal class CollectingAdaptScope: AdaptScope { viewBinders[viewType] = this } } - - override fun createFilter(searchFilter: Filter?) { - searchFilterable = searchFilter - } } \ No newline at end of file From 6f06e719b024eea71e887d9fa653a205219e05a1 Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:48:03 +0530 Subject: [PATCH 04/10] renamed var fullData >> unFilteredList --- .../java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt | 2 +- .../vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt index e61b16b..def6736 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt @@ -5,7 +5,7 @@ import androidx.recyclerview.widget.RecyclerView abstract class AdaptAdapter: RecyclerView.Adapter>(), Filterable { abstract val currentList: List - abstract fun getFullData(): List + abstract fun getUnfilteredList(): List abstract suspend fun submitDataSuspending(data: List): Unit abstract fun submitData(data: List, callback: () -> Unit = {}): Unit diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt index a692c54..86cdcba 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt @@ -36,13 +36,13 @@ class LifecycleAwareAdaptAdapter( private val mDiffer: AsyncListDiffer = AsyncListDiffer(this, diffCallback) override val currentList: List get() = mDiffer.currentList - private var fullList: MutableList = mutableListOf() + private var unFilteredList: MutableList = mutableListOf() override fun getFilter(): Filter = requireNotNull(searchFilter) { "Filterable.Filter of $this accessed before assigning" } - override fun getFullData(): List = fullList + override fun getUnfilteredList(): List = unFilteredList override fun getItemViewType(position: Int): Int { return viewTypeMapper?.let { @@ -78,7 +78,7 @@ class LifecycleAwareAdaptAdapter( } override suspend fun submitDataSuspending(data: List) { - fullList = data.toMutableList() + unFilteredList = data.toMutableList() suspendCoroutine { continuation -> mDiffer.submitList(data) { continuation.resumeWith(Result.success(Unit)) @@ -87,7 +87,7 @@ class LifecycleAwareAdaptAdapter( } override fun submitData(data: List, callback: () -> Unit) { - fullList = data.toMutableList() + unFilteredList = data.toMutableList() mDiffer.submitList(data, callback) } From fd0c1e3048dbf6b47508e8024be1a39cf4fc7e40 Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:27:55 +0530 Subject: [PATCH 05/10] !!,** ViewTreeLifecycleOwner --- .../vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt | 4 ++-- .../main/java/io/github/vshnv/adapt/extensions/View.kt | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt index 86cdcba..708d4c0 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/LifecycleAwareAdaptAdapter.kt @@ -5,12 +5,12 @@ import android.view.ViewGroup import android.widget.Filter import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.ViewTreeLifecycleOwner import androidx.recyclerview.widget.AsyncListDiffer import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.ViewHolder import io.github.vshnv.adapt.dsl.collector.CollectingBindable -import io.github.vshnv.adapt.extensions.findViewTreeLifecycleOwner import java.util.Collections import java.util.WeakHashMap import kotlin.coroutines.suspendCoroutine @@ -105,7 +105,7 @@ class LifecycleAwareAdaptAdapter( override fun onViewAttachedToWindow(holder: AdaptViewHolder) { super.onViewAttachedToWindow(holder) val holder = (holder as LifecycleAwareAdaptViewHolder) - val lifecycleOwner = holder.itemView.findViewTreeLifecycleOwner() ?: return + val lifecycleOwner = ViewTreeLifecycleOwner.get(holder.itemView) ?: return holder.handleLifecycleSetup(lifecycleOwner) val registry = holder.lifecycleRegistry registry?.highestState = Lifecycle.State.RESUMED diff --git a/adapt/src/main/java/io/github/vshnv/adapt/extensions/View.kt b/adapt/src/main/java/io/github/vshnv/adapt/extensions/View.kt index 9ebff54..d642106 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/extensions/View.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/extensions/View.kt @@ -2,12 +2,8 @@ package io.github.vshnv.adapt.extensions import android.view.View import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.runtime.R +import androidx.lifecycle.ViewTreeLifecycleOwner internal fun View.findViewTreeLifecycleOwner(): LifecycleOwner? { - return generateSequence(this) { currentView -> - currentView.parent as? View - }.mapNotNull { viewParent -> - viewParent.getTag(R.id.view_tree_lifecycle_owner) as? LifecycleOwner - }.firstOrNull() + return ViewTreeLifecycleOwner.get(this) } \ No newline at end of file From fcee3e6f21e5821a8803598e3745227e0b674659 Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:28:26 +0530 Subject: [PATCH 06/10] ** gradle as per zoo --- build.gradle.kts | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index eb7219a..fda244a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id("com.android.application") version "8.0.2" apply false - id("com.android.library") version "8.0.2" apply false - id("org.jetbrains.kotlin.android") version "1.8.20" apply false + id("com.android.application") version "8.7.3" apply false + id("com.android.library") version "8.7.3" apply false + id("org.jetbrains.kotlin.android") version "2.0.20" apply false } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 15c1b4a..13a2690 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Mon Feb 26 18:14:07 IST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 380083cd11b2c9fdbcc54f8b00f8abb3dcdf8997 Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:40:19 +0530 Subject: [PATCH 07/10] ++ lib: page3 --- adapt/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/adapt/build.gradle.kts b/adapt/build.gradle.kts index faacc71..d9d7e0f 100644 --- a/adapt/build.gradle.kts +++ b/adapt/build.gradle.kts @@ -49,6 +49,7 @@ dependencies { implementation("androidx.core:core-ktx:1.8.0") implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.9.0") + implementation("androidx.paging:paging-runtime:3.2.1") // Paging 3 testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") From 2cca9b9feb57ad4685d626b6349562392a4ba74d Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:48:51 +0530 Subject: [PATCH 08/10] !! deprecated >> LifecycleEventObserver; --- .../adapt/adapter/AdapterLifecycleRegistry.kt | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdapterLifecycleRegistry.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdapterLifecycleRegistry.kt index c3a21bf..4d33341 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdapterLifecycleRegistry.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdapterLifecycleRegistry.kt @@ -1,21 +1,17 @@ package io.github.vshnv.adapt.adapter import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleRegistry -import androidx.lifecycle.OnLifecycleEvent import java.lang.ref.WeakReference class AdapterLifecycleRegistry(owner: LifecycleOwner, private val parentLifecycle: Lifecycle): LifecycleRegistry(owner) { private val ownerWeakRef = WeakReference(owner) - private val parentLifecycleObserver = object: LifecycleObserver { - @OnLifecycleEvent(Event.ON_ANY) - fun onAny() { - if (ownerWeakRef.get() == null) { - ignoreParent() - return - } + private val parentLifecycleObserver = LifecycleEventObserver { _, _ -> + if (ownerWeakRef.get() == null) { + ignoreParent() + } else { currentState = parentLifecycle.currentState } } From 5cf66730e26eff319857db9f78b6e8f29e5b29e6 Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:55:34 +0530 Subject: [PATCH 09/10] !! fmt --- .../io/github/vshnv/adapt/adapter/AdaptAdapter.kt | 6 +++--- .../github/vshnv/adapt/adapter/AdaptViewHolder.kt | 2 +- .../adapt/dsl/collector/CollectingAdaptScope.kt | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt index def6736..30ab8cc 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptAdapter.kt @@ -7,7 +7,7 @@ abstract class AdaptAdapter: RecyclerView.Adapter>(), Filt abstract val currentList: List abstract fun getUnfilteredList(): List - abstract suspend fun submitDataSuspending(data: List): Unit - abstract fun submitData(data: List, callback: () -> Unit = {}): Unit - abstract fun submitDataFromFilter(data: List, callback: () -> Unit = {}): Unit + abstract suspend fun submitDataSuspending(data: List) + abstract fun submitData(data: List, callback: () -> Unit = {}) + abstract fun submitDataFromFilter(data: List, callback: () -> Unit = {}) } \ No newline at end of file diff --git a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptViewHolder.kt b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptViewHolder.kt index 529ac67..f3af8d1 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptViewHolder.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/adapter/AdaptViewHolder.kt @@ -4,5 +4,5 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView abstract class AdaptViewHolder(view: View): RecyclerView.ViewHolder(view) { - abstract fun bind(idx: Int, data: T): Unit + abstract fun bind(idx: Int, data: T) } diff --git a/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt b/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt index a856664..8b556a2 100644 --- a/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt +++ b/adapt/src/main/java/io/github/vshnv/adapt/dsl/collector/CollectingAdaptScope.kt @@ -8,11 +8,11 @@ import io.github.vshnv.adapt.dsl.AdaptScope import io.github.vshnv.adapt.dsl.Bindable import io.github.vshnv.adapt.dsl.ViewSource -internal class CollectingAdaptScope: AdaptScope { - private var itemEquals: (T, T) -> Boolean = {a, b -> a == b} - private var itemContentEquals: (T, T) -> Boolean = {a, b -> a == b} +internal class CollectingAdaptScope : AdaptScope { + private var itemEquals: (T, T) -> Boolean = { a, b -> a == b } + private var itemContentEquals: (T, T) -> Boolean = { a, b -> a == b } private var viewTypeMapper: ((T, Int) -> Int)? = null - private var defaultBinder: CollectingBindable? = null + private var defaultBinder: CollectingBindable? = null private val viewBinders: MutableMap> = mutableMapOf() private var searchFilterable: Filter? = null @@ -43,15 +43,15 @@ internal class CollectingAdaptScope: AdaptScope { ) } - override fun create(createView: (parent: ViewGroup) -> ViewSource): Bindable { + override fun create(createView: (parent: ViewGroup) -> ViewSource): Bindable { return CollectingBindable(createView).apply { defaultBinder = this } } - override fun create( + override fun create( viewType: Int, - createView: (parent: ViewGroup) -> ViewSource + createView: (parent: ViewGroup) -> ViewSource, ): Bindable { return CollectingBindable(createView).apply { viewBinders[viewType] = this From 0d0a0c5616b0f7629f1a0e5314b0342059388654 Mon Sep 17 00:00:00 2001 From: browner_zo_pc <24374030+MrBrowner@users.noreply.github.com> Date: Mon, 7 Jul 2025 17:41:24 +0530 Subject: [PATCH 10/10] ++ lib: paging3, lifecycle; --- adapt/build.gradle.kts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/adapt/build.gradle.kts b/adapt/build.gradle.kts index d9d7e0f..3dc3a71 100644 --- a/adapt/build.gradle.kts +++ b/adapt/build.gradle.kts @@ -49,10 +49,16 @@ dependencies { implementation("androidx.core:core-ktx:1.8.0") implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.9.0") - implementation("androidx.paging:paging-runtime:3.2.1") // Paging 3 testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + + // Paging 3 + implementation("androidx.paging:paging-runtime:3.2.1") + + // Lifecycle (if not already present) + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.3") + implementation("androidx.lifecycle:lifecycle-common-java8:2.8.3") } nmcp {