From 258064d4953b7c2725c097063c53816933429791 Mon Sep 17 00:00:00 2001 From: mvp76 Date: Wed, 1 Mar 2017 15:14:27 +0100 Subject: [PATCH] Use item decorator in preference to inline ImageView. This eliminates the need to include the drawable in the app_list_item layout. --- .../fdroid/views/apps/AppListAdapter.java | 14 ++++++++ .../fdroid/views/apps/AppListItemDivider.java | 33 +++++++++++++++++++ .../fdroid/views/myapps/MyAppsAdapter.java | 16 +++++++++ app/src/main/res/layout/app_list_item.xml | 11 ------- 4 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemDivider.java diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListAdapter.java index 0a81e5323..126202ced 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListAdapter.java @@ -12,9 +12,11 @@ class AppListAdapter extends RecyclerView.Adapter { private Cursor cursor; private final Activity activity; + private final AppListItemDivider divider; AppListAdapter(Activity activity) { this.activity = activity; + divider = new AppListItemDivider(activity); } public void setAppCursor(Cursor cursor) { @@ -37,4 +39,16 @@ class AppListAdapter extends RecyclerView.Adapter { public int getItemCount() { return cursor == null ? 0 : cursor.getCount(); } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + recyclerView.addItemDecoration(divider); + } + + @Override + public void onDetachedFromRecyclerView(RecyclerView recyclerView) { + recyclerView.removeItemDecoration(divider); + super.onDetachedFromRecyclerView(recyclerView); + } } diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemDivider.java b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemDivider.java new file mode 100644 index 000000000..565eaed10 --- /dev/null +++ b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemDivider.java @@ -0,0 +1,33 @@ +package org.fdroid.fdroid.views.apps; + +import android.content.Context; +import android.graphics.Rect; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import org.fdroid.fdroid.R; +import org.fdroid.fdroid.Utils; + +/** + * Draws a faint line between items, to be used with the {@link AppListItemDivider}. + */ +public class AppListItemDivider extends DividerItemDecoration { + private final int itemSpacing; + + public AppListItemDivider(Context context) { + super(context, DividerItemDecoration.VERTICAL); + setDrawable(ContextCompat.getDrawable(context, R.drawable.app_list_item_divider)); + itemSpacing = Utils.dpToPx(8, context); + } + + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + int position = parent.getChildAdapterPosition(view); + if (position > 0) { + outRect.bottom = itemSpacing; + } + } +} diff --git a/app/src/main/java/org/fdroid/fdroid/views/myapps/MyAppsAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/myapps/MyAppsAdapter.java index 4c29069c8..abfdfb7e6 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/myapps/MyAppsAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/myapps/MyAppsAdapter.java @@ -9,6 +9,7 @@ import android.view.ViewGroup; import org.fdroid.fdroid.R; import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.views.apps.AppListItemController; +import org.fdroid.fdroid.views.apps.AppListItemDivider; /** * Wraps a cursor which should have a list of "apps which can be updated". Also includes a header @@ -18,9 +19,11 @@ public class MyAppsAdapter extends RecyclerView.Adapter private Cursor updatesCursor; private final Activity activity; + private final AppListItemDivider divider; public MyAppsAdapter(Activity activity) { this.activity = activity; + divider = new AppListItemDivider(activity); } @Override @@ -73,4 +76,17 @@ public class MyAppsAdapter extends RecyclerView.Adapter updatesCursor = cursor; notifyDataSetChanged(); } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + recyclerView.addItemDecoration(divider); + } + + @Override + public void onDetachedFromRecyclerView(RecyclerView recyclerView) { + recyclerView.removeItemDecoration(divider); + super.onDetachedFromRecyclerView(recyclerView); + } + } diff --git a/app/src/main/res/layout/app_list_item.xml b/app/src/main/res/layout/app_list_item.xml index 172df3d53..e477a7912 100644 --- a/app/src/main/res/layout/app_list_item.xml +++ b/app/src/main/res/layout/app_list_item.xml @@ -64,15 +64,4 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@+id/icon" /> - - \ No newline at end of file