Cleaned up the logic for the picture end margin
This allows decorated custom remote views to be properly
showing with a large image.
Bug: 24866646
Change-Id: Ie355e503437f19ace2503d42f44bee4bd22f03c8
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 01a9ff98..e290d3e 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -895,6 +895,11 @@
*/
public static final String EXTRA_BUILDER_APPLICATION_INFO = "android.appInfo";
+ /**
+ * @hide
+ */
+ public static final String EXTRA_CONTAINS_CUSTOM_VIEW = "android.contains.customView";
+
private Icon mSmallIcon;
private Icon mLargeIcon;
@@ -3534,6 +3539,10 @@
mN.extras.putStringArray(EXTRA_PEOPLE,
mPersonList.toArray(new String[mPersonList.size()]));
}
+ if (mN.bigContentView != null || mN.contentView != null
+ || mN.headsUpContentView != null) {
+ mN.extras.putBoolean(EXTRA_CONTAINS_CUSTOM_VIEW, true);
+ }
return mN;
}
@@ -4203,6 +4212,7 @@
final float density = mBuilder.mContext.getResources().getDisplayMetrics().density;
int topPadding = (int) (5 * density);
int bottomPadding = (int) (13 * density);
+ boolean first = true;
while (i < mTexts.size() && i < rowIds.length) {
CharSequence str = mTexts.get(i);
if (str != null && !str.equals("")) {
@@ -4214,23 +4224,26 @@
}
contentView.setViewPadding(rowIds[i], 0, topPadding, 0,
i == rowIds.length - 1 || i == mTexts.size() - 1 ? bottomPadding : 0);
+ handleInboxImageMargin(contentView, rowIds[i], first);
+ first = false;
}
i++;
}
- handleInboxImageMargin(contentView, rowIds[0]);
return contentView;
}
- private void handleInboxImageMargin(RemoteViews contentView, int id) {
- final int max = mBuilder.mN.extras.getInt(EXTRA_PROGRESS_MAX, 0);
- final boolean ind = mBuilder.mN.extras.getBoolean(EXTRA_PROGRESS_INDETERMINATE);
- boolean hasProgress = max != 0 || ind;
+ private void handleInboxImageMargin(RemoteViews contentView, int id, boolean first) {
int endMargin = 0;
- if (mTexts.size() > 0 && mBuilder.mN.mLargeIcon != null && !hasProgress) {
- endMargin = mBuilder.mContext.getResources().getDimensionPixelSize(
- R.dimen.notification_content_picture_margin);
+ if (first) {
+ final int max = mBuilder.mN.extras.getInt(EXTRA_PROGRESS_MAX, 0);
+ 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);
+ }
}
contentView.setViewLayoutMarginEnd(id, endMargin);
}
@@ -4413,13 +4426,11 @@
}
handleImage(view);
// handle the content margin
- int endMargin;
+ int endMargin = mBuilder.mContext.getResources().getDimensionPixelSize(
+ R.dimen.notification_content_margin_end);;
if (mBuilder.mN.mLargeIcon != null) {
- endMargin = mBuilder.mContext.getResources().getDimensionPixelSize(
- R.dimen.notification_content_picture_margin_media);
- } else {
- endMargin = mBuilder.mContext.getResources().getDimensionPixelSize(
- R.dimen.notification_content_margin_end);
+ endMargin += mBuilder.mContext.getResources().getDimensionPixelSize(
+ R.dimen.notification_content_picture_margin);
}
view.setViewLayoutMarginEnd(R.id.notification_main_column, endMargin);
return view;
@@ -4529,9 +4540,6 @@
return makeDecoratedHeadsUpContentView();
}
- /**
- * @hide
- */
private RemoteViews makeDecoratedHeadsUpContentView() {
RemoteViews headsUpContentView = mBuilder.mN.headsUpContentView == null
? mBuilder.mN.contentView
@@ -4541,25 +4549,17 @@
}
RemoteViews remoteViews = mBuilder.applyStandardTemplateWithActions(
mBuilder.getBigBaseLayoutResource());
- remoteViews.removeAllViews(R.id.notification_main_column);
- remoteViews.addView(R.id.notification_main_column, headsUpContentView);
+ buildIntoRemoteViewContent(remoteViews, headsUpContentView);
return remoteViews;
}
- /**
- * @hide
- */
private RemoteViews makeStandardTemplateWithCustomContent(RemoteViews customContent) {
RemoteViews remoteViews = mBuilder.applyStandardTemplate(
mBuilder.getBaseLayoutResource());
- remoteViews.removeAllViews(R.id.notification_main_column);
- remoteViews.addView(R.id.notification_main_column, customContent);
+ buildIntoRemoteViewContent(remoteViews, customContent);
return remoteViews;
}
- /**
- * @hide
- */
private RemoteViews makeDecoratedBigContentView() {
RemoteViews bigContentView = mBuilder.mN.bigContentView == null
? mBuilder.mN.contentView
@@ -4569,10 +4569,23 @@
}
RemoteViews remoteViews = mBuilder.applyStandardTemplateWithActions(
mBuilder.getBigBaseLayoutResource());
- remoteViews.removeAllViews(R.id.notification_main_column);
- remoteViews.addView(R.id.notification_main_column, bigContentView);
+ buildIntoRemoteViewContent(remoteViews, bigContentView);
return remoteViews;
}
+
+ private void buildIntoRemoteViewContent(RemoteViews remoteViews,
+ RemoteViews customContent) {
+ remoteViews.removeAllViews(R.id.notification_main_column);
+ 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);
+ if (mBuilder.mN.mLargeIcon != null) {
+ endMargin += mBuilder.mContext.getResources().getDimensionPixelSize(
+ R.dimen.notification_content_picture_margin);
+ }
+ remoteViews.setViewLayoutMarginEnd(R.id.notification_main_column, endMargin);
+ }
}
// When adding a new Style subclass here, don't forget to update