diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-01-17 21:41:46 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-01-17 21:41:46 +0000 |
commit | d05b1ec10ab5a6e5e47f3fb73579b411998273f0 (patch) | |
tree | 63a1f2506d9bac9b475d73e93a84cb274684e25b | |
parent | d930437977a6328d69e3a8c8f291311a136716d6 (diff) | |
parent | 31829c58712bfd8da8840c8ba3a8b41778cb7f48 (diff) | |
download | base-d05b1ec10ab5a6e5e47f3fb73579b411998273f0.tar.gz |
Merge "Snap for 11323814 from 83b74c074b815fd410ba0c009f7e7355b4822a9e to android14-tests-release" into android14-tests-release
4 files changed, 45 insertions, 47 deletions
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java index 27f6a266597c..ec181dac6b36 100644 --- a/core/java/android/appwidget/AppWidgetHostView.java +++ b/core/java/android/appwidget/AppWidgetHostView.java @@ -156,6 +156,22 @@ public class AppWidgetHostView extends FrameLayout implements AppWidgetHost.AppW } /** + * @hide + */ + public static class AdapterChildHostView extends AppWidgetHostView { + + public AdapterChildHostView(Context context) { + super(context); + } + + @Override + public Context getRemoteContextEnsuringCorrectCachedApkPath() { + // To reduce noise in error messages + return null; + } + } + + /** * Set the AppWidget that will be displayed by this view. This method also adds default padding * to widgets, as described in {@link #getDefaultPaddingForWidget(Context, ComponentName, Rect)} * and can be overridden in order to add custom padding. @@ -921,17 +937,31 @@ public class AppWidgetHostView extends FrameLayout implements AppWidgetHost.AppW setColorResources(RemoteViews.ColorResources.create(mContext, colorMapping)); } + private void setColorResourcesStates(RemoteViews.ColorResources colorResources) { + mColorResources = colorResources; + mColorMappingChanged = true; + mViewMode = VIEW_MODE_NOINIT; + } + /** @hide **/ public void setColorResources(RemoteViews.ColorResources colorResources) { if (colorResources == mColorResources) { return; } - mColorResources = colorResources; - mColorMappingChanged = true; - mViewMode = VIEW_MODE_NOINIT; + setColorResourcesStates(colorResources); reapplyLastRemoteViews(); } + /** + * @hide + */ + public void setColorResourcesNoReapply(RemoteViews.ColorResources colorResources) { + if (colorResources == mColorResources) { + return; + } + setColorResourcesStates(colorResources); + } + /** Check if, in the current context, the two color mappings are equivalent. */ private boolean isSameColorMapping(SparseIntArray oldColors, SparseIntArray newColors) { if (oldColors.size() != newColors.size()) { diff --git a/core/java/android/widget/RemoteCollectionItemsAdapter.java b/core/java/android/widget/RemoteCollectionItemsAdapter.java index d84330828bf7..9b396aeea9eb 100644 --- a/core/java/android/widget/RemoteCollectionItemsAdapter.java +++ b/core/java/android/widget/RemoteCollectionItemsAdapter.java @@ -18,6 +18,7 @@ package android.widget; import android.annotation.NonNull; import android.annotation.Nullable; +import android.appwidget.AppWidgetHostView; import android.util.SparseIntArray; import android.view.View; import android.view.ViewGroup; @@ -25,8 +26,6 @@ import android.widget.RemoteViews.ColorResources; import android.widget.RemoteViews.InteractionHandler; import android.widget.RemoteViews.RemoteCollectionItems; -import com.android.internal.R; - import java.util.stream.IntStream; /** @@ -178,40 +177,14 @@ class RemoteCollectionItemsAdapter extends BaseAdapter { RemoteViews item = mItems.getItemView(position); item.addFlags(RemoteViews.FLAG_WIDGET_IS_COLLECTION_CHILD); - View reapplyView = getViewToReapply(convertView, item); - - // Reapply the RemoteViews if we can. - if (reapplyView != null) { - try { - item.reapply( - parent.getContext(), - reapplyView, - mInteractionHandler, - null /* size */, - mColorResources); - return reapplyView; - } catch (RuntimeException e) { - // We can't reapply for some reason, we'll fallback to an apply and inflate a - // new view. - } - } - - return item.apply( - parent.getContext(), - parent, - mInteractionHandler, - null /* size */, - mColorResources); - } - - /** Returns {@code convertView} if it can be used to reapply {@code item}, or null otherwise. */ - @Nullable - private static View getViewToReapply(@Nullable View convertView, @NonNull RemoteViews item) { - if (convertView == null) return null; - - Object layoutIdTag = convertView.getTag(R.id.widget_frame); - if (!(layoutIdTag instanceof Integer)) return null; - return item.getLayoutId() == (Integer) layoutIdTag ? convertView : null; + AppWidgetHostView newView = convertView instanceof AppWidgetHostView.AdapterChildHostView + widgetChildView + ? widgetChildView + : new AppWidgetHostView.AdapterChildHostView(parent.getContext()); + newView.setInteractionHandler(mInteractionHandler); + newView.setColorResourcesNoReapply(mColorResources); + newView.updateAppWidget(item); + return newView; } } diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 7f96266a1f69..87e163a068bf 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -6687,13 +6687,13 @@ public class RemoteViews implements Parcelable, Filter { View parent = (View) view.getParent(); // Break the for loop on the first encounter of: // 1) an AdapterView, - // 2) an AppWidgetHostView that is not a RemoteViewsFrameLayout, or + // 2) an AppWidgetHostView that is not a child of an adapter view, or // 3) a null parent. // 2) and 3) are unexpected and catch the case where a child is not // correctly parented in an AdapterView. while (parent != null && !(parent instanceof AdapterView<?>) && !((parent instanceof AppWidgetHostView) - && !(parent instanceof RemoteViewsAdapter.RemoteViewsFrameLayout))) { + && !(parent instanceof AppWidgetHostView.AdapterChildHostView))) { parent = (View) parent.getParent(); } diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java index 61a7599e8f73..2f28a8704cd3 100644 --- a/core/java/android/widget/RemoteViewsAdapter.java +++ b/core/java/android/widget/RemoteViewsAdapter.java @@ -368,7 +368,7 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback * A FrameLayout which contains a loading view, and manages the re/applying of RemoteViews when * they are loaded. */ - static class RemoteViewsFrameLayout extends AppWidgetHostView { + static class RemoteViewsFrameLayout extends AppWidgetHostView.AdapterChildHostView { private final FixedSizeRemoteViewsCache mCache; public int cacheIndex = -1; @@ -408,11 +408,6 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback } @Override - protected Context getRemoteContextEnsuringCorrectCachedApkPath() { - return null; - } - - @Override protected View getErrorView() { // Use the default loading view as the error view. return getDefaultView(); |