Implement GLIF v3 button style

Buttons are now sentence case and uses Google sans font if available.

Test: ./gradlew test
Bug: 71759812
Change-Id: Ibb42b58306163f387837600ca52e73065c2b0d9d
This commit is contained in:
Maurice Lam 2018-01-11 18:43:23 -08:00
parent cd62078b7c
commit 78bc2e0c90
7 changed files with 62 additions and 1 deletions

View file

@ -39,6 +39,8 @@
<item name="suwFillContentLayoutStyle">@style/SuwFillContentLayout</item>
<item name="listPreferredItemPaddingLeft">?attr/suwMarginSides</item>
<item name="listPreferredItemPaddingRight">?attr/suwMarginSides</item>
<item name="suwButtonAllCaps">true</item>
<item name="suwButtonFontFamily">sans-serif</item>
<item name="suwCardBackground">@drawable/suw_card_bg_dark</item>
<item name="suwDividerInsetEnd">0dp</item>
<item name="suwDividerInsetStart">@dimen/suw_items_icon_divider_inset</item>
@ -71,6 +73,8 @@
<item name="suwFillContentLayoutStyle">@style/SuwFillContentLayout</item>
<item name="listPreferredItemPaddingLeft">?attr/suwMarginSides</item>
<item name="listPreferredItemPaddingRight">?attr/suwMarginSides</item>
<item name="suwButtonAllCaps">true</item>
<item name="suwButtonFontFamily">sans-serif</item>
<item name="suwCardBackground">@drawable/suw_card_bg_light</item>
<item name="suwDividerInsetEnd">0dp</item>
<item name="suwDividerInsetStart">@dimen/suw_items_icon_divider_inset</item>
@ -103,6 +107,8 @@
<item name="colorPrimary">@color/suw_color_accent_glif_dark</item>
<item name="listPreferredItemPaddingLeft">?attr/suwMarginSides</item>
<item name="listPreferredItemPaddingRight">?attr/suwMarginSides</item>
<item name="suwButtonAllCaps">true</item>
<item name="suwButtonFontFamily">sans-serif</item>
<item name="suwColorPrimary">?attr/colorPrimary</item>
<item name="suwFillContentLayoutStyle">@style/SuwFillContentLayout</item>
<item name="suwDividerInsetEnd">0dp</item>
@ -139,6 +145,8 @@
<item name="colorPrimary">@color/suw_color_accent_glif_light</item>
<item name="listPreferredItemPaddingLeft">?attr/suwMarginSides</item>
<item name="listPreferredItemPaddingRight">?attr/suwMarginSides</item>
<item name="suwButtonAllCaps">true</item>
<item name="suwButtonFontFamily">sans-serif</item>
<item name="suwColorPrimary">?attr/colorPrimary</item>
<item name="suwFillContentLayoutStyle">@style/SuwFillContentLayout</item>
<item name="suwDividerInsetEnd">0dp</item>
@ -157,10 +165,14 @@
<style name="SuwThemeGlifV3" parent="SuwThemeGlifV2">
<item name="colorAccent">@color/suw_color_accent_glif_v3</item>
<item name="suwButtonAllCaps">false</item>
<item name="suwButtonFontFamily">@string/suwFontSecondary</item>
</style>
<style name="SuwBaseThemeGlifV3.Light" parent="SuwThemeGlifV2.Light">
<item name="colorAccent">@color/suw_color_accent_glif_v3</item>
<item name="suwButtonAllCaps">false</item>
<item name="suwButtonFontFamily">@string/suwFontSecondary</item>
</style>
<style name="SuwThemeGlifV3.Light" parent="SuwBaseThemeGlifV3.Light" />
@ -214,8 +226,11 @@
<item name="buttonStyle">@style/SuwGlifButton.Primary</item>
<!-- Values used in styles -->
<item name="android:fontFamily" tools:targetApi="jelly_bean">?attr/suwButtonFontFamily</item>
<item name="android:paddingLeft">@dimen/suw_glif_button_padding</item>
<item name="android:paddingRight">@dimen/suw_glif_button_padding</item>
<item name="android:textAllCaps" tools:targetApi="ice_cream_sandwich">?attr/suwButtonAllCaps</item>
<item name="textAllCaps">?attr/suwButtonAllCaps</item>
</style>
<style name="SuwGlifButton.Secondary" parent="Widget.AppCompat.Button.Borderless.Colored">
@ -227,9 +242,12 @@
<item name="buttonStyle">@style/SuwGlifButton.Secondary</item>
<!-- Values used in styles -->
<item name="android:fontFamily" tools:targetApi="jelly_bean">?attr/suwButtonFontFamily</item>
<item name="android:minWidth">0dp</item>
<item name="android:paddingLeft">@dimen/suw_glif_button_padding</item>
<item name="android:paddingRight">@dimen/suw_glif_button_padding</item>
<item name="android:textAllCaps" tools:targetApi="ice_cream_sandwich">?attr/suwButtonAllCaps</item>
<item name="textAllCaps">?attr/suwButtonAllCaps</item>
<!-- Values used in themes -->
<item name="android:colorControlHighlight" tools:targetApi="lollipop">@color/suw_flat_button_highlight</item>

