diff --git a/CHANGELOG.md b/CHANGELOG.md
index acd23d158..e7e753d5a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,18 @@
[Migration Guides](https://github.com/urbanairship/android-library/tree/main/documentation/migration)
-## Version 18.1.1, June 28, 2024
+## Version 18.1.3, July 30, 2024
+Patch release that includes bug fixes for Embedded Content and Preference Center, and accessibility improvements for Message Center.
+
+### Changes
+- Fixed an issue with container child item measurement in Scenes, when margins were set on the container items.
+- Fixed a Preference Center bug that could lead to subscription channel chips not being visible when initially displaying a Preference Center.
+- Fixed dismissing multiple embedded views in the same session.
+- Fixed an issue with automation trigger state not correctly persisting across sessions.
+- Message Center accessibility improvements.
+- Updated the default style for the pull to dismiss view in In-App Message Banners to better match iOS.
+
+## Version 18.1.2, July 15, 2024
Patch release that includes fixes for Preference Center.
### Changes
diff --git a/build.gradle b/build.gradle
index a199ae1f1..1f9767fa3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
buildscript {
ext {
// Airship Version - major.minor.patch
- airshipVersion = '18.1.2'
+ airshipVersion = '18.1.3'
// Airship Version Qualifier beta, release, etc...
// airshipVersionQualifier = "alpha"
diff --git a/sample/src/main/res/values/styles.xml b/sample/src/main/res/values/styles.xml
index c2d1185bc..c61a237ee 100644
--- a/sample/src/main/res/values/styles.xml
+++ b/sample/src/main/res/values/styles.xml
@@ -25,6 +25,7 @@
diff --git a/urbanairship-automation/src/main/java/com/urbanairship/automation/engine/AutomationStore.kt b/urbanairship-automation/src/main/java/com/urbanairship/automation/engine/AutomationStore.kt
index 391c813c7..7b692edfe 100644
--- a/urbanairship-automation/src/main/java/com/urbanairship/automation/engine/AutomationStore.kt
+++ b/urbanairship-automation/src/main/java/com/urbanairship/automation/engine/AutomationStore.kt
@@ -125,8 +125,7 @@ internal abstract class AutomationStore : RoomDatabase(), AutomationStoreInterfa
val name = config.configOptions.appKey + "_automation_store"
val path = File(ContextCompat.getNoBackupFilesDir(context), name).absolutePath
return databaseBuilder(context, AutomationStore::class.java, path)
- .addMigrations(MIGRATION_1_2)
- .addMigrations(MIGRATION_2_3)
+ .addMigrations(MIGRATION_1_2, MIGRATION_2_3)
.fallbackToDestructiveMigrationOnDowngrade()
.build()
}
diff --git a/urbanairship-automation/src/main/java/com/urbanairship/automation/engine/PreparedSchedule.kt b/urbanairship-automation/src/main/java/com/urbanairship/automation/engine/PreparedSchedule.kt
index 453729fd4..30969dd24 100644
--- a/urbanairship-automation/src/main/java/com/urbanairship/automation/engine/PreparedSchedule.kt
+++ b/urbanairship-automation/src/main/java/com/urbanairship/automation/engine/PreparedSchedule.kt
@@ -64,7 +64,7 @@ public data class PreparedScheduleInfo(
reportingContext = content.get(REPORTING_CONTEXT),
// Default to a UUID for backwards compatibility
triggerSessionId = content.optionalField(TRIGGER_SESSION_ID) ?: UUID.randomUUID().toString(),
- additionalAudienceCheckResult = content.requireField(ADDITIONAL_AUDIENCE_CHECK_RESULT)
+ additionalAudienceCheckResult = content.optionalField(ADDITIONAL_AUDIENCE_CHECK_RESULT) ?: true
)
}
}
diff --git a/urbanairship-automation/src/main/java/com/urbanairship/iam/view/MediaView.kt b/urbanairship-automation/src/main/java/com/urbanairship/iam/view/MediaView.kt
index be4c4c6ff..2526cdbf9 100644
--- a/urbanairship-automation/src/main/java/com/urbanairship/iam/view/MediaView.kt
+++ b/urbanairship-automation/src/main/java/com/urbanairship/iam/view/MediaView.kt
@@ -17,6 +17,7 @@ import android.widget.ImageView
import android.widget.ProgressBar
import androidx.core.view.doOnPreDraw
import com.urbanairship.UAirship
+import com.urbanairship.android.layout.util.ResourceUtils
import com.urbanairship.iam.info.InAppMessageMediaInfo
import com.urbanairship.images.ImageRequestOptions
import com.urbanairship.util.ManifestUtils
@@ -87,11 +88,16 @@ internal class MediaView @JvmOverloads constructor(
imageView.contentDescription = mediaInfo.description
val url = cachedMediaUrl ?: mediaInfo.url
+ val fallbackWidth = ResourceUtils.getDisplayWidthPixels(context)
+ val fallbackHeight = ResourceUtils.getDisplayHeightPixels(context)
+
imageView.doOnPreDraw {
UAirship.shared().imageLoader.load(
context,
imageView,
- ImageRequestOptions.newBuilder(url).build()
+ ImageRequestOptions.newBuilder(url)
+ .setFallbackDimensions(fallbackWidth, fallbackHeight)
+ .build()
)
}
diff --git a/urbanairship-automation/src/main/res/values/style_iam_banner.xml b/urbanairship-automation/src/main/res/values/style_iam_banner.xml
index 466431bee..4fa77b9b5 100644
--- a/urbanairship-automation/src/main/res/values/style_iam_banner.xml
+++ b/urbanairship-automation/src/main/res/values/style_iam_banner.xml
@@ -25,8 +25,8 @@
@@ -34,11 +34,13 @@
diff --git a/urbanairship-core/src/main/java/com/urbanairship/images/AirshipGlideImageLoader.kt b/urbanairship-core/src/main/java/com/urbanairship/images/AirshipGlideImageLoader.kt
index 111291884..3c268fce4 100644
--- a/urbanairship-core/src/main/java/com/urbanairship/images/AirshipGlideImageLoader.kt
+++ b/urbanairship-core/src/main/java/com/urbanairship/images/AirshipGlideImageLoader.kt
@@ -3,7 +3,9 @@ package com.urbanairship.images
import android.content.Context
import android.graphics.drawable.Drawable
import android.util.Size
+import android.view.View
import android.view.ViewGroup
+import android.view.ViewParent
import android.view.ViewTreeObserver
import android.view.ViewTreeObserver.OnPreDrawListener
import android.widget.ImageView
@@ -80,62 +82,69 @@ internal object AirshipGlideImageLoader : ImageLoader {
private val zeroWidthFallback: Int?,
private val zeroHeightFallback: Int?,
private val subtractPadding: Boolean = true,
- ) : DrawableImageViewTarget(view) {
+ ) : DrawableImageViewTarget(view) {
override fun getSize(cb: SizeReadyCallback) {
// Fast path: the view is already measured or has fallback width/height
val size = getSize()
- if (size != null) {
+ if (size.width > 0 && size.height > 0) {
cb.onSizeReady(size.width, size.height)
- return@getSize
- }
-
- // Slow path: wait for the view to be measured...
- val viewTreeObserver = view.viewTreeObserver
- val preDrawListener = object : OnPreDrawListener {
- private var isResumed = false
-
- override fun onPreDraw(): Boolean {
- getSize()?.let { size ->
- viewTreeObserver.removePreDrawListenerSafe(this)
-
- if (!isResumed) {
- isResumed = true
- cb.onSizeReady(size.width, size.height)
+ } else {
+ // Slow path: wait for the view to be measured...
+ val viewTreeObserver = view.viewTreeObserver
+ val preDrawListener = object : OnPreDrawListener {
+ private var isResumed = false
+
+ override fun onPreDraw(): Boolean {
+ getSize().let { size ->
+ viewTreeObserver.removePreDrawListenerSafe(this)
+
+ if (!isResumed) {
+ isResumed = true
+ cb.onSizeReady(size.width, size.height)
+ }
}
+ return true
}
- return true
}
- }
- viewTreeObserver.addOnPreDrawListener(preDrawListener)
+ viewTreeObserver.addOnPreDrawListener(preDrawListener)
+ }
}
- fun getSize(): Size? {
- val width = getWidth() ?: return null
- val height = getHeight() ?: return null
- return Size(width, height)
- }
+ fun getSize(): Size = Size(getWidth(), getHeight())
fun getWidth() = getDimension(
- paramSize = view.layoutParams?.width ?: -1,
+ paramSize = view.layoutParams?.width ?: ViewGroup.LayoutParams.MATCH_PARENT,
viewSize = view.width,
paddingSize = if (subtractPadding) view.paddingLeft + view.paddingRight else 0
- ) ?: zeroWidthFallback
+ ) ?: zeroWidthFallback.let {
+ if (it == null || it < 0) {
+ Target.SIZE_ORIGINAL
+ } else {
+ it
+ }
+ }
fun getHeight() = getDimension(
- paramSize = view.layoutParams?.height ?: -1,
+ paramSize = view.layoutParams?.height ?: ViewGroup.LayoutParams.MATCH_PARENT,
viewSize = view.height,
paddingSize = if (subtractPadding) view.paddingTop + view.paddingBottom else 0
- ) ?: zeroHeightFallback
+ ) ?: zeroHeightFallback.let {
+ if (it == null || it < 0) {
+ Target.SIZE_ORIGINAL
+ } else {
+ it
+ }
+ }
fun getDimension(
paramSize: Int,
viewSize: Int,
paddingSize: Int
): Int? {
- // If the dimension is set to WRAP_CONTENT, then the dimension is undefined.
- if (paramSize == ViewGroup.LayoutParams.WRAP_CONTENT) {
+ // If the dimension is set to WRAP_CONTENT or MATCH_PARENT, then the dimension is undefined.
+ if (paramSize <= 0) {
return null
}
diff --git a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/property/HexColor.kt b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/property/HexColor.kt
index 1d7be3dc1..10484e48f 100644
--- a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/property/HexColor.kt
+++ b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/property/HexColor.kt
@@ -6,6 +6,7 @@ package com.urbanairship.android.layout.property
import android.graphics.Color
import androidx.annotation.ColorInt
import androidx.core.graphics.ColorUtils
+import com.urbanairship.UALog
import com.urbanairship.UALog.w
import com.urbanairship.json.JsonMap
@@ -25,10 +26,15 @@ public object HexColor {
return null
}
- var color = Color.parseColor(hex)
- if (alpha != 1f) {
- color = ColorUtils.setAlphaComponent(color, (alpha * 255).toInt())
+ return try {
+ var color = Color.parseColor(hex)
+ if (alpha != 1f) {
+ color = ColorUtils.setAlphaComponent(color, (alpha * 255).toInt())
+ }
+ color
+ } catch (e: Exception) {
+ UALog.e(e) { "Invalid color $hex " }
+ null
}
- return color
}
}
diff --git a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/util/ConstraintSetBuilder.java b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/util/ConstraintSetBuilder.java
index 275f04666..2a0e46963 100644
--- a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/util/ConstraintSetBuilder.java
+++ b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/util/ConstraintSetBuilder.java
@@ -184,7 +184,7 @@ public ConstraintSetBuilder width(@Nullable Size size, @IdRes int viewId) {
@NonNull
public ConstraintSetBuilder width(@Nullable Size size, boolean ignoreSafeArea, @IdRes int viewId) {
- return size(size, ignoreSafeArea, viewId, ConstraintSet.WRAP_CONTENT);
+ return width(size, ignoreSafeArea, viewId, ConstraintSet.WRAP_CONTENT);
}
@NonNull
diff --git a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/util/LayoutUtils.java b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/util/LayoutUtils.java
index 420714ed2..c89563019 100644
--- a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/util/LayoutUtils.java
+++ b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/util/LayoutUtils.java
@@ -9,6 +9,7 @@
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
+import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
@@ -50,10 +51,12 @@
/**
* Helpers for layout rendering.
+ *
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public final class LayoutUtils {
+
private static final float PRESSED_ALPHA_PERCENT = 0.2f;
private static final int DEFAULT_STROKE_WIDTH_DPS = 2;
private static final int DEFAULT_BORDER_RADIUS = 0;
@@ -72,9 +75,9 @@ public static void applyBorderAndBackground(@NonNull View view, @NonNull BaseMod
}
public static void applyBorderAndBackground(
- @NonNull View view,
- @Nullable Border border,
- @Nullable Color backgroundColor
+ @NonNull View view,
+ @Nullable Border border,
+ @Nullable Color backgroundColor
) {
Context context = view.getContext();
@@ -123,7 +126,7 @@ public static void applyBorderAndBackground(
private static void mergeBackground(@NonNull View view, @NonNull Drawable drawable) {
Drawable background = drawable;
if (view.getBackground() != null) {
- background = new LayerDrawable(new Drawable[]{view.getBackground(), drawable});
+ background = new LayerDrawable(new Drawable[] { view.getBackground(), drawable });
}
view.setBackground(background);
}
@@ -136,35 +139,35 @@ public static void applyButtonModel(@NonNull MaterialButton button, @NonNull Lab
int textColor = textAppearance.getColor().resolve(context);
int backgroundColor = model.getBackgroundColor() == null
- ? Color.TRANSPARENT
- : model.getBackgroundColor().resolve(button.getContext());
+ ? Color.TRANSPARENT
+ : model.getBackgroundColor().resolve(button.getContext());
int pressedColor = ColorUtils.setAlphaComponent(textColor, Math.round(Color.alpha(textColor) * PRESSED_ALPHA_PERCENT));
int disabledColor = generateDisabledColor(backgroundColor);
int strokeWidth = model.getBorder() == null || model.getBorder().getStrokeWidth() == null
- ? DEFAULT_STROKE_WIDTH_DPS
- : model.getBorder().getStrokeWidth();
+ ? DEFAULT_STROKE_WIDTH_DPS
+ : model.getBorder().getStrokeWidth();
int strokeColor = model.getBorder() == null || model.getBorder().getStrokeColor() == null
- ? backgroundColor
- : model.getBorder().getStrokeColor().resolve(context);
+ ? backgroundColor
+ : model.getBorder().getStrokeColor().resolve(context);
int disabledStrokeColor = generateDisabledColor(strokeColor);
int borderRadius = model.getBorder() == null || model.getBorder().getRadius() == null
- ? DEFAULT_BORDER_RADIUS
- : model.getBorder().getRadius();
+ ? DEFAULT_BORDER_RADIUS
+ : model.getBorder().getRadius();
button.setBackgroundTintList(new ColorStateListBuilder()
- .add(disabledColor, -android.R.attr.state_enabled)
- .add(backgroundColor)
- .build());
+ .add(disabledColor, -android.R.attr.state_enabled)
+ .add(backgroundColor)
+ .build());
button.setRippleColor(ColorStateList.valueOf(pressedColor));
- int strokeWidthDp = (int) dpToPx(context, strokeWidth);
- button.setStrokeWidth(strokeWidthDp);
- if (strokeWidthDp > 0) {
- addPadding(button, strokeWidthDp);
- }
+ int strokeWidthPixels = (int) dpToPx(context, strokeWidth);
+ button.setStrokeWidth(strokeWidthPixels);
button.setStrokeColor(new ColorStateListBuilder()
- .add(disabledStrokeColor, -android.R.attr.state_enabled)
- .add(strokeColor)
- .build());
+ .add(disabledStrokeColor, -android.R.attr.state_enabled)
+ .add(strokeColor)
+ .build());
+
+ button.setEllipsize(TextUtils.TruncateAt.END);
+ button.setIncludeFontPadding(false);
button.setCornerRadius((int) dpToPx(context, borderRadius));
button.setSingleLine(false);
}
@@ -229,9 +232,9 @@ public static void applyTextAppearance(@NonNull TextView textView, @NonNull Text
int disabledTextColor = generateDisabledColor(Color.TRANSPARENT, textColor);
textView.setTextColor(new ColorStateListBuilder()
- .add(disabledTextColor, -android.R.attr.state_enabled)
- .add(textColor)
- .build());
+ .add(disabledTextColor, -android.R.attr.state_enabled)
+ .add(textColor)
+ .build());
int typefaceFlags = Typeface.NORMAL;
int paintFlags = Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG;
@@ -344,10 +347,10 @@ public static void addPadding(@NonNull View view, int padding) {
public static void addPadding(@NonNull View view, int left, int top, int right, int bottom) {
view.setPadding(
- view.getPaddingLeft() + left,
- view.getPaddingTop() + top,
- view.getPaddingRight() + right,
- view.getPaddingBottom() + bottom
+ view.getPaddingLeft() + left,
+ view.getPaddingTop() + top,
+ view.getPaddingRight() + right,
+ view.getPaddingBottom() + bottom
);
}
@@ -373,12 +376,13 @@ public static int generateDisabledColor(@ColorInt int background, @ColorInt int
@ColorInt
private static int overlayColors(
- @ColorInt int backgroundColor,
- @ColorInt int overlayColor,
- @FloatRange(from = 0, to = 1) float overlayAlpha
+ @ColorInt int backgroundColor,
+ @ColorInt int overlayColor,
+ @FloatRange(from = 0, to = 1) float overlayAlpha
) {
int alpha = Math.round(Color.alpha(overlayColor) * overlayAlpha);
int overlay = ColorUtils.setAlphaComponent(overlayColor, alpha);
return ColorUtils.compositeColors(overlay, backgroundColor);
}
+
}
diff --git a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/view/ImageButtonView.kt b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/view/ImageButtonView.kt
index f450953f3..b3ffa1ea3 100644
--- a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/view/ImageButtonView.kt
+++ b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/view/ImageButtonView.kt
@@ -15,6 +15,7 @@ import com.urbanairship.android.layout.model.ImageButtonModel
import com.urbanairship.android.layout.property.Image
import com.urbanairship.android.layout.util.ColorStateListBuilder
import com.urbanairship.android.layout.util.LayoutUtils
+import com.urbanairship.android.layout.util.ResourceUtils
import com.urbanairship.android.layout.util.debouncedClicks
import com.urbanairship.android.layout.util.ifNotEmpty
import com.urbanairship.android.layout.widget.TappableView
@@ -50,11 +51,16 @@ internal class ImageButtonView(
var isLoaded = false
+ // Falling back to the screen dimensions keeps the image as large as possible,
+ // while still allowing for sampling to occur.
+ val fallbackWidth = ResourceUtils.getDisplayWidthPixels(context)
+ val fallbackHeight = ResourceUtils.getDisplayHeightPixels(context)
fun loadImage(url: String) = UAirship.shared().imageLoader
.load(context, this, ImageRequestOptions.newBuilder(url)
.setImageLoadedCallback { success ->
if (success) { isLoaded = true }
}
+ .setFallbackDimensions(fallbackWidth, fallbackHeight)
.build())
loadImage(url)
diff --git a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/view/LabelButtonView.kt b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/view/LabelButtonView.kt
index 671deb13a..8ac125d52 100644
--- a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/view/LabelButtonView.kt
+++ b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/view/LabelButtonView.kt
@@ -4,8 +4,6 @@ package com.urbanairship.android.layout.view
import android.content.Context
import android.text.TextUtils
import androidx.core.view.isGone
-import com.google.android.material.button.MaterialButton
-import com.urbanairship.android.layout.R
import com.urbanairship.android.layout.model.ButtonModel
import com.urbanairship.android.layout.model.LabelButtonModel
import com.urbanairship.android.layout.util.LayoutUtils
@@ -13,6 +11,7 @@ import com.urbanairship.android.layout.util.ResourceUtils
import com.urbanairship.android.layout.util.debouncedClicks
import com.urbanairship.android.layout.util.ifNotEmpty
import com.urbanairship.android.layout.widget.TappableView
+import com.google.android.material.button.MaterialButton
import kotlinx.coroutines.flow.Flow
internal class LabelButtonView(
@@ -48,15 +47,17 @@ internal class LabelButtonView(
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ val strokeWidthPixels = strokeWidth
+
val autoHeight = MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.EXACTLY
val autoWidth = MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.EXACTLY
if (autoHeight || autoWidth) {
val twelveDp = ResourceUtils.dpToPx(context, 12).toInt()
val horizontal = if (autoWidth) twelveDp else 0
val vertical = if (autoHeight) twelveDp else 0
- setPadding(horizontal, vertical, horizontal, vertical)
+ setPadding(horizontal + strokeWidthPixels, vertical + strokeWidthPixels, horizontal + strokeWidthPixels, vertical + strokeWidthPixels)
} else {
- setPadding(0, 0, 0, 0)
+ setPadding(strokeWidthPixels, strokeWidthPixels, strokeWidthPixels, strokeWidthPixels)
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}
diff --git a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/widget/WeightlessLinearLayout.java b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/widget/WeightlessLinearLayout.java
index cd91659e6..d328b5abd 100644
--- a/urbanairship-layout/src/main/java/com/urbanairship/android/layout/widget/WeightlessLinearLayout.java
+++ b/urbanairship-layout/src/main/java/com/urbanairship/android/layout/widget/WeightlessLinearLayout.java
@@ -232,7 +232,6 @@ private void measureVertical(int widthMeasureSpec, int heightMeasureSpec) {
int count = getChildCount();
List childrenWithMaxPercent = new ArrayList<>();
- int maxPercentChildrenTotalMargins = 0;
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
@@ -254,7 +253,6 @@ private void measureVertical(int widthMeasureSpec, int heightMeasureSpec) {
if (lp.maxHeightPercent > 0) {
childrenWithMaxPercent.add(child);
- maxPercentChildrenTotalMargins += lp.getMarginStart() + lp.getMarginEnd();
}
if (heightMode == MeasureSpec.EXACTLY && lp.height == 0 && lp.maxHeightPercent > 0) {
@@ -463,7 +461,6 @@ private void measureHorizontal(int widthMeasureSpec, int heightMeasureSpec) {
int count = getChildCount();
List childrenWithMaxPercent = new ArrayList<>();
- int maxPercentChildrenTotalMargins = 0;
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
@@ -485,7 +482,6 @@ private void measureHorizontal(int widthMeasureSpec, int heightMeasureSpec) {
if (lp.maxWidthPercent > 0) {
childrenWithMaxPercent.add(child);
- maxPercentChildrenTotalMargins += lp.getMarginStart() + lp.getMarginEnd();
}
if (widthMode == MeasureSpec.EXACTLY && lp.width == 0 && lp.maxWidthPercent > 0) {
@@ -604,7 +600,7 @@ private void measureHorizontal(int widthMeasureSpec, int heightMeasureSpec) {
heightSpec = MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY);
}
} else {
- heightSpec = getChildMeasureSpec(widthMeasureSpec, getPaddingTop() + getPaddingBottom() + lp.topMargin + lp.bottomMargin, lp.height);
+ heightSpec = getChildMeasureSpec(heightMeasureSpec, getPaddingTop() + getPaddingBottom() + lp.topMargin + lp.bottomMargin, lp.height);
}
int widthSpec = MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY);
@@ -792,6 +788,7 @@ private void layoutHorizontal(int left, int top, int right, int bottom) {
break;
case Gravity.CENTER_HORIZONTAL:
+
// mTotalLength contains the padding already
childLeft = getPaddingLeft() + (right - left - totalLength) / 2;
break;
@@ -918,7 +915,7 @@ public LayoutParams(ViewGroup.MarginLayoutParams source) {
@NonNull
@Override
public String toString() {
- return String.format("LayoutParams{ width = %d, height = %d, maxWidth = %.2f, maxHeight = %.2f",
+ return String.format("LayoutParams{ width = %d, height = %d, maxWidth = %.2f, maxHeight = %.2f }",
width, height, maxWidthPercent, maxHeightPercent);
}
}
diff --git a/urbanairship-layout/src/main/res/values/style_airship_layout.xml b/urbanairship-layout/src/main/res/values/style_airship_layout.xml
index dc6f2ac17..53e5a1da9 100644
--- a/urbanairship-layout/src/main/res/values/style_airship_layout.xml
+++ b/urbanairship-layout/src/main/res/values/style_airship_layout.xml
@@ -10,6 +10,7 @@
- true
- false
- @android:style/Animation.Dialog
+ - @android:color/transparent