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

Commit a935b3c0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Make "Battery usage" accessible at any time" into oc-dev

parents ae0886c9 58406203
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -196,6 +196,8 @@ public class InstalledAppDetails extends AppInfoBase
    BatterySipper mSipper;
    @VisibleForTesting
    BatteryStatsHelper mBatteryHelper;
    @VisibleForTesting
    BatteryUtils mBatteryUtils;

    protected ProcStatsData mStatsManager;
    protected ProcStatsPackageEntry mStats;
@@ -204,7 +206,6 @@ public class InstalledAppDetails extends AppInfoBase

    private AppStorageStats mLastResult;
    private String mBatteryPercent;
    private BatteryUtils mBatteryUtils;

    private final LoaderCallbacks<BatteryStatsHelper> mBatteryCallbacks =
            new LoaderCallbacks<BatteryStatsHelper>() {
@@ -729,8 +730,6 @@ public class InstalledAppDetails extends AppInfoBase
            mDataPreference.setSummary(getDataSummary());
        }

        updateBattery();

        if (!mInitialized) {
            // First time init: are we displaying an uninstalled app?
            mInitialized = true;
@@ -757,9 +756,10 @@ public class InstalledAppDetails extends AppInfoBase
        return true;
    }

    private void updateBattery() {
        if (mSipper != null && mBatteryHelper != null) {
    @VisibleForTesting
    void updateBattery() {
        mBatteryPreference.setEnabled(true);
        if (isBatteryStatsAvailable()) {
            final int dischargeAmount = mBatteryHelper.getStats().getDischargeAmount(
                    BatteryStats.STATS_SINCE_CHARGED);

@@ -771,7 +771,6 @@ public class InstalledAppDetails extends AppInfoBase
            mBatteryPercent = Utils.formatPercentage(percentOfMax);
            mBatteryPreference.setSummary(getString(R.string.battery_summary, mBatteryPercent));
        } else {
            mBatteryPreference.setEnabled(false);
            mBatteryPreference.setSummary(getString(R.string.no_battery_summary));
        }
    }
@@ -805,6 +804,11 @@ public class InstalledAppDetails extends AppInfoBase
        }
    }

    @VisibleForTesting
    boolean isBatteryStatsAvailable() {
        return mBatteryHelper != null && mSipper != null;
    }

    private static CharSequence getSize(Context context, AppStorageStats stats) {
        return Formatter.formatFileSize(context, stats.getTotalBytes());
    }
@@ -1043,9 +1047,15 @@ public class InstalledAppDetails extends AppInfoBase
        } else if (preference == mDataPreference) {
            startAppInfoFragment(AppDataUsage.class, getString(R.string.app_data_usage));
        } else if (preference == mBatteryPreference) {
            if (isBatteryStatsAvailable()) {
                BatteryEntry entry = new BatteryEntry(getContext(), null, mUserManager, mSipper);
            AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(), this,
                    mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry, mBatteryPercent);
                AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
                        this, mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry,
                        mBatteryPercent);
            } else {
                AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
                        this, mPackageName);
            }
        } else {
            return false;
        }
