From 074f72f58af667b54999ec5030d37aeb25e6cc58 Mon Sep 17 00:00:00 2001 From: Conny Duck Date: Fri, 15 Feb 2019 07:28:57 +0000 Subject: [PATCH] fix activity transitions by limiting view rebinding --- .../views/categories/AppPreviewAdapter.java | 5 +++ .../views/categories/CategoryAdapter.java | 32 +++++++++++-------- .../views/whatsnew/WhatsNewAdapter.java | 5 +++ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/categories/AppPreviewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/categories/AppPreviewAdapter.java index 10388e305..4f38abcac 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/categories/AppPreviewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/categories/AppPreviewAdapter.java @@ -5,6 +5,7 @@ import android.database.Cursor; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.ViewGroup; + import org.fdroid.fdroid.R; import org.fdroid.fdroid.data.App; @@ -36,6 +37,10 @@ class AppPreviewAdapter extends RecyclerView.Adapter { } public void setAppCursor(Cursor cursor) { + if (this.cursor == cursor) { + //don't notify when the cursor did not change + return; + } this.cursor = cursor; notifyDataSetChanged(); } diff --git a/app/src/main/java/org/fdroid/fdroid/views/categories/CategoryAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/categories/CategoryAdapter.java index e8aa99449..3c144e93f 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/categories/CategoryAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/categories/CategoryAdapter.java @@ -3,22 +3,32 @@ package org.fdroid.fdroid.views.categories; import android.app.Activity; import android.support.annotation.NonNull; import android.support.v4.app.LoaderManager; -import android.support.v7.widget.RecyclerView; +import android.support.v7.recyclerview.extensions.ListAdapter; +import android.support.v7.util.DiffUtil; import android.view.ViewGroup; + import org.fdroid.fdroid.R; -import java.util.Collections; import java.util.List; -public class CategoryAdapter extends RecyclerView.Adapter { - - @NonNull - private List unlocalizedCategoryNames = Collections.emptyList(); +public class CategoryAdapter extends ListAdapter { private final Activity activity; private final LoaderManager loaderManager; public CategoryAdapter(Activity activity, LoaderManager loaderManager) { + super(new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(String oldItem, String newItem) { + return oldItem.equals(newItem); + } + + @Override + public boolean areContentsTheSame(String oldItem, String newItem) { + return false; + } + }); + this.activity = activity; this.loaderManager = loaderManager; } @@ -32,17 +42,11 @@ public class CategoryAdapter extends RecyclerView.Adapter { @Override public void onBindViewHolder(@NonNull CategoryController holder, int position) { - holder.bindModel(unlocalizedCategoryNames.get(position)); - } - - @Override - public int getItemCount() { - return unlocalizedCategoryNames.size(); + holder.bindModel(getItem(position)); } public void setCategories(@NonNull List unlocalizedCategoryNames) { - this.unlocalizedCategoryNames = unlocalizedCategoryNames; - notifyDataSetChanged(); + submitList(unlocalizedCategoryNames); } } diff --git a/app/src/main/java/org/fdroid/fdroid/views/whatsnew/WhatsNewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/whatsnew/WhatsNewAdapter.java index cf6ee8df9..fbec4c440 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/whatsnew/WhatsNewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/whatsnew/WhatsNewAdapter.java @@ -11,6 +11,7 @@ import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; + import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.R; import org.fdroid.fdroid.data.App; @@ -102,6 +103,10 @@ public class WhatsNewAdapter extends RecyclerView.Adapter { } public void setAppsCursor(Cursor cursor) { + if (this.cursor == cursor) { + //don't notify when the cursor did not change + return; + } this.cursor = cursor; notifyDataSetChanged(); }