Merge "Make RemoteView margins density-change safe" into nyc-dev

This commit is contained in:
Adrian Roos
2016-06-14 19:31:12 +00:00
committed by Android (Google) Code Review
4 changed files with 62 additions and 40 deletions

View File

@@ -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);
}
}

View File

@@ -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));
}

View File

@@ -148,12 +148,20 @@
<!-- 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>

View File

@@ -2602,6 +2602,8 @@
<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" />