Fix banner tip buttons visibility and update incompatible tip

Fix the battery settings banner tip buttons visibility not reset issue
and update the incompatible charging tip into the colored primary button

Bug: 246960554
Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.fuelgauge.*
Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.widget.CardPreferenceTest
Change-Id: I9b72fccc7838d974d3b60d0f9684780841623cbb
This commit is contained in:
ykhung
2023-04-18 18:05:08 +08:00
committed by YK Hung
parent 2a0d6ead1a
commit ab07b53ea1
7 changed files with 81 additions and 36 deletions

View File

@@ -67,12 +67,15 @@
android:maxLines="10" android:maxLines="10"
style="@style/PreferenceSummaryTextStyle"/> style="@style/PreferenceSummaryTextStyle"/>
<RelativeLayout <LinearLayout
android:id="@+id/card_preference_buttons" android:id="@+id/card_preference_buttons"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_below="@android:id/summary" android:layout_below="@android:id/summary"
android:gravity="center_vertical|end"
android:orientation="horizontal"
android:paddingEnd="20dp"
android:visibility="gone"> android:visibility="gone">
<Button <Button
android:id="@android:id/button1" android:id="@android:id/button1"
@@ -80,17 +83,15 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_marginStart="20dp" android:layout_marginStart="20dp"
android:layout_toStartOf="@android:id/button2"
android:visibility="gone"/> android:visibility="gone"/>
<Button <Button
android:id="@android:id/button2" android:id="@android:id/button2"
style="@style/CardPreferenceBorderlessButton" style="@style/CardPreferenceBorderlessButton"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_marginHorizontal="20dp" android:layout_marginStart="20dp"
android:layout_alignParentEnd="true"
android:visibility="gone"/> android:visibility="gone"/>
</RelativeLayout> </LinearLayout>
</RelativeLayout> </RelativeLayout>
<!-- Preference should place its actual preference widget here. --> <!-- Preference should place its actual preference widget here. -->

View File

@@ -166,6 +166,10 @@ public abstract class BatteryTip implements Comparable<BatteryTip>, Parcelable {
if (iconTintColorId != View.NO_ID) { if (iconTintColorId != View.NO_ID) {
preference.getIcon().setTint(context.getColor(iconTintColorId)); 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. */ /** Returns the color resid for tinting {@link #getIconId()} or {@link View#NO_ID} if none. */

View File

@@ -73,15 +73,15 @@ public final class IncompatibleChargerTip extends BatteryTip {
} }
cardPreference.setSelectable(false); cardPreference.setSelectable(false);
cardPreference.setSecondaryButtonText(context.getString(R.string.learn_more)); cardPreference.setPrimaryButtonText(context.getString(R.string.learn_more));
cardPreference.setSecondaryButtonClickListener( cardPreference.setPrimaryButtonClickListener(
button -> button.startActivityForResult( button -> button.startActivityForResult(
HelpUtils.getHelpIntent( HelpUtils.getHelpIntent(
context, context,
context.getString(R.string.help_url_incompatible_charging), context.getString(R.string.help_url_incompatible_charging),
/* backupContext */ ""), /* requestCode */ 0)); /* backupContext */ ""), /* requestCode */ 0));
cardPreference.setSecondaryButtonVisible(true); cardPreference.setPrimaryButtonVisible(true);
cardPreference.setSecondaryButtonContentDescription(context.getString( cardPreference.setPrimaryButtonContentDescription(context.getString(
R.string.battery_tip_incompatible_charging_content_description)); R.string.battery_tip_incompatible_charging_content_description));
} }
} }

View File

