diff --git a/app/build.gradle b/app/build.gradle index 161ecc3a2c..276148ab48 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "org.ole.planet.myplanet" minSdk = 26 targetSdk = 36 - versionCode = 4770 - versionName = "0.47.70" + versionCode = 4771 + versionName = "0.47.71" ndkVersion = '26.3.11579264' vectorDrawables.useSupportLibrary = true } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/courses/CourseStepFragment.kt b/app/src/main/java/org/ole/planet/myplanet/ui/courses/CourseStepFragment.kt index 82f33da9c7..a25637069e 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/courses/CourseStepFragment.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/courses/CourseStepFragment.kt @@ -165,13 +165,14 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback { fragmentCourseStepBinding.tvResourcesHeader.visibility = View.VISIBLE fragmentCourseStepBinding.rvInlineResources.visibility = View.VISIBLE - inlineResourceAdapter = InlineResourceAdapter(resources) { library -> + inlineResourceAdapter = InlineResourceAdapter { library -> openResource(library) } fragmentCourseStepBinding.rvInlineResources.apply { layoutManager = LinearLayoutManager(requireContext()) adapter = inlineResourceAdapter } + inlineResourceAdapter?.submitList(resources) } private fun autoDownloadResources() { @@ -214,7 +215,7 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback { viewLifecycleOwner.lifecycleScope.launch { val updatedResources = resourcesRepository.getAllStepResources(stepId) resources = updatedResources - inlineResourceAdapter?.updateResources(updatedResources) + inlineResourceAdapter?.submitList(updatedResources) fragmentCourseStepBinding.resourceDownloadProgress.visibility = View.GONE } } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/courses/InlineResourceAdapter.kt b/app/src/main/java/org/ole/planet/myplanet/ui/courses/InlineResourceAdapter.kt index 9b62ff94ce..1eff0c1512 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/courses/InlineResourceAdapter.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/courses/InlineResourceAdapter.kt @@ -8,6 +8,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.graphics.createBitmap +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy @@ -24,12 +26,25 @@ import org.ole.planet.myplanet.utils.UrlUtils import org.ole.planet.myplanet.utils.Utilities class InlineResourceAdapter( - private var resources: List, private val onResourceClick: (RealmMyLibrary) -> Unit -) : RecyclerView.Adapter() { +) : ListAdapter(ResourceDiffCallback()) { class ViewHolder(val binding: ItemInlineResourceBinding) : RecyclerView.ViewHolder(binding.root) + class ResourceDiffCallback : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: RealmMyLibrary, newItem: RealmMyLibrary): Boolean { + return oldItem.id == newItem.id + } + + override fun areContentsTheSame(oldItem: RealmMyLibrary, newItem: RealmMyLibrary): Boolean { + return oldItem._rev == newItem._rev && + oldItem.downloadedRev == newItem.downloadedRev && + oldItem.resourceLocalAddress == newItem.resourceLocalAddress && + oldItem.title == newItem.title && + oldItem.isResourceOffline() == newItem.isResourceOffline() + } + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = ItemInlineResourceBinding.inflate( LayoutInflater.from(parent.context), parent, false @@ -38,7 +53,7 @@ class InlineResourceAdapter( } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val resource = resources[position] + val resource = getItem(position) val context = holder.itemView.context val binding = holder.binding @@ -199,10 +214,4 @@ class InlineResourceAdapter( } } - override fun getItemCount(): Int = resources.size - - fun updateResources(newResources: List) { - resources = newResources - notifyDataSetChanged() - } }