}
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) {
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);
}
}
}
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));
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);
}
}
}
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;
}
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);
}
}
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);
}
}
package android.widget;
import android.annotation.ColorInt;
+import android.annotation.DimenRes;
import android.app.ActivityManager.StackId;
import android.app.ActivityOptions;
import android.app.ActivityThread;
/**
* 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
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;
}
}
+ 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 + ".";
}
* 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));
}
<!-- The margin on the start of the content view -->
<dimen name="notification_content_margin_start">16dp</dimen>
- <!-- The margin on the end of the content view -->
+ <!-- The margin on the end of the content view
+ Keep in sync with notification_content_plus_picture_margin! -->
<dimen name="notification_content_margin_end">16dp</dimen>
- <!-- The margin on the end of the content view with a picture.-->
+ <!-- The margin on the end of the content view with a picture.
+ Keep in sync with notification_content_plus_picture_margin! -->
<dimen name="notification_content_picture_margin">56dp</dimen>
+ <!-- The margin on the end of the content view with a picture, plus the standard
+ content end margin.
+ Keep equal to (notification_content_picture_margin + notification_content_margin_end)!
+ -->
+ <dimen name="notification_content_plus_picture_margin_end">72dp</dimen>
+
<!-- The height of the notification action list -->
<dimen name="notification_action_list_height">56dp</dimen>
<java-symbol type="bool" name="config_supportPreRebootSecurityLogs" />
+ <java-symbol type="dimen" name="notification_content_plus_picture_margin_end" />
+
<!-- Pinner Service -->
<java-symbol type="array" name="config_defaultPinnerServiceFiles" />