Add dock defender battery tips

1. Remove the dock defender v1 code
2. Add dock defender battery tips and update
   corresponding list item string

Bug: 260687359
Test: Unit test passed and manual test on device
Merged-In: Ib6c09df056744142f42f5e2a13252b58e54c7534
Change-Id: Ib6c09df056744142f42f5e2a13252b58e54c7534
Signed-off-by: Zhenwei Chen <zhenwec@google.com>
(cherry picked from commit 8d11d9ceea)
This commit is contained in:
Zhenwei Chen
2022-11-22 09:06:25 +08:00
committed by Wesley Wang
parent 80095fa001
commit 1d72ff642c
23 changed files with 853 additions and 63 deletions

View File

@@ -55,6 +55,7 @@ public class BatteryBroadcastReceiverTest {
private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
private Context mContext;
private Intent mChargingIntent;
private Intent mDockDefenderBypassIntent;
@Before
public void setUp() {
@@ -72,6 +73,8 @@ public class BatteryBroadcastReceiverTest {
mChargingIntent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_INTENT_SCALE);
mChargingIntent
.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
mDockDefenderBypassIntent = new Intent(BatteryUtils.BYPASS_DOCK_DEFENDER_ACTION);
}
@Test
@@ -130,6 +133,13 @@ public class BatteryBroadcastReceiverTest {
verify(mBatteryListener, never()).onBatteryChanged(anyInt());
}
@Test
public void testOnReceive_dockDefenderBypassed_listenerInvoked() {
mBatteryBroadcastReceiver.onReceive(mContext, mDockDefenderBypassIntent);
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS);
}
@Test
public void testRegister_updateBatteryStatus() {
doReturn(mChargingIntent).when(mContext).registerReceiver(any(), any());

View File

@@ -36,6 +36,7 @@ import android.os.BatteryManager;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.SystemClock;
import android.provider.Settings;
import android.util.SparseIntArray;
import com.android.internal.os.BatteryStatsHistoryIterator;
@@ -66,6 +67,7 @@ public class BatteryInfoTest {
private static final String STATUS_CHARGING_NO_TIME = "50% - charging";
private static final String STATUS_CHARGING_TIME = "50% - 0 min left until full";
private static final String STATUS_NOT_CHARGING = "Not charging";
private static final String STATUS_CHARGING_FUTURE_BYPASS = "50% - Charging to 12%";
private static final long REMAINING_TIME_NULL = -1;
private static final long REMAINING_TIME = 2;
// Strings are defined in frameworks/base/packages/SettingsLib/res/values/strings.xml
@@ -97,6 +99,10 @@ public class BatteryInfoTest {
mDisChargingBatteryBroadcast = BatteryTestUtils.getDischargingIntent();
mChargingBatteryBroadcast = BatteryTestUtils.getChargingIntent();
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
Settings.Global.putInt(mContext.getContentResolver(),
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0);
}
@Test
@@ -231,6 +237,7 @@ public class BatteryInfoTest {
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
false /* shortString */);
assertThat(info.remainingTimeUs).isEqualTo(TEST_CHARGE_TIME_REMAINING);
assertThat(info.remainingLabel.toString())
.isEqualTo(TEST_CHARGE_TIME_REMAINING_STRINGIFIED);
@@ -265,6 +272,62 @@ public class BatteryInfoTest {
assertThat(info.chargeLabel.toString()).contains(expectedString);
}
@Test
public void testGetBatteryInfo_dockDefenderActive_updateChargeString() {
final String expectedString =
mContext.getString(R.string.battery_tip_limited_temporarily_title);
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
.when(mBatteryUsageStats).getChargeTimeRemainingMs();
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
Intent intent = BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
50 /* level */,
100 /* scale */,
BatteryManager.BATTERY_STATUS_CHARGING)
.putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_OVERHEAT);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, intent,
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
false /* shortString */);
assertThat(info.chargeLabel.toString()).contains(expectedString);
}
@Test
public void testGetBatteryInfo_dockDefenderTemporarilyBypassed_updateChargeLabel() {
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
mChargingBatteryBroadcast
.putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_GOOD);
Settings.Global.putInt(mContext.getContentResolver(),
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 1);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext,
BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
50 /* level */,
100 /* scale */,
BatteryManager.BATTERY_STATUS_CHARGING),
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
false /* shortString */);
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_TIME);
}
@Test
public void testGetBatteryInfo_dockDefenderFutureBypass_updateChargeLabel() {
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
mChargingBatteryBroadcast
.putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_GOOD);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext,
BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
50 /* level */,
100 /* scale */,
BatteryManager.BATTERY_STATUS_CHARGING),
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
false /* shortString */);
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_FUTURE_BYPASS);
}
// Make our battery stats return a sequence of battery events.
private void mockBatteryStatsHistory() {
// Mock out new data every time iterateBatteryStatsHistory is called.

View File

@@ -132,7 +132,12 @@ public class PowerUsageFeatureProviderImplTest {
}
@Test
public void testGetResumeChargeIntent_returnNull() {
assertThat(mPowerFeatureProvider.getResumeChargeIntent()).isNull();
public void testGetResumeChargeIntentWithoutDockDefender_returnNull() {
assertThat(mPowerFeatureProvider.getResumeChargeIntent(false)).isNull();
}
@Test
public void testGetResumeChargeIntentWithDockDefender_returnNull() {
assertThat(mPowerFeatureProvider.getResumeChargeIntent(true)).isNull();
}
}

View File

@@ -53,6 +53,7 @@ public class BatteryTipLoaderTest {
BatteryTip.TipType.BATTERY_SAVER,
BatteryTip.TipType.LOW_BATTERY,
BatteryTip.TipType.BATTERY_DEFENDER,
BatteryTip.TipType.DOCK_DEFENDER,
BatteryTip.TipType.HIGH_DEVICE_USAGE,
BatteryTip.TipType.SMART_BATTERY_MANAGER};
@Mock(answer = Answers.RETURNS_DEEP_STUBS)

View File

@@ -18,10 +18,15 @@ package com.android.settings.fuelgauge.batterytip.detectors;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.fuelgauge.BatteryInfo;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
import org.junit.Test;
@@ -36,6 +41,9 @@ public class BatteryDefenderDetectorTest {
@Mock
private BatteryInfo mBatteryInfo;
private BatteryDefenderDetector mBatteryDefenderDetector;
private Context mContext;
private FakeFeatureFactory mFakeFeatureFactory;
@Before
public void setUp() {
@@ -43,20 +51,42 @@ public class BatteryDefenderDetectorTest {
mBatteryInfo.discharging = false;
mContext = ApplicationProvider.getApplicationContext();
mBatteryDefenderDetector = new BatteryDefenderDetector(
mBatteryInfo, ApplicationProvider.getApplicationContext());
mBatteryInfo, mContext);
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
}
@Test
public void testDetect_notOverheated_tipInvisible() {
public void testDetect_notOverheatedNotExtraDefend_tipInvisible() {
mBatteryInfo.isOverheated = false;
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(false);
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
}
@Test
public void testDetect_isOverheated_tipNew() {
public void testDetect_notOverheatedIsExtraDefend_tipInvisible() {
mBatteryInfo.isOverheated = false;
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(true);
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
}
@Test
public void testDetect_isOverheatedIsExtraDefend_tipInvisible() {
mBatteryInfo.isOverheated = false;
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(true);
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
}
@Test
public void testDetect_isOverheatedNotExtraDefend_tipNew() {
mBatteryInfo.isOverheated = true;
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(false);
assertThat(mBatteryDefenderDetector.detect().getState())
.isEqualTo(BatteryTip.StateType.NEW);

View File

@@ -0,0 +1,142 @@
/*
* 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.isOverheated = 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.isOverheated = 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.isOverheated = 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.isOverheated = true;
BatteryTip batteryTip = mDockDefenderDetector.detect();
assertTrue(batteryTip instanceof DockDefenderTip);
assertEquals(((DockDefenderTip) batteryTip).getMode(),
BatteryUtils.DockDefenderMode.DISABLED);
}
}

View File

@@ -79,19 +79,11 @@ public class BatteryDefenderTipTest {
}
@Test
public void getSummary_notExtraDefended_showNonExtraDefendedSummary() {
public void getSummary_showSummary() {
assertThat(mBatteryDefenderTip.getSummary(mContext))
.isEqualTo(mContext.getString(R.string.battery_tip_limited_temporarily_summary));
}
@Test
public void getSummary_extraDefended_showExtraDefendedSummary() {
BatteryDefenderTip defenderTip = new BatteryDefenderTip(
BatteryTip.StateType.NEW, /* extraDefended= */ true);
assertThat(defenderTip.getSummary(mContext).toString()).isEqualTo("12%");
}
@Test
public void getIcon_showIcon() {
assertThat(mBatteryDefenderTip.getIconId())

View File

@@ -0,0 +1,195 @@
/*
* 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;
import java.text.NumberFormat;
@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,
getExtraPercentage(mContext)));
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,
getExtraPercentage(mContext)));
assertThat(mDockDefenderTipActive.getSummary(mContext).toString()).isEqualTo(
mContext.getString(R.string.battery_tip_dock_defender_active_summary,
getExtraPercentage(mContext)));
assertThat(mDockDefenderTipTemporarilyBypassed.getSummary(mContext).toString()).isEqualTo(
mContext.getString(R.string.battery_tip_dock_defender_temporarily_bypassed_summary,
getExtraPercentage(mContext)));
assertThat(mDockDefenderTipDisabled.getSummary(mContext)).isNull();
}
@Test
public void testGetIconId() {
assertThat(mDockDefenderTipFutureBypass.getIconId()).isEqualTo(
R.drawable.ic_battery_status_protected_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);
verify(mCardPreference).setSecondaryButtonContentDescription(mContext.getString(
R.string.battery_tip_limited_temporarily_sec_button_content_description));
}
@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);
}
private String getExtraPercentage(Context context) {
final int extraValue = context.getResources().getInteger(
R.integer.config_battery_extra_tip_value);
return NumberFormat.getPercentInstance().format(extraValue * 0.01f);
}
}

View File

@@ -37,7 +37,7 @@ public class BatteryTestUtils {
BatteryManager.BATTERY_STATUS_DISCHARGING);
}
private static Intent getCustomBatteryIntent(int plugged, int level, int scale, int status) {
public static Intent getCustomBatteryIntent(int plugged, int level, int scale, int status) {
Intent intent = new Intent();
intent.putExtra(BatteryManager.EXTRA_PLUGGED, plugged);
intent.putExtra(BatteryManager.EXTRA_LEVEL, level);