Delete DockDefenderTip and Detector

- remove dock defender
- remove unused string

Test: atest SettingsRoboTests
Bug: 315748218
Flag: NA
Change-Id: Ida4bb1d36a653d1787595212aac167d2f4dd3438
This commit is contained in:
pajacechen
2024-01-19 22:27:32 +08:00
parent b34e67228f
commit 98a522c45c
9 changed files with 4 additions and 605 deletions

View File

@@ -5604,18 +5604,6 @@
<string name="battery_tip_limited_temporarily_title">Charging optimized to protect your battery</string>
<!-- Summary for the battery limited temporarily tip [CHAR LIMIT=NONE] -->
<string name="battery_tip_limited_temporarily_summary">To help extend your battery\'s lifespan, charging is optimized</string>
<!-- Title for the battery dock defender future bypass tip [CHAR LIMIT=NONE] -->
<string name="battery_tip_dock_defender_future_bypass_title">Charging optimized to protect your battery</string>
<!-- Summary for the battery dock defender future bypass tip [CHAR LIMIT=NONE] -->
<string name="battery_tip_dock_defender_future_bypass_summary">To help extend your battery\'s lifespan, charging is optimized while docked</string>
<!-- Title for the battery dock defender active tip [CHAR LIMIT=NONE] -->
<string name="battery_tip_dock_defender_active_title">Charging optimized to protect your battery</string>
<!-- Summary for the battery dock defender active tip [CHAR LIMIT=NONE] -->
<string name="battery_tip_dock_defender_active_summary">To help extend your battery\'s lifespan, charging is optimized while docked</string>
<!-- Title for the battery dock defender temporarily bypassed tip [CHAR LIMIT=NONE] -->
<string name="battery_tip_dock_defender_temporarily_bypassed_title">Charging to full</string>
<!-- Summary for the battery dock defender temporarily bypassed tip [CHAR LIMIT=NONE] -->
<string name="battery_tip_dock_defender_temporarily_bypassed_summary">To protect your battery, charging will be optimized the next time your tablet is docked</string>
<!-- Content description for the battery limited temporarily tip secondary button [CHAR LIMIT=NONE] -->
<string name="battery_tip_limited_temporarily_sec_button_content_description">Learn more about charging is paused</string>
<!-- Text of battery limited temporarily tip resume charge button. [CHAR LIMIT=NONE] -->

View File

@@ -35,5 +35,5 @@ public interface BatterySettingsFeatureProvider {
boolean isBatteryInfoEnabled(Context context);
/** A way to add more battery tip detectors. */
void addBatteryTipDetector(Context context, List<BatteryTip> tips);
void addBatteryTipDetector(Context context, List<BatteryTip> tips, BatteryInfo batteryInfo);
}

View File

@@ -41,5 +41,6 @@ public class BatterySettingsFeatureProviderImpl implements BatterySettingsFeatur
}
@Override
public void addBatteryTipDetector(Context context, List<BatteryTip> tips) {}
public void addBatteryTipDetector(
Context context, List<BatteryTip> tips, BatteryInfo batteryInfo) {}
}

View File

@@ -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<List<BatteryTip>> {
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;
}

View File

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

View File

@@ -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];
}
};
}

View File

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

View File

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

View File

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