Merge "Fix crash when opening battery page" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
418e5bffda
@@ -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.
|
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 & notifications.</string>
|
\n\nYou can change this later from Settings > Apps & notifications.</string>
|
||||||
<!-- Summary of power usage for an app [CHAR LIMIT=NONE] -->
|
<!-- 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] -->
|
<!-- 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>
|
<string name="battery_power_management">Power management</string>
|
||||||
|
@@ -89,6 +89,7 @@ import com.android.settings.applications.instantapps.InstantAppButtonsController
|
|||||||
import com.android.settings.datausage.AppDataUsage;
|
import com.android.settings.datausage.AppDataUsage;
|
||||||
import com.android.settings.datausage.DataUsageList;
|
import com.android.settings.datausage.DataUsageList;
|
||||||
import com.android.settings.datausage.DataUsageSummary;
|
import com.android.settings.datausage.DataUsageSummary;
|
||||||
|
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
|
||||||
import com.android.settings.fuelgauge.BatteryEntry;
|
import com.android.settings.fuelgauge.BatteryEntry;
|
||||||
import com.android.settings.fuelgauge.PowerUsageDetail;
|
import com.android.settings.fuelgauge.PowerUsageDetail;
|
||||||
import com.android.settings.notification.AppNotificationSettings;
|
import com.android.settings.notification.AppNotificationSettings;
|
||||||
@@ -183,10 +184,12 @@ public class InstalledAppDetails extends AppInfoBase
|
|||||||
private ChartData mChartData;
|
private ChartData mChartData;
|
||||||
private INetworkStatsSession mStatsSession;
|
private INetworkStatsSession mStatsSession;
|
||||||
|
|
||||||
private Preference mBatteryPreference;
|
@VisibleForTesting
|
||||||
|
Preference mBatteryPreference;
|
||||||
private BatteryStatsHelper mBatteryHelper;
|
@VisibleForTesting
|
||||||
private BatterySipper mSipper;
|
BatterySipper mSipper;
|
||||||
|
@VisibleForTesting
|
||||||
|
BatteryStatsHelper mBatteryHelper;
|
||||||
|
|
||||||
protected ProcStatsData mStatsManager;
|
protected ProcStatsData mStatsManager;
|
||||||
protected ProcStatsPackageEntry mStats;
|
protected ProcStatsPackageEntry mStats;
|
||||||
@@ -194,6 +197,7 @@ public class InstalledAppDetails extends AppInfoBase
|
|||||||
private InstantAppButtonsController mInstantAppButtonsController;
|
private InstantAppButtonsController mInstantAppButtonsController;
|
||||||
|
|
||||||
private AppStorageStats mLastResult;
|
private AppStorageStats mLastResult;
|
||||||
|
private String mBatteryPercent;
|
||||||
|
|
||||||
private boolean handleDisableable(Button button) {
|
private boolean handleDisableable(Button button) {
|
||||||
boolean disableable = false;
|
boolean disableable = false;
|
||||||
@@ -686,7 +690,8 @@ public class InstalledAppDetails extends AppInfoBase
|
|||||||
BatteryStats.STATS_SINCE_CHARGED);
|
BatteryStats.STATS_SINCE_CHARGED);
|
||||||
final int percentOfMax = (int) ((mSipper.totalPowerMah)
|
final int percentOfMax = (int) ((mSipper.totalPowerMah)
|
||||||
/ mBatteryHelper.getTotalPower() * dischargeAmount + .5f);
|
/ 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 {
|
} else {
|
||||||
mBatteryPreference.setEnabled(false);
|
mBatteryPreference.setEnabled(false);
|
||||||
mBatteryPreference.setSummary(getString(R.string.no_battery_summary));
|
mBatteryPreference.setSummary(getString(R.string.no_battery_summary));
|
||||||
@@ -960,9 +965,9 @@ public class InstalledAppDetails extends AppInfoBase
|
|||||||
} else if (preference == mDataPreference) {
|
} else if (preference == mDataPreference) {
|
||||||
startAppInfoFragment(AppDataUsage.class, getString(R.string.app_data_usage));
|
startAppInfoFragment(AppDataUsage.class, getString(R.string.app_data_usage));
|
||||||
} else if (preference == mBatteryPreference) {
|
} else if (preference == mBatteryPreference) {
|
||||||
BatteryEntry entry = new BatteryEntry(getActivity(), null, mUserManager, mSipper);
|
BatteryEntry entry = new BatteryEntry(getContext(), null, mUserManager, mSipper);
|
||||||
PowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(), this,
|
AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(), this,
|
||||||
mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry, true, false);
|
mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry, mBatteryPercent);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -23,12 +23,16 @@ import android.app.admin.DevicePolicyManager;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.os.BatteryStats;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
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.R;
|
||||||
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.SettingsRobolectricTestRunner;
|
import com.android.settings.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.TestConfig;
|
import com.android.settings.TestConfig;
|
||||||
import com.android.settings.applications.instantapps.InstantAppButtonsController;
|
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.any;
|
||||||
import static org.mockito.Matchers.anyInt;
|
import static org.mockito.Matchers.anyInt;
|
||||||
import static org.mockito.Matchers.anyString;
|
import static org.mockito.Matchers.anyString;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -64,23 +70,37 @@ import static org.mockito.Mockito.when;
|
|||||||
public final class InstalledAppDetailsTest {
|
public final class InstalledAppDetailsTest {
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
ApplicationFeatureProvider mApplicationFeatureProvider;
|
ApplicationFeatureProvider mApplicationFeatureProvider;
|
||||||
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
@Mock
|
@Mock
|
||||||
private Activity mActivity;
|
private SettingsActivity mActivity;
|
||||||
@Mock
|
@Mock
|
||||||
private DevicePolicyManager mDevicePolicyManager;
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
|
@Mock
|
||||||
|
private Preference mBatteryPreference;
|
||||||
|
@Mock
|
||||||
|
private BatterySipper mBatterySipper;
|
||||||
|
@Mock
|
||||||
|
private BatteryStatsHelper mBatteryStatsHelper;
|
||||||
|
@Mock
|
||||||
|
private BatteryStats.Uid mUid;
|
||||||
|
|
||||||
private InstalledAppDetails mAppDetail;
|
private InstalledAppDetails mAppDetail;
|
||||||
|
private Context mShadowContext;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
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).
|
// Default to not considering any apps to be instant (individual tests can override this).
|
||||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
||||||
@@ -157,6 +177,16 @@ public final class InstalledAppDetailsTest {
|
|||||||
verify(mActivity, never()).finishAndRemoveTask();
|
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.
|
// Tests that we don't show the "uninstall for all users" button for instant apps.
|
||||||
@Test
|
@Test
|
||||||
public void instantApps_noUninstallForAllButton() {
|
public void instantApps_noUninstallForAllButton() {
|
||||||
|
Reference in New Issue
Block a user