From a30516fca04cf09c0e6f070ebe02725e20f46287 Mon Sep 17 00:00:00 2001 From: "Mr. Dragon" Date: Sat, 6 Apr 2019 04:15:43 +0530 Subject: [PATCH] AppList : Add a expandable view to show changelog in updatable applist Resolves issue : https://gitlab.com/AuroraOSS/AuroraStore/issues/61 --- .../store/adapter/UpdatableAppsAdapter.java | 50 ++++++-- .../com/aurora/store/utility/ViewUtil.java | 55 +++++++- .../main/res/drawable/generic_padded_bg.xml | 1 - app/src/main/res/drawable/ic_expand.xml | 9 ++ app/src/main/res/layout/fragment_updates.xml | 4 +- .../res/layout/include_details_changelog.xml | 2 +- app/src/main/res/layout/item_updatable.xml | 121 ++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 8 files changed, 227 insertions(+), 16 deletions(-) create mode 100644 app/src/main/res/drawable/ic_expand.xml create mode 100644 app/src/main/res/layout/item_updatable.xml diff --git a/app/src/main/java/com/aurora/store/adapter/UpdatableAppsAdapter.java b/app/src/main/java/com/aurora/store/adapter/UpdatableAppsAdapter.java index df91d1c04..b9faf436c 100644 --- a/app/src/main/java/com/aurora/store/adapter/UpdatableAppsAdapter.java +++ b/app/src/main/java/com/aurora/store/adapter/UpdatableAppsAdapter.java @@ -22,11 +22,13 @@ package com.aurora.store.adapter; import android.content.Context; import android.content.Intent; +import android.text.Html; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; import androidx.annotation.NonNull; @@ -39,6 +41,7 @@ import com.aurora.store.activity.AuroraActivity; import com.aurora.store.activity.DetailsActivity; import com.aurora.store.model.App; import com.aurora.store.sheet.AppMenuSheet; +import com.aurora.store.utility.ViewUtil; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; @@ -50,7 +53,7 @@ import butterknife.ButterKnife; public class UpdatableAppsAdapter extends RecyclerView.Adapter { - public List appsToAdd; + private List appsToAdd; private Context context; private ListType listType; @@ -78,7 +81,7 @@ public class UpdatableAppsAdapter extends RecyclerView.Adapter Version = new ArrayList<>(); List Extra = new ArrayList<>(); - viewHolder.AppTitle.setText(app.getDisplayName()); + viewHolder.txtTitle.setText(app.getDisplayName()); getDetails(Version, Extra, app); - setText(viewHolder.AppVersion, TextUtils.join(" • ", Version)); - setText(viewHolder.AppExtra, TextUtils.join(" • ", Extra)); + setText(viewHolder.txtVersion, TextUtils.join(" • ", Version)); + setText(viewHolder.txtExtra, TextUtils.join(" • ", Extra)); + setText(viewHolder.txtChanges, Html.fromHtml(app.getChanges()).toString()); viewHolder.itemView.setOnClickListener(v -> { Intent intent = new Intent(context, DetailsActivity.class); @@ -103,7 +107,8 @@ public class UpdatableAppsAdapter extends RecyclerView.Adapter { + if (viewHolder.layoutChanges.getHeight() == 0) { + ViewUtil.rotateView(v, false); + ViewUtil.expandView(viewHolder.layoutChanges, + viewHolder.txtChanges.getHeight() + + viewHolder.txtChangesTitle.getHeight() + + 120 /*Padding & Margins*/); + } else { + ViewUtil.rotateView(v, true); + ViewUtil.collapseView(viewHolder.layoutChanges, 0); + } + }); } private void getDetails(List Version, List Extra, App app) { @@ -135,14 +153,24 @@ public class UpdatableAppsAdapter extends RecyclerView.Adapter { + v.getLayoutParams().height = (int) animation.getAnimatedValue(); + v.requestLayout(); + }); + valueAnimator.setInterpolator(new DecelerateInterpolator()); + valueAnimator.setDuration(300); + valueAnimator.start(); + } + + public static void collapseView(final View v, int targetHeight) { + int prevHeight = v.getHeight(); + ValueAnimator valueAnimator = ValueAnimator.ofInt(prevHeight, targetHeight); + valueAnimator.setInterpolator(new DecelerateInterpolator()); + valueAnimator.addUpdateListener(animation -> { + v.getLayoutParams().height = (int) animation.getAnimatedValue(); + v.requestLayout(); + }); + valueAnimator.setInterpolator(new DecelerateInterpolator()); + valueAnimator.setDuration(300); + valueAnimator.start(); + } + public static void setVisibility(View view, boolean visibility) { if (visibility) showWithAnimation(view); diff --git a/app/src/main/res/drawable/generic_padded_bg.xml b/app/src/main/res/drawable/generic_padded_bg.xml index 13f505068..e3988dc2b 100644 --- a/app/src/main/res/drawable/generic_padded_bg.xml +++ b/app/src/main/res/drawable/generic_padded_bg.xml @@ -34,5 +34,4 @@ - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_expand.xml b/app/src/main/res/drawable/ic_expand.xml new file mode 100644 index 000000000..304f503db --- /dev/null +++ b/app/src/main/res/drawable/ic_expand.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/fragment_updates.xml b/app/src/main/res/layout/fragment_updates.xml index b6476a4b6..a521ffc7b 100644 --- a/app/src/main/res/layout/fragment_updates.xml +++ b/app/src/main/res/layout/fragment_updates.xml @@ -20,6 +20,7 @@ @@ -80,7 +81,8 @@ android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent" - android:scrollbars="vertical" /> + android:scrollbars="vertical" + tools:listitem="@layout/item_updatable" /> diff --git a/app/src/main/res/layout/item_updatable.xml b/app/src/main/res/layout/item_updatable.xml new file mode 100644 index 000000000..c2651794f --- /dev/null +++ b/app/src/main/res/layout/item_updatable.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2be2954fb..93f6216fd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -131,6 +131,7 @@ Installing Read more No ads + What\'s New App permissions Purchase Rate this app