diff options
author | 2023-01-30 23:44:32 +0000 | |
---|---|---|
committer | 2023-01-30 23:44:32 +0000 | |
commit | aafb031120eee089a9bce25043c9e55128e6e7da (patch) | |
tree | ea7d79c705a2d3c98f5963f7e963d9b1fc532066 | |
parent | 6e245878978627b8741c219597c4a02609543969 (diff) | |
parent | e1be3b0b1a75a72cf4e04cda792cb209f2b450f4 (diff) |
Merge "Add reveal animation for Chooser's target icons" into tm-qpr-dev
-rw-r--r-- | java/src/com/android/intentresolver/ChooserListAdapter.java | 2 | ||||
-rw-r--r-- | java/src/com/android/intentresolver/ResolverListAdapter.java | 20 |
2 files changed, 20 insertions, 2 deletions
diff --git a/java/src/com/android/intentresolver/ChooserListAdapter.java b/java/src/com/android/intentresolver/ChooserListAdapter.java index 699190f9..49b883ae 100644 --- a/java/src/com/android/intentresolver/ChooserListAdapter.java +++ b/java/src/com/android/intentresolver/ChooserListAdapter.java @@ -264,7 +264,7 @@ public class ChooserListAdapter extends ResolverListAdapter { } holder.bindLabel(info.getDisplayLabel(), info.getExtendedInfo(), alwaysShowSubLabel()); - holder.bindIcon(info); + holder.bindIcon(info, /*animate =*/ true); if (info.isSelectableTargetInfo()) { // direct share targets should append the application name for a better readout DisplayResolveInfo rInfo = info.getDisplayResolveInfo(); diff --git a/java/src/com/android/intentresolver/ResolverListAdapter.java b/java/src/com/android/intentresolver/ResolverListAdapter.java index eecb914c..7a258a4c 100644 --- a/java/src/com/android/intentresolver/ResolverListAdapter.java +++ b/java/src/com/android/intentresolver/ResolverListAdapter.java @@ -18,6 +18,7 @@ package com.android.intentresolver; import static android.content.Context.ACTIVITY_SERVICE; +import android.animation.ObjectAnimator; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; @@ -42,6 +43,7 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.animation.DecelerateInterpolator; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.ImageView; @@ -914,6 +916,7 @@ public class ResolverListAdapter extends BaseAdapter { */ @VisibleForTesting public static class ViewHolder { + private static final long IMAGE_FADE_IN_MILLIS = 150; public View itemView; public Drawable defaultItemViewBackground; @@ -952,7 +955,22 @@ public class ResolverListAdapter extends BaseAdapter { } public void bindIcon(TargetInfo info) { - icon.setImageDrawable(info.getDisplayIconHolder().getDisplayIcon()); + bindIcon(info, false); + } + + /** + * Bind view holder to a TargetInfo, run icon reveal animation, if required. + */ + public void bindIcon(TargetInfo info, boolean animate) { + Drawable displayIcon = info.getDisplayIconHolder().getDisplayIcon(); + boolean runAnimation = animate && (icon.getDrawable() == null) && (displayIcon != null); + icon.setImageDrawable(displayIcon); + if (runAnimation) { + ObjectAnimator animator = ObjectAnimator.ofFloat(icon, "alpha", 0.0f, 1.0f); + animator.setInterpolator(new DecelerateInterpolator(1.0f)); + animator.setDuration(IMAGE_FADE_IN_MILLIS); + animator.start(); + } if (info.isSuspended()) { icon.setColorFilter(getSuspendedColorMatrix()); } else { |