Begin transition from BatteryStatsHelper to BatteryUsageStats API.

For now, keep both BatteryStatsHelper and BatteryUsageStats in play.
The plan is to transition from the former to the latter, one usage
at a time.  When all is said and done, all references to
BatteryStatsHelper will be gone.

Bug: 173745486
Test: atest --host SettingsRoboTests

Change-Id: I37e1dfff0043b1845992f18d72067bb547bb69ff
This commit is contained in:
Dmitri Plotnikov
2020-11-16 15:22:21 -08:00
parent 3deffe9f04
commit 97b3325ece
7 changed files with 190 additions and 29 deletions

View File

@@ -208,7 +208,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro
}
final UserHandle userHandle = new UserHandle(UserHandle.getUserId(sipper.getUid()));
final BatteryEntry entry = new BatteryEntry(mActivity, mHandler, mUserManager,
sipper);
sipper, null);
final Drawable badgedIcon = mUserManager.getBadgedIconForUser(entry.getIcon(),
userHandle);
final CharSequence contentDescription = mUserManager.getBadgedLabelForUser(

View File

@@ -28,6 +28,7 @@ import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Process;
import android.os.RemoteException;
import android.os.UidBatteryConsumer;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
@@ -122,6 +123,7 @@ public class BatteryEntry {
public final Context context;
public final BatterySipper sipper;
public final UidBatteryConsumer uidBatteryConsumer;
public String name;
public Drawable icon;
@@ -134,10 +136,41 @@ public class BatteryEntry {
Drawable icon;
}
public BatteryEntry(Context context, Handler handler, UserManager um, BatterySipper sipper) {
public BatteryEntry(Context context, Handler handler, UserManager um, BatterySipper sipper,
UidBatteryConsumer uidBatteryConsumer) {
sHandler = handler;
this.context = context;
this.sipper = sipper;
this.uidBatteryConsumer = uidBatteryConsumer;
// This condition is met when BatteryEntry is initialized from BatteryUsageStats.
// Once the conversion from BatteryStatsHelper is completed, the condition will
// always be true and can be removed.
if (uidBatteryConsumer != null) {
PackageManager pm = context.getPackageManager();
int uid = uidBatteryConsumer.getUid();
String[] packages = pm.getPackagesForUid(uid);
// Apps should only have one package
if (packages == null || packages.length != 1) {
name = uidBatteryConsumer.getPackageWithHighestDrain();
} else {
defaultPackageName = packages[0];
try {
ApplicationInfo appInfo =
pm.getApplicationInfo(defaultPackageName, 0 /* no flags */);
name = pm.getApplicationLabel(appInfo).toString();
} catch (NameNotFoundException e) {
Log.d(TAG, "PackageManager failed to retrieve ApplicationInfo for: "
+ defaultPackageName);
name = defaultPackageName;
}
}
if ((name == null || iconId == 0) && uid != 0) {
getQuickNameIconForUid(uid);
}
return;
}
switch (sipper.drainType) {
case IDLE:
name = context.getResources().getString(R.string.power_idle);

View File

@@ -0,0 +1,44 @@
/*
* Copyright (C) 2020 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.content.Context;
import android.os.BatteryStatsManager;
import android.os.BatteryUsageStats;
import com.android.settingslib.utils.AsyncLoaderCompat;
/**
* Loader to get new {@link BatteryUsageStats} in the background
*/
public class BatteryUsageStatsLoader extends AsyncLoaderCompat<BatteryUsageStats> {
private final BatteryStatsManager mBatteryStatsManager;
public BatteryUsageStatsLoader(Context context) {
super(context);
mBatteryStatsManager = context.getSystemService(BatteryStatsManager.class);
}
@Override
public BatteryUsageStats loadInBackground() {
return mBatteryStatsManager.getBatteryUsageStats();
}
@Override
protected void onDiscardResult(BatteryUsageStats result) {
}
}