diff --git a/res/layout/power_usage_time.xml b/res/layout/power_usage_time.xml deleted file mode 100644 index bad68f4517f..00000000000 --- a/res/layout/power_usage_time.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/res/layout/anomaly_app_item_preference.xml b/res/layout/warning_frame_preference.xml similarity index 87% rename from res/layout/anomaly_app_item_preference.xml rename to res/layout/warning_frame_preference.xml index 681fe68339a..4e624ce1efc 100644 --- a/res/layout/anomaly_app_item_preference.xml +++ b/res/layout/warning_frame_preference.xml @@ -22,7 +22,7 @@ - - - + \ No newline at end of file diff --git a/src/com/android/settings/fuelgauge/PowerUsageTimeController.java b/src/com/android/settings/fuelgauge/PowerUsageTimeController.java index 0dfdd5d3238..e01a95c99a6 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageTimeController.java +++ b/src/com/android/settings/fuelgauge/PowerUsageTimeController.java @@ -93,10 +93,10 @@ public class PowerUsageTimeController extends BasePreferenceController { || (summaryTimeMs == 0 && !TextUtils.equals(anomalyHintKey, preference.getKey()))) { return false; } - preference.setTimeTitle(mContext.getString(titleResId)); - preference.setTimeSummary(getPowerUsageTimeInfo(summaryTimeMs)); + preference.setTitle(mContext.getString(titleResId)); + preference.setSummary(getPowerUsageTimeInfo(summaryTimeMs)); if (TextUtils.equals(anomalyHintKey, preference.getKey())) { - preference.setAnomalyHint(anomalyHintText); + preference.setHint(anomalyHintText); } preference.setVisible(true); return true; diff --git a/src/com/android/settings/fuelgauge/PowerUsageTimePreference.java b/src/com/android/settings/fuelgauge/PowerUsageTimePreference.java index 16c7770181b..d2f39ff5f19 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageTimePreference.java +++ b/src/com/android/settings/fuelgauge/PowerUsageTimePreference.java @@ -17,74 +17,17 @@ package com.android.settings.fuelgauge; import android.content.Context; -import android.text.TextUtils; import android.util.AttributeSet; -import android.view.View; -import android.widget.TextView; -import androidx.annotation.VisibleForTesting; -import androidx.preference.Preference; -import androidx.preference.PreferenceViewHolder; - -import com.android.settings.R; +import com.android.settingslib.widget.GroupSectionDividerMixin; /** Custom preference for displaying the app power usage time. */ -public class PowerUsageTimePreference extends Preference { +public class PowerUsageTimePreference extends WarningFramePreference implements + GroupSectionDividerMixin { private static final String TAG = "PowerUsageTimePreference"; - @VisibleForTesting CharSequence mTimeTitle; - @VisibleForTesting CharSequence mTimeSummary; - @VisibleForTesting CharSequence mAnomalyHintText; - public PowerUsageTimePreference(Context context, AttributeSet attrs) { super(context, attrs); - setLayoutResource(R.layout.power_usage_time); - } - - void setTimeTitle(CharSequence timeTitle) { - if (!TextUtils.equals(mTimeTitle, timeTitle)) { - mTimeTitle = timeTitle; - notifyChanged(); - } - } - - void setTimeSummary(CharSequence timeSummary) { - if (!TextUtils.equals(mTimeSummary, timeSummary)) { - mTimeSummary = timeSummary; - notifyChanged(); - } - } - - void setAnomalyHint(CharSequence anomalyHintText) { - if (!TextUtils.equals(mAnomalyHintText, anomalyHintText)) { - mAnomalyHintText = anomalyHintText; - notifyChanged(); - } - } - - private void showAnomalyHint(PreferenceViewHolder view) { - if (TextUtils.isEmpty(mAnomalyHintText)) { - return; - } - final View anomalyHintView = view.findViewById(R.id.anomaly_hints); - if (anomalyHintView == null) { - return; - } - final TextView warningInfo = anomalyHintView.findViewById(R.id.warning_info); - if (warningInfo == null) { - return; - } - warningInfo.setText(mAnomalyHintText); - anomalyHintView.setVisibility(View.VISIBLE); - } - - @Override - public void onBindViewHolder(PreferenceViewHolder view) { - super.onBindViewHolder(view); - - ((TextView) view.findViewById(R.id.time_title)).setText(mTimeTitle); - ((TextView) view.findViewById(R.id.time_summary)).setText(mTimeSummary); - - showAnomalyHint(view); + setSelectable(false); } } diff --git a/src/com/android/settings/fuelgauge/WarningFramePreference.java b/src/com/android/settings/fuelgauge/WarningFramePreference.java new file mode 100644 index 00000000000..ba8685a4ccf --- /dev/null +++ b/src/com/android/settings/fuelgauge/WarningFramePreference.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.fuelgauge; + +import android.annotation.Nullable; +import android.content.Context; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.Space; +import android.widget.TextView; + +import androidx.preference.Preference; +import androidx.preference.PreferenceViewHolder; + +import com.android.settings.R; +import com.android.settingslib.Utils; + +/** + * Custom preference for displaying the {@link Preference} with an optional hint chip. + */ +public class WarningFramePreference extends Preference { + private final int mTitleColorNormal; + private final int mSummaryColorNormal; + + @Nullable private CharSequence mHintText; + + public WarningFramePreference(Context context, AttributeSet attrs) { + super(context, attrs); + setLayoutResource(R.layout.warning_frame_preference); + mTitleColorNormal = + Utils.getColorAttrDefaultColor(context, android.R.attr.textColorPrimary); + mSummaryColorNormal = + Utils.getColorAttrDefaultColor(context, android.R.attr.textColorSecondary); + } + + /** Sets the text of hint to show. */ + public void setHint(@Nullable CharSequence hintText) { + if (!TextUtils.equals(mHintText, hintText)) { + mHintText = hintText; + notifyChanged(); + } + } + + @Override + public void onBindViewHolder(PreferenceViewHolder view) { + super.onBindViewHolder(view); + + final LinearLayout warningChipFrame = + (LinearLayout) view.findViewById(R.id.warning_chip_frame); + final Space warningPaddingPlaceHolder = + warningChipFrame.findViewById(R.id.warning_padding_placeholder); + warningPaddingPlaceHolder.setVisibility(getIcon() != null ? View.VISIBLE : View.GONE); + if (!TextUtils.isEmpty(mHintText)) { + ((TextView) warningChipFrame.findViewById(R.id.warning_info)).setText(mHintText); + warningChipFrame.setVisibility(View.VISIBLE); + } else { + warningChipFrame.setVisibility(View.GONE); + } + ((TextView) view.findViewById(android.R.id.title)).setTextColor(mTitleColorNormal); + ((TextView) view.findViewById(android.R.id.summary)).setTextColor(mSummaryColorNormal); + } +} + diff --git a/src/com/android/settings/fuelgauge/batteryusage/AnomalyAppItemPreference.java b/src/com/android/settings/fuelgauge/batteryusage/AnomalyAppItemPreference.java deleted file mode 100644 index 592d30833ed..00000000000 --- a/src/com/android/settings/fuelgauge/batteryusage/AnomalyAppItemPreference.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.fuelgauge.batteryusage; - -import android.annotation.Nullable; -import android.content.Context; -import android.text.TextUtils; -import android.view.View; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.preference.PreferenceViewHolder; - -import com.android.settings.R; - -class AnomalyAppItemPreference extends PowerGaugePreference { - - private static final String TAG = "AnomalyAppItemPreference"; - - private CharSequence mAnomalyHintText; - - AnomalyAppItemPreference(Context context) { - super(context, /* attrs */ null); - setLayoutResource(R.layout.anomaly_app_item_preference); - } - - void setAnomalyHint(@Nullable CharSequence anomalyHintText) { - if (!TextUtils.equals(mAnomalyHintText, anomalyHintText)) { - mAnomalyHintText = anomalyHintText; - notifyChanged(); - } - } - - @Override - public void onBindViewHolder(PreferenceViewHolder viewHolder) { - super.onBindViewHolder(viewHolder); - final LinearLayout warningChipView = - (LinearLayout) viewHolder.findViewById(R.id.warning_chip); - - if (!TextUtils.isEmpty(mAnomalyHintText)) { - ((TextView) warningChipView.findViewById(R.id.warning_info)).setText(mAnomalyHintText); - warningChipView.setVisibility(View.VISIBLE); - } else { - warningChipView.setVisibility(View.GONE); - } - } -} diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java index 6fd4eb5449f..280fa185e0c 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java @@ -381,15 +381,15 @@ public class BatteryUsageBreakdownController extends BasePreferenceController continue; } final String prefKey = entry.getKey(); - AnomalyAppItemPreference preference = mRootPreferenceGroup.findPreference(prefKey); + PowerGaugePreference preference = mRootPreferenceGroup.findPreference(prefKey); if (preference != null) { isAdded = true; } else { - preference = (AnomalyAppItemPreference) mPreferenceCache.get(prefKey); + preference = (PowerGaugePreference) mPreferenceCache.get(prefKey); } // Creates new instance if cached preference is not found. if (preference == null) { - preference = new AnomalyAppItemPreference(mPrefContext); + preference = new PowerGaugePreference(mPrefContext); preference.setKey(prefKey); mPreferenceCache.put(prefKey, preference); } @@ -398,7 +398,7 @@ public class BatteryUsageBreakdownController extends BasePreferenceController preference.setOrder(++preferenceOrder); preference.setSingleLineTitle(true); // Updates App item preference style - preference.setAnomalyHint(isAnomalyBatteryDiffEntry(entry) ? mAnomalyHintString : null); + preference.setHint(isAnomalyBatteryDiffEntry(entry) ? mAnomalyHintString : null); // Sets the BatteryDiffEntry to preference for launching detailed page. preference.setBatteryDiffEntry(entry); preference.setSelectable(entry.validForRestriction()); diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java index 1fc9abd4c5e..866b9ae6e05 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java +++ b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java @@ -28,7 +28,7 @@ import androidx.preference.PreferenceViewHolder; import com.android.settings.R; import com.android.settings.Utils; -import com.android.settingslib.widget.AppPreference; +import com.android.settings.fuelgauge.WarningFramePreference; /** * Custom preference for displaying battery usage info as a bar and an icon on the left for the @@ -37,7 +37,7 @@ import com.android.settingslib.widget.AppPreference; *

