summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2023-01-30 23:44:32 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-01-30 23:44:32 +0000
commitaafb031120eee089a9bce25043c9e55128e6e7da (patch)
treeea7d79c705a2d3c98f5963f7e963d9b1fc532066
parent6e245878978627b8741c219597c4a02609543969 (diff)
parente1be3b0b1a75a72cf4e04cda792cb209f2b450f4 (diff)
Merge "Add reveal animation for Chooser's target icons" into tm-qpr-dev
-rw-r--r--java/src/com/android/intentresolver/ChooserListAdapter.java2
-rw-r--r--java/src/com/android/intentresolver/ResolverListAdapter.java20
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 {