diff --git a/recyclerview-adapters/src/main/AndroidManifest.xml b/recyclerview-adapters/src/main/AndroidManifest.xml index b9c7cac6..e6629897 100644 --- a/recyclerview-adapters/src/main/AndroidManifest.xml +++ b/recyclerview-adapters/src/main/AndroidManifest.xml @@ -1,2 +1,2 @@ + package="ru.touchin.roboswag.recyclerview_adapters"/> diff --git a/recyclerview-adapters/src/main/java/ru/touchin/adapters/ItemAdapterDelegate.java b/recyclerview-adapters/src/main/java/ru/touchin/adapters/ItemAdapterDelegate.java deleted file mode 100644 index 25ec210f..00000000 --- a/recyclerview-adapters/src/main/java/ru/touchin/adapters/ItemAdapterDelegate.java +++ /dev/null @@ -1,85 +0,0 @@ -package ru.touchin.adapters; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.List; - -/** - * Objects of such class controls creation and binding of specific type of RecyclerView's ViewHolders. - * Such delegates are creating and binding ViewHolders for specific items. - * Default {@link #getItemViewType} is generating on construction of object. - * - * @param Type of {@link RecyclerView.ViewHolder} of delegate; - * @param Type of items to bind to {@link RecyclerView.ViewHolder}s. - */ -public abstract class ItemAdapterDelegate extends AdapterDelegate { - - @Override - public boolean isForViewType(@NonNull final List items, final int adapterPosition, final int collectionPosition) { - return collectionPosition >= 0 - && collectionPosition < items.size() - && isForViewType(items.get(collectionPosition), adapterPosition, collectionPosition); - } - - /** - * Returns if object is processable by this delegate. - * This item will be casted to {@link TItem} and passes to {@link #onBindViewHolder(TViewHolder, TItem, int, int, List)}. - * - * @param item Item to check; - * @param adapterPosition Position of item in adapter; - * @param collectionPosition Position of item in collection that contains item; - * @return True if item is processable by this delegate. - */ - public boolean isForViewType(@NonNull final Object item, final int adapterPosition, final int collectionPosition) { - return true; - } - - @Override - public long getItemId(@NonNull final List items, final int adapterPosition, final int collectionPosition) { - //noinspection unchecked - return getItemId((TItem) items.get(collectionPosition), adapterPosition, collectionPosition); - } - - /** - * Returns unique ID of item to support stable ID's logic of RecyclerView's adapter. - * - * @param item Item in adapter; - * @param adapterPosition Position of item in adapter; - * @param collectionPosition Position of item in collection that contains item; - * @return Unique item ID. - */ - public long getItemId(@NonNull final TItem item, final int adapterPosition, final int collectionPosition) { - return 0; - } - - @Override - public void onBindViewHolder( - @NonNull final RecyclerView.ViewHolder holder, - @NonNull final List items, - final int adapterPosition, - final int collectionPosition, - @NonNull final List payloads - ) { - //noinspection unchecked - onBindViewHolder((TViewHolder) holder, (TItem) items.get(collectionPosition), adapterPosition, collectionPosition, payloads); - } - - /** - * Binds item with payloads to created by this object ViewHolder. - * - * @param holder ViewHolder to bind item to; - * @param item Item in adapter; - * @param adapterPosition Position of item in adapter; - * @param collectionPosition Position of item in collection that contains item; - * @param payloads Payloads; - */ - public abstract void onBindViewHolder( - @NonNull final TViewHolder holder, - @NonNull final TItem item, - final int adapterPosition, - final int collectionPosition, - @NonNull final List payloads - ); - -} diff --git a/recyclerview-adapters/src/main/java/ru/touchin/adapters/PositionAdapterDelegate.java b/recyclerview-adapters/src/main/java/ru/touchin/adapters/PositionAdapterDelegate.java deleted file mode 100644 index 7da5e5cf..00000000 --- a/recyclerview-adapters/src/main/java/ru/touchin/adapters/PositionAdapterDelegate.java +++ /dev/null @@ -1,68 +0,0 @@ -package ru.touchin.adapters; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.List; - -/** - * Objects of such class controls creation and binding of specific type of RecyclerView's ViewHolders. - * Such delegates are creating and binding ViewHolders by position in adapter. - * Default {@link #getItemViewType} is generating on construction of object. - * - * @param Type of {@link RecyclerView.ViewHolder} of delegate. - */ -public abstract class PositionAdapterDelegate extends AdapterDelegate { - - @Override - public boolean isForViewType(@NonNull final List items, final int adapterPosition, final int collectionPosition) { - return isForViewType(adapterPosition); - } - - /** - * Returns if object is processable by this delegate. - * - * @param adapterPosition Position of item in adapter; - * @return True if item is processable by this delegate. - */ - public abstract boolean isForViewType(final int adapterPosition); - - @Override - public long getItemId(@NonNull final List objects, final int adapterPosition, final int itemsOffset) { - return getItemId(adapterPosition); - } - - /** - * Returns unique ID of item to support stable ID's logic of RecyclerView's adapter. - * - * @param adapterPosition Position of item in adapter; - * @return Unique item ID. - */ - public long getItemId(final int adapterPosition) { - return 0; - } - - @Override - public void onBindViewHolder( - @NonNull final RecyclerView.ViewHolder holder, - @NonNull final List items, - final int adapterPosition, - final int collectionPosition, - @NonNull final List payloads - ) { - //noinspection unchecked - onBindViewHolder((TViewHolder) holder, adapterPosition, payloads); - } - - /** - * Binds position with payloads to ViewHolder. - * - * @param holder ViewHolder to bind position to; - * @param adapterPosition Position of item in adapter; - * @param payloads Payloads. - */ - public void onBindViewHolder(@NonNull final TViewHolder holder, final int adapterPosition, @NonNull final List payloads) { - //do nothing by default - } - -} diff --git a/recyclerview-adapters/src/main/java/ru/touchin/adapters/AdapterDelegate.java b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/AdapterDelegate.kt similarity index 60% rename from recyclerview-adapters/src/main/java/ru/touchin/adapters/AdapterDelegate.java rename to recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/AdapterDelegate.kt index f9802cf9..d2018ad4 100644 --- a/recyclerview-adapters/src/main/java/ru/touchin/adapters/AdapterDelegate.java +++ b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/AdapterDelegate.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 RoboSwag (Gavriil Sitnikov, Vsevolod Ivanov) + * Copyright (c) 2019 RoboSwag (Gavriil Sitnikov, Vsevolod Ivanov) * * This file is part of RoboSwag library. * @@ -17,33 +17,26 @@ * */ -package ru.touchin.adapters; +package ru.touchin.roboswag.recyclerview_adapters -import androidx.annotation.NonNull; -import androidx.core.view.ViewCompat; -import androidx.recyclerview.widget.RecyclerView; -import android.view.ViewGroup; - -import java.util.List; +import androidx.core.view.ViewCompat +import androidx.recyclerview.widget.RecyclerView +import android.view.ViewGroup /** * Objects of such class controls creation and binding of specific type of RecyclerView's ViewHolders. - * Default {@link #getItemViewType} is generating on construction of object. + * Default [.getItemViewType] is generating on construction of object. * - * @param Type of {@link RecyclerView.ViewHolder} of delegate. - */ -public abstract class AdapterDelegate { - - private final int defaultItemViewType = ViewCompat.generateViewId(); + * @param Type of [RecyclerView.ViewHolder] of delegate. + */ +abstract class AdapterDelegate { /** * Unique ID of AdapterDelegate. * * @return Unique ID. */ - public int getItemViewType() { - return defaultItemViewType; - } + val itemViewType = ViewCompat.generateViewId() /** * Returns if object is processable by this delegate. @@ -53,7 +46,7 @@ public int getItemViewType() { * @param collectionPosition Position of item in collection; * @return True if item is processable by this delegate. */ - public abstract boolean isForViewType(@NonNull final List items, final int adapterPosition, final int collectionPosition); + abstract fun isForViewType(items: List<*>, adapterPosition: Int, collectionPosition: Int): Boolean /** * Returns unique ID of item to support stable ID's logic of RecyclerView's adapter. @@ -63,9 +56,7 @@ public int getItemViewType() { * @param collectionPosition Position of item in collection; * @return Unique item ID. */ - public long getItemId(@NonNull final List items, final int adapterPosition, final int collectionPosition) { - return 0; - } + open fun getItemId(items: List<*>, adapterPosition: Int, collectionPosition: Int): Long = 0 /** * Creates ViewHolder to bind item to it later. @@ -73,8 +64,7 @@ public long getItemId(@NonNull final List items, final int adapterPositi * @param parent Container of ViewHolder's view. * @return New ViewHolder. */ - @NonNull - public abstract TViewHolder onCreateViewHolder(@NonNull final ViewGroup parent); + abstract fun onCreateViewHolder(parent: ViewGroup): TViewHolder /** * Binds item to created by this object ViewHolder. @@ -85,12 +75,12 @@ public long getItemId(@NonNull final List items, final int adapterPositi * @param collectionPosition Position of item in collection that contains item; * @param payloads Payloads; */ - public abstract void onBindViewHolder( - @NonNull final RecyclerView.ViewHolder holder, - @NonNull final List items, - final int adapterPosition, - final int collectionPosition, - @NonNull final List payloads - ); + abstract fun onBindViewHolder( + holder: RecyclerView.ViewHolder, + items: List<*>, + adapterPosition: Int, + collectionPosition: Int, + payloads: List<*> + ) } diff --git a/recyclerview-adapters/src/main/java/ru/touchin/adapters/DelegatesManager.kt b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/DelegatesManager.kt similarity index 97% rename from recyclerview-adapters/src/main/java/ru/touchin/adapters/DelegatesManager.kt rename to recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/DelegatesManager.kt index ed73229a..d79fc156 100644 --- a/recyclerview-adapters/src/main/java/ru/touchin/adapters/DelegatesManager.kt +++ b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/DelegatesManager.kt @@ -1,4 +1,4 @@ -package ru.touchin.adapters +package ru.touchin.roboswag.recyclerview_adapters import androidx.recyclerview.widget.RecyclerView import android.util.SparseArray diff --git a/recyclerview-adapters/src/main/java/ru/touchin/adapters/DelegationListAdapter.kt b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/DelegationListAdapter.kt similarity index 97% rename from recyclerview-adapters/src/main/java/ru/touchin/adapters/DelegationListAdapter.kt rename to recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/DelegationListAdapter.kt index 8328211f..1c90fe2a 100644 --- a/recyclerview-adapters/src/main/java/ru/touchin/adapters/DelegationListAdapter.kt +++ b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/DelegationListAdapter.kt @@ -1,4 +1,4 @@ -package ru.touchin.adapters +package ru.touchin.roboswag.recyclerview_adapters import androidx.recyclerview.widget.AsyncDifferConfig import androidx.recyclerview.widget.AsyncListDiffer @@ -33,7 +33,7 @@ open class DelegationListAdapter(config: AsyncDifferConfig) : Recy override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int, payloads: List) { val collectionPosition = getCollectionPosition(position) - if (collectionPosition in 0 until getList().size) { + if (collectionPosition in getList().indices) { if (itemClickListener != null) { holder.itemView.setOnRippleClickListener { itemClickListener?.invoke(getList()[getCollectionPosition(holder.adapterPosition)], holder) diff --git a/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/ItemAdapterDelegate.kt b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/ItemAdapterDelegate.kt new file mode 100644 index 00000000..67e8d799 --- /dev/null +++ b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/ItemAdapterDelegate.kt @@ -0,0 +1,74 @@ +package ru.touchin.roboswag.recyclerview_adapters + +import androidx.recyclerview.widget.RecyclerView + +/** + * Objects of such class controls creation and binding of specific type of RecyclerView's ViewHolders. + * Such delegates are creating and binding ViewHolders for specific items. + * Default [.getItemViewType] is generating on construction of object. + * + * @param Type of [RecyclerView.ViewHolder] of delegate; + * @param Type of items to bind to [RecyclerView.ViewHolder]s. + */ +abstract class ItemAdapterDelegate : AdapterDelegate() { + + override fun isForViewType(items: List<*>, adapterPosition: Int, collectionPosition: Int): Boolean { + return (collectionPosition >= 0 + && collectionPosition < items.size + && isForViewType(items[collectionPosition]!!, adapterPosition, collectionPosition)) + } + + /** + * Returns if object is processable by this delegate. + * This item will be casted to [TItem] and passes to [.onBindViewHolder]. + * + * @param item Item to check; + * @param adapterPosition Position of item in adapter; + * @param collectionPosition Position of item in collection that contains item; + * @return True if item is processable by this delegate. + */ + open fun isForViewType(item: Any, adapterPosition: Int, collectionPosition: Int): Boolean { + return true + } + + override fun getItemId(items: List<*>, adapterPosition: Int, collectionPosition: Int): Long = + getItemId(items[collectionPosition] as TItem, adapterPosition, collectionPosition) + + /** + * Returns unique ID of item to support stable ID's logic of RecyclerView's adapter. + * + * @param item Item in adapter; + * @param adapterPosition Position of item in adapter; + * @param collectionPosition Position of item in collection that contains item; + * @return Unique item ID. + */ + fun getItemId(item: TItem, adapterPosition: Int, collectionPosition: Int): Long = 0 + + override fun onBindViewHolder( + holder: RecyclerView.ViewHolder, + items: List<*>, + adapterPosition: Int, + collectionPosition: Int, + payloads: List<*> + ) { + onBindViewHolder(holder as TViewHolder, items[collectionPosition] as TItem, adapterPosition, collectionPosition, payloads) + } + + /** + * Binds item with payloads to created by this object ViewHolder. + * + * @param holder ViewHolder to bind item to; + * @param item Item in adapter; + * @param adapterPosition Position of item in adapter; + * @param collectionPosition Position of item in collection that contains item; + * @param payloads Payloads; + */ + abstract fun onBindViewHolder( + holder: TViewHolder, + item: TItem, + adapterPosition: Int, + collectionPosition: Int, + payloads: List<*> + ) + +} diff --git a/recyclerview-adapters/src/main/java/ru/touchin/adapters/OffsetAdapterUpdateCallback.kt b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/OffsetAdapterUpdateCallback.kt similarity index 94% rename from recyclerview-adapters/src/main/java/ru/touchin/adapters/OffsetAdapterUpdateCallback.kt rename to recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/OffsetAdapterUpdateCallback.kt index cb480f0e..d95aa2d9 100644 --- a/recyclerview-adapters/src/main/java/ru/touchin/adapters/OffsetAdapterUpdateCallback.kt +++ b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/OffsetAdapterUpdateCallback.kt @@ -1,4 +1,4 @@ -package ru.touchin.adapters +package ru.touchin.roboswag.recyclerview_adapters import androidx.recyclerview.widget.ListUpdateCallback import androidx.recyclerview.widget.RecyclerView diff --git a/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/PositionAdapterDelegate.kt b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/PositionAdapterDelegate.kt new file mode 100644 index 00000000..ce55eacb --- /dev/null +++ b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/PositionAdapterDelegate.kt @@ -0,0 +1,61 @@ +package ru.touchin.roboswag.recyclerview_adapters + +import androidx.recyclerview.widget.RecyclerView + +/** + * Objects of such class controls creation and binding of specific type of RecyclerView's ViewHolders. + * Such delegates are creating and binding ViewHolders by position in adapter. + * Default [.getItemViewType] is generating on construction of object. + * + * @param Type of [RecyclerView.ViewHolder] of delegate. + */ +abstract class PositionAdapterDelegate : AdapterDelegate() { + + override fun isForViewType(items: List<*>, adapterPosition: Int, collectionPosition: Int): Boolean { + return isForViewType(adapterPosition) + } + + /** + * Returns if object is processable by this delegate. + * + * @param adapterPosition Position of item in adapter; + * @return True if item is processable by this delegate. + */ + abstract fun isForViewType(adapterPosition: Int): Boolean + + override fun getItemId(items: List<*>, adapterPosition: Int, collectionPosition: Int): Long { + return getItemId(adapterPosition) + } + + /** + * Returns unique ID of item to support stable ID's logic of RecyclerView's adapter. + * + * @param adapterPosition Position of item in adapter; + * @return Unique item ID. + */ + fun getItemId(adapterPosition: Int): Long { + return 0 + } + + override fun onBindViewHolder( + holder: RecyclerView.ViewHolder, + items: List<*>, + adapterPosition: Int, + collectionPosition: Int, + payloads: List<*> + ) { + onBindViewHolder(holder as TViewHolder, adapterPosition, payloads) + } + + /** + * Binds position with payloads to ViewHolder. + * + * @param holder ViewHolder to bind position to; + * @param adapterPosition Position of item in adapter; + * @param payloads Payloads. + */ + open fun onBindViewHolder(holder: TViewHolder, adapterPosition: Int, payloads: List<*>) { + //do nothing by default + } + +} diff --git a/recyclerview-adapters/src/main/java/ru/touchin/adapters/SimpleDataObserver.kt b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/SimpleDataObserver.kt similarity index 93% rename from recyclerview-adapters/src/main/java/ru/touchin/adapters/SimpleDataObserver.kt rename to recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/SimpleDataObserver.kt index 97fc0c64..fe909bc9 100644 --- a/recyclerview-adapters/src/main/java/ru/touchin/adapters/SimpleDataObserver.kt +++ b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/recyclerview_adapters/SimpleDataObserver.kt @@ -1,4 +1,4 @@ -package ru.touchin.adapters +package ru.touchin.roboswag.recyclerview_adapters import androidx.recyclerview.widget.RecyclerView