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);
     }