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

Commit 4516644b authored by jackqdyulei's avatar jackqdyulei Committed by android-build-merger
Browse files

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

am: a935b3c0

Change-Id: I969c301888aca43b5e2154fc86dd139ebb83c3f3
parents 934a0450 a935b3c0
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%");
    }
}