diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index b30d7234d7ba5..f5eeeca6fa0c7 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -3183,8 +3183,8 @@ public class Notification implements Parcelable } private void resetContentMargins(RemoteViews contentView) { - contentView.setViewLayoutMarginEnd(R.id.line1, 0); - contentView.setViewLayoutMarginEnd(R.id.text, 0); + contentView.setViewLayoutMarginEndDimen(R.id.line1, 0); + contentView.setViewLayoutMarginEndDimen(R.id.text, 0); } private RemoteViews applyStandardTemplate(int resId) { @@ -3278,11 +3278,10 @@ public class Notification implements Parcelable contentView.setViewVisibility(R.id.right_icon, View.VISIBLE); contentView.setImageViewIcon(R.id.right_icon, mN.mLargeIcon); processLargeLegacyIcon(mN.mLargeIcon, contentView); - int endMargin = mContext.getResources().getDimensionPixelSize( - R.dimen.notification_content_picture_margin); - contentView.setViewLayoutMarginEnd(R.id.line1, endMargin); - contentView.setViewLayoutMarginEnd(R.id.text, endMargin); - contentView.setViewLayoutMarginEnd(R.id.progress, endMargin); + int endMargin = R.dimen.notification_content_picture_margin; + contentView.setViewLayoutMarginEndDimen(R.id.line1, endMargin); + contentView.setViewLayoutMarginEndDimen(R.id.text, endMargin); + contentView.setViewLayoutMarginEndDimen(R.id.progress, endMargin); } } @@ -4616,9 +4615,8 @@ public class Notification implements Parcelable } int i=0; - int titlePadding = mBuilder.mContext.getResources().getDimensionPixelSize( - R.dimen.notification_messaging_spacing); - contentView.setViewLayoutMarginBottom(R.id.line1, hasTitle ? titlePadding : 0); + contentView.setViewLayoutMarginBottomDimen(R.id.line1, + hasTitle ? R.dimen.notification_messaging_spacing : 0); contentView.setInt(R.id.notification_messaging, "setNumIndentLines", mBuilder.mN.mLargeIcon == null ? 0 : (hasTitle ? 1 : 2)); @@ -4994,11 +4992,10 @@ public class Notification implements Parcelable final boolean ind = mBuilder.mN.extras.getBoolean(EXTRA_PROGRESS_INDETERMINATE); boolean hasProgress = max != 0 || ind; if (mBuilder.mN.mLargeIcon != null && !hasProgress) { - endMargin = mBuilder.mContext.getResources().getDimensionPixelSize( - R.dimen.notification_content_picture_margin); + endMargin = R.dimen.notification_content_picture_margin; } } - contentView.setViewLayoutMarginEnd(id, endMargin); + contentView.setViewLayoutMarginEndDimen(id, endMargin); } } @@ -5183,13 +5180,11 @@ public class Notification implements Parcelable } handleImage(view); // handle the content margin - int endMargin = mBuilder.mContext.getResources().getDimensionPixelSize( - R.dimen.notification_content_margin_end);; + int endMargin = R.dimen.notification_content_margin_end; if (mBuilder.mN.mLargeIcon != null) { - endMargin += mBuilder.mContext.getResources().getDimensionPixelSize( - R.dimen.notification_content_picture_margin); + endMargin = R.dimen.notification_content_plus_picture_margin_end; } - view.setViewLayoutMarginEnd(R.id.notification_main_column, endMargin); + view.setViewLayoutMarginEndDimen(R.id.notification_main_column, endMargin); return view; } @@ -5220,8 +5215,8 @@ public class Notification implements Parcelable private void handleImage(RemoteViews contentView) { if (mBuilder.mN.mLargeIcon != null) { - contentView.setViewLayoutMarginEnd(R.id.line1, 0); - contentView.setViewLayoutMarginEnd(R.id.text, 0); + contentView.setViewLayoutMarginEndDimen(R.id.line1, 0); + contentView.setViewLayoutMarginEndDimen(R.id.text, 0); } } @@ -5336,13 +5331,11 @@ public class Notification implements Parcelable remoteViews.addView(R.id.notification_main_column, customContent); } // also update the end margin if there is an image - int endMargin = mBuilder.mContext.getResources().getDimensionPixelSize( - R.dimen.notification_content_margin_end); + int endMargin = R.dimen.notification_content_margin_end; if (mBuilder.mN.mLargeIcon != null) { - endMargin += mBuilder.mContext.getResources().getDimensionPixelSize( - R.dimen.notification_content_picture_margin); + endMargin = R.dimen.notification_content_plus_picture_margin_end; } - remoteViews.setViewLayoutMarginEnd(R.id.notification_main_column, endMargin); + remoteViews.setViewLayoutMarginEndDimen(R.id.notification_main_column, endMargin); } } diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 4a0f3509ad31d..c33288bd568d4 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -17,6 +17,7 @@ package android.widget; import android.annotation.ColorInt; +import android.annotation.DimenRes; import android.app.ActivityManager.StackId; import android.app.ActivityOptions; import android.app.ActivityThread; @@ -1850,13 +1851,13 @@ public class RemoteViews implements Parcelable, Filter { /** * Helper action to set layout params on a View. */ - private class LayoutParamAction extends Action { + private static class LayoutParamAction extends Action { /** Set marginEnd */ - public static final int LAYOUT_MARGIN_END = 1; + public static final int LAYOUT_MARGIN_END_DIMEN = 1; /** Set width */ public static final int LAYOUT_WIDTH = 2; - public static final int LAYOUT_MARGIN_BOTTOM = 3; + public static final int LAYOUT_MARGIN_BOTTOM_DIMEN = 3; /** * @param viewId ID of the view alter @@ -1893,15 +1894,17 @@ public class RemoteViews implements Parcelable, Filter { return; } switch (property) { - case LAYOUT_MARGIN_END: + case LAYOUT_MARGIN_END_DIMEN: if (layoutParams instanceof ViewGroup.MarginLayoutParams) { - ((ViewGroup.MarginLayoutParams) layoutParams).setMarginEnd(value); + int resolved = resolveDimenPixelOffset(target, value); + ((ViewGroup.MarginLayoutParams) layoutParams).setMarginEnd(resolved); target.setLayoutParams(layoutParams); } break; - case LAYOUT_MARGIN_BOTTOM: + case LAYOUT_MARGIN_BOTTOM_DIMEN: if (layoutParams instanceof ViewGroup.MarginLayoutParams) { - ((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin = value; + int resolved = resolveDimenPixelOffset(target, value); + ((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin = resolved; target.setLayoutParams(layoutParams); } break; @@ -1914,6 +1917,13 @@ public class RemoteViews implements Parcelable, Filter { } } + private static int resolveDimenPixelOffset(View target, int value) { + if (value == 0) { + return 0; + } + return target.getContext().getResources().getDimensionPixelOffset(value); + } + public String getActionName() { return "LayoutParamAction" + property + "."; } @@ -2870,27 +2880,36 @@ public class RemoteViews implements Parcelable, Filter { * Hidden for now since we don't want to support this for all different layout margins yet. * * @param viewId The id of the view to change - * @param endMargin the left padding in pixels + * @param endMarginDimen a dimen resource to read the margin from or 0 to clear the margin. */ - public void setViewLayoutMarginEnd(int viewId, int endMargin) { - addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_MARGIN_END, endMargin)); + public void setViewLayoutMarginEndDimen(int viewId, @DimenRes int endMarginDimen) { + addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_MARGIN_END_DIMEN, + endMarginDimen)); } /** * Equivalent to setting {@link android.view.ViewGroup.MarginLayoutParams#bottomMargin}. * + * @param bottomMarginDimen a dimen resource to read the margin from or 0 to clear the margin. * @hide */ - public void setViewLayoutMarginBottom(int viewId, int bottomMargin) { - addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_MARGIN_BOTTOM, - bottomMargin)); + public void setViewLayoutMarginBottomDimen(int viewId, @DimenRes int bottomMarginDimen) { + addAction(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_MARGIN_BOTTOM_DIMEN, + bottomMarginDimen)); } /** * Equivalent to setting {@link android.view.ViewGroup.LayoutParams#width}. + * + * @param layoutWidth one of 0, MATCH_PARENT or WRAP_CONTENT. Other sizes are not allowed + * because they behave poorly when the density changes. * @hide */ public void setViewLayoutWidth(int viewId, int layoutWidth) { + if (layoutWidth != 0 && layoutWidth != ViewGroup.LayoutParams.MATCH_PARENT + && layoutWidth != ViewGroup.LayoutParams.WRAP_CONTENT) { + throw new IllegalArgumentException("Only supports 0, WRAP_CONTENT and MATCH_PARENT"); + } mActions.add(new LayoutParamAction(viewId, LayoutParamAction.LAYOUT_WIDTH, layoutWidth)); } diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index 37fb8166e9892..91d7227c6a60b 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -148,12 +148,20 @@ 16dp - + 16dp - + 56dp + + 72dp + 56dp diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 9985d8a4f726b..fe392de08e1ee 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2608,6 +2608,8 @@ + +