+10 −0
Original line number Diff line number Diff line
@@ -133,6 +133,16 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
                new UserHandle(UserHandle.getUserId(sipper.getUid())));
    }

    public static void startBatteryDetailPage(SettingsActivity caller, PreferenceFragment fragment,
            String packageName) {
        final Bundle args = new Bundle(2);
        args.putString(EXTRA_PACKAGE_NAME, packageName);
        args.putString(EXTRA_POWER_USAGE_PERCENT, Utils.formatPercentage(0));

        caller.startPreferencePanelAsUser(fragment, AdvancedPowerUsageDetail.class.getName(), args,
                R.string.battery_details_title, null, new UserHandle(UserHandle.myUserId()));
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
+52 −3
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ package com.android.settings.applications;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyDouble;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -46,10 +48,12 @@ import android.widget.Button;

import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.applications.instantapps.InstantAppButtonsController;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
@@ -77,6 +81,8 @@ public final class InstalledAppDetailsTest {
    private static final String PACKAGE_NAME = "test_package_name";
    private static final int TARGET_UID = 111;
    private static final int OTHER_UID = 222;
    private static final double BATTERY_LEVEL = 60;
    private static final String BATTERY_LEVEL_STRING = "60%";

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private Context mContext;
@@ -89,20 +95,21 @@ public final class InstalledAppDetailsTest {
    @Mock
    private DevicePolicyManager mDevicePolicyManager;
    @Mock
    private Preference mBatteryPreference;
    @Mock
    private BatterySipper mBatterySipper;
    @Mock
    private BatterySipper mOtherBatterySipper;
    @Mock
    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private BatteryStatsHelper mBatteryStatsHelper;
    @Mock
    private BatteryStats.Uid mUid;
    @Mock
    private PackageManager mPackageManager;
    @Mock
    private BatteryUtils mBatteryUtils;

    private InstalledAppDetails mAppDetail;
    private Context mShadowContext;
    private Preference mBatteryPreference;

    @Before
    public void setUp() {
@@ -110,6 +117,10 @@ public final class InstalledAppDetailsTest {

        mShadowContext = RuntimeEnvironment.application;
        mAppDetail = spy(new InstalledAppDetails());
        mAppDetail.mBatteryUtils = mBatteryUtils;

        mBatteryPreference = new Preference(mShadowContext);
        mAppDetail.mBatteryPreference = mBatteryPreference;

        mBatterySipper.drainType = BatterySipper.DrainType.IDLE;
        mBatterySipper.uidObj = mUid;
@@ -409,4 +420,42 @@ public final class InstalledAppDetailsTest {
        assertThat(mAppDetail.findTargetSipper(mBatteryStatsHelper, TARGET_UID)).isEqualTo(
                mBatterySipper);
    }

    @Test
    public void updateBattery_noBatteryStats_summaryNo() {
        doReturn(mShadowContext.getString(R.string.no_battery_summary)).when(mAppDetail).getString(
                R.string.no_battery_summary);
        mAppDetail.updateBattery();

        assertThat(mBatteryPreference.getSummary()).isEqualTo(
                "No battery use since last full charge");
    }

    @Test
    public void updateBattery_hasBatteryStats_summaryPercent() {
        mAppDetail.mBatteryHelper = mBatteryStatsHelper;
        mAppDetail.mSipper = mBatterySipper;
        doReturn(BATTERY_LEVEL).when(mBatteryUtils).calculateBatteryPercent(anyDouble(),
                anyDouble(), anyDouble(), anyInt());
        doReturn(mShadowContext.getString(R.string.battery_summary, BATTERY_LEVEL_STRING)).when(
                mAppDetail).getString(R.string.battery_summary, BATTERY_LEVEL_STRING);
        doReturn(new ArrayList<>()).when(mBatteryStatsHelper).getUsageList();

        mAppDetail.updateBattery();

        assertThat(mBatteryPreference.getSummary()).isEqualTo("60% use since last full charge");
    }

    @Test
    public void isBatteryStatsAvailable_hasBatteryStatsHelperAndSipper_returnTrue() {
        mAppDetail.mBatteryHelper = mBatteryStatsHelper;
        mAppDetail.mSipper = mBatterySipper;

        assertThat(mAppDetail.isBatteryStatsAvailable()).isTrue();
    }

    @Test
    public void isBatteryStatsAvailable_parametersNull_returnFalse() {
        assertThat(mAppDetail.isBatteryStatsAvailable()).isFalse();
    }
}
+21 −0
Original line number Diff line number Diff line
@@ -277,4 +277,25 @@ public class AdvancedPowerUsageDetailTest {
        verify(mTestActivity).startPreferencePanelAsUser(
                any(), anyString(), any(), anyInt(), any(), eq(new UserHandle(10)));
    }

    @Test
    public void testStartBatteryDetailPage_noBatteryUsage_hasBasicData() {
        final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
        Answer<Void> callable = new Answer<Void>() {
            @Override
            public Void answer(InvocationOnMock invocation) throws Exception {
                mBundle = captor.getValue();
                return null;
            }
        };
        doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser(any(), anyString(),
                captor.capture(), anyInt(), any(), any());

        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, PACKAGE_NAME[0]);

        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo(
                PACKAGE_NAME[0]);
        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo(
                "0%");
    }
}