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

Commit 1ec8f04f authored by ykhung's avatar ykhung Committed by YUKAI HUNG
Browse files

Add battery usage metric

Bug: 188046672
Test: make SettingsRoboTests
Change-Id: I1716913eee7c93cafd622052dcbca940c9726a17
parent c0d31a80
Loading
Loading
Loading
Loading
+25 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settings.fuelgauge;

import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
@@ -37,6 +38,7 @@ import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreate;
@@ -89,9 +91,10 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
    private final String mPreferenceKey;
    private final SettingsActivity mActivity;
    private final InstrumentedPreferenceFragment mFragment;
    private final Handler mHandler = new Handler(Looper.getMainLooper());
    private final CharSequence[] mNotAllowShowSummaryPackages;
    private final CharSequence[] mNotAllowShowEntryPackages;
    private final CharSequence[] mNotAllowShowSummaryPackages;
    private final MetricsFeatureProvider mMetricsFeatureProvider;
    private final Handler mHandler = new Handler(Looper.getMainLooper());

    // Preference cache to avoid create new instance each time.
    @VisibleForTesting
@@ -111,6 +114,8 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
            .getTextArray(R.array.allowlist_hide_summary_in_battery_usage);
        mNotAllowShowEntryPackages = context.getResources()
            .getTextArray(R.array.allowlist_hide_entry_in_battery_usage);
        mMetricsFeatureProvider =
            FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
        if (lifecycle != null) {
            lifecycle.addObserver(this);
        }
@@ -127,6 +132,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
            savedInstanceState.getBoolean(KEY_EXPAND_SYSTEM_INFO, mIsExpanded);
        Log.d(TAG, String.format("onCreate() slotIndex=%d isExpanded=%b",
            mTrapezoidIndex, mIsExpanded));
        mMetricsFeatureProvider.action(mPrefContext, SettingsEnums.OPEN_BATTERY_USAGE);
    }

    @Override
@@ -191,15 +197,22 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
        final BatteryDiffEntry diffEntry = powerPref.getBatteryDiffEntry();
        final BatteryHistEntry histEntry = diffEntry.mBatteryHistEntry;
        final String packageName = histEntry.mPackageName;
        final boolean isAppEntry = histEntry.isAppEntry();
        // Checks whether the package is installed or not.
        boolean isValidPackage = true;
        if (histEntry.isAppEntry()) {
        if (isAppEntry) {
            if (mBatteryUtils == null) {
                mBatteryUtils = BatteryUtils.getInstance(mPrefContext);
            }
            isValidPackage = mBatteryUtils.getPackageUid(packageName)
                != BatteryUtils.UID_NULL;
        }
        mMetricsFeatureProvider.action(
            mPrefContext,
            isAppEntry
                ? SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM
                : SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
            packageName);
        Log.d(TAG, String.format("handleClick() label=%s key=%s isValid:%b\n%s",
            diffEntry.getAppLabel(), histEntry.getKey(), isValidPackage, histEntry));
        if (isValidPackage) {
@@ -215,11 +228,20 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
    public void onSelect(int trapezoidIndex) {
        Log.d(TAG, "onChartSelect:" + trapezoidIndex);
        refreshUi(trapezoidIndex, /*isForce=*/ false);
        mMetricsFeatureProvider.action(
            mPrefContext,
            trapezoidIndex == BatteryChartView.SELECTED_INDEX_ALL
                ? SettingsEnums.ACTION_BATTERY_USAGE_SHOW_ALL
                : SettingsEnums.ACTION_BATTERY_USAGE_TIME_SLOT);
    }

    @Override
    public void onExpand(boolean isExpanded) {
        mIsExpanded = isExpanded;
        mMetricsFeatureProvider.action(
            mPrefContext,
            SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
            isExpanded);
        refreshExpandUi();
    }

+51 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.ContentValues;
import android.content.pm.PackageManager;
@@ -43,6 +44,7 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;

import org.junit.Before;
import org.junit.Test;
@@ -82,12 +84,16 @@ public final class BatteryChartPreferenceControllerTest {
    @Mock private Resources mResources;

    private Context mContext;
    private FakeFeatureFactory mFeatureFactory;
    private BatteryDiffEntry mBatteryDiffEntry;
    private MetricsFeatureProvider mMetricsFeatureProvider;
    private BatteryChartPreferenceController mBatteryChartPreferenceController;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mFeatureFactory = FakeFeatureFactory.setupForTest();
        mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
        mContext = spy(RuntimeEnvironment.application);
        mBatteryChartPreferenceController = createController();
        mBatteryChartPreferenceController.mPrefContext = mContext;
@@ -331,9 +337,14 @@ public final class BatteryChartPreferenceControllerTest {
    }

    @Test
    public void testHandlePreferenceTreeClick_notPowerGaugePreference_returnFalse() {
    public void testHandlePreferenceTreeiClick_notPowerGaugePreference_returnFalse() {
        assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(mAppListGroup))
            .isFalse();

        verify(mMetricsFeatureProvider, never())
            .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM);
        verify(mMetricsFeatureProvider, never())
            .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM);
    }

    @Test
@@ -343,6 +354,11 @@ public final class BatteryChartPreferenceControllerTest {

        assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
            mPowerGaugePreference)).isTrue();
        verify(mMetricsFeatureProvider)
            .action(
                mContext,
                SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
                mBatteryHistEntry.mPackageName);
    }

    @Test
@@ -355,6 +371,11 @@ public final class BatteryChartPreferenceControllerTest {

        assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
            mPowerGaugePreference)).isFalse();
        verify(mMetricsFeatureProvider)
            .action(
                mContext,
                SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM,
                mBatteryHistEntry.mPackageName);
    }

    @Test
@@ -474,6 +495,11 @@ public final class BatteryChartPreferenceControllerTest {
        verify(mAppListGroup).addPreference(captor.capture());
        // Verifies the added preference.
        assertThat(captor.getValue().getKey()).isEqualTo(PREF_KEY);
        verify(mMetricsFeatureProvider)
            .action(
                mContext,
                SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
                true /*isExpanded*/);
    }

    @Test
@@ -489,6 +515,28 @@ public final class BatteryChartPreferenceControllerTest {
        verify(mAppListGroup).findPreference(PREF_KEY);
        verify(mAppListGroup).removePreference(mPowerGaugePreference);
        assertThat(mBatteryChartPreferenceController.mPreferenceCache).hasSize(1);
        verify(mMetricsFeatureProvider)
            .action(
                mContext,
                SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
                false /*isExpanded*/);
    }

    @Test
    public void testOnSelect_selectSpecificTimeSlot_logMetric() {
        mBatteryChartPreferenceController.onSelect(1 /*slot index*/);

        verify(mMetricsFeatureProvider)
            .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_TIME_SLOT);
    }

    @Test
    public void testOnSelect_selectAll_logMetric() {
        mBatteryChartPreferenceController.onSelect(
            BatteryChartView.SELECTED_INDEX_ALL /*slot index*/);

        verify(mMetricsFeatureProvider)
            .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOW_ALL);
    }

    @Test
@@ -610,6 +658,8 @@ public final class BatteryChartPreferenceControllerTest {
        assertThat(mBatteryChartPreferenceController.mTrapezoidIndex)
            .isEqualTo(expectedIndex);
        assertThat(mBatteryChartPreferenceController.mIsExpanded).isTrue();
        verify(mMetricsFeatureProvider)
            .action(mContext, SettingsEnums.OPEN_BATTERY_USAGE);
    }

    @Test