@@ -30,9 +30,7 @@ import com.google.android.material.card.MaterialCardView;
import java.util.Optional; import java.util.Optional;
/** /** Preference that wrapped by {@link MaterialCardView} */
* Preference that wrapped by {@link MaterialCardView}, only support to set icon, title and summary
*/
public class CardPreference extends Preference { public class CardPreference extends Preference {
private View.OnClickListener mPrimaryBtnClickListener = null; private View.OnClickListener mPrimaryBtnClickListener = null;
@@ -76,6 +74,12 @@ public class CardPreference extends Preference {
setSecondaryButtonVisible(mSecondaryButtonVisible); 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. * Register a callback to be invoked when the primary button is clicked.
* *
@@ -140,6 +144,15 @@ public class CardPreference extends Preference {
updateButtonGroupsVisibility(); updateButtonGroupsVisibility();
} }
/**
* 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. * Sets the text of content description on secondary button.
* *

View File

@@ -18,13 +18,16 @@ package com.android.settings.fuelgauge.batterytip.tips;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.content.Context; import android.content.Context;
import android.view.View;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import androidx.annotation.IdRes; import androidx.annotation.IdRes;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.widget.CardPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.testutils.DrawableTestHelper; import com.android.settingslib.testutils.DrawableTestHelper;
@@ -80,6 +83,21 @@ public class BatteryTipTest {
assertThat(parcelTip.needUpdate()).isTrue(); assertThat(parcelTip.needUpdate()).isTrue();
} }
@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 @Test
public void tipOrder_orderUnique() { public void tipOrder_orderUnique() {
final List<Integer> orders = new ArrayList<>(); final List<Integer> orders = new ArrayList<>();

View File

@@ -109,13 +109,13 @@ public final class IncompatibleChargerTipTest {
mIncompatibleChargerTip.updatePreference(mCardPreference); mIncompatibleChargerTip.updatePreference(mCardPreference);
verify(mCardPreference).setSecondaryButtonText(expected); verify(mCardPreference).setPrimaryButtonText(expected);
} }
@Test @Test
public void updatePreference_shouldSetSecondaryButtonVisible() { public void updatePreference_shouldSetSecondaryButtonVisible() {
mIncompatibleChargerTip.updatePreference(mCardPreference); mIncompatibleChargerTip.updatePreference(mCardPreference);
verify(mCardPreference).setSecondaryButtonVisible(true); verify(mCardPreference).setPrimaryButtonVisible(true);
} }
private String getLastErrorLog() { private String getLastErrorLog() {

View File

@@ -6,7 +6,7 @@
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *Visibility_setGoneForPrimaryButton_buttonGroupIsGone
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -48,8 +48,8 @@ public class CardPreferenceTest {
context.setTheme(R.style.Theme_Settings); context.setTheme(R.style.Theme_Settings);
mCardPreference = new CardPreference(context); mCardPreference = new CardPreference(context);
View rootView = View.inflate(context, R.layout.card_preference_layout, /* parent= */ null); mHolder = PreferenceViewHolder.createInstanceForTests(
mHolder = PreferenceViewHolder.createInstanceForTests(rootView); View.inflate(context, R.layout.card_preference_layout, /* parent= */ null));
} }
@Test @Test
@@ -63,14 +63,14 @@ public class CardPreferenceTest {
} }
@Test @Test
public void onBindViewHolder_noButtonVisible_buttonsLayoutShouldBeGone() { public void onBindViewHolder_noButtonVisible_buttonsLayoutIsGone() {
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE); assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
} }
@Test @Test
public void onBindViewHolder_setPrimaryButtonVisibility_buttonsLayoutShouldBeVisible() { public void onBindViewHolder_setPrimaryButtonVisibility_buttonsLayoutIsVisible() {
mCardPreference.setPrimaryButtonVisible(true); mCardPreference.setPrimaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -79,7 +79,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void onBindViewHolder_setPrimaryButtonVisibility_shouldApplyToPrimaryButton() { public void onBindViewHolder_setPrimaryButtonVisibilityToVisible() {
mCardPreference.setPrimaryButtonVisible(true); mCardPreference.setPrimaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -88,7 +88,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void onBindViewHolder_setSecondaryButtonVisibility_buttonsLayoutShouldBeVisible() { public void onBindViewHolder_setSecondaryButtonVisibility_buttonsLayoutIsVisible() {
mCardPreference.setSecondaryButtonVisible(true); mCardPreference.setSecondaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -97,7 +97,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void onBindViewHolder_setSecondaryButtonVisibility_shouldApplyToSecondaryButton() { public void onBindViewHolder_setSecondaryButtonVisibilityToVisible() {
mCardPreference.setSecondaryButtonVisible(true); mCardPreference.setSecondaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -106,7 +106,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void onBindViewHolder_setPrimaryButtonText_shouldApplyToPrimaryButton() { public void onBindViewHolder_setPrimaryButtonTextToExpectedText() {
String expectedText = "primary-button"; String expectedText = "primary-button";
mCardPreference.setPrimaryButtonText(expectedText); mCardPreference.setPrimaryButtonText(expectedText);
@@ -116,7 +116,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void onBindViewHolder_setSecondaryButtonText_shouldApplyToSecondaryButton() { public void onBindViewHolder_setSecondaryButtonTextToExpectedText() {
String expectedText = "secondary-button"; String expectedText = "secondary-button";
mCardPreference.setSecondaryButtonText(expectedText); mCardPreference.setSecondaryButtonText(expectedText);
@@ -140,7 +140,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void performClickOnPrimaryButton_shouldCalledClickListener() { public void performClickOnPrimaryButton_callClickListener() {
final boolean[] hasCalled = {false}; final boolean[] hasCalled = {false};
View.OnClickListener clickListener = v -> hasCalled[0] = true; View.OnClickListener clickListener = v -> hasCalled[0] = true;
mCardPreference.setPrimaryButtonClickListener(clickListener); mCardPreference.setPrimaryButtonClickListener(clickListener);
@@ -152,7 +152,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void performClickOnSecondaryButton_shouldCalledClickListener() { public void performClickOnSecondaryButton_callClickListener() {
final boolean[] hasCalled = {false}; final boolean[] hasCalled = {false};
View.OnClickListener clickListener = v -> hasCalled[0] = true; View.OnClickListener clickListener = v -> hasCalled[0] = true;
mCardPreference.setSecondaryButtonClickListener(clickListener); mCardPreference.setSecondaryButtonClickListener(clickListener);
@@ -178,7 +178,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void setPrimaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible() { public void setPrimaryButtonVisibility_setTrueAfterBindViewHolder_isVisible() {
mCardPreference.setPrimaryButtonVisible(false); mCardPreference.setPrimaryButtonVisible(false);
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -198,7 +198,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void setPrimaryButtonText_setNull_shouldBeEmptyText() { public void setPrimaryButtonText_setNull_isEmptyText() {
final String emptyString = ""; final String emptyString = "";
mCardPreference.setPrimaryButtonText("1234"); mCardPreference.setPrimaryButtonText("1234");
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -222,7 +222,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void setPrimaryButtonClickListener_setNull_shouldClearTheOnClickListener() { public void setPrimaryButtonClickListener_setNull_clearTheOnClickListener() {
final String[] hasCalled = {"not called"}; final String[] hasCalled = {"not called"};
View.OnClickListener clickListener = v -> hasCalled[0] = "called once"; View.OnClickListener clickListener = v -> hasCalled[0] = "called once";
mCardPreference.setPrimaryButtonClickListener(clickListener); mCardPreference.setPrimaryButtonClickListener(clickListener);
@@ -235,7 +235,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void setSecondaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible() { public void setSecondaryButtonVisibility_setTrueAfterBindViewHolder_isVisible() {
mCardPreference.setSecondaryButtonVisible(false); mCardPreference.setSecondaryButtonVisible(false);
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -255,7 +255,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void setSecondaryButtonText_setNull_shouldBeEmptyText() { public void setSecondaryButtonText_setNull_isEmptyText() {
String emptyString = ""; String emptyString = "";
mCardPreference.setSecondaryButtonText("1234"); mCardPreference.setSecondaryButtonText("1234");
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -279,7 +279,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void setSecondaryButtonClickListener_setNull_shouldClearTheOnClickListener() { public void setSecondaryButtonClickListener_setNull_clearTheOnClickListener() {
final String[] hasCalled = {"not called"}; final String[] hasCalled = {"not called"};
View.OnClickListener clickListener = v -> hasCalled[0] = "called once"; View.OnClickListener clickListener = v -> hasCalled[0] = "called once";
mCardPreference.setSecondaryButtonClickListener(clickListener); mCardPreference.setSecondaryButtonClickListener(clickListener);
@@ -292,8 +292,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void public void setPrimaryButtonVisibility_setGoneForSecondaryButton_buttonGroupIsGone() {
setPrimaryButtonVisibility_onlyPrimaryButtonVisible_setGone_buttonGroupShouldBeGone() {
mCardPreference.setPrimaryButtonVisible(true); mCardPreference.setPrimaryButtonVisible(true);
mCardPreference.setSecondaryButtonVisible(false); mCardPreference.setSecondaryButtonVisible(false);
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -307,8 +306,7 @@ public class CardPreferenceTest {
} }
@Test @Test
public void public void setSecondaryButtonVisibility_setGoneForPrimaryButton_buttonGroupIsGone() {
setSecondaryButtonVisibility_only2ndButtonVisible_setGone_buttonGroupShouldBeGone() {
mCardPreference.setPrimaryButtonVisible(false); mCardPreference.setPrimaryButtonVisible(false);
mCardPreference.setSecondaryButtonVisible(true); mCardPreference.setSecondaryButtonVisible(true);
mCardPreference.onBindViewHolder(mHolder); mCardPreference.onBindViewHolder(mHolder);
@@ -321,6 +319,17 @@ public class CardPreferenceTest {
assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE); 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() { private View getCardPreferenceButtonsView() {
return mHolder.findViewById(R.id.card_preference_buttons); return mHolder.findViewById(R.id.card_preference_buttons);
} }