Loading core/api/current.txt +6 −1 Original line number Diff line number Diff line Loading @@ -8309,6 +8309,7 @@ package android.appwidget { public class AppWidgetHostView extends android.widget.FrameLayout { ctor public AppWidgetHostView(android.content.Context); ctor public AppWidgetHostView(android.content.Context, int, int); method public void clearCurrentSize(); method public int getAppWidgetId(); method public android.appwidget.AppWidgetProviderInfo getAppWidgetInfo(); method public static android.graphics.Rect getDefaultPaddingForWidget(android.content.Context, android.content.ComponentName, android.graphics.Rect); Loading @@ -8316,11 +8317,13 @@ package android.appwidget { method protected android.view.View getErrorView(); method protected void prepareView(android.view.View); method public void setAppWidget(int, android.appwidget.AppWidgetProviderInfo); method public void setCurrentSize(@NonNull android.graphics.PointF); method public void setExecutor(java.util.concurrent.Executor); method public void setOnLightBackground(boolean); method public void updateAppWidget(android.widget.RemoteViews); method public void updateAppWidgetOptions(android.os.Bundle); method public void updateAppWidgetSize(android.os.Bundle, int, int, int, int); method @Deprecated public void updateAppWidgetSize(android.os.Bundle, int, int, int, int); method public void updateAppWidgetSize(@NonNull android.os.Bundle, @NonNull java.util.List<android.graphics.PointF>); } public class AppWidgetManager { Loading Loading @@ -8373,6 +8376,7 @@ package android.appwidget { field public static final String OPTION_APPWIDGET_MIN_HEIGHT = "appWidgetMinHeight"; field public static final String OPTION_APPWIDGET_MIN_WIDTH = "appWidgetMinWidth"; field public static final String OPTION_APPWIDGET_RESTORE_COMPLETED = "appWidgetRestoreCompleted"; field public static final String OPTION_APPWIDGET_SIZES = "appWidgetSizes"; } public class AppWidgetProvider extends android.content.BroadcastReceiver { Loading Loading @@ -54649,6 +54653,7 @@ package android.widget { public class RemoteViews implements android.view.LayoutInflater.Filter android.os.Parcelable { ctor public RemoteViews(String, int); ctor public RemoteViews(android.widget.RemoteViews, android.widget.RemoteViews); ctor public RemoteViews(@NonNull java.util.Map<android.graphics.PointF,android.widget.RemoteViews>); ctor public RemoteViews(android.widget.RemoteViews); ctor public RemoteViews(android.os.Parcel); method public void addView(@IdRes int, android.widget.RemoteViews); core/java/android/appwidget/AppWidgetHostView.java +99 −6 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.appwidget; import android.annotation.NonNull; import android.app.Activity; import android.app.ActivityOptions; import android.compat.annotation.UnsupportedAppUsage; Loading @@ -29,6 +30,7 @@ import android.content.pm.LauncherApps; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.graphics.Color; import android.graphics.PointF; import android.graphics.Rect; import android.os.Build; import android.os.Bundle; Loading @@ -53,6 +55,7 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; /** Loading Loading @@ -89,6 +92,7 @@ public class AppWidgetHostView extends FrameLayout { int mLayoutId = -1; private OnClickHandler mOnClickHandler; private boolean mOnLightBackground; PointF mCurrentSize = null; private Executor mAsyncExecutor; private CancellationSignal mLastExecutionSignal; Loading Loading @@ -268,7 +272,8 @@ public class AppWidgetHostView extends FrameLayout { * Provide guidance about the size of this widget to the AppWidgetManager. The widths and * heights should correspond to the full area the AppWidgetHostView is given. Padding added by * the framework will be accounted for automatically. This information gets embedded into the * AppWidget options and causes a callback to the AppWidgetProvider. * AppWidget options and causes a callback to the AppWidgetProvider. In addition, the list of * sizes is explicitly set to an empty list. * @see AppWidgetProvider#onAppWidgetOptionsChanged(Context, AppWidgetManager, int, Bundle) * * @param newOptions The bundle of options, in addition to the size information, Loading @@ -277,13 +282,96 @@ public class AppWidgetHostView extends FrameLayout { * @param minHeight The maximum height in dips that the widget will be displayed at. * @param maxWidth The maximum width in dips that the widget will be displayed at. * @param maxHeight The maximum height in dips that the widget will be displayed at. * * @deprecated use {@link AppWidgetHostView#updateAppWidgetSize(Bundle, List)} instead. */ @Deprecated public void updateAppWidgetSize(Bundle newOptions, int minWidth, int minHeight, int maxWidth, int maxHeight) { updateAppWidgetSize(newOptions, minWidth, minHeight, maxWidth, maxHeight, false); } /** * Provide guidance about the size of this widget to the AppWidgetManager. The sizes should * correspond to the full area the AppWidgetHostView is given. Padding added by the framework * will be accounted for automatically. * * This method will update the option bundle with the list of sizes and the min/max bounds for * width and height. * * @see AppWidgetProvider#onAppWidgetOptionsChanged(Context, AppWidgetManager, int, Bundle) * * @param newOptions The bundle of options, in addition to the size information. * @param sizes Sizes, in dips, the widget may be displayed at without calling the provider * again. Typically, this will be size of the widget in landscape and portrait. * On some foldables, this might include the size on the outer and inner screens. */ public void updateAppWidgetSize(@NonNull Bundle newOptions, @NonNull List<PointF> sizes) { AppWidgetManager widgetManager = AppWidgetManager.getInstance(mContext); Rect padding = getDefaultPadding(); float density = getResources().getDisplayMetrics().density; float xPaddingDips = (padding.left + padding.right) / density; float yPaddingDips = (padding.top + padding.bottom) / density; ArrayList<PointF> paddedSizes = new ArrayList<>(sizes.size()); float minWidth = Float.MAX_VALUE; float maxWidth = 0; float minHeight = Float.MAX_VALUE; float maxHeight = 0; for (int i = 0; i < sizes.size(); i++) { PointF size = sizes.get(i); PointF paddedPoint = new PointF(Math.max(0.f, size.x - xPaddingDips), Math.max(0.f, size.y - yPaddingDips)); paddedSizes.add(paddedPoint); minWidth = Math.min(minWidth, paddedPoint.x); maxWidth = Math.max(maxWidth, paddedPoint.x); minHeight = Math.min(minHeight, paddedPoint.y); maxHeight = Math.max(maxHeight, paddedPoint.y); } if (paddedSizes.equals( widgetManager.getAppWidgetOptions(mAppWidgetId).<PointF>getParcelableArrayList( AppWidgetManager.OPTION_APPWIDGET_SIZES))) { return; } Bundle options = newOptions.deepCopy(); options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, (int) minWidth); options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, (int) minHeight); options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, (int) maxWidth); options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, (int) maxHeight); options.putParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES, paddedSizes); updateAppWidgetOptions(options); } /** * Set the current size of the widget. This should be the full area the AppWidgetHostView is * given. Padding added by the framework will be accounted for automatically. * * This size will be used to choose the appropriate layout the next time the {@link RemoteViews} * is re-inflated, if it was created with {@link RemoteViews#RemoteViews(Map)} . */ public void setCurrentSize(@NonNull PointF size) { Rect padding = getDefaultPadding(); float density = getResources().getDisplayMetrics().density; float xPaddingDips = (padding.left + padding.right) / density; float yPaddingDips = (padding.top + padding.bottom) / density; PointF newSize = new PointF(size.x - xPaddingDips, size.y - yPaddingDips); if (!newSize.equals(mCurrentSize)) { mCurrentSize = newSize; mLayoutId = -1; // Prevents recycling the view. } } /** * Clear the current size, indicating it is not currently known. */ public void clearCurrentSize() { if (mCurrentSize != null) { mCurrentSize = null; mLayoutId = -1; } } /** * @hide */ Loading Loading @@ -322,6 +410,8 @@ public class AppWidgetHostView extends FrameLayout { newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, newMinHeight); newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, newMaxWidth); newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, newMaxHeight); newOptions.putParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES, new ArrayList<PointF>()); updateAppWidgetOptions(newOptions); } } Loading Loading @@ -440,7 +530,7 @@ public class AppWidgetHostView extends FrameLayout { // Try normal RemoteView inflation if (content == null) { try { content = remoteViews.apply(mContext, this, mOnClickHandler); content = remoteViews.apply(mContext, this, mOnClickHandler, mCurrentSize); if (LOGD) Log.d(TAG, "had to inflate new layout"); } catch (RuntimeException e) { exception = e; Loading Loading @@ -492,7 +582,8 @@ public class AppWidgetHostView extends FrameLayout { mView, mAsyncExecutor, new ViewApplyListener(remoteViews, layoutId, true), mOnClickHandler); mOnClickHandler, mCurrentSize); } catch (Exception e) { // Reapply failed. Try apply } Loading @@ -502,7 +593,8 @@ public class AppWidgetHostView extends FrameLayout { this, mAsyncExecutor, new ViewApplyListener(remoteViews, layoutId, false), mOnClickHandler); mOnClickHandler, mCurrentSize); } } Loading Loading @@ -533,7 +625,8 @@ public class AppWidgetHostView extends FrameLayout { AppWidgetHostView.this, mAsyncExecutor, new ViewApplyListener(mViews, mLayoutId, false), mOnClickHandler); mOnClickHandler, mCurrentSize); } else { applyContent(null, false, e); } Loading core/java/android/appwidget/AppWidgetManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -216,6 +216,12 @@ public class AppWidgetManager { */ public static final String OPTION_APPWIDGET_MAX_HEIGHT = "appWidgetMaxHeight"; /** * A bundle extra ({@code List<PointF>}) that contains the list of possible sizes, in dips, a * widget instance can take. */ public static final String OPTION_APPWIDGET_SIZES = "appWidgetSizes"; /** * A bundle extra that hints to the AppWidgetProvider the category of host that owns this * this widget. Can have the value {@link Loading core/java/android/widget/RemoteViews.java +308 −33 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
core/api/current.txt +6 −1 Original line number Diff line number Diff line Loading @@ -8309,6 +8309,7 @@ package android.appwidget { public class AppWidgetHostView extends android.widget.FrameLayout { ctor public AppWidgetHostView(android.content.Context); ctor public AppWidgetHostView(android.content.Context, int, int); method public void clearCurrentSize(); method public int getAppWidgetId(); method public android.appwidget.AppWidgetProviderInfo getAppWidgetInfo(); method public static android.graphics.Rect getDefaultPaddingForWidget(android.content.Context, android.content.ComponentName, android.graphics.Rect); Loading @@ -8316,11 +8317,13 @@ package android.appwidget { method protected android.view.View getErrorView(); method protected void prepareView(android.view.View); method public void setAppWidget(int, android.appwidget.AppWidgetProviderInfo); method public void setCurrentSize(@NonNull android.graphics.PointF); method public void setExecutor(java.util.concurrent.Executor); method public void setOnLightBackground(boolean); method public void updateAppWidget(android.widget.RemoteViews); method public void updateAppWidgetOptions(android.os.Bundle); method public void updateAppWidgetSize(android.os.Bundle, int, int, int, int); method @Deprecated public void updateAppWidgetSize(android.os.Bundle, int, int, int, int); method public void updateAppWidgetSize(@NonNull android.os.Bundle, @NonNull java.util.List<android.graphics.PointF>); } public class AppWidgetManager { Loading Loading @@ -8373,6 +8376,7 @@ package android.appwidget { field public static final String OPTION_APPWIDGET_MIN_HEIGHT = "appWidgetMinHeight"; field public static final String OPTION_APPWIDGET_MIN_WIDTH = "appWidgetMinWidth"; field public static final String OPTION_APPWIDGET_RESTORE_COMPLETED = "appWidgetRestoreCompleted"; field public static final String OPTION_APPWIDGET_SIZES = "appWidgetSizes"; } public class AppWidgetProvider extends android.content.BroadcastReceiver { Loading Loading @@ -54649,6 +54653,7 @@ package android.widget { public class RemoteViews implements android.view.LayoutInflater.Filter android.os.Parcelable { ctor public RemoteViews(String, int); ctor public RemoteViews(android.widget.RemoteViews, android.widget.RemoteViews); ctor public RemoteViews(@NonNull java.util.Map<android.graphics.PointF,android.widget.RemoteViews>); ctor public RemoteViews(android.widget.RemoteViews); ctor public RemoteViews(android.os.Parcel); method public void addView(@IdRes int, android.widget.RemoteViews);
core/java/android/appwidget/AppWidgetHostView.java +99 −6 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.appwidget; import android.annotation.NonNull; import android.app.Activity; import android.app.ActivityOptions; import android.compat.annotation.UnsupportedAppUsage; Loading @@ -29,6 +30,7 @@ import android.content.pm.LauncherApps; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.graphics.Color; import android.graphics.PointF; import android.graphics.Rect; import android.os.Build; import android.os.Bundle; Loading @@ -53,6 +55,7 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; /** Loading Loading @@ -89,6 +92,7 @@ public class AppWidgetHostView extends FrameLayout { int mLayoutId = -1; private OnClickHandler mOnClickHandler; private boolean mOnLightBackground; PointF mCurrentSize = null; private Executor mAsyncExecutor; private CancellationSignal mLastExecutionSignal; Loading Loading @@ -268,7 +272,8 @@ public class AppWidgetHostView extends FrameLayout { * Provide guidance about the size of this widget to the AppWidgetManager. The widths and * heights should correspond to the full area the AppWidgetHostView is given. Padding added by * the framework will be accounted for automatically. This information gets embedded into the * AppWidget options and causes a callback to the AppWidgetProvider. * AppWidget options and causes a callback to the AppWidgetProvider. In addition, the list of * sizes is explicitly set to an empty list. * @see AppWidgetProvider#onAppWidgetOptionsChanged(Context, AppWidgetManager, int, Bundle) * * @param newOptions The bundle of options, in addition to the size information, Loading @@ -277,13 +282,96 @@ public class AppWidgetHostView extends FrameLayout { * @param minHeight The maximum height in dips that the widget will be displayed at. * @param maxWidth The maximum width in dips that the widget will be displayed at. * @param maxHeight The maximum height in dips that the widget will be displayed at. * * @deprecated use {@link AppWidgetHostView#updateAppWidgetSize(Bundle, List)} instead. */ @Deprecated public void updateAppWidgetSize(Bundle newOptions, int minWidth, int minHeight, int maxWidth, int maxHeight) { updateAppWidgetSize(newOptions, minWidth, minHeight, maxWidth, maxHeight, false); } /** * Provide guidance about the size of this widget to the AppWidgetManager. The sizes should * correspond to the full area the AppWidgetHostView is given. Padding added by the framework * will be accounted for automatically. * * This method will update the option bundle with the list of sizes and the min/max bounds for * width and height. * * @see AppWidgetProvider#onAppWidgetOptionsChanged(Context, AppWidgetManager, int, Bundle) * * @param newOptions The bundle of options, in addition to the size information. * @param sizes Sizes, in dips, the widget may be displayed at without calling the provider * again. Typically, this will be size of the widget in landscape and portrait. * On some foldables, this might include the size on the outer and inner screens. */ public void updateAppWidgetSize(@NonNull Bundle newOptions, @NonNull List<PointF> sizes) { AppWidgetManager widgetManager = AppWidgetManager.getInstance(mContext); Rect padding = getDefaultPadding(); float density = getResources().getDisplayMetrics().density; float xPaddingDips = (padding.left + padding.right) / density; float yPaddingDips = (padding.top + padding.bottom) / density; ArrayList<PointF> paddedSizes = new ArrayList<>(sizes.size()); float minWidth = Float.MAX_VALUE; float maxWidth = 0; float minHeight = Float.MAX_VALUE; float maxHeight = 0; for (int i = 0; i < sizes.size(); i++) { PointF size = sizes.get(i); PointF paddedPoint = new PointF(Math.max(0.f, size.x - xPaddingDips), Math.max(0.f, size.y - yPaddingDips)); paddedSizes.add(paddedPoint); minWidth = Math.min(minWidth, paddedPoint.x); maxWidth = Math.max(maxWidth, paddedPoint.x); minHeight = Math.min(minHeight, paddedPoint.y); maxHeight = Math.max(maxHeight, paddedPoint.y); } if (paddedSizes.equals( widgetManager.getAppWidgetOptions(mAppWidgetId).<PointF>getParcelableArrayList( AppWidgetManager.OPTION_APPWIDGET_SIZES))) { return; } Bundle options = newOptions.deepCopy(); options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, (int) minWidth); options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, (int) minHeight); options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, (int) maxWidth); options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, (int) maxHeight); options.putParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES, paddedSizes); updateAppWidgetOptions(options); } /** * Set the current size of the widget. This should be the full area the AppWidgetHostView is * given. Padding added by the framework will be accounted for automatically. * * This size will be used to choose the appropriate layout the next time the {@link RemoteViews} * is re-inflated, if it was created with {@link RemoteViews#RemoteViews(Map)} . */ public void setCurrentSize(@NonNull PointF size) { Rect padding = getDefaultPadding(); float density = getResources().getDisplayMetrics().density; float xPaddingDips = (padding.left + padding.right) / density; float yPaddingDips = (padding.top + padding.bottom) / density; PointF newSize = new PointF(size.x - xPaddingDips, size.y - yPaddingDips); if (!newSize.equals(mCurrentSize)) { mCurrentSize = newSize; mLayoutId = -1; // Prevents recycling the view. } } /** * Clear the current size, indicating it is not currently known. */ public void clearCurrentSize() { if (mCurrentSize != null) { mCurrentSize = null; mLayoutId = -1; } } /** * @hide */ Loading Loading @@ -322,6 +410,8 @@ public class AppWidgetHostView extends FrameLayout { newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, newMinHeight); newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, newMaxWidth); newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, newMaxHeight); newOptions.putParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES, new ArrayList<PointF>()); updateAppWidgetOptions(newOptions); } } Loading Loading @@ -440,7 +530,7 @@ public class AppWidgetHostView extends FrameLayout { // Try normal RemoteView inflation if (content == null) { try { content = remoteViews.apply(mContext, this, mOnClickHandler); content = remoteViews.apply(mContext, this, mOnClickHandler, mCurrentSize); if (LOGD) Log.d(TAG, "had to inflate new layout"); } catch (RuntimeException e) { exception = e; Loading Loading @@ -492,7 +582,8 @@ public class AppWidgetHostView extends FrameLayout { mView, mAsyncExecutor, new ViewApplyListener(remoteViews, layoutId, true), mOnClickHandler); mOnClickHandler, mCurrentSize); } catch (Exception e) { // Reapply failed. Try apply } Loading @@ -502,7 +593,8 @@ public class AppWidgetHostView extends FrameLayout { this, mAsyncExecutor, new ViewApplyListener(remoteViews, layoutId, false), mOnClickHandler); mOnClickHandler, mCurrentSize); } } Loading Loading @@ -533,7 +625,8 @@ public class AppWidgetHostView extends FrameLayout { AppWidgetHostView.this, mAsyncExecutor, new ViewApplyListener(mViews, mLayoutId, false), mOnClickHandler); mOnClickHandler, mCurrentSize); } else { applyContent(null, false, e); } Loading
core/java/android/appwidget/AppWidgetManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -216,6 +216,12 @@ public class AppWidgetManager { */ public static final String OPTION_APPWIDGET_MAX_HEIGHT = "appWidgetMaxHeight"; /** * A bundle extra ({@code List<PointF>}) that contains the list of possible sizes, in dips, a * widget instance can take. */ public static final String OPTION_APPWIDGET_SIZES = "appWidgetSizes"; /** * A bundle extra that hints to the AppWidgetProvider the category of host that owns this * this widget. Can have the value {@link Loading
core/java/android/widget/RemoteViews.java +308 −33 File changed.Preview size limit exceeded, changes collapsed. Show changes