View file

@ -40,6 +40,8 @@
</attr>
<attr name="suwGlifIconStyle" format="reference" />
<attr name="suwButtonAllCaps" format="boolean" />
<attr name="suwButtonFontFamily" format="string|reference" />
<attr name="suwCardBackground" format="color|reference" />
<attr name="suwDividerCondition">
<enum name="either" value="0" />

View file

@ -27,4 +27,7 @@
ButtonBarLayout -->
<item name="suw_original_weight" type="id" />
<!-- Secondary font for use with headings, title, and other non-body text -->
<string name="suwFontSecondary" translatable="false">google-sans</string>
</resources>

View file

@ -199,6 +199,8 @@
<item name="android:fontFamily" tools:targetApi="jelly_bean">sans-serif</item>
<item name="android:layout_gravity">?attr/suwGlifHeaderGravity</item>
<item name="android:padding">0dp</item>
<!-- Always lowercase instead of reading attr/suwButtonAllCaps, since this is a tertiary
button -->
<item name="android:textAllCaps" tools:targetApi="ice_cream_sandwich">false</item>
</style>
@ -268,7 +270,7 @@
<item name="android:layout_marginLeft">?attr/suwMarginSides</item>
<item name="android:layout_marginRight">?attr/suwMarginSides</item>
<item name="android:layout_marginTop">@dimen/suw_glif_header_title_margin_top</item>
<item name="android:fontFamily" tools:targetApi="jelly_bean">google-sans</item>
<item name="android:fontFamily" tools:targetApi="jelly_bean">@string/suwFontSecondary</item>
<item name="android:textAlignment" tools:targetApi="jelly_bean_mr1">gravity</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>

View file