The battery usage info could be usage percentage or usage time. The preference won't show any * icon if it is null. */ -public class PowerGaugePreference extends AppPreference { +public class PowerGaugePreference extends WarningFramePreference { // Please see go/battery-usage-app-list-alpha private static final float SELECTABLE_ALPHA = 1f; @@ -51,7 +51,6 @@ public class PowerGaugePreference extends AppPreference { private CharSequence mContentDescription; private CharSequence mProgress; private CharSequence mProgressContentDescription; - private boolean mShowAnomalyIcon; public PowerGaugePreference( Context context, Drawable icon, CharSequence contentDescription, BatteryEntry info) { @@ -79,7 +78,6 @@ public class PowerGaugePreference extends AppPreference { setWidgetLayoutResource(R.layout.preference_widget_summary); mInfo = info; mContentDescription = contentDescription; - mShowAnomalyIcon = false; mTitleColorNormal = Utils.getColorAttrDefaultColor(context, android.R.attr.textColorPrimary); } @@ -108,17 +106,6 @@ public class PowerGaugePreference extends AppPreference { return mProgress.toString(); } - /** Sets whether to show anomaly icon */ - public void shouldShowAnomalyIcon(boolean showAnomalyIcon) { - mShowAnomalyIcon = showAnomalyIcon; - notifyChanged(); - } - - /** Gets whether to show anomaly icon */ - public boolean showAnomalyIcon() { - return mShowAnomalyIcon; - } - public void setBatteryDiffEntry(BatteryDiffEntry entry) { mBatteryDiffEntry = entry; } @@ -149,12 +136,6 @@ public class PowerGaugePreference extends AppPreference { if (!TextUtils.isEmpty(mProgressContentDescription)) { subtitle.setContentDescription(mProgressContentDescription); } - if (mShowAnomalyIcon) { - subtitle.setCompoundDrawablesRelativeWithIntrinsicBounds( - R.drawable.ic_warning_24dp, 0, 0, 0); - } else { - subtitle.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0); - } if (mContentDescription != null) { final TextView titleView = (TextView) view.findViewById(android.R.id.title); titleView.setContentDescription(mContentDescription); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageTimeControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageTimeControllerTest.java index e8eb1260bcd..60ece9df424 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageTimeControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageTimeControllerTest.java @@ -99,9 +99,9 @@ public final class PowerUsageTimeControllerTest { /* anomalyHintText= */ null); verifyOnePreferenceInvisible(mBackgroundTimePreference); - verify(mScreenTimePreference).setTimeTitle("Screen time"); - verify(mScreenTimePreference).setTimeSummary("1 min"); - verify(mScreenTimePreference, never()).setAnomalyHint(anyString()); + verify(mScreenTimePreference).setTitle("Screen time"); + verify(mScreenTimePreference).setSummary("1 min"); + verify(mScreenTimePreference, never()).setHint(anyString()); } @Test @@ -117,9 +117,9 @@ public final class PowerUsageTimeControllerTest { /* anomalyHintText= */ null); verifyOnePreferenceInvisible(mScreenTimePreference); - verify(mBackgroundTimePreference).setTimeTitle("Background time"); - verify(mBackgroundTimePreference).setTimeSummary("2 min"); - verify(mBackgroundTimePreference, never()).setAnomalyHint(anyString()); + verify(mBackgroundTimePreference).setTitle("Background time"); + verify(mBackgroundTimePreference).setSummary("2 min"); + verify(mBackgroundTimePreference, never()).setHint(anyString()); } @Test @@ -135,12 +135,12 @@ public final class PowerUsageTimeControllerTest { /* anomalyHintText= */ null); verifyAllPreferencesVisible(true); - verify(mScreenTimePreference).setTimeTitle("Screen time"); - verify(mScreenTimePreference).setTimeSummary("1 min"); - verify(mScreenTimePreference, never()).setAnomalyHint(anyString()); - verify(mBackgroundTimePreference).setTimeTitle("Background time"); - verify(mBackgroundTimePreference).setTimeSummary("2 min"); - verify(mBackgroundTimePreference, never()).setAnomalyHint(anyString()); + verify(mScreenTimePreference).setTitle("Screen time"); + verify(mScreenTimePreference).setSummary("1 min"); + verify(mScreenTimePreference, never()).setHint(anyString()); + verify(mBackgroundTimePreference).setTitle("Background time"); + verify(mBackgroundTimePreference).setSummary("2 min"); + verify(mBackgroundTimePreference, never()).setHint(anyString()); verify(mPowerUsageTimeCategory).setTitle("App usage for 12 am-2 am"); } @@ -173,8 +173,8 @@ public final class PowerUsageTimeControllerTest { /* anomalyHintText= */ null); verifyAllPreferencesVisible(true); - verify(mScreenTimePreference).setTimeSummary("1 min"); - verify(mBackgroundTimePreference).setTimeSummary("Less than a minute"); + verify(mScreenTimePreference).setSummary("1 min"); + verify(mBackgroundTimePreference).setSummary("Less than a minute"); } @Test @@ -190,8 +190,8 @@ public final class PowerUsageTimeControllerTest { /* anomalyHintText= */ null); verifyAllPreferencesVisible(true); - verify(mScreenTimePreference).setTimeSummary("Less than a minute"); - verify(mBackgroundTimePreference).setTimeSummary("2 min"); + verify(mScreenTimePreference).setSummary("Less than a minute"); + verify(mBackgroundTimePreference).setSummary("2 min"); } @Test @@ -207,8 +207,8 @@ public final class PowerUsageTimeControllerTest { /* anomalyHintText= */ null); verifyAllPreferencesVisible(true); - verify(mScreenTimePreference).setTimeSummary("Less than a minute"); - verify(mBackgroundTimePreference).setTimeSummary("Less than a minute"); + verify(mScreenTimePreference).setSummary("Less than a minute"); + verify(mBackgroundTimePreference).setSummary("Less than a minute"); } @Test @@ -224,8 +224,8 @@ public final class PowerUsageTimeControllerTest { TEST_ANOMALY_HINT_TEXT); verifyAllPreferencesVisible(true); - verify(mScreenTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT); - verify(mBackgroundTimePreference, never()).setAnomalyHint(anyString()); + verify(mScreenTimePreference).setHint(TEST_ANOMALY_HINT_TEXT); + verify(mBackgroundTimePreference, never()).setHint(anyString()); } @Test @@ -241,8 +241,8 @@ public final class PowerUsageTimeControllerTest { TEST_ANOMALY_HINT_TEXT); verifyAllPreferencesVisible(true); - verify(mScreenTimePreference, never()).setAnomalyHint(anyString()); - verify(mBackgroundTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT); + verify(mScreenTimePreference, never()).setHint(anyString()); + verify(mBackgroundTimePreference).setHint(TEST_ANOMALY_HINT_TEXT); } @Test @@ -258,9 +258,9 @@ public final class PowerUsageTimeControllerTest { TEST_ANOMALY_HINT_TEXT); verifyAllPreferencesVisible(true); - verify(mScreenTimePreference).setTimeSummary("Less than a minute"); - verify(mScreenTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT); - verify(mBackgroundTimePreference, never()).setAnomalyHint(anyString()); + verify(mScreenTimePreference).setSummary("Less than a minute"); + verify(mScreenTimePreference).setHint(TEST_ANOMALY_HINT_TEXT); + verify(mBackgroundTimePreference, never()).setHint(anyString()); } private void verifySetPrefToVisible(Preference pref, boolean isVisible) { diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java index c4cbb988ae6..7ad7c491239 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java @@ -67,7 +67,7 @@ public final class BatteryUsageBreakdownControllerTest { @Mock private PreferenceGroup mRootPreferenceGroup; @Mock private Drawable mDrawable; @Mock private BatteryHistEntry mBatteryHistEntry; - @Mock private AnomalyAppItemPreference mAnomalyAppItemPreference; + @Mock private PowerGaugePreference mPowerGaugePreference; private Context mContext; private FakeFeatureFactory mFeatureFactory; @@ -131,13 +131,13 @@ public final class BatteryUsageBreakdownControllerTest { BatteryDiffEntry.sResourceCache.put( "fakeBatteryDiffEntryKey", new BatteryEntry.NameAndIcon("fakeName", /* icon= */ null, /* iconId= */ 1)); - doReturn(mAnomalyAppItemPreference).when(mRootPreferenceGroup).findPreference(PREF_KEY); + doReturn(mPowerGaugePreference).when(mRootPreferenceGroup).findPreference(PREF_KEY); } @Test public void onDestroy_clearPreferenceCacheAndPreferenceGroupRemoveAll() { // Ensures the testing environment is correct. - mBatteryUsageBreakdownController.mPreferenceCache.put(PREF_KEY, mAnomalyAppItemPreference); + mBatteryUsageBreakdownController.mPreferenceCache.put(PREF_KEY, mPowerGaugePreference); assertThat(mBatteryUsageBreakdownController.mPreferenceCache).hasSize(1); mBatteryUsageBreakdownController.onDestroy(); @@ -204,25 +204,25 @@ public final class BatteryUsageBreakdownControllerTest { @Test public void removeAndCacheAllUnusedPreferences_removePref_buildCacheAndRemoveAllPreference() { doReturn(1).when(mRootPreferenceGroup).getPreferenceCount(); - doReturn(mAnomalyAppItemPreference).when(mRootPreferenceGroup).getPreference(0); + doReturn(mPowerGaugePreference).when(mRootPreferenceGroup).getPreference(0); doReturn(PREF_KEY2).when(mBatteryHistEntry).getKey(); - doReturn(PREF_KEY).when(mAnomalyAppItemPreference).getKey(); + doReturn(PREF_KEY).when(mPowerGaugePreference).getKey(); // Ensures the testing data is correct. assertThat(mBatteryUsageBreakdownController.mPreferenceCache).isEmpty(); mBatteryUsageBreakdownController.removeAndCacheAllUnusedPreferences(); assertThat(mBatteryUsageBreakdownController.mPreferenceCache.get(PREF_KEY)) - .isEqualTo(mAnomalyAppItemPreference); - verify(mRootPreferenceGroup).removePreference(mAnomalyAppItemPreference); + .isEqualTo(mPowerGaugePreference); + verify(mRootPreferenceGroup).removePreference(mPowerGaugePreference); } @Test public void removeAndCacheAllUnusedPreferences_keepPref_KeepAllPreference() { doReturn(1).when(mRootPreferenceGroup).getPreferenceCount(); - doReturn(mAnomalyAppItemPreference).when(mRootPreferenceGroup).getPreference(0); + doReturn(mPowerGaugePreference).when(mRootPreferenceGroup).getPreference(0); doReturn(PREF_KEY).when(mBatteryDiffEntry).getKey(); - doReturn(PREF_KEY).when(mAnomalyAppItemPreference).getKey(); + doReturn(PREF_KEY).when(mPowerGaugePreference).getKey(); // Ensures the testing data is correct. assertThat(mBatteryUsageBreakdownController.mPreferenceCache).isEmpty(); @@ -246,11 +246,11 @@ public final class BatteryUsageBreakdownControllerTest { @Test public void handlePreferenceTreeClick_forAppEntry_returnTrue() { mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY; - doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry(); + doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry(); assertThat( mBatteryUsageBreakdownController.handlePreferenceTreeClick( - mAnomalyAppItemPreference)) + mPowerGaugePreference)) .isTrue(); verify(mMetricsFeatureProvider) .action( @@ -264,11 +264,11 @@ public final class BatteryUsageBreakdownControllerTest { @Test public void handlePreferenceTreeClick_forSystemEntry_returnTrue() { mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_UID_BATTERY; - doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry(); + doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry(); assertThat( mBatteryUsageBreakdownController.handlePreferenceTreeClick( - mAnomalyAppItemPreference)) + mPowerGaugePreference)) .isTrue(); verify(mMetricsFeatureProvider) .action( diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java index f64ef495aeb..0bad0a0943c 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java @@ -19,19 +19,20 @@ import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.graphics.drawable.Drawable; -import android.graphics.drawable.VectorDrawable; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; -import android.widget.TextView; +import android.widget.Space; import androidx.preference.PreferenceViewHolder; import com.android.settings.R; +import com.android.settingslib.widget.SettingsThemeHelper; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -48,17 +49,17 @@ public class PowerGaugePreferenceTest { private View mWidgetView; private PreferenceViewHolder mPreferenceViewHolder; + @Mock Drawable mMockIcon; + @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; + mPowerGaugePreference = new PowerGaugePreference(mContext); mRootView = LayoutInflater.from(mContext) - .inflate( - com.android.settingslib.widget.preference.app.R.layout - .preference_app, - null); + .inflate(mPowerGaugePreference.getLayoutResource(), null); mWidgetView = LayoutInflater.from(mContext).inflate(R.layout.preference_widget_summary, null); final LinearLayout widgetFrame = mRootView.findViewById(android.R.id.widget_frame); @@ -66,31 +67,56 @@ public class PowerGaugePreferenceTest { widgetFrame.addView(mWidgetView); mPreferenceViewHolder = PreferenceViewHolder.createInstanceForTests(mRootView); - mPowerGaugePreference = new PowerGaugePreference(mContext); assertThat(mPowerGaugePreference.getLayoutResource()) - .isEqualTo(com.android.settingslib.widget.preference.app.R.layout.preference_app); + .isEqualTo( + SettingsThemeHelper.isExpressiveTheme(mContext) + ? R.layout.expressive_warning_frame_preference + : R.layout.warning_frame_preference); } @Test - public void testOnBindViewHolder_showAnomaly_bindAnomalyIcon() { - mPowerGaugePreference.shouldShowAnomalyIcon(true); + public void testOnBindViewHolder_showHint_hasHintChip() { + mPowerGaugePreference.setHint("Hint Text"); + mPowerGaugePreference.setIcon(mMockIcon); mPowerGaugePreference.onBindViewHolder(mPreferenceViewHolder); - TextView widgetSummary = (TextView) mPreferenceViewHolder.findViewById(R.id.widget_summary); - final Drawable[] drawables = widgetSummary.getCompoundDrawablesRelative(); + final LinearLayout warningChipFrame = + (LinearLayout) mPreferenceViewHolder.findViewById(R.id.warning_chip_frame); + final Space warningPaddingPlaceHolder = + warningChipFrame.findViewById(R.id.warning_padding_placeholder); - assertThat(drawables[0]).isInstanceOf(VectorDrawable.class); + assertThat(warningChipFrame.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(warningPaddingPlaceHolder.getVisibility()).isEqualTo(View.VISIBLE); } @Test - public void testOnBindViewHolder_notShowAnomaly_bindAnomalyIcon() { - mPowerGaugePreference.shouldShowAnomalyIcon(false); + public void testOnBindViewHolder_emptyHintText_withoutHintChip() { + mPowerGaugePreference.setHint(""); + mPowerGaugePreference.setIcon(mMockIcon); mPowerGaugePreference.onBindViewHolder(mPreferenceViewHolder); - TextView widgetSummary = (TextView) mPreferenceViewHolder.findViewById(R.id.widget_summary); - final Drawable[] drawables = widgetSummary.getCompoundDrawablesRelative(); + final LinearLayout warningChipFrame = + (LinearLayout) mPreferenceViewHolder.findViewById(R.id.warning_chip_frame); + final Space warningPaddingPlaceholder = + warningChipFrame.findViewById(R.id.warning_padding_placeholder); - assertThat(drawables[0]).isNull(); + assertThat(warningChipFrame.getVisibility()).isEqualTo(View.GONE); + assertThat(warningPaddingPlaceholder.getVisibility()).isEqualTo(View.VISIBLE); + } + + @Test + public void testOnBindViewHolder_noAppIconWithHintText_hasChipWithoutPaddingPlaceholder() { + mPowerGaugePreference.setHint("Anomaly Hint Text"); + mPowerGaugePreference.setIcon(null); + mPowerGaugePreference.onBindViewHolder(mPreferenceViewHolder); + + final LinearLayout warningChipFrame = + (LinearLayout) mPreferenceViewHolder.findViewById(R.id.warning_chip_frame); + final Space warningPaddingPlaceHolder = + warningChipFrame.findViewById(R.id.warning_padding_placeholder); + + assertThat(warningChipFrame.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(warningPaddingPlaceHolder.getVisibility()).isEqualTo(View.GONE); } @Test