From b72c418f11a0b6ea378ce21606df55eb38935c9c Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Wed, 15 Mar 2017 13:05:40 +1100 Subject: [PATCH 1/3] Scroll appropriately when expanding versions --- .../org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java index 071f85bd9..2cdf22154 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java @@ -145,6 +145,9 @@ public class AppDetailsRecyclerViewAdapter if (showVersions) { items.addAll(startIndex, versions); notifyItemRangeInserted(startIndex, versions.size()); + if (recyclerView != null) { + ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(startIndex - 1, 0); + } } else if (itemsWereRemoved) { notifyItemRangeRemoved(startIndex, versions.size()); } From c65029ae8df3766d486499b9a813e53a07c26a12 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Wed, 15 Mar 2017 13:05:51 +1100 Subject: [PATCH 2/3] Extract functionality to show correct expand/collapse icon This was not updating the versions expand icon correctly when the user clicked on it. It was working when they scrolled away and returned to the versions list. Now it works for both. --- .../views/AppDetailsRecyclerViewAdapter.java | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java index 2cdf22154..5e64653a0 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java @@ -6,6 +6,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; +import android.support.annotation.DrawableRes; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.v4.view.ViewCompat; @@ -578,6 +579,16 @@ public class AppDetailsRecyclerViewAdapter headerView = (TextView) view.findViewById(R.id.information); contentView = (LinearLayout) view.findViewById(R.id.ll_content); } + + protected abstract @DrawableRes int getIcon(); + + /** + * Depending on whether we are expanded or not, update the icon which indicates whether the + * user can expand/collapse this item. + */ + protected void updateExpandableItem(boolean isExpanded) { + TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(headerView, getIcon(), 0, isExpanded ? R.drawable.ic_expand_less_grey600 : R.drawable.ic_expand_more_grey600, 0); + } } private class VersionsViewHolder extends ExpandableLinearLayoutViewHolder { @@ -591,10 +602,15 @@ public class AppDetailsRecyclerViewAdapter @Override public void onClick(View v) { setShowVersions(!showVersions); + updateExpandableItem(showVersions); } }); headerView.setText(R.string.versions); - TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(headerView, R.drawable.ic_access_time_24dp_grey600, 0, showVersions ? R.drawable.ic_expand_less_grey600 : R.drawable.ic_expand_more_grey600, 0); + updateExpandableItem(showVersions); + } + + protected @DrawableRes int getIcon() { + return R.drawable.ic_access_time_24dp_grey600; } } @@ -610,16 +626,20 @@ public class AppDetailsRecyclerViewAdapter public void onClick(View v) { boolean shouldBeVisible = contentView.getVisibility() != View.VISIBLE; contentView.setVisibility(shouldBeVisible ? View.VISIBLE : View.GONE); - TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(headerView, R.drawable.ic_lock_24dp_grey600, 0, shouldBeVisible ? R.drawable.ic_expand_less_grey600 : R.drawable.ic_expand_more_grey600, 0); + updateExpandableItem(shouldBeVisible); } }); headerView.setText(R.string.permissions); - TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(headerView, R.drawable.ic_lock_24dp_grey600, 0, R.drawable.ic_expand_more_grey600, 0); + updateExpandableItem(false); contentView.removeAllViews(); AppDiff appDiff = new AppDiff(context.getPackageManager(), versions.get(0)); AppSecurityPermissions perms = new AppSecurityPermissions(context, appDiff.pkgInfo); contentView.addView(perms.getPermissionsView(AppSecurityPermissions.WHICH_ALL)); } + + protected @DrawableRes int getIcon() { + return R.drawable.ic_lock_24dp_grey600; + } } private class LinksViewHolder extends ExpandableLinearLayoutViewHolder { @@ -634,11 +654,11 @@ public class AppDetailsRecyclerViewAdapter public void onClick(View v) { boolean shouldBeVisible = contentView.getVisibility() != View.VISIBLE; contentView.setVisibility(shouldBeVisible ? View.VISIBLE : View.GONE); - TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(headerView, R.drawable.ic_website, 0, shouldBeVisible ? R.drawable.ic_expand_less_grey600 : R.drawable.ic_expand_more_grey600, 0); + updateExpandableItem(shouldBeVisible); } }); headerView.setText(R.string.links); - TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(headerView, R.drawable.ic_website, 0, R.drawable.ic_expand_more_grey600, 0); + updateExpandableItem(false); contentView.removeAllViews(); // Source button @@ -668,6 +688,10 @@ public class AppDetailsRecyclerViewAdapter addLinkItemView(contentView, R.string.menu_email, R.drawable.ic_email, emailUrl); } } + + protected @DrawableRes int getIcon() { + return R.drawable.ic_website; + } } private class VersionViewHolder extends RecyclerView.ViewHolder { From b01a871d9dbc2809e47ac7ec4b70ad40b610c2b2 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Wed, 15 Mar 2017 13:09:55 +1100 Subject: [PATCH 3/3] Move app details view up when expanding links/permissions --- .../fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java index 5e64653a0..102c22888 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java @@ -627,6 +627,9 @@ public class AppDetailsRecyclerViewAdapter boolean shouldBeVisible = contentView.getVisibility() != View.VISIBLE; contentView.setVisibility(shouldBeVisible ? View.VISIBLE : View.GONE); updateExpandableItem(shouldBeVisible); + if (shouldBeVisible && recyclerView != null) { + ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(items.indexOf(VIEWTYPE_PERMISSIONS), 0); + } } }); headerView.setText(R.string.permissions); @@ -655,6 +658,9 @@ public class AppDetailsRecyclerViewAdapter boolean shouldBeVisible = contentView.getVisibility() != View.VISIBLE; contentView.setVisibility(shouldBeVisible ? View.VISIBLE : View.GONE); updateExpandableItem(shouldBeVisible); + if (shouldBeVisible && recyclerView != null) { + ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(items.indexOf(VIEWTYPE_LINKS), 0); + } } }); headerView.setText(R.string.links);