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

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

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

parents f297e843 cdbc1143
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() {