Add usage percentage and battery level into app relative metric
Reference the table from PM requested: https://docs.google.com/spreadsheets/d/1TC_6MLVMvOS0p1ic0wPfQ-19AOuY8Kc8FUJdqaQSM4I/edit?ts=6098b296#gid=0 Bug: 188505537 Test: make SettingsRoboTests Change-Id: Ia31ada9438f120fe6f29b59b67dc4de6636c11e1
This commit is contained in:
@@ -29,6 +29,7 @@ import android.text.Html;
|
||||
import android.text.TextUtils;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
@@ -49,7 +50,6 @@ import com.android.settings.widget.EntityHeaderController;
|
||||
import com.android.settingslib.applications.AppUtils;
|
||||
import com.android.settingslib.applications.ApplicationsState;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.utils.StringUtil;
|
||||
import com.android.settingslib.widget.LayoutPreference;
|
||||
import com.android.settingslib.widget.RadioButtonPreference;
|
||||
@@ -114,7 +114,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
|
||||
@VisibleForTesting
|
||||
boolean enableTriState = true;
|
||||
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
private AppButtonsPreferenceController mAppButtonsPreferenceController;
|
||||
private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController;
|
||||
|
||||
@@ -242,8 +241,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
mMetricsFeatureProvider = FeatureFactory.getFactory(getContext())
|
||||
.getMetricsFeatureProvider();
|
||||
|
||||
final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME);
|
||||
if (enableTriState) {
|
||||
@@ -267,8 +264,11 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
|
||||
if (enableTriState) {
|
||||
initPreferenceForTriState(getContext());
|
||||
final String packageName = mBatteryOptimizeUtils.getPackageName();
|
||||
mMetricsFeatureProvider.action(getContext(),
|
||||
SettingsEnums.OPEN_APP_BATTERY_USAGE, packageName);
|
||||
FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
|
||||
.action(
|
||||
getContext(),
|
||||
SettingsEnums.OPEN_APP_BATTERY_USAGE,
|
||||
packageName);
|
||||
} else {
|
||||
initPreference(getContext());
|
||||
}
|
||||
@@ -433,8 +433,14 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
|
||||
metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_RESTRICTED;
|
||||
}
|
||||
if (metricCategory != 0) {
|
||||
mMetricsFeatureProvider.action(getContext(),
|
||||
metricCategory, mBatteryOptimizeUtils.getPackageName());
|
||||
FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
|
||||
.action(
|
||||
getContext(),
|
||||
metricCategory,
|
||||
new Pair(ConvertUtils.METRIC_KEY_PACKAGE,
|
||||
mBatteryOptimizeUtils.getPackageName()),
|
||||
new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE,
|
||||
getArguments().getString(EXTRA_POWER_USAGE_PERCENT)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -27,6 +27,7 @@ import android.text.TextUtils;
|
||||
import android.text.format.DateFormat;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
@@ -216,7 +217,9 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
isAppEntry
|
||||
? SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM
|
||||
: SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
|
||||
packageName);
|
||||
new Pair(ConvertUtils.METRIC_KEY_PACKAGE, packageName),
|
||||
new Pair(ConvertUtils.METRIC_KEY_BATTERY_LEVEL, histEntry.mBatteryLevel),
|
||||
new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, powerPref.getPercent()));
|
||||
Log.d(TAG, String.format("handleClick() label=%s key=%s isValid:%b\n%s",
|
||||
diffEntry.getAppLabel(), histEntry.getKey(), isValidPackage, histEntry));
|
||||
if (isValidPackage) {
|
||||
|
@@ -258,7 +258,7 @@ public class BatteryDiffEntry {
|
||||
public String toString() {
|
||||
final StringBuilder builder = new StringBuilder()
|
||||
.append("BatteryDiffEntry{")
|
||||
.append("\n\tname=" + getAppLabel())
|
||||
.append("\n\tname=" + mAppLabel)
|
||||
.append(String.format("\n\tconsume=%.2f%% %f/%f",
|
||||
mPercentOfTotal, mConsumePower, mTotalConsumePower))
|
||||
.append(String.format("\n\tforeground:%s background:%s",
|
||||
@@ -266,9 +266,9 @@ public class BatteryDiffEntry {
|
||||
/*withSeconds=*/ true, /*collapseTimeUnit=*/ false),
|
||||
StringUtil.formatElapsedTime(mContext, mBackgroundUsageTimeInMs,
|
||||
/*withSeconds=*/ true, /*collapseTimeUnit=*/ false)))
|
||||
.append(String.format("\n\tpackage:%s|%s uid:%d userId:%d",
|
||||
mBatteryHistEntry.mPackageName, getPackageName(),
|
||||
mBatteryHistEntry.mUid, mBatteryHistEntry.mUserId));
|
||||
.append(String.format("\n\tpackage:%s uid:%d userId:%d",
|
||||
mBatteryHistEntry.mPackageName, mBatteryHistEntry.mUid,
|
||||
mBatteryHistEntry.mUserId));
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
@@ -47,6 +47,11 @@ public final class ConvertUtils {
|
||||
// Maximum total time value for each slot cumulative data at most 2 hours.
|
||||
private static final float TOTAL_TIME_THRESHOLD = DateUtils.HOUR_IN_MILLIS * 2;
|
||||
|
||||
// Keys for metric metadata.
|
||||
static final int METRIC_KEY_PACKAGE = 1;
|
||||
static final int METRIC_KEY_BATTERY_LEVEL = 2;
|
||||
static final int METRIC_KEY_BATTERY_USAGE = 3;
|
||||
|
||||
@VisibleForTesting
|
||||
static double PERCENTAGE_OF_TOTAL_THRESHOLD = 1f;
|
||||
|
||||
|
@@ -33,6 +33,7 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.AppOpsManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
@@ -41,6 +42,7 @@ import android.graphics.drawable.Drawable;
|
||||
import android.os.BatteryStats;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.util.Pair;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
@@ -56,6 +58,7 @@ import com.android.settings.widget.EntityHeaderController;
|
||||
import com.android.settingslib.applications.AppUtils;
|
||||
import com.android.settingslib.applications.ApplicationsState;
|
||||
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.widget.LayoutPreference;
|
||||
import com.android.settingslib.widget.RadioButtonPreference;
|
||||
@@ -129,6 +132,7 @@ public class AdvancedPowerUsageDetailTest {
|
||||
private AdvancedPowerUsageDetail mFragment;
|
||||
private SettingsActivity mTestActivity;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -137,6 +141,7 @@ public class AdvancedPowerUsageDetailTest {
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
when(mContext.getPackageName()).thenReturn("foo");
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
||||
|
||||
mFragment = spy(new AdvancedPowerUsageDetail());
|
||||
doReturn(mContext).when(mFragment).getContext();
|
||||
@@ -751,5 +756,13 @@ public class AdvancedPowerUsageDetailTest {
|
||||
assertThat(mOptimizePreference.isChecked()).isTrue();
|
||||
assertThat(mRestrictedPreference.isChecked()).isFalse();
|
||||
assertThat(mUnrestrictedPreference.isChecked()).isFalse();
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED,
|
||||
(Pair<Integer, Object>[]) new Pair[] {
|
||||
new Pair(ConvertUtils.METRIC_KEY_PACKAGE, null),
|
||||
new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, "app label")
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.Pair;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
@@ -92,6 +93,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
org.robolectric.shadows.ShadowSettings.set24HourTimeFormat(false);
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
||||
@@ -361,7 +363,11 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
|
||||
mBatteryHistEntry.mPackageName);
|
||||
(Pair<Integer, Object>[]) new Pair[] {
|
||||
new Pair(ConvertUtils.METRIC_KEY_PACKAGE, null),
|
||||
new Pair(ConvertUtils.METRIC_KEY_BATTERY_LEVEL, 0),
|
||||
new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, null)
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -378,7 +384,11 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM,
|
||||
mBatteryHistEntry.mPackageName);
|
||||
(Pair<Integer, Object>[]) new Pair[] {
|
||||
new Pair(ConvertUtils.METRIC_KEY_PACKAGE, null),
|
||||
new Pair(ConvertUtils.METRIC_KEY_BATTERY_LEVEL, 0),
|
||||
new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, null)
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -55,6 +55,7 @@ public final class BatteryDiffEntryTest {
|
||||
@Mock private Drawable mockDrawable;
|
||||
@Mock private Drawable mockDrawable2;
|
||||
@Mock private Drawable mockBadgedDrawable;
|
||||
@Mock private BatteryHistEntry mBatteryHistEntry;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -97,9 +98,9 @@ public final class BatteryDiffEntryTest {
|
||||
public void testComparator_sortCollectionsInDescOrder() {
|
||||
final List<BatteryDiffEntry> entryList = new ArrayList<>();
|
||||
// Generates fake testing data.
|
||||
entryList.add(createBatteryDiffEntry(30, /*batteryHistEntry=*/ null));
|
||||
entryList.add(createBatteryDiffEntry(20, /*batteryHistEntry=*/ null));
|
||||
entryList.add(createBatteryDiffEntry(10, /*batteryHistEntry=*/ null));
|
||||
entryList.add(createBatteryDiffEntry(30, mBatteryHistEntry));
|
||||
entryList.add(createBatteryDiffEntry(20, mBatteryHistEntry));
|
||||
entryList.add(createBatteryDiffEntry(10, mBatteryHistEntry));
|
||||
Collections.sort(entryList, BatteryDiffEntry.COMPARATOR);
|
||||
|
||||
assertThat(entryList.get(0).getPercentOfTotal()).isEqualTo(30);
|
||||
|
Reference in New Issue
Block a user