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;
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;
private AppStorageStats mLastResult;
+ private String mBatteryPercent;
private boolean handleDisableable(Button button) {
boolean disableable = false;
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));
} 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;
}
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;
import org.robolectric.util.ReflectionHelpers;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.any;
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;
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",
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() {
public void instantApps_noUninstallButton() {
// Make this app appear to be instant.
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
- (InstantAppDataProvider) (i -> true));
+ (InstantAppDataProvider) (i -> true));
final ApplicationInfo info = new ApplicationInfo();
info.flags = ApplicationInfo.FLAG_INSTALLED;
info.enabled = true;