Merge "Adjust UX for toggles when active scorer is not set."
diff --git a/res/layout/storage_item.xml b/res/layout/storage_item.xml
index 72c8ee3..4b14bb3 100644
--- a/res/layout/storage_item.xml
+++ b/res/layout/storage_item.xml
@@ -21,8 +21,8 @@
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:gravity="center_vertical"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
- android:paddingTop="16dip"
- android:paddingBottom="16dip"
+ android:paddingTop="14dp"
+ android:paddingBottom="14dp"
android:background="?android:attr/selectableItemBackground"
android:clipToPadding="false">
@@ -52,36 +52,41 @@
android:maxHeight="24dp"/>
</LinearLayout>
- <TextView
- android:id="@android:id/title"
- android:layout_width="0dp"
+ <RelativeLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1"
- android:singleLine="true"
- android:textAppearance="@android:style/TextAppearance.Material.Subhead"
- android:textAlignment="viewStart"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal" />
+ android:gravity="center_vertical" >
- <TextView
- android:id="@android:id/summary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Body1"
- android:textColor="?android:attr/textColorSecondaryNoDisable"
- android:maxLines="10" />
+ <TextView
+ android:id="@android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textAlignment="viewStart"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal" />
+ <TextView
+ android:id="@android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAlignment="viewStart"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
+ android:textColor="?android:attr/textColorSecondaryNoDisable"
+ android:maxLines="10"
+ android:layout_alignParentEnd="true"/>
+
+ <ProgressBar
+ android:id="@android:id/progress"
+ android:layout_width="match_parent"
+ android:layout_height="8dp"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="4dp"
+ android:max="100"
+ android:layout_below="@android:id/title"
+ android:layout_alignStart="@android:id/title"
+ style="?android:attr/progressBarStyleHorizontal" />
+ </RelativeLayout>
</LinearLayout>
-
- <ProgressBar
- android:id="@android:id/progress"
- android:layout_width="match_parent"
- android:layout_height="8dp"
- android:layout_marginStart="72dp"
- android:layout_marginTop="16dp"
- android:layout_marginBottom="8dp"
- android:max="100"
- style="?android:attr/progressBarStyleHorizontal" />
-
</LinearLayout>
diff --git a/res/xml/power_usage_detail.xml b/res/xml/power_usage_detail.xml
index aa1540d..919f321 100644
--- a/res/xml/power_usage_detail.xml
+++ b/res/xml/power_usage_detail.xml
@@ -39,15 +39,18 @@
<Preference
android:key="app_usage_foreground"
- android:title="@string/battery_detail_foreground"/>
+ android:title="@string/battery_detail_foreground"
+ android:selectable="false"/>
<Preference
android:key="app_usage_background"
- android:title="@string/battery_detail_background"/>
+ android:title="@string/battery_detail_background"
+ android:selectable="false"/>
<Preference
android:key="app_power_usage"
- android:title="@string/battery_detail_power_usage"/>
+ android:title="@string/battery_detail_power_usage"
+ android:selectable="false"/>
</PreferenceCategory>
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index b8646f7..b6a7b02 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -122,7 +122,10 @@
}
Log.v(TAG, "foreground time(us): " + timeUs);
- return convertUsToMs(timeUs);
+ // Return the min value of STATE_TOP time and foreground activity time, since both of these
+ // time have some errors.
+ return convertUsToMs(
+ Math.min(timeUs, getForegroundActivityTotalTimeUs(uid, rawRealTimeUs)));
}
/**
@@ -167,15 +170,13 @@
*/
@VisibleForTesting
void smearScreenBatterySipper(List<BatterySipper> sippers, BatterySipper screenSipper) {
- final long rawRealtimeMs = SystemClock.elapsedRealtime();
long totalActivityTimeMs = 0;
final SparseLongArray activityTimeArray = new SparseLongArray();
for (int i = 0, size = sippers.size(); i < size; i++) {
final BatteryStats.Uid uid = sippers.get(i).uidObj;
if (uid != null) {
- final long timeMs = Math.min(getForegroundActivityTotalTimeMs(uid, rawRealtimeMs),
- getProcessTimeMs(StatusType.FOREGROUND, uid,
- BatteryStats.STATS_SINCE_CHARGED));
+ final long timeMs = getProcessTimeMs(StatusType.FOREGROUND, uid,
+ BatteryStats.STATS_SINCE_CHARGED);
activityTimeArray.put(uid.getUid(), timeMs);
totalActivityTimeMs += timeMs;
}
@@ -332,11 +333,10 @@
}
@VisibleForTesting
- long getForegroundActivityTotalTimeMs(BatteryStats.Uid uid, long rawRealtimeMs) {
+ long getForegroundActivityTotalTimeUs(BatteryStats.Uid uid, long rawRealtimeUs) {
final BatteryStats.Timer timer = uid.getForegroundActivityTimer();
if (timer != null) {
- return convertUsToMs(timer.getTotalTimeLocked(convertMsToUs(rawRealtimeMs),
- BatteryStats.STATS_SINCE_CHARGED));
+ return timer.getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED);
}
return 0;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index a78c385..0cabb05 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -119,6 +119,8 @@
private LoaderManager mLoaderManager;
@Mock
private AnomalySummaryPreferenceController mAnomalySummaryPreferenceController;
+ @Mock
+ private BatteryStats.Timer mTimer;
private Context mContext;
private Preference mForegroundPreference;
private Preference mBackgroundPreference;
@@ -168,6 +170,8 @@
eq(BatteryStats.Uid.PROCESS_STATE_BACKGROUND), anyLong(), anyInt());
doReturn(FOREGROUND_TIME_US).when(mUid).getProcessStateTime(
eq(BatteryStats.Uid.PROCESS_STATE_TOP), anyLong(), anyInt());
+ doReturn(mTimer).when(mUid).getForegroundActivityTimer();
+ doReturn(FOREGROUND_TIME_US).when(mTimer).getTotalTimeLocked(anyLong(), anyInt());
ReflectionHelpers.setField(mBatteryEntry, "sipper", mBatterySipper);
mBatteryEntry.iconId = ICON_ID;
mBatterySipper.uidObj = mUid;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
index 151463a..e2c6f6d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
@@ -178,6 +178,9 @@
@Test
public void testGetProcessTimeMs_typeForeground_timeCorrect() {
+ doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils).getForegroundActivityTotalTimeUs(
+ eq(mUid), anyLong());
+
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.FOREGROUND, mUid,
BatteryStats.STATS_SINCE_CHARGED);
@@ -194,6 +197,9 @@
@Test
public void testGetProcessTimeMs_typeAll_timeCorrect() {
+ doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils).getForegroundActivityTotalTimeUs(
+ eq(mUid), anyLong());
+
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, mUid,
BatteryStats.STATS_SINCE_CHARGED);
@@ -305,13 +311,13 @@
@Test
public void testSmearScreenBatterySipper() {
final BatterySipper sipperNull = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO,
- TIME_FOREGROUND_ZERO + 500, BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */);
- final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO + 100,
- TIME_FOREGROUND_ZERO, BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */);
+ BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */);
+ final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO,
+ BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */);
final BatterySipper sipperFg = createTestSmearBatterySipper(TIME_FOREGROUND,
- TIME_FOREGROUND + 200, BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */);
- final BatterySipper sipperFg2 = createTestSmearBatterySipper(TIME_FOREGROUND + 600,
- TIME_FOREGROUND, BATTERY_APP_USAGE, 3 /* uid */, false /* isUidNull */);
+ BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */);
+ final BatterySipper sipperFg2 = createTestSmearBatterySipper(TIME_FOREGROUND,
+ BATTERY_APP_USAGE, 3 /* uid */, false /* isUidNull */);
final List<BatterySipper> sippers = new ArrayList<>();
sippers.add(sipperNull);
@@ -370,16 +376,16 @@
@Test
public void testGetForegroundActivityTotalTimeMs_returnMilliseconds() {
- final long rawRealtimeMs = SystemClock.elapsedRealtime();
+ final long rawRealtimeUs = SystemClock.elapsedRealtime() * 1000;
doReturn(mTimer).when(mUid).getForegroundActivityTimer();
doReturn(TIME_SINCE_LAST_FULL_CHARGE_US).when(mTimer)
- .getTotalTimeLocked(rawRealtimeMs * 1000, BatteryStats.STATS_SINCE_CHARGED);
+ .getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED);
- assertThat(mBatteryUtils.getForegroundActivityTotalTimeMs(mUid, rawRealtimeMs)).isEqualTo(
- TIME_SINCE_LAST_FULL_CHARGE_MS);
+ assertThat(mBatteryUtils.getForegroundActivityTotalTimeUs(mUid, rawRealtimeUs)).isEqualTo(
+ TIME_SINCE_LAST_FULL_CHARGE_US);
}
- private BatterySipper createTestSmearBatterySipper(long activityTime, long topTime,
+ private BatterySipper createTestSmearBatterySipper(long topTime,
double totalPowerMah, int uidCode, boolean isUidNull) {
final BatterySipper sipper = mock(BatterySipper.class);
sipper.drainType = BatterySipper.DrainType.APP;
@@ -387,8 +393,6 @@
doReturn(uidCode).when(sipper).getUid();
if (!isUidNull) {
final BatteryStats.Uid uid = mock(BatteryStats.Uid.class, RETURNS_DEEP_STUBS);
- doReturn(activityTime).when(mBatteryUtils).getForegroundActivityTotalTimeMs(eq(uid),
- anyLong());
doReturn(topTime).when(mBatteryUtils).getProcessTimeMs(
eq(BatteryUtils.StatusType.FOREGROUND), eq(uid), anyInt());
doReturn(uidCode).when(uid).getUid();