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 @@
+
+