Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 646c1a2e authored by ykhung's avatar ykhung
Browse files

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
parent a3d3c22a
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -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)));
        }
    }

+4 −1
Original line number Diff line number Diff line
@@ -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) {
+4 −4
Original line number Diff line number Diff line
@@ -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();
    }

+5 −0
Original line number Diff line number Diff line
@@ -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;

+13 −0
Original line number Diff line number Diff line
@@ -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")
                });
    }
}
Loading