diff options
author | Setup Wizard Team <android-setup-team-eng@google.com> | 2021-06-03 08:19:25 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-06-03 08:19:25 +0000 |
commit | 7954bae8a5ad3a02c62223f18ae582fe17da186a (patch) | |
tree | 4affb9181fc87a2d71309489739987bd72992fd1 | |
parent | e80d15307a2b9f8125d3dd11e5257600179b0b76 (diff) | |
parent | ab6e0fff53c29f4ededb53a69839c79f29f3bbab (diff) | |
download | setupcompat-7954bae8a5ad3a02c62223f18ae582fe17da186a.tar.gz |
Import updated Android SetupCompat Library 377091999 am: ab6e0fff53
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/setupcompat/+/14809393
Change-Id: I56fdc10c2f9fbeca067e26aedb36a231a75f077b
4 files changed, 92 insertions, 9 deletions
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 @@ public class FooterBarMixin implements Mixin { 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 @@ public class FooterBarMixin implements Mixin { 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 @@ public class FooterButtonStyleUtils { 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 @@ public class FooterButtonStyleUtils { 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 @@ public class FooterButtonStyleUtils { } } + 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 @@ public class FooterButtonStyleUtils { 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 |