Merge "Fix banner tip buttons visibility and update incompatible tip" into udc-dev
diff --git a/res/layout/card_preference.xml b/res/layout/card_preference.xml
index e029335..83c6eaf 100644
--- a/res/layout/card_preference.xml
+++ b/res/layout/card_preference.xml
@@ -67,12 +67,15 @@
android:maxLines="10"
style="@style/PreferenceSummaryTextStyle"/>
- <RelativeLayout
+ <LinearLayout
android:id="@+id/card_preference_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_below="@android:id/summary"
+ android:gravity="center_vertical|end"
+ android:orientation="horizontal"
+ android:paddingEnd="20dp"
android:visibility="gone">
<Button
android:id="@android:id/button1"
@@ -80,17 +83,15 @@
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginStart="20dp"
- android:layout_toStartOf="@android:id/button2"
android:visibility="gone"/>
<Button
android:id="@android:id/button2"
style="@style/CardPreferenceBorderlessButton"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
- android:layout_marginHorizontal="20dp"
- android:layout_alignParentEnd="true"
+ android:layout_marginStart="20dp"
android:visibility="gone"/>
- </RelativeLayout>
+ </LinearLayout>
</RelativeLayout>
<!-- Preference should place its actual preference widget here. -->
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
index c869b92..8aabc37 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
@@ -166,6 +166,10 @@
if (iconTintColorId != View.NO_ID) {
preference.getIcon().setTint(context.getColor(iconTintColorId));
}
+ final CardPreference cardPreference = castToCardPreferenceSafely(preference);
+ if (cardPreference != null) {
+ cardPreference.resetLayoutState();
+ }
}
/** Returns the color resid for tinting {@link #getIconId()} or {@link View#NO_ID} if none. */
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/IncompatibleChargerTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/IncompatibleChargerTip.java
index 8a8cc5c..c1616ea 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/IncompatibleChargerTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/IncompatibleChargerTip.java
@@ -73,15 +73,15 @@
}
cardPreference.setSelectable(false);
- cardPreference.setSecondaryButtonText(context.getString(R.string.learn_more));
- cardPreference.setSecondaryButtonClickListener(
+ cardPreference.setPrimaryButtonText(context.getString(R.string.learn_more));
+ cardPreference.setPrimaryButtonClickListener(
button -> button.startActivityForResult(
HelpUtils.getHelpIntent(
context,
context.getString(R.string.help_url_incompatible_charging),
/* backupContext */ ""), /* requestCode */ 0));
- cardPreference.setSecondaryButtonVisible(true);
- cardPreference.setSecondaryButtonContentDescription(context.getString(
+ cardPreference.setPrimaryButtonVisible(true);
+ cardPreference.setPrimaryButtonContentDescription(context.getString(
R.string.battery_tip_incompatible_charging_content_description));
}
}
diff --git a/src/com/android/settings/widget/CardPreference.java b/src/com/android/settings/widget/CardPreference.java
index 862a943..61114d9 100644
--- a/src/com/android/settings/widget/CardPreference.java
+++ b/src/com/android/settings/widget/CardPreference.java
@@ -30,9 +30,7 @@
import java.util.Optional;
-/**
- * Preference that wrapped by {@link MaterialCardView}, only support to set icon, title and summary
- */
+/** Preference that wrapped by {@link MaterialCardView} */
public class CardPreference extends Preference {
private View.OnClickListener mPrimaryBtnClickListener = null;
@@ -76,6 +74,12 @@
setSecondaryButtonVisible(mSecondaryButtonVisible);
}
+ /** Clear layout state if needed */
+ public void resetLayoutState() {
+ setPrimaryButtonVisible(false);
+ setSecondaryButtonVisible(false);
+ }
+
/**
* Register a callback to be invoked when the primary button is clicked.
*
@@ -141,6 +145,15 @@
}
/**
+ * Sets the text of content description on primary button.
+ *
+ * @param text text for the content description
+ */
+ public void setPrimaryButtonContentDescription(String text) {
+ mPrimaryButton.ifPresent(button -> button.setContentDescription(text));
+ }
+
+ /**
* Sets the text of content description on secondary button.
*
* @param text text for the content description
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
index 87fc0dd..3513168 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
@@ -18,13 +18,16 @@
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
+import android.view.View;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.IdRes;
import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
+import com.android.settings.widget.CardPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.testutils.DrawableTestHelper;
@@ -81,6 +84,21 @@
}
@Test
+ public void updatePreference_resetLayoutState() {
+ mContext.setTheme(R.style.Theme_Settings);
+ PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
+ View.inflate(mContext, R.layout.card_preference_layout, /* parent= */ null));
+ CardPreference cardPreference = new CardPreference(mContext);
+ cardPreference.onBindViewHolder(holder);
+ cardPreference.setPrimaryButtonVisible(true);
+
+ mBatteryTip.updatePreference(cardPreference);
+
+ View view = holder.findViewById(R.id.card_preference_buttons);
+ assertThat(view.getVisibility()).isEqualTo(View.GONE);
+ }
+
+ @Test
public void tipOrder_orderUnique() {
final List<Integer> orders = new ArrayList<>();
for (int i = 0, size = BatteryTip.TIP_ORDER.size(); i < size; i++) {
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/IncompatibleChargerTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/IncompatibleChargerTipTest.java
index 3aad061..9f74e1b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/IncompatibleChargerTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/IncompatibleChargerTipTest.java
@@ -109,13 +109,13 @@
mIncompatibleChargerTip.updatePreference(mCardPreference);
- verify(mCardPreference).setSecondaryButtonText(expected);
+ verify(mCardPreference).setPrimaryButtonText(expected);
}
@Test
public void updatePreference_shouldSetSecondaryButtonVisible() {
mIncompatibleChargerTip.updatePreference(mCardPreference);
- verify(mCardPreference).setSecondaryButtonVisible(true);
+ verify(mCardPreference).setPrimaryButtonVisible(true);
}
private String getLastErrorLog() {
diff --git a/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java
index eba447b..e26643f 100644
--- a/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java
@@ -6,7 +6,7 @@
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *Visibility_setGoneForPrimaryButton_buttonGroupIsGone
* 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.
@@ -48,8 +48,8 @@
context.setTheme(R.style.Theme_Settings);
mCardPreference = new CardPreference(context);
- View rootView = View.inflate(context, R.layout.card_preference_layout, /* parent= */ null);
- mHolder = PreferenceViewHolder.createInstanceForTests(rootView);
+ mHolder = PreferenceViewHolder.createInstanceForTests(
+ View.inflate(context, R.layout.card_preference_layout, /* parent= */ null));
}
@Test
@@ -63,14 +63,14 @@
}
@Test
- public void onBindViewHolder_noButtonVisible_buttonsLayoutShouldBeGone() {
+ public void onBindViewHolder_noButtonVisible_buttonsLayoutIsGone() {
mCardPreference.onBindViewHolder(mHolder);
assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
}
@Test
- public void onBindViewHolder_setPrimaryButtonVisibility_buttonsLayoutShouldBeVisible() {
+ public void onBindViewHolder_setPrimaryButtonVisibility_buttonsLayoutIsVisible() {
mCardPreference.setPrimaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder);
@@ -79,7 +79,7 @@
}
@Test
- public void onBindViewHolder_setPrimaryButtonVisibility_shouldApplyToPrimaryButton() {
+ public void onBindViewHolder_setPrimaryButtonVisibilityToVisible() {
mCardPreference.setPrimaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder);
@@ -88,7 +88,7 @@
}
@Test
- public void onBindViewHolder_setSecondaryButtonVisibility_buttonsLayoutShouldBeVisible() {
+ public void onBindViewHolder_setSecondaryButtonVisibility_buttonsLayoutIsVisible() {
mCardPreference.setSecondaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder);
@@ -97,7 +97,7 @@
}
@Test
- public void onBindViewHolder_setSecondaryButtonVisibility_shouldApplyToSecondaryButton() {
+ public void onBindViewHolder_setSecondaryButtonVisibilityToVisible() {
mCardPreference.setSecondaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder);
@@ -106,7 +106,7 @@
}
@Test
- public void onBindViewHolder_setPrimaryButtonText_shouldApplyToPrimaryButton() {
+ public void onBindViewHolder_setPrimaryButtonTextToExpectedText() {
String expectedText = "primary-button";
mCardPreference.setPrimaryButtonText(expectedText);
@@ -116,7 +116,7 @@
}
@Test
- public void onBindViewHolder_setSecondaryButtonText_shouldApplyToSecondaryButton() {
+ public void onBindViewHolder_setSecondaryButtonTextToExpectedText() {
String expectedText = "secondary-button";
mCardPreference.setSecondaryButtonText(expectedText);
@@ -140,7 +140,7 @@
}
@Test
- public void performClickOnPrimaryButton_shouldCalledClickListener() {
+ public void performClickOnPrimaryButton_callClickListener() {
final boolean[] hasCalled = {false};
View.OnClickListener clickListener = v -> hasCalled[0] = true;
mCardPreference.setPrimaryButtonClickListener(clickListener);
@@ -152,7 +152,7 @@
}
@Test
- public void performClickOnSecondaryButton_shouldCalledClickListener() {
+ public void performClickOnSecondaryButton_callClickListener() {
final boolean[] hasCalled = {false};
View.OnClickListener clickListener = v -> hasCalled[0] = true;
mCardPreference.setSecondaryButtonClickListener(clickListener);
@@ -178,7 +178,7 @@
}
@Test
- public void setPrimaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible() {
+ public void setPrimaryButtonVisibility_setTrueAfterBindViewHolder_isVisible() {
mCardPreference.setPrimaryButtonVisible(false);
mCardPreference.onBindViewHolder(mHolder);
@@ -198,7 +198,7 @@
}
@Test
- public void setPrimaryButtonText_setNull_shouldBeEmptyText() {
+ public void setPrimaryButtonText_setNull_isEmptyText() {
final String emptyString = "";
mCardPreference.setPrimaryButtonText("1234");
mCardPreference.onBindViewHolder(mHolder);
@@ -222,7 +222,7 @@
}
@Test
- public void setPrimaryButtonClickListener_setNull_shouldClearTheOnClickListener() {
+ public void setPrimaryButtonClickListener_setNull_clearTheOnClickListener() {
final String[] hasCalled = {"not called"};
View.OnClickListener clickListener = v -> hasCalled[0] = "called once";
mCardPreference.setPrimaryButtonClickListener(clickListener);
@@ -235,7 +235,7 @@
}
@Test
- public void setSecondaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible() {
+ public void setSecondaryButtonVisibility_setTrueAfterBindViewHolder_isVisible() {
mCardPreference.setSecondaryButtonVisible(false);
mCardPreference.onBindViewHolder(mHolder);
@@ -255,7 +255,7 @@
}
@Test
- public void setSecondaryButtonText_setNull_shouldBeEmptyText() {
+ public void setSecondaryButtonText_setNull_isEmptyText() {
String emptyString = "";
mCardPreference.setSecondaryButtonText("1234");
mCardPreference.onBindViewHolder(mHolder);
@@ -279,7 +279,7 @@
}
@Test
- public void setSecondaryButtonClickListener_setNull_shouldClearTheOnClickListener() {
+ public void setSecondaryButtonClickListener_setNull_clearTheOnClickListener() {
final String[] hasCalled = {"not called"};
View.OnClickListener clickListener = v -> hasCalled[0] = "called once";
mCardPreference.setSecondaryButtonClickListener(clickListener);
@@ -292,8 +292,7 @@
}
@Test
- public void
- setPrimaryButtonVisibility_onlyPrimaryButtonVisible_setGone_buttonGroupShouldBeGone() {
+ public void setPrimaryButtonVisibility_setGoneForSecondaryButton_buttonGroupIsGone() {
mCardPreference.setPrimaryButtonVisible(true);
mCardPreference.setSecondaryButtonVisible(false);
mCardPreference.onBindViewHolder(mHolder);
@@ -307,8 +306,7 @@
}
@Test
- public void
- setSecondaryButtonVisibility_only2ndButtonVisible_setGone_buttonGroupShouldBeGone() {
+ public void setSecondaryButtonVisibility_setGoneForPrimaryButton_buttonGroupIsGone() {
mCardPreference.setPrimaryButtonVisible(false);
mCardPreference.setSecondaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder);
@@ -321,6 +319,17 @@
assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
}
+ @Test
+ public void resetLayoutState_buttonGroupIsGone() {
+ mCardPreference.setPrimaryButtonVisible(true);
+ mCardPreference.setSecondaryButtonVisible(true);
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.resetLayoutState();
+
+ assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
+ }
+
private View getCardPreferenceButtonsView() {
return mHolder.findViewById(R.id.card_preference_buttons);
}