Import updated Android SetupCompat Library 375009299 am: e42bc8b1af
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/setupcompat/+/14688522
Change-Id: I68b8f76dc23fd8e13f94b4081eb0f5295f3ae0ea
diff --git a/main/java/com/google/android/setupcompat/internal/FooterButtonPartnerConfig.java b/main/java/com/google/android/setupcompat/internal/FooterButtonPartnerConfig.java
index 08d76e9..5f8bf67 100644
--- a/main/java/com/google/android/setupcompat/internal/FooterButtonPartnerConfig.java
+++ b/main/java/com/google/android/setupcompat/internal/FooterButtonPartnerConfig.java
@@ -128,8 +128,10 @@
public Builder(FooterButton footerButton) {
this.footerButton = footerButton;
- // default partnerTheme should be the same as footerButton.getTheme();
- this.partnerTheme = this.footerButton.getTheme();
+ if (this.footerButton != null) {
+ // default partnerTheme should be the same as footerButton.getTheme();
+ this.partnerTheme = this.footerButton.getTheme();
+ }
}
public Builder setButtonBackgroundConfig(PartnerConfig buttonBackgroundConfig) {
diff --git a/main/java/com/google/android/setupcompat/template/FooterBarMixin.java b/main/java/com/google/android/setupcompat/template/FooterBarMixin.java
index 8f807e6..85972f5 100644
--- a/main/java/com/google/android/setupcompat/template/FooterBarMixin.java
+++ b/main/java/com/google/android/setupcompat/template/FooterBarMixin.java
@@ -104,7 +104,7 @@
if (button != null) {
button.setEnabled(enabled);
if (applyPartnerResources) {
- updateButtonTextColorWithPartnerConfig(
+ updateButtonTextColorWithEnabledState(
button,
(id == primaryButtonId || isSecondaryButtonInPrimaryStyle)
? PartnerConfig.CONFIG_FOOTER_PRIMARY_BUTTON_TEXT_COLOR
@@ -608,41 +608,20 @@
if (!applyPartnerResources) {
return;
}
-
- // If dynamic color enabled, these colors won't be overrode by partner config.
- // Instead, these colors align with the current theme colors.
+ FooterButtonStyleUtils.applyButtonPartnerResources(
+ context,
+ button,
+ applyDynamicColor,
+ /* isButtonIconAtEnd= */ (button.getId() == primaryButtonId),
+ footerButtonPartnerConfig);
if (!applyDynamicColor) {
- updateButtonTextColorWithPartnerConfig(
+ // adjust text color based on enabled state
+ updateButtonTextColorWithEnabledState(
button, footerButtonPartnerConfig.getButtonTextColorConfig());
- FooterButtonStyleUtils.updateButtonBackgroundWithPartnerConfig(
- context,
- button,
- footerButtonPartnerConfig.getButtonBackgroundConfig(),
- footerButtonPartnerConfig.getButtonDisableAlphaConfig(),
- footerButtonPartnerConfig.getButtonDisableBackgroundConfig());
- FooterButtonStyleUtils.updateButtonRippleColorWithPartnerConfig(
- context, button, footerButtonPartnerConfig);
}
-
- FooterButtonStyleUtils.updateButtonTextSizeWithPartnerConfig(
- context, button, footerButtonPartnerConfig.getButtonTextSizeConfig());
- FooterButtonStyleUtils.updateButtonMinHeightWithPartnerConfig(
- context, button, footerButtonPartnerConfig.getButtonMinHeightConfig());
- FooterButtonStyleUtils.updateButtonTypeFaceWithPartnerConfig(
- context,
- button,
- footerButtonPartnerConfig.getButtonTextTypeFaceConfig(),
- footerButtonPartnerConfig.getButtonTextStyleConfig());
- FooterButtonStyleUtils.updateButtonRadiusWithPartnerConfig(
- context, button, footerButtonPartnerConfig.getButtonRadiusConfig());
- FooterButtonStyleUtils.updateButtonIconWithPartnerConfig(
- context,
- button,
- footerButtonPartnerConfig.getButtonIconConfig(),
- primaryButtonId == button.getId());
}
- private void updateButtonTextColorWithPartnerConfig(
+ private void updateButtonTextColorWithEnabledState(
Button button, PartnerConfig buttonTextColorConfig) {
if (button.isEnabled()) {
FooterButtonStyleUtils.updateButtonTextEnabledColorWithPartnerConfig(
diff --git a/main/java/com/google/android/setupcompat/template/FooterButtonStyleUtils.java b/main/java/com/google/android/setupcompat/template/FooterButtonStyleUtils.java
index 98a1426..5fd4d96 100644
--- a/main/java/com/google/android/setupcompat/template/FooterButtonStyleUtils.java
+++ b/main/java/com/google/android/setupcompat/template/FooterButtonStyleUtils.java
@@ -35,6 +35,7 @@
import android.widget.Button;
import androidx.annotation.ColorInt;
import androidx.annotation.VisibleForTesting;
+import com.google.android.setupcompat.R;
import com.google.android.setupcompat.internal.FooterButtonPartnerConfig;
import com.google.android.setupcompat.internal.Preconditions;
import com.google.android.setupcompat.partnerconfig.PartnerConfig;
@@ -44,6 +45,109 @@
public class FooterButtonStyleUtils {
private static final float DEFAULT_DISABLED_ALPHA = 0.26f;
+ /** Apply the partner primary button style to given {@code button}. */
+ public static void applyPrimaryButtonPartnerResource(
+ Context context, Button button, boolean applyDynamicColor) {
+
+ FooterButtonPartnerConfig footerButtonPartnerConfig =
+ new FooterButtonPartnerConfig.Builder(null)
+ .setPartnerTheme(R.style.SucPartnerCustomizationButton_Primary)
+ .setButtonBackgroundConfig(PartnerConfig.CONFIG_FOOTER_PRIMARY_BUTTON_BG_COLOR)
+ .setButtonDisableAlphaConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_DISABLED_ALPHA)
+ .setButtonDisableBackgroundConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_DISABLED_BG_COLOR)
+ .setButtonRadiusConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_RADIUS)
+ .setButtonRippleColorAlphaConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_RIPPLE_COLOR_ALPHA)
+ .setTextColorConfig(PartnerConfig.CONFIG_FOOTER_PRIMARY_BUTTON_TEXT_COLOR)
+ .setTextSizeConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_TEXT_SIZE)
+ .setButtonMinHeight(PartnerConfig.CONFIG_FOOTER_BUTTON_MIN_HEIGHT)
+ .setTextTypeFaceConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_FONT_FAMILY)
+ .setTextStyleConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_TEXT_STYLE)
+ .build();
+ applyButtonPartnerResources(
+ context,
+ button,
+ applyDynamicColor,
+ /* isButtonIconAtEnd= */ true,
+ footerButtonPartnerConfig);
+ }
+
+ /** Apply the partner secondary button style to given {@code button}. */
+ public static void applySecondaryButtonPartnerResource(
+ Context context, Button button, boolean applyDynamicColor) {
+
+ int defaultTheme = R.style.SucPartnerCustomizationButton_Secondary;
+ int color =
+ PartnerConfigHelper.get(context)
+ .getColor(context, PartnerConfig.CONFIG_FOOTER_SECONDARY_BUTTON_BG_COLOR);
+ if (color != Color.TRANSPARENT) {
+ defaultTheme = R.style.SucPartnerCustomizationButton_Primary;
+ }
+ // Setup button partner config
+ FooterButtonPartnerConfig footerButtonPartnerConfig =
+ new FooterButtonPartnerConfig.Builder(null)
+ .setPartnerTheme(defaultTheme)
+ .setButtonBackgroundConfig(PartnerConfig.CONFIG_FOOTER_SECONDARY_BUTTON_BG_COLOR)
+ .setButtonDisableAlphaConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_DISABLED_ALPHA)
+ .setButtonDisableBackgroundConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_DISABLED_BG_COLOR)
+ .setButtonRadiusConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_RADIUS)
+ .setButtonRippleColorAlphaConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_RIPPLE_COLOR_ALPHA)
+ .setTextColorConfig(PartnerConfig.CONFIG_FOOTER_SECONDARY_BUTTON_TEXT_COLOR)
+ .setTextSizeConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_TEXT_SIZE)
+ .setButtonMinHeight(PartnerConfig.CONFIG_FOOTER_BUTTON_MIN_HEIGHT)
+ .setTextTypeFaceConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_FONT_FAMILY)
+ .setTextStyleConfig(PartnerConfig.CONFIG_FOOTER_BUTTON_TEXT_STYLE)
+ .build();
+ applyButtonPartnerResources(
+ context,
+ button,
+ applyDynamicColor,
+ /* isButtonIconAtEnd= */ false,
+ footerButtonPartnerConfig);
+ }
+
+ static void applyButtonPartnerResources(
+ Context context,
+ Button button,
+ boolean applyDynamicColor,
+ boolean isButtonIconAtEnd,
+ FooterButtonPartnerConfig footerButtonPartnerConfig) {
+
+ // If dynamic color enabled, these colors won't be overrode by partner config.
+ // Instead, these colors align with the current theme colors.
+ if (!applyDynamicColor) {
+ // use default disable color util we support the partner disable text color
+ if (button.isEnabled()) {
+ FooterButtonStyleUtils.updateButtonTextEnabledColorWithPartnerConfig(
+ context, button, footerButtonPartnerConfig.getButtonTextColorConfig());
+ }
+ FooterButtonStyleUtils.updateButtonBackgroundWithPartnerConfig(
+ context,
+ button,
+ footerButtonPartnerConfig.getButtonBackgroundConfig(),
+ footerButtonPartnerConfig.getButtonDisableAlphaConfig(),
+ footerButtonPartnerConfig.getButtonDisableBackgroundConfig());
+ FooterButtonStyleUtils.updateButtonRippleColorWithPartnerConfig(
+ context,
+ button,
+ footerButtonPartnerConfig.getButtonTextColorConfig(),
+ footerButtonPartnerConfig.getButtonRippleColorAlphaConfig());
+ }
+
+ FooterButtonStyleUtils.updateButtonTextSizeWithPartnerConfig(
+ context, button, footerButtonPartnerConfig.getButtonTextSizeConfig());
+ FooterButtonStyleUtils.updateButtonMinHeightWithPartnerConfig(
+ context, button, footerButtonPartnerConfig.getButtonMinHeightConfig());
+ FooterButtonStyleUtils.updateButtonTypeFaceWithPartnerConfig(
+ context,
+ button,
+ footerButtonPartnerConfig.getButtonTextTypeFaceConfig(),
+ footerButtonPartnerConfig.getButtonTextStyleConfig());
+ FooterButtonStyleUtils.updateButtonRadiusWithPartnerConfig(
+ context, button, footerButtonPartnerConfig.getButtonRadiusConfig());
+ FooterButtonStyleUtils.updateButtonIconWithPartnerConfig(
+ context, button, footerButtonPartnerConfig.getButtonIconConfig(), isButtonIconAtEnd);
+ }
+
static void updateButtonTextEnabledColorWithPartnerConfig(
Context context, Button button, PartnerConfig buttonEnableTextColorConfig) {
@ColorInt
@@ -53,11 +157,11 @@
}
}
- static void updateButtonTextDisableColor(Button button, ColorStateList defaultTextColor) {
+ static void updateButtonTextDisableColor(Button button, ColorStateList disabledTextColor) {
// TODO : add disable footer button text color partner config
// disable state will use the default disable state color
- button.setTextColor(defaultTextColor);
+ button.setTextColor(disabledTextColor);
}
@TargetApi(VERSION_CODES.Q)
@@ -113,7 +217,10 @@
}
static void updateButtonRippleColorWithPartnerConfig(
- Context context, Button button, FooterButtonPartnerConfig footerButtonPartnerConfig) {
+ Context context,
+ Button button,
+ PartnerConfig buttonTextColorConfig,
+ PartnerConfig buttonRippleColorAlphaConfig) {
// RippleDrawable is available after sdk 21. And because on lower sdk the RippleDrawable is
// unavailable. Since Stencil customization provider only works on Q+, there is no need to
// perform any customization for versions 21.
@@ -126,13 +233,10 @@
int[] pressedState = {android.R.attr.state_pressed};
// Get partner text color.
@ColorInt
- int color =
- PartnerConfigHelper.get(context)
- .getColor(context, footerButtonPartnerConfig.getButtonTextColorConfig());
+ int color = PartnerConfigHelper.get(context).getColor(context, buttonTextColorConfig);
float alpha =
- PartnerConfigHelper.get(context)
- .getFraction(context, footerButtonPartnerConfig.getButtonRippleColorAlphaConfig());
+ PartnerConfigHelper.get(context).getFraction(context, buttonRippleColorAlphaConfig);
// Set text color for ripple.
ColorStateList colorStateList =
@@ -193,7 +297,7 @@
}
static void updateButtonIconWithPartnerConfig(
- Context context, Button button, PartnerConfig buttonIconConfig, boolean isPrimary) {
+ Context context, Button button, PartnerConfig buttonIconConfig, boolean isButtonIconAtEnd) {
if (button == null) {
return;
}
@@ -201,10 +305,10 @@
if (buttonIconConfig != null) {
icon = PartnerConfigHelper.get(context).getDrawable(context, buttonIconConfig);
}
- setButtonIcon(button, icon, isPrimary);
+ setButtonIcon(button, icon, isButtonIconAtEnd);
}
- private static void setButtonIcon(Button button, Drawable icon, boolean isPrimary) {
+ private static void setButtonIcon(Button button, Drawable icon, boolean isButtonIconAtEnd) {
if (button == null) {
return;
}
@@ -218,7 +322,7 @@
Drawable iconStart = null;
Drawable iconEnd = null;
- if (isPrimary) {
+ if (isButtonIconAtEnd) {
iconEnd = icon;
} else {
iconStart = icon;