From 98a522c45c84516b976fbdcb1531f0e5826d078f Mon Sep 17 00:00:00 2001 From: pajacechen Date: Fri, 19 Jan 2024 22:27:32 +0800 Subject: [PATCH] Delete DockDefenderTip and Detector - remove dock defender - remove unused string Test: atest SettingsRoboTests Bug: 315748218 Flag: NA Change-Id: Ida4bb1d36a653d1787595212aac167d2f4dd3438 --- res/values/strings.xml | 12 - .../BatterySettingsFeatureProvider.java | 2 +- .../BatterySettingsFeatureProviderImpl.java | 3 +- .../batterytip/BatteryTipLoader.java | 4 +- .../detectors/DockDefenderDetector.java | 45 ---- .../batterytip/tips/DockDefenderTip.java | 180 --------------- .../batterytip/BatteryTipLoaderTest.java | 1 - .../detectors/DockDefenderDetectorTest.java | 153 ------------- .../batterytip/tips/DockDefenderTipTest.java | 209 ------------------ 9 files changed, 4 insertions(+), 605 deletions(-) delete mode 100644 src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetector.java delete mode 100644 src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java delete mode 100644 tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetectorTest.java delete mode 100644 tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTipTest.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 776e3f41093..61b1e6a90e9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5604,18 +5604,6 @@ Charging optimized to protect your battery To help extend your battery\'s lifespan, charging is optimized - - Charging optimized to protect your battery - - To help extend your battery\'s lifespan, charging is optimized while docked - - Charging optimized to protect your battery - - To help extend your battery\'s lifespan, charging is optimized while docked - - Charging to full - - To protect your battery, charging will be optimized the next time your tablet is docked Learn more about charging is paused diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java index 36ccdc61b50..cc333a53879 100644 --- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java @@ -35,5 +35,5 @@ public interface BatterySettingsFeatureProvider { boolean isBatteryInfoEnabled(Context context); /** A way to add more battery tip detectors. */ - void addBatteryTipDetector(Context context, List tips); + void addBatteryTipDetector(Context context, List tips, BatteryInfo batteryInfo); } diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java index badab69314d..f974b9d7df6 100644 --- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java @@ -41,5 +41,6 @@ public class BatterySettingsFeatureProviderImpl implements BatterySettingsFeatur } @Override - public void addBatteryTipDetector(Context context, List tips) {} + public void addBatteryTipDetector( + Context context, List tips, BatteryInfo batteryInfo) {} } diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java index 9d63046960f..53521050c8e 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java @@ -25,7 +25,6 @@ import androidx.annotation.VisibleForTesting; import com.android.settings.fuelgauge.BatteryInfo; import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.batterytip.detectors.BatteryDefenderDetector; -import com.android.settings.fuelgauge.batterytip.detectors.DockDefenderDetector; import com.android.settings.fuelgauge.batterytip.detectors.HighUsageDetector; import com.android.settings.fuelgauge.batterytip.detectors.IncompatibleChargerDetector; import com.android.settings.fuelgauge.batterytip.detectors.LowBatteryDetector; @@ -66,11 +65,10 @@ public class BatteryTipLoader extends AsyncLoaderCompat> { tips.add(new LowBatteryDetector(context, policy, batteryInfo, isPowerSaveMode).detect()); tips.add(new HighUsageDetector(context, policy, mBatteryUsageStats, batteryInfo).detect()); tips.add(new BatteryDefenderDetector(batteryInfo, context).detect()); - tips.add(new DockDefenderDetector(batteryInfo, context).detect()); tips.add(new IncompatibleChargerDetector(context).detect()); FeatureFactory.getFeatureFactory() .getBatterySettingsFeatureProvider() - .addBatteryTipDetector(context, tips); + .addBatteryTipDetector(context, tips, batteryInfo); Collections.sort(tips); return tips; } diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetector.java deleted file mode 100644 index 14aeecd69bb..00000000000 --- a/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetector.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2022 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.batterytip.detectors; - -import android.content.Context; - -import com.android.settings.fuelgauge.BatteryInfo; -import com.android.settings.fuelgauge.BatteryUtils; -import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; -import com.android.settings.fuelgauge.batterytip.tips.DockDefenderTip; - -/** Detect whether the dock defender mode is enabled. */ -public class DockDefenderDetector implements BatteryTipDetector { - private final BatteryInfo mBatteryInfo; - private final Context mContext; - - public DockDefenderDetector(BatteryInfo batteryInfo, Context context) { - mBatteryInfo = batteryInfo; - mContext = context; - } - - @Override - public BatteryTip detect() { - int mode = BatteryUtils.getCurrentDockDefenderMode(mContext, mBatteryInfo); - return new DockDefenderTip( - mode != BatteryUtils.DockDefenderMode.DISABLED - ? BatteryTip.StateType.NEW - : BatteryTip.StateType.INVISIBLE, - mode); - } -} diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java deleted file mode 100644 index 2458351738e..00000000000 --- a/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (C) 2022 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.batterytip.tips; - -import android.app.settings.SettingsEnums; -import android.content.Context; -import android.content.Intent; -import android.os.Parcel; -import android.util.Log; - -import androidx.preference.Preference; - -import com.android.settings.R; -import com.android.settings.fuelgauge.BatteryUtils; -import com.android.settings.fuelgauge.BatteryUtils.DockDefenderMode; -import com.android.settings.overlay.FeatureFactory; -import com.android.settings.widget.CardPreference; -import com.android.settingslib.HelpUtils; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; - -/** Tip to show dock defender status */ -public class DockDefenderTip extends BatteryTip { - private static final String TAG = "DockDefenderTip"; - private int mMode; - - public DockDefenderTip(@StateType int state, @DockDefenderMode int mode) { - super(TipType.DOCK_DEFENDER, state, false); - mMode = mode; - } - - private DockDefenderTip(Parcel in) { - super(in); - } - - public int getMode() { - return mMode; - } - - @Override - public CharSequence getTitle(Context context) { - switch (mMode) { - case DockDefenderMode.FUTURE_BYPASS: - return context.getString(R.string.battery_tip_dock_defender_future_bypass_title); - case DockDefenderMode.ACTIVE: - return context.getString(R.string.battery_tip_dock_defender_active_title); - case DockDefenderMode.TEMPORARILY_BYPASSED: - return context.getString( - R.string.battery_tip_dock_defender_temporarily_bypassed_title); - default: - return null; - } - } - - @Override - public CharSequence getSummary(Context context) { - switch (mMode) { - case DockDefenderMode.FUTURE_BYPASS: - return context.getString(R.string.battery_tip_dock_defender_future_bypass_summary); - case DockDefenderMode.ACTIVE: - return context.getString(R.string.battery_tip_dock_defender_active_summary); - case DockDefenderMode.TEMPORARILY_BYPASSED: - return context.getString( - R.string.battery_tip_dock_defender_temporarily_bypassed_summary); - default: - return null; - } - } - - @Override - public int getIconId() { - return mMode == DockDefenderMode.ACTIVE - ? R.drawable.ic_battery_status_protected_24dp - : R.drawable.ic_battery_dock_defender_untriggered_24dp; - } - - @Override - public void updateState(BatteryTip tip) { - mState = tip.mState; - if (tip instanceof DockDefenderTip) { - mMode = ((DockDefenderTip) tip).mMode; - } - } - - @Override - public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { - metricsFeatureProvider.action(context, SettingsEnums.ACTION_DOCK_DEFENDER_TIP, mState); - } - - @Override - public void updatePreference(Preference preference) { - super.updatePreference(preference); - final Context context = preference.getContext(); - - CardPreference cardPreference = castToCardPreferenceSafely(preference); - if (cardPreference == null) { - Log.e(TAG, "cast Preference to CardPreference failed"); - return; - } - - cardPreference.setSelectable(false); - switch (mMode) { - case DockDefenderMode.FUTURE_BYPASS: - case DockDefenderMode.ACTIVE: - cardPreference.setPrimaryButtonText( - context.getString(R.string.battery_tip_charge_to_full_button)); - cardPreference.setPrimaryButtonClickListener( - unused -> { - resumeCharging(context); - mMode = DockDefenderMode.TEMPORARILY_BYPASSED; - context.sendBroadcast( - new Intent() - .setAction(BatteryUtils.BYPASS_DOCK_DEFENDER_ACTION) - .setPackage(context.getPackageName()) - .addFlags( - Intent.FLAG_RECEIVER_REGISTERED_ONLY - | Intent.FLAG_RECEIVER_FOREGROUND)); - updatePreference(preference); - }); - cardPreference.setPrimaryButtonVisible(true); - break; - case DockDefenderMode.TEMPORARILY_BYPASSED: - cardPreference.setPrimaryButtonVisible(false); - break; - default: - cardPreference.setVisible(false); - return; - } - - cardPreference.setSecondaryButtonText(context.getString(R.string.learn_more)); - cardPreference.setSecondaryButtonClickListener( - button -> - button.startActivityForResult( - HelpUtils.getHelpIntent( - context, - context.getString(R.string.help_url_dock_defender), - /* backupContext */ ""), /* requestCode */ - 0)); - cardPreference.setSecondaryButtonVisible(true); - cardPreference.setSecondaryButtonContentDescription( - context.getString( - R.string.battery_tip_limited_temporarily_sec_button_content_description)); - } - - private void resumeCharging(Context context) { - final Intent intent = - FeatureFactory.getFeatureFactory() - .getPowerUsageFeatureProvider() - .getResumeChargeIntent(true); - if (intent != null) { - context.sendBroadcast(intent); - } - - Log.i(TAG, "send resume charging broadcast intent=" + intent); - } - - public static final Creator CREATOR = - new Creator() { - public BatteryTip createFromParcel(Parcel in) { - return new DockDefenderTip(in); - } - - public BatteryTip[] newArray(int size) { - return new DockDefenderTip[size]; - } - }; -} diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java index 5613c4ecbf0..bfe5d14650a 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java @@ -52,7 +52,6 @@ public class BatteryTipLoaderTest { private static final int[] TIP_ORDER = { BatteryTip.TipType.LOW_BATTERY, BatteryTip.TipType.BATTERY_DEFENDER, - BatteryTip.TipType.DOCK_DEFENDER, BatteryTip.TipType.INCOMPATIBLE_CHARGER, BatteryTip.TipType.HIGH_DEVICE_USAGE }; diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetectorTest.java deleted file mode 100644 index b90733dc47e..00000000000 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetectorTest.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2022 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.batterytip.detectors; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.ArgumentMatchers.refEq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; - -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.BatteryManager; -import android.provider.Settings; - -import androidx.test.core.app.ApplicationProvider; - -import com.android.settings.fuelgauge.BatteryInfo; -import com.android.settings.fuelgauge.BatteryUtils; -import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; -import com.android.settings.fuelgauge.batterytip.tips.DockDefenderTip; -import com.android.settings.testutils.BatteryTestUtils; -import com.android.settings.testutils.FakeFeatureFactory; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class DockDefenderDetectorTest { - - private BatteryInfo mBatteryInfo; - private DockDefenderDetector mDockDefenderDetector; - private Context mContext; - private FakeFeatureFactory mFakeFeatureFactory; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = spy(ApplicationProvider.getApplicationContext()); - mBatteryInfo = new BatteryInfo(); - mBatteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_DOCK; - mDockDefenderDetector = new DockDefenderDetector(mBatteryInfo, mContext); - Intent intent = - BatteryTestUtils.getCustomBatteryIntent( - BatteryManager.BATTERY_PLUGGED_DOCK, - 50 /* level */, - 100 /* scale */, - BatteryManager.BATTERY_STATUS_CHARGING); - doReturn(intent) - .when(mContext) - .registerReceiver(eq(null), refEq(new IntentFilter(Intent.ACTION_BATTERY_CHANGED))); - - Settings.Global.putInt( - mContext.getContentResolver(), - BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, - 0); - mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); - } - - @Test - public void testDetect_dockDefenderTemporarilyBypassed() { - Settings.Global.putInt( - mContext.getContentResolver(), - BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, - 1); - - BatteryTip batteryTip = mDockDefenderDetector.detect(); - - assertTrue(batteryTip instanceof DockDefenderTip); - assertEquals( - ((DockDefenderTip) batteryTip).getMode(), - BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED); - } - - @Test - public void testDetect_dockDefenderActive() { - mBatteryInfo.isBatteryDefender = true; - doReturn(true).when(mFakeFeatureFactory.powerUsageFeatureProvider).isExtraDefend(); - - BatteryTip batteryTip = mDockDefenderDetector.detect(); - - assertTrue(batteryTip instanceof DockDefenderTip); - assertEquals( - ((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.ACTIVE); - } - - @Test - public void testDetect_dockDefenderFutureBypass() { - mBatteryInfo.isBatteryDefender = false; - doReturn(false).when(mFakeFeatureFactory.powerUsageFeatureProvider).isExtraDefend(); - - BatteryTip batteryTip = mDockDefenderDetector.detect(); - - assertTrue(batteryTip instanceof DockDefenderTip); - assertEquals( - ((DockDefenderTip) batteryTip).getMode(), - BatteryUtils.DockDefenderMode.FUTURE_BYPASS); - } - - @Test - public void testDetect_overheatedTrue_dockDefenderDisabled() { - mBatteryInfo.isBatteryDefender = true; - doReturn(false).when(mFakeFeatureFactory.powerUsageFeatureProvider).isExtraDefend(); - - BatteryTip batteryTip = mDockDefenderDetector.detect(); - - assertTrue(batteryTip instanceof DockDefenderTip); - assertEquals( - ((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED); - } - - @Test - public void testDetect_pluggedInAC_dockDefenderDisabled() { - mBatteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_AC; - - BatteryTip batteryTip = mDockDefenderDetector.detect(); - - assertTrue(batteryTip instanceof DockDefenderTip); - assertEquals( - ((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED); - } - - @Test - public void testDetect_overheatedTrueAndDockDefenderNotTriggered_dockDefenderDisabled() { - doReturn(false).when(mFakeFeatureFactory.powerUsageFeatureProvider).isExtraDefend(); - mBatteryInfo.isBatteryDefender = true; - - BatteryTip batteryTip = mDockDefenderDetector.detect(); - - assertTrue(batteryTip instanceof DockDefenderTip); - assertEquals( - ((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED); - } -} diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTipTest.java deleted file mode 100644 index 6d6c2e01acb..00000000000 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTipTest.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright (C) 2022 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.batterytip.tips; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; - -import android.app.settings.SettingsEnums; -import android.content.Context; -import android.util.Log; - -import androidx.preference.Preference; -import androidx.test.core.app.ApplicationProvider; - -import com.android.settings.R; -import com.android.settings.fuelgauge.BatteryUtils; -import com.android.settings.testutils.FakeFeatureFactory; -import com.android.settings.widget.CardPreference; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; - -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.shadows.ShadowLog; - -@RunWith(RobolectricTestRunner.class) -public class DockDefenderTipTest { - private Context mContext; - private DockDefenderTip mDockDefenderTipFutureBypass; - private DockDefenderTip mDockDefenderTipActive; - private DockDefenderTip mDockDefenderTipTemporarilyBypassed; - private DockDefenderTip mDockDefenderTipDisabled; - private FakeFeatureFactory mFeatureFactory; - private MetricsFeatureProvider mMetricsFeatureProvider; - - @Mock private Preference mPreference; - @Mock private CardPreference mCardPreference; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - mContext = ApplicationProvider.getApplicationContext(); - mFeatureFactory = FakeFeatureFactory.setupForTest(); - mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider; - - mDockDefenderTipFutureBypass = - new DockDefenderTip( - BatteryTip.StateType.NEW, BatteryUtils.DockDefenderMode.FUTURE_BYPASS); - mDockDefenderTipActive = - new DockDefenderTip(BatteryTip.StateType.NEW, BatteryUtils.DockDefenderMode.ACTIVE); - mDockDefenderTipTemporarilyBypassed = - new DockDefenderTip( - BatteryTip.StateType.NEW, - BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED); - mDockDefenderTipDisabled = - new DockDefenderTip( - BatteryTip.StateType.INVISIBLE, BatteryUtils.DockDefenderMode.DISABLED); - - doReturn(mContext).when(mPreference).getContext(); - doReturn(mContext).when(mCardPreference).getContext(); - } - - @Test - public void testGetTitle() { - assertThat(mDockDefenderTipFutureBypass.getTitle(mContext).toString()) - .isEqualTo( - mContext.getString(R.string.battery_tip_dock_defender_future_bypass_title)); - assertThat(mDockDefenderTipActive.getTitle(mContext).toString()) - .isEqualTo(mContext.getString(R.string.battery_tip_dock_defender_active_title)); - assertThat(mDockDefenderTipTemporarilyBypassed.getTitle(mContext).toString()) - .isEqualTo( - mContext.getString( - R.string.battery_tip_dock_defender_temporarily_bypassed_title)); - assertThat(mDockDefenderTipDisabled.getTitle(mContext)).isNull(); - } - - @Test - public void testGetSummary() { - assertThat(mDockDefenderTipFutureBypass.getSummary(mContext).toString()) - .isEqualTo( - mContext.getString( - R.string.battery_tip_dock_defender_future_bypass_summary)); - assertThat(mDockDefenderTipActive.getSummary(mContext).toString()) - .isEqualTo(mContext.getString(R.string.battery_tip_dock_defender_active_summary)); - assertThat(mDockDefenderTipTemporarilyBypassed.getSummary(mContext).toString()) - .isEqualTo( - mContext.getString( - R.string.battery_tip_dock_defender_temporarily_bypassed_summary)); - assertThat(mDockDefenderTipDisabled.getSummary(mContext)).isNull(); - } - - @Test - public void testGetIconId_dockDefenderActive_getProtectedIcon() { - assertThat(mDockDefenderTipActive.getIconId()) - .isEqualTo(R.drawable.ic_battery_status_protected_24dp); - } - - @Test - public void testGetIconId_dockDefenderNotActive_getUntriggeredIcon() { - assertThat(mDockDefenderTipFutureBypass.getIconId()) - .isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp); - assertThat(mDockDefenderTipTemporarilyBypassed.getIconId()) - .isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp); - assertThat(mDockDefenderTipDisabled.getIconId()) - .isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp); - } - - @Test - public void testUpdateState() { - mDockDefenderTipTemporarilyBypassed.updateState(mDockDefenderTipDisabled); - - assertThat(mDockDefenderTipTemporarilyBypassed.getState()) - .isEqualTo(BatteryTip.StateType.INVISIBLE); - assertThat(mDockDefenderTipTemporarilyBypassed.getMode()) - .isEqualTo(BatteryUtils.DockDefenderMode.DISABLED); - } - - @Test - public void testLog() { - mDockDefenderTipActive.log(mContext, mMetricsFeatureProvider); - - verify(mMetricsFeatureProvider) - .action( - mContext, - SettingsEnums.ACTION_DOCK_DEFENDER_TIP, - mDockDefenderTipActive.getState()); - } - - @Test - public void testUpdatePreference_dockDefenderTipFutureBypass() { - mDockDefenderTipFutureBypass.updatePreference(mCardPreference); - - verify(mCardPreference).setPrimaryButtonVisible(true); - verify(mCardPreference) - .setPrimaryButtonText( - mContext.getString(R.string.battery_tip_charge_to_full_button)); - verifySecondaryButton(); - } - - @Test - public void testUpdatePreference_dockDefenderTipActive() { - mDockDefenderTipActive.updatePreference(mCardPreference); - - verify(mCardPreference).setPrimaryButtonVisible(true); - verify(mCardPreference) - .setPrimaryButtonText( - mContext.getString(R.string.battery_tip_charge_to_full_button)); - verifySecondaryButton(); - } - - @Test - public void testUpdatePreference_dockDefenderTipTemporarilyBypassed() { - mDockDefenderTipTemporarilyBypassed.updatePreference(mCardPreference); - - verify(mCardPreference).setPrimaryButtonVisible(false); - verify(mCardPreference, never()).setPrimaryButtonText(any()); - verifySecondaryButton(); - } - - private void verifySecondaryButton() { - verify(mCardPreference).setSecondaryButtonText(mContext.getString(R.string.learn_more)); - verify(mCardPreference).setSecondaryButtonVisible(true); - final String expectedContent = - mContext.getString( - R.string.battery_tip_limited_temporarily_sec_button_content_description); - verify(mCardPreference).setSecondaryButtonContentDescription(expectedContent); - } - - @Test - public void updatePreference_castFail_logErrorMessage() { - mDockDefenderTipActive.updatePreference(mPreference); - - assertThat(getLastErrorLog()).isEqualTo("cast Preference to CardPreference failed"); - } - - private String getLastErrorLog() { - return ShadowLog.getLogsForTag(DockDefenderTip.class.getSimpleName()).stream() - .filter(log -> log.type == Log.ERROR) - .reduce((first, second) -> second) - .orElse(createErrorLog("No Error Log")) - .msg; - } - - private ShadowLog.LogItem createErrorLog(String msg) { - return new ShadowLog.LogItem(Log.ERROR, "tag", msg, null); - } -}