Merge "Fix crash in BatteryUtils"
This commit is contained in:
committed by
Android (Google) Code Review
commit
0ade53c9b5
@@ -449,12 +449,14 @@ public class BatteryUtils {
|
|||||||
final BatteryStats stats = statsHelper.getStats();
|
final BatteryStats stats = statsHelper.getStats();
|
||||||
BatteryInfo batteryInfo;
|
BatteryInfo batteryInfo;
|
||||||
|
|
||||||
final Estimate estimate;
|
Estimate estimate = null;
|
||||||
// Get enhanced prediction if available
|
// Get enhanced prediction if available
|
||||||
if (mPowerUsageFeatureProvider != null &&
|
if (mPowerUsageFeatureProvider != null &&
|
||||||
mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) {
|
mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) {
|
||||||
estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext);
|
estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext);
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (estimate == null) {
|
||||||
estimate = new Estimate(
|
estimate = new Estimate(
|
||||||
PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)),
|
PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)),
|
||||||
false /* isBasedOnUsage */,
|
false /* isBasedOnUsage */,
|
||||||
|
@@ -27,6 +27,7 @@ import static org.mockito.ArgumentMatchers.any;
|
|||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.anyLong;
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
|
import static org.mockito.ArgumentMatchers.nullable;
|
||||||
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
|
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
|
||||||
import static org.mockito.Mockito.doNothing;
|
import static org.mockito.Mockito.doNothing;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
@@ -38,7 +39,10 @@ import static org.mockito.Mockito.verify;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@@ -75,6 +79,8 @@ import java.util.List;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class BatteryUtilsTest {
|
public class BatteryUtilsTest {
|
||||||
|
|
||||||
|
private static final String TAG = "BatteryUtilsTest";
|
||||||
|
|
||||||
// unit that used to converted ms to us
|
// unit that used to converted ms to us
|
||||||
private static final long UNIT = 1000;
|
private static final long UNIT = 1000;
|
||||||
private static final long TIME_STATE_TOP = 1500 * UNIT;
|
private static final long TIME_STATE_TOP = 1500 * UNIT;
|
||||||
@@ -160,6 +166,7 @@ public class BatteryUtilsTest {
|
|||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
private PowerUsageFeatureProvider mProvider;
|
private PowerUsageFeatureProvider mProvider;
|
||||||
private List<BatterySipper> mUsageList;
|
private List<BatterySipper> mUsageList;
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws PackageManager.NameNotFoundException {
|
public void setUp() throws PackageManager.NameNotFoundException {
|
||||||
@@ -214,10 +221,10 @@ public class BatteryUtilsTest {
|
|||||||
mIdleBatterySipper.drainType = BatterySipper.DrainType.IDLE;
|
mIdleBatterySipper.drainType = BatterySipper.DrainType.IDLE;
|
||||||
mIdleBatterySipper.totalPowerMah = BATTERY_IDLE_USAGE;
|
mIdleBatterySipper.totalPowerMah = BATTERY_IDLE_USAGE;
|
||||||
|
|
||||||
final Context shadowContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mPackageManager).when(shadowContext).getPackageManager();
|
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||||
doReturn(mAppOpsManager).when(shadowContext).getSystemService(Context.APP_OPS_SERVICE);
|
doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
|
||||||
mBatteryUtils = spy(new BatteryUtils(shadowContext));
|
mBatteryUtils = spy(new BatteryUtils(mContext));
|
||||||
mBatteryUtils.mPowerUsageFeatureProvider = mProvider;
|
mBatteryUtils.mPowerUsageFeatureProvider = mProvider;
|
||||||
doReturn(0L).when(mBatteryUtils)
|
doReturn(0L).when(mBatteryUtils)
|
||||||
.getForegroundServiceTotalTimeUs(any(BatteryStats.Uid.class), anyLong());
|
.getForegroundServiceTotalTimeUs(any(BatteryStats.Uid.class), anyLong());
|
||||||
@@ -710,4 +717,15 @@ public class BatteryUtilsTest {
|
|||||||
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
||||||
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
|
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getBatteryInfo_providerNull_shouldNotCrash() {
|
||||||
|
when(mProvider.isEnhancedBatteryPredictionEnabled(mContext)).thenReturn(true);
|
||||||
|
when(mProvider.getEnhancedBatteryPrediction(mContext)).thenReturn(null);
|
||||||
|
when(mContext.registerReceiver(nullable(BroadcastReceiver.class),
|
||||||
|
any(IntentFilter.class))).thenReturn(new Intent());
|
||||||
|
|
||||||
|
//Should not crash
|
||||||
|
assertThat(mBatteryUtils.getBatteryInfo(mBatteryStatsHelper, TAG)).isNotNull();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user