summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFarruh Habibullaev <farruhh@google.com>2021-10-25 14:42:07 -0700
committerFarruh Habibullaev <farruhh@google.com>2021-10-26 02:38:50 +0000
commitd1ee862270de8ec5487af39e3f918aa0ed5eb0c9 (patch)
tree1dc8a6ff9c9d49fb0890c70fa091a42348c22862
parent82328bb4765806086e1cac7eecb2357650aa1e40 (diff)
downloadsetupwizard-d1ee862270de8ec5487af39e3f918aa0ed5eb0c9.tar.gz
Add nullability check for toolbar instance
- to avoid any operation on it if toolbar instance is null. - by adding necessary unit tests - by manually checking the added behavior. Test: added unit tests to verify BUG: 204113738 Change-Id: I7d4b3ff1d73d2ff6d60a52c6e4d67c4c67b0644e
-rw-r--r--library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java45
-rw-r--r--library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java57
2 files changed, 86 insertions, 16 deletions
diff --git a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
index 36af464..706ce19 100644
--- a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
+++ b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
@@ -100,7 +100,7 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
}
CarSetupWizardBaseLayout(Context context, @Nullable AttributeSet attrs,
- int defStyleAttr) {
+ int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
@@ -109,7 +109,7 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
* the custom views that can be set by the user (e.g. back button, continue button).
*/
CarSetupWizardBaseLayout(Context context, @Nullable AttributeSet attrs,
- int defStyleAttr, int defStyleRes) {
+ int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mPartnerConfigHelper = PartnerConfigHelper.get(context);
@@ -435,6 +435,9 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
* Sets the header title visibility to given value.
*/
public void setToolbarTitleVisible(boolean visible) {
+ if (mToolbarTitle == null) {
+ return;
+ }
setViewVisible(mToolbarTitle, visible);
}
@@ -442,6 +445,9 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
* Sets the header title text to the provided text.
*/
public void setToolbarTitleText(String text) {
+ if (mToolbarTitle == null) {
+ return;
+ }
mToolbarTitle.setText(text);
}
@@ -449,6 +455,9 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
* Sets the style for the toolbar title.
*/
public void setToolbarTitleStyle(@StyleRes int style) {
+ if (mToolbarTitle == null) {
+ return;
+ }
mToolbarTitle.setTextAppearance(style);
}
@@ -688,7 +697,9 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
return findViewById(R.id.layout_content_stub);
}
- /** Returns the content ViewStub when split-nav layout is used or rotary control is supported */
+ /**
+ * Returns the content ViewStub when split-nav layout is used or rotary control is supported
+ */
public ViewStub getContentViewStub() {
return findViewById(R.id.layout_content_stub);
}
@@ -702,8 +713,10 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
}
int direction = TextUtils.getLayoutDirectionFromLocale(locale);
- mToolbarTitle.setTextLocale(locale);
- mToolbarTitle.setLayoutDirection(direction);
+ if (mToolbarTitle != null) {
+ mToolbarTitle.setTextLocale(locale);
+ mToolbarTitle.setLayoutDirection(direction);
+ }
mPrimaryToolbarButton.setTextLocale(locale);
mPrimaryToolbarButton.setLayoutDirection(direction);
@@ -755,7 +768,9 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
}
}
- /** Sets button text color using partner overlay if exists */
+ /**
+ * Sets button text color using partner overlay if exists
+ */
@VisibleForTesting
void setButtonTextColor(TextView button, PartnerConfig config) {
ColorStateList colorStateList =
@@ -783,7 +798,9 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
}
}
- /** Sets button background color using partner overlay if exists */
+ /**
+ * Sets button background color using partner overlay if exists
+ */
@VisibleForTesting
void setBackgroundColor(View button, PartnerConfig config) {
ColorStateList color = mPartnerConfigHelper.getColorStateList(getContext(), config);
@@ -792,7 +809,9 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
}
}
- /** Sets button text size using partner overlay if exists */
+ /**
+ * Sets button text size using partner overlay if exists
+ */
@VisibleForTesting
void setButtonTextSize(TextView button) {
float dimension = mPartnerConfigHelper.getDimension(
@@ -807,10 +826,12 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
boolean shouldMirrorNavIcons() {
return getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
&& mPartnerConfigHelper.getBoolean(
- getContext(), PartnerConfig.CONFIG_TOOLBAR_NAV_ICON_MIRRORING_IN_RTL, true);
+ getContext(), PartnerConfig.CONFIG_TOOLBAR_NAV_ICON_MIRRORING_IN_RTL, true);
}
- /** Sets button type face with partner overlay if exists */
+ /**
+ * Sets button type face with partner overlay if exists
+ */
private void setButtonTypeFace(TextView button) {
String fontFamily = mPartnerConfigHelper.getString(
getContext(),
@@ -828,7 +849,9 @@ class CarSetupWizardBaseLayout extends LinearLayout implements CarSetupWizardLay
button.setTypeface(typeface);
}
- /** Sets button radius using partner overlay if exists */
+ /**
+ * Sets button radius using partner overlay if exists
+ */
private void setButtonRadius(Button button) {
float radius = mPartnerConfigHelper.getDimension(
getContext(),
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java
index c1cd106..9371947 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java
@@ -24,6 +24,7 @@ import android.app.Activity;
import android.content.res.ColorStateList;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
@@ -243,6 +244,38 @@ public class CarSetupWizardCompatLayoutTest extends BaseRobolectricTest {
}
/**
+ * Test that any call to setToolbarTitle calls toolbar's setText when split-nav is enabled.
+ */
+ @Test
+ public void testSetToolbarTitleWhenSplitNavEnabled() {
+ CarSetupWizardCompatLayout spyCarSetupWizardCompatLayout =
+ Mockito.spy(mCarSetupWizardCompatLayout);
+ TextView spyToolbar = Mockito.spy(mCarSetupWizardCompatLayout.getToolbarTitle());
+ spyCarSetupWizardCompatLayout.setToolbarTitle(null);
+
+ spyCarSetupWizardCompatLayout.setToolbarTitleText("test title");
+
+ Mockito.verify(spyToolbar, Mockito.never()).setText("test title");
+ }
+
+ /**
+ * Test that any call to setToolbarTitleStyle calls toolbar's setTextAppearance when split-nav
+ * is enabled.
+ */
+ @Test
+ public void testSetToolbarStyleWhenSplitNavEnabled() {
+ @StyleRes int newStyle = R.style.TextAppearance_Car_Body2;
+ CarSetupWizardCompatLayout spyCarSetupWizardCompatLayout =
+ Mockito.spy(mCarSetupWizardCompatLayout);
+ TextView spyToolbar = Mockito.spy(mCarSetupWizardCompatLayout.getToolbarTitle());
+ spyCarSetupWizardCompatLayout.setToolbarTitle(null);
+
+ spyCarSetupWizardCompatLayout.setToolbarTitleStyle(newStyle);
+
+ Mockito.verify(spyToolbar, Mockito.never()).setTextAppearance(newStyle);
+ }
+
+ /**
* Test that {@link CarSetupWizardCompatLayout#setPrimaryActionButtonVisible} does set the view
* visible/not visible.
*/
@@ -477,6 +510,20 @@ public class CarSetupWizardCompatLayoutTest extends BaseRobolectricTest {
}
@Test
+ public void testApplyUpdatedLocaleWhenSplitNavEnabled() {
+ CarSetupWizardCompatLayout spyCarSetupWizardCompatLayout =
+ Mockito.spy(mCarSetupWizardCompatLayout);
+ TextView spyToolbar = Mockito.spy(mCarSetupWizardCompatLayout.getToolbarTitle());
+ spyCarSetupWizardCompatLayout.setToolbarTitle(null);
+
+ spyCarSetupWizardCompatLayout.applyLocale(LOCALE_EN_US);
+
+ Mockito.verify(spyToolbar, Mockito.never()).setTextLocale(LOCALE_EN_US);
+ Mockito.verify(spyToolbar, Mockito.never())
+ .setLayoutDirection(TextUtils.getLayoutDirectionFromLocale(LOCALE_EN_US));
+ }
+
+ @Test
public void testGetBackButton() {
assertThat(mCarSetupWizardLayoutInterface.getPrimaryActionButton()).isEqualTo(
mCarSetupWizardCompatLayout.findViewById(R.id.primary_toolbar_button));
@@ -515,8 +562,8 @@ public class CarSetupWizardCompatLayoutTest extends BaseRobolectricTest {
// Verify primary button background
Button primary = layout.getPrimaryActionButton();
Drawable expected = application.getResources().getDrawable(R.drawable.button_ripple_bg);
- assertThat(getDrawbleDefaultColor(primary.getBackground()))
- .isEqualTo(getDrawbleDefaultColor(expected));
+ assertThat(getDrawableDefaultColor(primary.getBackground()))
+ .isEqualTo(getDrawableDefaultColor(expected));
// Verify primary button text size
assertThat(primary.getTextSize())
@@ -572,8 +619,8 @@ public class CarSetupWizardCompatLayoutTest extends BaseRobolectricTest {
PartnerConfig.CONFIG_TOOLBAR_SECONDARY_BUTTON_BG_COLOR);
Drawable expected = application.getResources().getDrawable(R.drawable.button_ripple_bg);
- assertThat(getDrawbleDefaultColor(secondary.getBackground()))
- .isEqualTo(getDrawbleDefaultColor(expected));
+ assertThat(getDrawableDefaultColor(secondary.getBackground()))
+ .isEqualTo(getDrawableDefaultColor(expected));
}
@Test
@@ -637,7 +684,7 @@ public class CarSetupWizardCompatLayoutTest extends BaseRobolectricTest {
return activity.findViewById(R.id.car_setup_wizard_layout);
}
- private @ColorRes int getDrawbleDefaultColor(Drawable drawable) {
+ private @ColorRes int getDrawableDefaultColor(Drawable drawable) {
Drawable.ConstantState state = drawable.getConstantState();
ColorStateList colorStateList = ReflectionHelpers.getField(state, "mColor");
return colorStateList.getDefaultColor();