summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Andrey Epin <ayepin@google.com> 2023-01-06 16:49:07 -0800
committer Andrey Epin <ayepin@google.com> 2023-01-30 22:14:21 +0000
commite1be3b0b1a75a72cf4e04cda792cb209f2b450f4 (patch)
tree7f6ff641c6c2344cf58f5568e66aaaaba7acedda /java
parentc317e6a26b75da0a693cbb14f673ecdd7152c433 (diff)
Add reveal animation for Chooser's target icons
Add alpha animation for Chooser's target icons. Bug: 262927266 Test: Manual test with artificial direct share target loading delay. Test: atest IntentResolverUnitTests Change-Id: Id13450d47cbe75feb3769fc131b4e90f484133a9
Diffstat (limited to 'java')
-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 {