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

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

Merge "Fix crash when opening battery page" into oc-dev

am: 418e5bff

Change-Id: I2ea79ff502abaa99c51e1f5e2d4d359d9845a304
parents a242548b 418e5bff
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -7390,7 +7390,7 @@
        Allowing <xliff:g id="app_name" example="Settings">%1$s</xliff:g> to always run in the background may reduce battery life.
        \n\nYou can change this later from Settings > Apps &amp; notifications.</string>
    <!-- Summary of power usage for an app [CHAR LIMIT=NONE] -->
    <string name="battery_summary"><xliff:g id="percentage" example="2">%1$d</xliff:g>%% use since last full charge</string>
    <string name="battery_summary"><xliff:g id="percentage" example="2">%1$s</xliff:g> use since last full charge</string>
    <!-- Title of a group of settings that let you manage settings that affect battery life [CHAR LIMIT=60] -->
    <string name="battery_power_management">Power management</string>
+13 −8
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ import com.android.settings.applications.instantapps.InstantAppButtonsController
import com.android.settings.datausage.AppDataUsage;
import com.android.settings.datausage.DataUsageList;
import com.android.settings.datausage.DataUsageSummary;
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
import com.android.settings.fuelgauge.BatteryEntry;
import com.android.settings.fuelgauge.PowerUsageDetail;
import com.android.settings.notification.AppNotificationSettings;
@@ -183,10 +184,12 @@ public class InstalledAppDetails extends AppInfoBase
    private ChartData mChartData;
    private INetworkStatsSession mStatsSession;

    private Preference mBatteryPreference;

    private BatteryStatsHelper mBatteryHelper;
    private BatterySipper mSipper;
    @VisibleForTesting
    Preference mBatteryPreference;
    @VisibleForTesting
    BatterySipper mSipper;
    @VisibleForTesting
    BatteryStatsHelper mBatteryHelper;

    protected ProcStatsData mStatsManager;
    protected ProcStatsPackageEntry mStats;
@@ -194,6 +197,7 @@ public class InstalledAppDetails extends AppInfoBase
    private InstantAppButtonsController mInstantAppButtonsController;

    private AppStorageStats mLastResult;
    private String mBatteryPercent;

    private boolean handleDisableable(Button button) {
        boolean disableable = false;
@@ -686,7 +690,8 @@ public class InstalledAppDetails extends AppInfoBase
                    BatteryStats.STATS_SINCE_CHARGED);
            final int percentOfMax = (int) ((mSipper.totalPowerMah)
                    / mBatteryHelper.getTotalPower() * dischargeAmount + .5f);
            mBatteryPreference.setSummary(getString(R.string.battery_summary, percentOfMax));
            mBatteryPercent = Utils.formatPercentage(percentOfMax);
            mBatteryPreference.setSummary(getString(R.string.battery_summary, mBatteryPercent));
        } else {
            mBatteryPreference.setEnabled(false);
            mBatteryPreference.setSummary(getString(R.string.no_battery_summary));
@@ -960,9 +965,9 @@ public class InstalledAppDetails extends AppInfoBase
        } else if (preference == mDataPreference) {
            startAppInfoFragment(AppDataUsage.class, getString(R.string.app_data_usage));
        } else if (preference == mBatteryPreference) {
            BatteryEntry entry = new BatteryEntry(getActivity(), null, mUserManager, mSipper);
            PowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(), this,
                    mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry, true, false);
            BatteryEntry entry = new BatteryEntry(getContext(), null, mUserManager, mSipper);
            AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(), this,
                    mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry, mBatteryPercent);
        } else {
            return false;
        }
+35 −5
Original line number Diff line number Diff line
@@ -23,12 +23,16 @@ import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.os.BatteryStats;
import android.os.UserManager;
import android.support.v7.preference.Preference;
import android.view.View;
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;
@@ -53,8 +57,10 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -64,23 +70,37 @@ import static org.mockito.Mockito.when;
public final class InstalledAppDetailsTest {
    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private Context mContext;

    @Mock
    ApplicationFeatureProvider mApplicationFeatureProvider;

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private UserManager mUserManager;
    @Mock
    private Activity mActivity;
    private SettingsActivity mActivity;
    @Mock
    private DevicePolicyManager mDevicePolicyManager;
    @Mock
    private Preference mBatteryPreference;
    @Mock
    private BatterySipper mBatterySipper;
    @Mock
    private BatteryStatsHelper mBatteryStatsHelper;
    @Mock
    private BatteryStats.Uid mUid;

    private InstalledAppDetails mAppDetail;
    private Context mShadowContext;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mAppDetail = new InstalledAppDetails();
        mShadowContext = RuntimeEnvironment.application;

        mAppDetail = spy(new InstalledAppDetails());

        mBatterySipper.drainType = BatterySipper.DrainType.IDLE;
        mBatterySipper.uidObj = mUid;
        doReturn(mActivity).when(mAppDetail).getActivity();
        doReturn(mShadowContext).when(mAppDetail).getContext();

        // Default to not considering any apps to be instant (individual tests can override this).
        ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
@@ -157,6 +177,16 @@ public final class InstalledAppDetailsTest {
        verify(mActivity, never()).finishAndRemoveTask();
    }

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

        // Should not crash
        mAppDetail.onPreferenceClick(mBatteryPreference);
    }

    // Tests that we don't show the "uninstall for all users" button for instant apps.
    @Test
    public void instantApps_noUninstallForAllButton() {