diff --git a/core/src/main/kotlin/com/melih/core/extensions/LifecycleExtensions.kt b/core/src/main/kotlin/com/melih/core/extensions/LifecycleExtensions.kt index 5798815..bf31e90 100644 --- a/core/src/main/kotlin/com/melih/core/extensions/LifecycleExtensions.kt +++ b/core/src/main/kotlin/com/melih/core/extensions/LifecycleExtensions.kt @@ -25,8 +25,4 @@ fun Fragment.observe(data: LiveData, block: (T) -> Unit) { inline fun ViewModelProvider.Factory.createFor( fragment: Fragment, crossinline block: T.() -> Unit = {} -): T { - val viewModel = ViewModelProviders.of(fragment, this)[T::class.java] - viewModel.apply(block) - return viewModel -} +): T = ViewModelProviders.of(fragment, this)[T::class.java].apply(block) diff --git a/core/src/main/kotlin/com/melih/core/extensions/RecyclerExtensions.kt b/core/src/main/kotlin/com/melih/core/extensions/RecyclerExtensions.kt new file mode 100644 index 0000000..3c3e3fb --- /dev/null +++ b/core/src/main/kotlin/com/melih/core/extensions/RecyclerExtensions.kt @@ -0,0 +1,14 @@ +package com.melih.core.extensions + +import androidx.recyclerview.widget.DiffUtil + +/** + * Get [diff callback][DiffUtil.ItemCallback] for given type based on provided checker + */ +fun getDiffCallbackForType(itemCheck: (oldItem: T, newItem: T) -> Boolean) = object : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: T, newItem: T): Boolean = + itemCheck(oldItem, newItem) + + override fun areContentsTheSame(oldItem: T, newItem: T): Boolean = + itemCheck(oldItem, newItem) +} diff --git a/features/launches/src/main/kotlin/com/melih/list/ui/adapters/LaunchesAdapter.kt b/features/launches/src/main/kotlin/com/melih/list/ui/adapters/LaunchesAdapter.kt index 8763d34..c998b2c 100644 --- a/features/launches/src/main/kotlin/com/melih/list/ui/adapters/LaunchesAdapter.kt +++ b/features/launches/src/main/kotlin/com/melih/list/ui/adapters/LaunchesAdapter.kt @@ -2,21 +2,14 @@ package com.melih.list.ui.adapters import android.view.LayoutInflater import android.view.ViewGroup -import androidx.recyclerview.widget.DiffUtil import com.melih.core.base.recycler.BasePagingListAdapter import com.melih.core.base.recycler.BaseViewHolder +import com.melih.core.extensions.getDiffCallbackForType import com.melih.list.databinding.LaunchRowBinding import com.melih.repository.entities.LaunchEntity class LaunchesAdapter(itemClickListener: (LaunchEntity) -> Unit) : BasePagingListAdapter( - object : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: LaunchEntity, newItem: LaunchEntity): Boolean = - oldItem.id == newItem.id - - override fun areContentsTheSame(oldItem: LaunchEntity, newItem: LaunchEntity): Boolean = - oldItem.name == newItem.name - - }, + getDiffCallbackForType { oldItem, newItem -> oldItem.id == newItem.id }, itemClickListener ) { override fun createViewHolder(