@ -41,6 +41,8 @@
<item name="android:windowDisablePreview">true</item>
<item name="android:windowSoftInputMode">adjustResize</item>
<item name="suwButtonAllCaps">true</item>
<item name="suwButtonFontFamily">sans-serif</item>
<item name="suwCardBackground">@drawable/suw_card_bg</item>
<item name="suwFillContentLayoutStyle">@style/SuwFillContentLayout</item>
<item name="suwDividerInsetEnd">0dp</item>
@ -70,6 +72,8 @@
<item name="android:windowDisablePreview">true</item>
<item name="android:windowSoftInputMode">adjustResize</item>
<item name="suwButtonAllCaps">true</item>
<item name="suwButtonFontFamily">sans-serif</item>
<item name="suwCardBackground">@drawable/suw_card_bg</item>
<item name="suwFillContentLayoutStyle">@style/SuwFillContentLayout</item>
<item name="suwDividerInsetEnd">0dp</item>
@ -102,6 +106,8 @@
<item name="android:windowDisablePreview">true</item>
<item name="android:windowSoftInputMode">adjustResize</item>
<item name="suwButtonAllCaps">true</item>
<item name="suwButtonFontFamily">sans-serif</item>
<item name="suwColorPrimary">?android:attr/colorPrimary</item>
<item name="suwFillContentLayoutStyle">@style/SuwFillContentLayout</item>
<item name="suwDividerInsetEnd">0dp</item>
@ -135,6 +141,8 @@
<item name="android:windowDisablePreview">true</item>
<item name="android:windowSoftInputMode">adjustResize</item>
<item name="suwButtonAllCaps">true</item>
<item name="suwButtonFontFamily">sans-serif</item>
<item name="suwColorPrimary">?android:attr/colorPrimary</item>
<item name="suwFillContentLayoutStyle">@style/SuwFillContentLayout</item>
<item name="suwDividerInsetEnd">0dp</item>
@ -151,12 +159,18 @@
<style name="SuwThemeGlifV3" parent="SuwThemeGlifV2">
<item name="android:colorAccent">@color/suw_color_accent_glif_v3</item>
<item name="suwButtonAllCaps">false</item>
<item name="suwButtonFontFamily">@string/suwFontSecondary</item>
</style>
<style name="SuwThemeGlifV3.Light" parent="SuwThemeGlifV2.Light">
<item name="android:colorAccent">@color/suw_color_accent_glif_v3</item>
<item name="android:navigationBarColor">@color/suw_glif_v3_nav_bar_color_light</item>
<item name="android:windowLightNavigationBar">true</item>
<item name="suwButtonAllCaps">false</item>
<item name="suwButtonFontFamily">@string/suwFontSecondary</item>
</style>
<!-- Button styles -->
@ -168,8 +182,10 @@
<item name="android:buttonStyle">@style/SuwGlifButton.Primary</item>
<!-- Values used in styles -->
<item name="android:fontFamily">?attr/suwButtonFontFamily</item>
<item name="android:paddingLeft">@dimen/suw_glif_button_padding</item>
<item name="android:paddingRight">@dimen/suw_glif_button_padding</item>
<item name="android:textAllCaps">?attr/suwButtonAllCaps</item>
</style>
<style name="SuwGlifButton.Secondary" parent="android:Widget.Material.Button.Borderless.Colored">
@ -180,9 +196,11 @@
<item name="android:theme">@style/SuwGlifButton.Secondary</item>
<!-- Values used in styles -->
<item name="android:fontFamily">?attr/suwButtonFontFamily</item>
<item name="android:minWidth">0dp</item>
<item name="android:paddingLeft">@dimen/suw_glif_button_padding</item>
<item name="android:paddingRight">@dimen/suw_glif_button_padding</item>
<item name="android:textAllCaps">?attr/suwButtonAllCaps</item>
<!-- Values used in themes -->
<item name="android:colorControlHighlight">@color/suw_flat_button_highlight</item>

View file

@ -53,6 +53,7 @@ android.sourceSets {
testImplementation 'org.robolectric:robolectric:3.6.1'
testImplementation 'org.robolectric:shadows-framework:3.6.1'
testImplementation 'junit:junit:4.+'
testImplementation 'com.google.truth:truth:0.31'
testImplementation 'org.mockito:mockito-core:1.9.5'
// Workaround for https://github.com/robolectric/robolectric/issues/2566
testImplementation 'org.khronos:opengl-api:gl1.1-android-2.1_r1'

View file

@ -16,16 +16,20 @@
package com.android.setupwizardlib.util;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import com.android.setupwizardlib.R;
import com.android.setupwizardlib.robolectric.SuwLibRobolectricTestRunner;
@ -56,6 +60,19 @@ public class GlifV3StyleTest {
// Nav bar color is not customizable pre-L
}
@Test
public void buttonWithGlifV3_shouldBeGoogleSans() {
GlifThemeActivity activity = Robolectric.setupActivity(GlifThemeActivity.class);
Button button = new Button(
activity,
Robolectric.buildAttributeSet()
.setStyleAttribute("@style/SuwGlifButton.Primary")
.build());
assertThat(button.getTypeface()).isEqualTo(Typeface.create("google-sans", 0));
// Button should not be all caps
assertThat(button.getTransformationMethod()).isNull();
}
private static class GlifThemeActivity extends Activity {
@Override