Import updated Android SetupCompat Library 377091999 am: ab6e0fff53 am: 988657a635 am: 64fcff8dfd
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/setupcompat/+/14809393
Change-Id: Ia4030829f52db61259d2d3985d4f98a3b8630c98
diff --git a/main/java/com/google/android/setupcompat/template/FooterBarMixin.java b/main/java/com/google/android/setupcompat/template/FooterBarMixin.java
index 85972f5..a0bb65b 100644
--- a/main/java/com/google/android/setupcompat/template/FooterBarMixin.java
+++ b/main/java/com/google/android/setupcompat/template/FooterBarMixin.java
@@ -103,7 +103,7 @@
Button button = buttonContainer.findViewById(id);
if (button != null) {
button.setEnabled(enabled);
- if (applyPartnerResources) {
+ if (applyPartnerResources && !applyDynamicColor) {
updateButtonTextColorWithEnabledState(
button,
(id == primaryButtonId || isSecondaryButtonInPrimaryStyle)
@@ -358,6 +358,10 @@
onFooterButtonInflated(button, footerBarPrimaryBackgroundColor);
onFooterButtonApplyPartnerResource(button, footerButtonPartnerConfig);
+ // Sets the primary button background to a light accent color
+ if (applyDynamicColor) {
+ FooterButtonStyleUtils.applyDynamicColorOnPrimaryButton(context, button);
+ }
// Make sure the position of buttons are correctly and prevent primary button create twice or
// more.
diff --git a/main/java/com/google/android/setupcompat/template/FooterButtonStyleUtils.java b/main/java/com/google/android/setupcompat/template/FooterButtonStyleUtils.java
index 5fd4d96..ca4d56b 100644
--- a/main/java/com/google/android/setupcompat/template/FooterButtonStyleUtils.java
+++ b/main/java/com/google/android/setupcompat/template/FooterButtonStyleUtils.java
@@ -148,12 +148,33 @@
context, button, footerButtonPartnerConfig.getButtonIconConfig(), isButtonIconAtEnd);
}
+ @TargetApi(VERSION_CODES.S)
+ static void applyDynamicColorOnPrimaryButton(Context context, Button button) {
+ // only update the text color of enable state
+ if (button.isEnabled()) {
+ FooterButtonStyleUtils.updateButtonTextEnabledColor(
+ button, context.getResources().getColor(R.color.suc_system_neutral1_900));
+ }
+ FooterButtonStyleUtils.updateButtonBackgroundTintList(
+ context,
+ button,
+ context.getResources().getColor(R.color.suc_system_accent1_100),
+ /* disabledAlpha=*/ 0f,
+ /* disabledColor=*/ 0);
+ FooterButtonStyleUtils.updateButtonRippleColor(
+ button, context.getResources().getColor(R.color.suc_system_neutral1_900));
+ }
+
static void updateButtonTextEnabledColorWithPartnerConfig(
Context context, Button button, PartnerConfig buttonEnableTextColorConfig) {
@ColorInt
int color = PartnerConfigHelper.get(context).getColor(context, buttonEnableTextColorConfig);
- if (color != Color.TRANSPARENT) {
- button.setTextColor(ColorStateList.valueOf(color));
+ updateButtonTextEnabledColor(button, color);
+ }
+
+ static void updateButtonTextEnabledColor(Button button, @ColorInt int textColor) {
+ if (textColor != Color.TRANSPARENT) {
+ button.setTextColor(ColorStateList.valueOf(textColor));
}
}
@@ -174,17 +195,27 @@
Preconditions.checkArgument(
Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q,
"Update button background only support on sdk Q or higher");
- @ColorInt int disabledColor;
- float disabledAlpha;
- int[] DISABLED_STATE_SET = {-android.R.attr.state_enabled};
- int[] ENABLED_STATE_SET = {};
@ColorInt
int color = PartnerConfigHelper.get(context).getColor(context, buttonBackgroundConfig);
- disabledAlpha =
+ float disabledAlpha =
PartnerConfigHelper.get(context).getFraction(context, buttonDisableAlphaConfig, 0f);
- disabledColor =
+ @ColorInt
+ int disabledColor =
PartnerConfigHelper.get(context).getColor(context, buttonDisableBackgroundConfig);
+ updateButtonBackgroundTintList(context, button, color, disabledAlpha, disabledColor);
+ }
+
+ @TargetApi(VERSION_CODES.Q)
+ static void updateButtonBackgroundTintList(
+ Context context,
+ Button button,
+ @ColorInt int color,
+ float disabledAlpha,
+ @ColorInt int disabledColor) {
+ int[] DISABLED_STATE_SET = {-android.R.attr.state_enabled};
+ int[] ENABLED_STATE_SET = {};
+
if (color != Color.TRANSPARENT) {
if (disabledAlpha <= 0f) {
// if no partner resource, fallback to theme disable alpha
@@ -247,6 +278,27 @@
}
}
+ static void updateButtonRippleColor(Button button, @ColorInt int rippleColor) {
+ // 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.
+ if (Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
+ RippleDrawable rippleDrawable = getRippleDrawable(button);
+ if (rippleDrawable == null) {
+ return;
+ }
+
+ int[] pressedState = {android.R.attr.state_pressed};
+
+ // Set text color for ripple.
+ ColorStateList colorStateList =
+ new ColorStateList(
+ new int[][] {pressedState, StateSet.NOTHING},
+ new int[] {rippleColor, Color.TRANSPARENT});
+ rippleDrawable.setColor(colorStateList);
+ }
+ }
+
static void updateButtonTextSizeWithPartnerConfig(
Context context, Button button, PartnerConfig buttonTextSizeConfig) {
float size = PartnerConfigHelper.get(context).getDimension(context, buttonTextSizeConfig);
@@ -349,6 +401,9 @@
LayerDrawable layerDrawable = (LayerDrawable) ((InsetDrawable) drawable).getDrawable();
return (GradientDrawable) layerDrawable.getDrawable(0);
} else if (drawable instanceof RippleDrawable) {
+ if (((RippleDrawable) drawable).getDrawable(0) instanceof GradientDrawable) {
+ return (GradientDrawable) ((RippleDrawable) drawable).getDrawable(0);
+ }
InsetDrawable insetDrawable = (InsetDrawable) ((RippleDrawable) drawable).getDrawable(0);
return (GradientDrawable) insetDrawable.getDrawable();
}
diff --git a/main/res/values-v31/colors.xml b/main/res/values-v31/colors.xml
new file mode 100644
index 0000000..da7f1e8
--- /dev/null
+++ b/main/res/values-v31/colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+ <color name="suc_system_accent1_100">@android:color/system_accent1_100</color>
+ <color name="suc_system_neutral1_900">@android:color/system_neutral1_900</color>
+</resources>
\ No newline at end of file
diff --git a/main/res/values/colors.xml b/main/res/values/colors.xml
index f472b35..e9f25a5 100644
--- a/main/res/values/colors.xml
+++ b/main/res/values/colors.xml
@@ -23,4 +23,7 @@
<color name="suc_customization_button_highlight_default">#ff1a73e8</color>
+ <color name="suc_system_accent1_100">#8DF5E3</color>
+
+ <color name="suc_system_neutral1_900">#1b1b1b</color>
</resources>
\ No newline at end of file