Moved AsyncImageView out of downloads
This CL moves AsyncImageView to components/browser_ui/widget, which
includes moving AutoAnimatorDrawable, ForegroundRounderCornerImageView,
and unavailable/waiting drawable XML files.
Bug: 1134412
Change-Id: I0466620ec4571a75f9839fa575b9d07f1f201b40
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2444172
Reviewed-by: Theresa <twellington@chromium.org>
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#814637}
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index 618af25..9e5dd7e 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -632,12 +632,7 @@
"java/src/org/chromium/chrome/browser/download/home/list/mutator/PrefetchListPaginator.java",
"java/src/org/chromium/chrome/browser/download/home/list/mutator/ScoreComparator.java",
"java/src/org/chromium/chrome/browser/download/home/list/view/AspectRatioFrameLayout.java",
- "java/src/org/chromium/chrome/browser/download/home/list/view/AsyncImageView.java",
- "java/src/org/chromium/chrome/browser/download/home/list/view/AutoAnimatorDrawable.java",
"java/src/org/chromium/chrome/browser/download/home/list/view/CircularProgressView.java",
- "java/src/org/chromium/chrome/browser/download/home/list/view/ForegroundDrawableCompat.java",
- "java/src/org/chromium/chrome/browser/download/home/list/view/ForegroundRoundedCornerImageView.java",
- "java/src/org/chromium/chrome/browser/download/home/list/view/UiUtils.java",
"java/src/org/chromium/chrome/browser/download/home/metrics/FileExtensions.java",
"java/src/org/chromium/chrome/browser/download/home/metrics/FilterChangeLogger.java",
"java/src/org/chromium/chrome/browser/download/home/metrics/OfflineItemStartupLogger.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/holder/InProgressImageViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/holder/InProgressImageViewHolder.java
index 8d5b941..6878847e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/holder/InProgressImageViewHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/holder/InProgressImageViewHolder.java
@@ -9,9 +9,11 @@
import android.view.ViewGroup;
import android.widget.ImageView;
+import androidx.appcompat.content.res.AppCompatResources;
+
import org.chromium.chrome.browser.download.R;
import org.chromium.chrome.browser.download.home.list.ListItem;
-import org.chromium.chrome.browser.download.home.list.view.AutoAnimatorDrawable;
+import org.chromium.components.browser_ui.widget.async_image.AutoAnimatorDrawable;
import org.chromium.ui.modelutil.PropertyModel;
/**
@@ -35,9 +37,8 @@
super(view, true /* constrainCaption */);
mPlaceholder = view.findViewById(R.id.placeholder);
- mPlaceholder.setImageDrawable(AutoAnimatorDrawable.wrap(
- org.chromium.chrome.browser.download.home.list.view.UiUtils.getDrawable(
- view.getContext(), R.drawable.async_image_view_waiting)));
+ mPlaceholder.setImageDrawable(AutoAnimatorDrawable.wrap(AppCompatResources.getDrawable(
+ view.getContext(), R.drawable.async_image_view_waiting)));
}
// InProgressViewHolder implementation.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/holder/OfflineItemViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/holder/OfflineItemViewHolder.java
index 5d862416..2ab691a5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/holder/OfflineItemViewHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/holder/OfflineItemViewHolder.java
@@ -19,9 +19,9 @@
import org.chromium.chrome.browser.download.home.list.ListItem;
import org.chromium.chrome.browser.download.home.list.ListProperties;
import org.chromium.chrome.browser.download.home.list.UiUtils;
-import org.chromium.chrome.browser.download.home.list.view.AsyncImageView;
import org.chromium.chrome.browser.download.home.metrics.UmaUtils;
import org.chromium.chrome.browser.download.home.view.SelectionView;
+import org.chromium.components.browser_ui.widget.async_image.AsyncImageView;
import org.chromium.components.browser_ui.widget.listmenu.BasicListMenu;
import org.chromium.components.browser_ui.widget.listmenu.ListMenu;
import org.chromium.components.browser_ui.widget.listmenu.ListMenuButton;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/CircularProgressView.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/CircularProgressView.java
index 25c7350..685e732 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/CircularProgressView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/CircularProgressView.java
@@ -17,6 +17,9 @@
import org.chromium.base.MathUtils;
import org.chromium.chrome.browser.download.R;
+import org.chromium.components.browser_ui.widget.async_image.AutoAnimatorDrawable;
+import org.chromium.components.browser_ui.widget.async_image.ForegroundDrawableCompat;
+import org.chromium.ui.UiUtils;
import org.chromium.ui.widget.ChromeImageButton;
import java.lang.annotation.Retention;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/UiUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/UiUtils.java
deleted file mode 100644
index 6c3586e..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/UiUtils.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.download.home.list.view;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
-
-import androidx.annotation.DrawableRes;
-import androidx.annotation.Nullable;
-import androidx.annotation.StyleableRes;
-import androidx.appcompat.content.res.AppCompatResources;
-
-/** A set of helper methods to make interacting with the Android UI easier. */
-public final class UiUtils {
- private UiUtils() {}
-
- /**
- * Loads a {@link Drawable} from an attribute. Uses {@link AppCompatResources} to support all
- * modern {@link Drawable} types.
- * @return A new {@link Drawable} or {@code null} if the attribute wasn't set.
- */
- public static @Nullable Drawable getDrawable(
- Context context, @Nullable TypedArray attrs, @StyleableRes int attrId) {
- if (attrs == null) return null;
-
- @DrawableRes
- int resId = attrs.getResourceId(attrId, -1);
- if (resId == -1) return null;
- return UiUtils.getDrawable(context, resId);
- }
-
- /**
- * Loads a {@link Drawable} from a resource Id. Uses {@link AppCompatResources} to support all
- * modern {@link Drawable} types.
- * @return A new {@link Drawable}.
- */
- public static Drawable getDrawable(Context context, @DrawableRes int resId) {
- return AppCompatResources.getDrawable(context, resId);
- }
-}
\ No newline at end of file
diff --git a/chrome/browser/download/android/BUILD.gn b/chrome/browser/download/android/BUILD.gn
index 48c98d3..9eb6e8d 100644
--- a/chrome/browser/download/android/BUILD.gn
+++ b/chrome/browser/download/android/BUILD.gn
@@ -178,8 +178,6 @@
"java/res/drawable-xxhdpi/ic_refresh_white_36dp.png",
"java/res/drawable-xxxhdpi/ic_refresh_white_24dp.png",
"java/res/drawable-xxxhdpi/ic_refresh_white_36dp.png",
- "java/res/drawable/async_image_view_unavailable.xml",
- "java/res/drawable/async_image_view_waiting.xml",
"java/res/drawable/circular_progress_bar_background_large.xml",
"java/res/drawable/circular_progress_bar_background_small.xml",
"java/res/drawable/circular_progress_bar_determinate_large.xml",
diff --git a/chrome/browser/download/android/java/res/layout/download_manager_audio.xml b/chrome/browser/download/android/java/res/layout/download_manager_audio.xml
index 7d8438d..f5929ee 100644
--- a/chrome/browser/download/android/java/res/layout/download_manager_audio.xml
+++ b/chrome/browser/download/android/java/res/layout/download_manager_audio.xml
@@ -12,7 +12,7 @@
android:layout_height="114dp"
android:background="@drawable/hairline_border_card_background">
- <org.chromium.chrome.browser.download.home.list.view.AsyncImageView
+ <org.chromium.components.browser_ui.widget.async_image.AsyncImageView
android:id="@+id/thumbnail"
android:layout_width="80dp"
android:layout_height="80dp"
diff --git a/chrome/browser/download/android/java/res/layout/download_manager_generic_item.xml b/chrome/browser/download/android/java/res/layout/download_manager_generic_item.xml
index ff12878..b0be30c 100644
--- a/chrome/browser/download/android/java/res/layout/download_manager_generic_item.xml
+++ b/chrome/browser/download/android/java/res/layout/download_manager_generic_item.xml
@@ -16,7 +16,7 @@
app:columnCount="3"
app:rowCount="2">
- <org.chromium.chrome.browser.download.home.list.view.AsyncImageView
+ <org.chromium.components.browser_ui.widget.async_image.AsyncImageView
android:id="@+id/thumbnail"
android:layout_width="36dp"
android:layout_height="36dp"
diff --git a/chrome/browser/download/android/java/res/layout/download_manager_image_item.xml b/chrome/browser/download/android/java/res/layout/download_manager_image_item.xml
index bc60f4a..11074b42 100644
--- a/chrome/browser/download/android/java/res/layout/download_manager_image_item.xml
+++ b/chrome/browser/download/android/java/res/layout/download_manager_image_item.xml
@@ -13,7 +13,7 @@
android:clickable="true"
android:background="@color/default_bg_color_secondary" >
- <org.chromium.chrome.browser.download.home.list.view.AsyncImageView
+ <org.chromium.components.browser_ui.widget.async_image.AsyncImageView
android:id="@+id/thumbnail"
android:layout_width="match_parent"
android:background="@color/modern_grey_300"
diff --git a/chrome/browser/download/android/java/res/layout/download_manager_in_progress_video_item.xml b/chrome/browser/download/android/java/res/layout/download_manager_in_progress_video_item.xml
index be6377a..76a5ef0 100644
--- a/chrome/browser/download/android/java/res/layout/download_manager_in_progress_video_item.xml
+++ b/chrome/browser/download/android/java/res/layout/download_manager_in_progress_video_item.xml
@@ -15,7 +15,7 @@
app:rowCount="2">
<!-- Set the src attribute in Java to wrap the drawable properly. -->
- <org.chromium.chrome.browser.download.home.list.view.ForegroundRoundedCornerImageView
+ <org.chromium.components.browser_ui.widget.async_image.ForegroundRoundedCornerImageView
android:id="@+id/thumbnail"
android:layout_width="match_parent"
android:layout_height="200dp"
diff --git a/chrome/browser/download/android/java/res/layout/download_manager_prefetch_article.xml b/chrome/browser/download/android/java/res/layout/download_manager_prefetch_article.xml
index f815ac63..b7e509e 100644
--- a/chrome/browser/download/android/java/res/layout/download_manager_prefetch_article.xml
+++ b/chrome/browser/download/android/java/res/layout/download_manager_prefetch_article.xml
@@ -15,7 +15,7 @@
app:columnCount="4"
app:rowCount="4">
- <org.chromium.chrome.browser.download.home.list.view.AsyncImageView
+ <org.chromium.components.browser_ui.widget.async_image.AsyncImageView
android:id="@+id/thumbnail"
android:layout_width="113dp"
android:layout_height="112dp"
diff --git a/chrome/browser/download/android/java/res/layout/download_manager_prefetch_grouped_item.xml b/chrome/browser/download/android/java/res/layout/download_manager_prefetch_grouped_item.xml
index 9a0351f..46c1dd0 100644
--- a/chrome/browser/download/android/java/res/layout/download_manager_prefetch_grouped_item.xml
+++ b/chrome/browser/download/android/java/res/layout/download_manager_prefetch_grouped_item.xml
@@ -14,7 +14,7 @@
android:background="@drawable/group_card_item_border"
android:paddingStart="@dimen/card_padding">
- <org.chromium.chrome.browser.download.home.list.view.AsyncImageView
+ <org.chromium.components.browser_ui.widget.async_image.AsyncImageView
android:id="@+id/thumbnail"
android:layout_width="80dp"
android:layout_height="80dp"
diff --git a/chrome/browser/download/android/java/res/layout/download_manager_video_item.xml b/chrome/browser/download/android/java/res/layout/download_manager_video_item.xml
index ffad416..3757165 100644
--- a/chrome/browser/download/android/java/res/layout/download_manager_video_item.xml
+++ b/chrome/browser/download/android/java/res/layout/download_manager_video_item.xml
@@ -15,7 +15,7 @@
app:columnCount="1"
app:rowCount="2">
- <org.chromium.chrome.browser.download.home.list.view.AsyncImageView
+ <org.chromium.components.browser_ui.widget.async_image.AsyncImageView
android:id="@+id/thumbnail"
android:layout_width="match_parent"
android:layout_height="200dp"
diff --git a/chrome/browser/download/android/java/res/values-v17/attrs.xml b/chrome/browser/download/android/java/res/values-v17/attrs.xml
index 4b5e921..f8b0349f 100644
--- a/chrome/browser/download/android/java/res/values-v17/attrs.xml
+++ b/chrome/browser/download/android/java/res/values-v17/attrs.xml
@@ -11,13 +11,6 @@
<attr name="pauseSrc" format="reference" />
<attr name="retrySrc" format="reference" />
</declare-styleable>
- <declare-styleable name="AsyncImageView">
- <attr name="unavailableSrc" format="reference" />
- <attr name="waitingSrc" format="reference" />
- </declare-styleable>
- <declare-styleable name="ForegroundRoundedCornerImageView">
- <attr name="foregroundCompat" format="reference" />
- </declare-styleable>
<declare-styleable name="AspectRatioFrameLayout_Layout">
<attr name="layout_aspectRatio" format="fraction" />
</declare-styleable>
diff --git a/chrome/browser/download/android/java/res/values-v17/styles.xml b/chrome/browser/download/android/java/res/values-v17/styles.xml
index bd0ee25..40de5e36 100644
--- a/chrome/browser/download/android/java/res/values-v17/styles.xml
+++ b/chrome/browser/download/android/java/res/values-v17/styles.xml
@@ -71,10 +71,6 @@
<item name="retrySrc">@drawable/ic_refresh_white_36dp</item>
<item name="pauseSrc">@drawable/ic_pause_white_36dp</item>
</style>
- <style name="AsyncImageView">
- <item name="unavailableSrc">@drawable/async_image_view_unavailable</item>
- <item name="waitingSrc">@drawable/async_image_view_waiting</item>
- </style>
<style name="LargeMediaPlayButton">
<item name="android:layout_width">60dp</item>
<item name="android:layout_height">60dp</item>
diff --git a/components/browser_ui/widget/android/BUILD.gn b/components/browser_ui/widget/android/BUILD.gn
index 9436060..f1e5c45 100644
--- a/components/browser_ui/widget/android/BUILD.gn
+++ b/components/browser_ui/widget/android/BUILD.gn
@@ -40,6 +40,10 @@
"java/src/org/chromium/components/browser_ui/widget/animation/CancelAwareAnimatorListener.java",
"java/src/org/chromium/components/browser_ui/widget/animation/FocusAnimator.java",
"java/src/org/chromium/components/browser_ui/widget/animation/Interpolators.java",
+ "java/src/org/chromium/components/browser_ui/widget/async_image/AsyncImageView.java",
+ "java/src/org/chromium/components/browser_ui/widget/async_image/AutoAnimatorDrawable.java",
+ "java/src/org/chromium/components/browser_ui/widget/async_image/ForegroundDrawableCompat.java",
+ "java/src/org/chromium/components/browser_ui/widget/async_image/ForegroundRoundedCornerImageView.java",
"java/src/org/chromium/components/browser_ui/widget/displaystyle/DisplayStyleObserver.java",
"java/src/org/chromium/components/browser_ui/widget/displaystyle/DisplayStyleObserverAdapter.java",
"java/src/org/chromium/components/browser_ui/widget/displaystyle/HorizontalDisplayStyle.java",
@@ -158,6 +162,8 @@
"java/res/drawable-xxxhdpi/ic_check_googblue_24dp.png",
"java/res/drawable-xxxhdpi/ic_more_vert_24dp_on_dark_bg.png",
"java/res/drawable-xxxhdpi/ic_more_vert_24dp_on_light_bg.png",
+ "java/res/drawable/async_image_view_unavailable.xml",
+ "java/res/drawable/async_image_view_waiting.xml",
"java/res/drawable/hairline_border_card_background.xml",
"java/res/drawable/hairline_border_card_dark_transparent_bg.xml",
"java/res/drawable/ic_check_googblue_24dp_animated.xml",
diff --git a/chrome/browser/download/android/java/res/drawable/async_image_view_unavailable.xml b/components/browser_ui/widget/android/java/res/drawable/async_image_view_unavailable.xml
similarity index 100%
rename from chrome/browser/download/android/java/res/drawable/async_image_view_unavailable.xml
rename to components/browser_ui/widget/android/java/res/drawable/async_image_view_unavailable.xml
diff --git a/chrome/browser/download/android/java/res/drawable/async_image_view_waiting.xml b/components/browser_ui/widget/android/java/res/drawable/async_image_view_waiting.xml
similarity index 100%
rename from chrome/browser/download/android/java/res/drawable/async_image_view_waiting.xml
rename to components/browser_ui/widget/android/java/res/drawable/async_image_view_waiting.xml
diff --git a/components/browser_ui/widget/android/java/res/values/attrs.xml b/components/browser_ui/widget/android/java/res/values/attrs.xml
index 2b99cc7e..88126ce 100644
--- a/components/browser_ui/widget/android/java/res/values/attrs.xml
+++ b/components/browser_ui/widget/android/java/res/values/attrs.xml
@@ -30,6 +30,15 @@
<attr name="menuBackground" format="reference" />
</declare-styleable>
+ <declare-styleable name="AsyncImageView">
+ <attr name="unavailableSrc" format="reference" />
+ <attr name="waitingSrc" format="reference" />
+ </declare-styleable>
+
+ <declare-styleable name="ForegroundRoundedCornerImageView">
+ <attr name="foregroundCompat" format="reference" />
+ </declare-styleable>
+
<declare-styleable name="MaterialProgressBar">
<attr name="colorBackground" format="reference|color" />
<attr name="colorProgress" format="reference|color" />
diff --git a/components/browser_ui/widget/android/java/res/values/styles.xml b/components/browser_ui/widget/android/java/res/values/styles.xml
index d47401d3..1e6d292 100644
--- a/components/browser_ui/widget/android/java/res/values/styles.xml
+++ b/components/browser_ui/widget/android/java/res/values/styles.xml
@@ -84,6 +84,11 @@
<item name="android:windowExitAnimation">@anim/textbubble_out</item>
</style>
+ <style name="AsyncImageView">
+ <item name="unavailableSrc">@drawable/async_image_view_unavailable</item>
+ <item name="waitingSrc">@drawable/async_image_view_waiting</item>
+ </style>
+
<style name="ChipAnimation">
<item name="android:windowEnterAnimation">@anim/chip_in</item>
<item name="android:windowExitAnimation">@anim/chip_out</item>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/AsyncImageView.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/AsyncImageView.java
similarity index 97%
rename from chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/AsyncImageView.java
rename to components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/AsyncImageView.java
index aef0737..88df1865 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/AsyncImageView.java
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/AsyncImageView.java
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-package org.chromium.chrome.browser.download.home.list.view;
+package org.chromium.components.browser_ui.widget.async_image;
import android.content.Context;
import android.content.res.TypedArray;
@@ -12,7 +12,8 @@
import androidx.annotation.Nullable;
import org.chromium.base.Callback;
-import org.chromium.chrome.browser.download.R;
+import org.chromium.components.browser_ui.widget.R;
+import org.chromium.ui.UiUtils;
/**
* Helper class to handle asynchronously loading an image and displaying it when ready. This class
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/AutoAnimatorDrawable.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/AutoAnimatorDrawable.java
similarity index 96%
rename from chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/AutoAnimatorDrawable.java
rename to components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/AutoAnimatorDrawable.java
index 562eeab..4abada25 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/AutoAnimatorDrawable.java
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/AutoAnimatorDrawable.java
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-package org.chromium.chrome.browser.download.home.list.view;
+package org.chromium.components.browser_ui.widget.async_image;
import android.annotation.TargetApi;
import android.graphics.drawable.Animatable;
@@ -13,14 +13,13 @@
import android.graphics.drawable.RotateDrawable;
import android.graphics.drawable.ScaleDrawable;
import android.os.Build;
+import android.os.Handler;
+import android.os.Looper;
import androidx.annotation.Nullable;
import androidx.appcompat.graphics.drawable.DrawableWrapper;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
-import org.chromium.base.task.PostTask;
-import org.chromium.content_public.browser.UiThreadTaskTraits;
-
import java.util.concurrent.atomic.AtomicBoolean;
/**
@@ -151,11 +150,13 @@
}
private static final class AutoRestarterCompat extends Animatable2Compat.AnimationCallback {
+ private final Handler mHandler = new Handler(Looper.getMainLooper());
+
// Animatable2Compat.AnimationCallback implementation.
@Override
public void onAnimationEnd(Drawable drawable) {
if (!(drawable instanceof Animatable)) return;
- PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> {
+ mHandler.post(() -> {
if (drawable.isVisible()) ((Animatable) drawable).start();
});
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/ForegroundDrawableCompat.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/ForegroundDrawableCompat.java
similarity index 98%
rename from chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/ForegroundDrawableCompat.java
rename to components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/ForegroundDrawableCompat.java
index e40315f..2b2b1b65 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/ForegroundDrawableCompat.java
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/ForegroundDrawableCompat.java
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-package org.chromium.chrome.browser.download.home.list.view;
+package org.chromium.components.browser_ui.widget.async_image;
import android.graphics.Canvas;
import android.graphics.Matrix;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/ForegroundRoundedCornerImageView.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/ForegroundRoundedCornerImageView.java
similarity index 92%
rename from chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/ForegroundRoundedCornerImageView.java
rename to components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/ForegroundRoundedCornerImageView.java
index 02d1b5f..78282cb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/view/ForegroundRoundedCornerImageView.java
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/async_image/ForegroundRoundedCornerImageView.java
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-package org.chromium.chrome.browser.download.home.list.view;
+package org.chromium.components.browser_ui.widget.async_image;
import android.content.Context;
import android.content.res.TypedArray;
@@ -12,8 +12,9 @@
import android.view.View;
import android.widget.ImageView;
-import org.chromium.chrome.browser.download.R;
+import org.chromium.components.browser_ui.widget.R;
import org.chromium.components.browser_ui.widget.RoundedCornerImageView;
+import org.chromium.ui.UiUtils;
/** Helper class that adds foreground drawable support to {@code RoundedCornerImageView}. */
public class ForegroundRoundedCornerImageView extends RoundedCornerImageView {
@@ -38,7 +39,7 @@
TypedArray types = attrs == null
? null
: context.obtainStyledAttributes(
- attrs, R.styleable.ForegroundRoundedCornerImageView, 0, 0);
+ attrs, R.styleable.ForegroundRoundedCornerImageView, 0, 0);
mForegroundHelper.setDrawable(AutoAnimatorDrawable.wrap(UiUtils.getDrawable(
context, types, R.styleable.ForegroundRoundedCornerImageView_foregroundCompat)));
diff --git a/ui/android/java/src/org/chromium/ui/UiUtils.java b/ui/android/java/src/org/chromium/ui/UiUtils.java
index a661f43..ad07528 100644
--- a/ui/android/java/src/org/chromium/ui/UiUtils.java
+++ b/ui/android/java/src/org/chromium/ui/UiUtils.java
@@ -6,6 +6,7 @@
import android.content.Context;
import android.content.res.Configuration;
+import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Typeface;
@@ -27,6 +28,8 @@
import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StyleableRes;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.appcompat.content.res.AppCompatResources;
@@ -347,6 +350,24 @@
}
/**
+ * Loads a {@link Drawable} from an attribute. Uses {@link AppCompatResources} to support all
+ * modern {@link Drawable} types.
+ * @param context The associated context.
+ * @param attrs The attributes from which to load the drawable resource.
+ * @param attrId The attribute id that holds the drawable resource.
+ * @return A new {@link Drawable} or {@code null} if the attribute wasn't set.
+ */
+ public static @Nullable Drawable getDrawable(
+ Context context, @Nullable TypedArray attrs, @StyleableRes int attrId) {
+ if (attrs == null) return null;
+
+ @DrawableRes
+ int resId = attrs.getResourceId(attrId, -1);
+ if (resId == -1) return null;
+ return AppCompatResources.getDrawable(context, resId);
+ }
+
+ /**
* Gets a drawable from the resources and applies the specified tint to it. Uses Support Library
* for vector drawables and tinting on older Android versions.
* @param drawableId The resource id for the drawable.