Remove "Other Users" entry in app usage list.
Don't show the aggregated other user entry in the app usage list to keep consistent with screen-on time data. Bug: 260964903 Test: make RunSettingsRoboTests Change-Id: Id611e7222602f5ad2ea0fe27fb3f9f62fed31ff9
This commit is contained in:
@@ -4952,8 +4952,6 @@
|
|||||||
<string name="battery_not_usage_24hr">No usage for past 24 hr</string>
|
<string name="battery_not_usage_24hr">No usage for past 24 hr</string>
|
||||||
<!-- Description for no usage time but have battery usage [CHAR LIMIT=120] -->
|
<!-- Description for no usage time but have battery usage [CHAR LIMIT=120] -->
|
||||||
<string name="battery_usage_without_time"></string>
|
<string name="battery_usage_without_time"></string>
|
||||||
<!-- Description for other users aggregated battery usage data [CHAR LIMIT=120] -->
|
|
||||||
<string name="battery_usage_other_users">Other users</string>
|
|
||||||
|
|
||||||
<!-- Description for battery time left, i.e. 50min Estimated time left. [CHAR LIMIT=80]-->
|
<!-- Description for battery time left, i.e. 50min Estimated time left. [CHAR LIMIT=80]-->
|
||||||
<string name="estimated_time_left">Estimated time left</string>
|
<string name="estimated_time_left">Estimated time left</string>
|
||||||
|
@@ -74,8 +74,6 @@ public class BatteryUtils {
|
|||||||
public static final int UID_REMOVED_APPS = -4;
|
public static final int UID_REMOVED_APPS = -4;
|
||||||
/** Special UID value for data usage by tethering. */
|
/** Special UID value for data usage by tethering. */
|
||||||
public static final int UID_TETHERING = -5;
|
public static final int UID_TETHERING = -5;
|
||||||
/** Special UID for aggregated other users. */
|
|
||||||
public static final long UID_OTHER_USERS = Long.MIN_VALUE;
|
|
||||||
|
|
||||||
/** Flag to check if the dock defender mode has been temporarily bypassed */
|
/** Flag to check if the dock defender mode has been temporarily bypassed */
|
||||||
public static final String SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS = "dock_defender_bypass";
|
public static final String SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS = "dock_defender_bypass";
|
||||||
|
@@ -129,9 +129,6 @@ public class BatteryDiffEntry {
|
|||||||
|
|
||||||
/** Gets the app label name for this entry. */
|
/** Gets the app label name for this entry. */
|
||||||
public String getAppLabel() {
|
public String getAppLabel() {
|
||||||
if (isOtherUsers()) {
|
|
||||||
return mContext.getString(R.string.battery_usage_other_users);
|
|
||||||
}
|
|
||||||
loadLabelAndIcon();
|
loadLabelAndIcon();
|
||||||
// Returns default applicationn label if we cannot find it.
|
// Returns default applicationn label if we cannot find it.
|
||||||
return mAppLabel == null || mAppLabel.length() == 0
|
return mAppLabel == null || mAppLabel.length() == 0
|
||||||
@@ -141,9 +138,6 @@ public class BatteryDiffEntry {
|
|||||||
|
|
||||||
/** Gets the app icon {@link Drawable} for this entry. */
|
/** Gets the app icon {@link Drawable} for this entry. */
|
||||||
public Drawable getAppIcon() {
|
public Drawable getAppIcon() {
|
||||||
if (isOtherUsers()) {
|
|
||||||
return mContext.getDrawable(R.drawable.ic_power_system);
|
|
||||||
}
|
|
||||||
loadLabelAndIcon();
|
loadLabelAndIcon();
|
||||||
return mAppIcon != null && mAppIcon.getConstantState() != null
|
return mAppIcon != null && mAppIcon.getConstantState() != null
|
||||||
? mAppIcon.getConstantState().newDrawable()
|
? mAppIcon.getConstantState().newDrawable()
|
||||||
@@ -178,9 +172,6 @@ public class BatteryDiffEntry {
|
|||||||
|
|
||||||
/** Whether the current BatteryDiffEntry is system component or not. */
|
/** Whether the current BatteryDiffEntry is system component or not. */
|
||||||
public boolean isSystemEntry() {
|
public boolean isSystemEntry() {
|
||||||
if (isOtherUsers()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
switch (mBatteryHistEntry.mConsumerType) {
|
switch (mBatteryHistEntry.mConsumerType) {
|
||||||
case ConvertUtils.CONSUMER_TYPE_USER_BATTERY:
|
case ConvertUtils.CONSUMER_TYPE_USER_BATTERY:
|
||||||
case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY:
|
case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY:
|
||||||
@@ -200,11 +191,6 @@ public class BatteryDiffEntry {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isOtherUsers() {
|
|
||||||
return mBatteryHistEntry.mConsumerType == ConvertUtils.CONSUMER_TYPE_UID_BATTERY
|
|
||||||
&& mBatteryHistEntry.mUid == BatteryUtils.UID_OTHER_USERS;
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadLabelAndIcon() {
|
void loadLabelAndIcon() {
|
||||||
if (mIsLoaded) {
|
if (mIsLoaded) {
|
||||||
return;
|
return;
|
||||||
|
@@ -589,13 +589,13 @@ public final class DataProcessor {
|
|||||||
userHandle != null ? userHandle.getIdentifier() : Integer.MIN_VALUE;
|
userHandle != null ? userHandle.getIdentifier() : Integer.MIN_VALUE;
|
||||||
final List<BatteryDiffEntry> appEntries = new ArrayList<>();
|
final List<BatteryDiffEntry> appEntries = new ArrayList<>();
|
||||||
final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
|
final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
|
||||||
double consumePowerFromOtherUsers = 0f;
|
|
||||||
|
|
||||||
for (BatteryHistEntry entry : batteryHistEntryList) {
|
for (BatteryHistEntry entry : batteryHistEntryList) {
|
||||||
final boolean isFromOtherUsers = isConsumedFromOtherUsers(
|
final boolean isFromOtherUsers = isConsumedFromOtherUsers(
|
||||||
currentUserId, workProfileUserId, entry);
|
currentUserId, workProfileUserId, entry);
|
||||||
|
// Not show other users' battery usage data.
|
||||||
if (isFromOtherUsers) {
|
if (isFromOtherUsers) {
|
||||||
consumePowerFromOtherUsers += entry.mConsumePower;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
final BatteryDiffEntry currentBatteryDiffEntry = new BatteryDiffEntry(
|
final BatteryDiffEntry currentBatteryDiffEntry = new BatteryDiffEntry(
|
||||||
context,
|
context,
|
||||||
@@ -614,9 +614,6 @@ public final class DataProcessor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (consumePowerFromOtherUsers != 0) {
|
|
||||||
systemEntries.add(createOtherUsersEntry(context, consumePowerFromOtherUsers));
|
|
||||||
}
|
|
||||||
|
|
||||||
// If there is no data, return null instead of empty item.
|
// If there is no data, return null instead of empty item.
|
||||||
if (appEntries.isEmpty() && systemEntries.isEmpty()) {
|
if (appEntries.isEmpty() && systemEntries.isEmpty()) {
|
||||||
@@ -1086,7 +1083,6 @@ public final class DataProcessor {
|
|||||||
allBatteryHistEntryKeys.addAll(nextBatteryHistMap.keySet());
|
allBatteryHistEntryKeys.addAll(nextBatteryHistMap.keySet());
|
||||||
allBatteryHistEntryKeys.addAll(nextTwoBatteryHistMap.keySet());
|
allBatteryHistEntryKeys.addAll(nextTwoBatteryHistMap.keySet());
|
||||||
|
|
||||||
double consumePowerFromOtherUsers = 0f;
|
|
||||||
// Calculates all packages diff usage data in a specific time slot.
|
// Calculates all packages diff usage data in a specific time slot.
|
||||||
for (String key : allBatteryHistEntryKeys) {
|
for (String key : allBatteryHistEntryKeys) {
|
||||||
final BatteryHistEntry currentEntry =
|
final BatteryHistEntry currentEntry =
|
||||||
@@ -1095,6 +1091,20 @@ public final class DataProcessor {
|
|||||||
nextBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
|
nextBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
|
||||||
final BatteryHistEntry nextTwoEntry =
|
final BatteryHistEntry nextTwoEntry =
|
||||||
nextTwoBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
|
nextTwoBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
|
||||||
|
|
||||||
|
final BatteryHistEntry selectedBatteryEntry =
|
||||||
|
selectBatteryHistEntry(currentEntry, nextEntry, nextTwoEntry);
|
||||||
|
if (selectedBatteryEntry == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not show other users' battery usage data.
|
||||||
|
final boolean isFromOtherUsers = isConsumedFromOtherUsers(
|
||||||
|
currentUserId, workProfileUserId, selectedBatteryEntry);
|
||||||
|
if (isFromOtherUsers) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Cumulative values is a specific time slot for a specific app.
|
// Cumulative values is a specific time slot for a specific app.
|
||||||
long foregroundUsageTimeInMs =
|
long foregroundUsageTimeInMs =
|
||||||
getDiffValue(
|
getDiffValue(
|
||||||
@@ -1137,11 +1147,6 @@ public final class DataProcessor {
|
|||||||
&& consumePower == 0) {
|
&& consumePower == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final BatteryHistEntry selectedBatteryEntry =
|
|
||||||
selectBatteryHistEntry(currentEntry, nextEntry, nextTwoEntry);
|
|
||||||
if (selectedBatteryEntry == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// Forces refine the cumulative value since it may introduce deviation error since we
|
// Forces refine the cumulative value since it may introduce deviation error since we
|
||||||
// will apply the interpolation arithmetic.
|
// will apply the interpolation arithmetic.
|
||||||
final float totalUsageTimeInMs =
|
final float totalUsageTimeInMs =
|
||||||
@@ -1165,31 +1170,22 @@ public final class DataProcessor {
|
|||||||
cachedUsageConsumePower = cachedUsageConsumePower * ratio;
|
cachedUsageConsumePower = cachedUsageConsumePower * ratio;
|
||||||
}
|
}
|
||||||
|
|
||||||
final boolean isFromOtherUsers = isConsumedFromOtherUsers(
|
final BatteryDiffEntry currentBatteryDiffEntry = new BatteryDiffEntry(
|
||||||
currentUserId, workProfileUserId, selectedBatteryEntry);
|
context,
|
||||||
if (isFromOtherUsers) {
|
foregroundUsageTimeInMs,
|
||||||
consumePowerFromOtherUsers += consumePower;
|
backgroundUsageTimeInMs,
|
||||||
|
consumePower,
|
||||||
|
foregroundUsageConsumePower,
|
||||||
|
foregroundServiceUsageConsumePower,
|
||||||
|
backgroundUsageConsumePower,
|
||||||
|
cachedUsageConsumePower,
|
||||||
|
selectedBatteryEntry);
|
||||||
|
if (currentBatteryDiffEntry.isSystemEntry()) {
|
||||||
|
systemEntries.add(currentBatteryDiffEntry);
|
||||||
} else {
|
} else {
|
||||||
final BatteryDiffEntry currentBatteryDiffEntry = new BatteryDiffEntry(
|
appEntries.add(currentBatteryDiffEntry);
|
||||||
context,
|
|
||||||
foregroundUsageTimeInMs,
|
|
||||||
backgroundUsageTimeInMs,
|
|
||||||
consumePower,
|
|
||||||
foregroundUsageConsumePower,
|
|
||||||
foregroundServiceUsageConsumePower,
|
|
||||||
backgroundUsageConsumePower,
|
|
||||||
cachedUsageConsumePower,
|
|
||||||
selectedBatteryEntry);
|
|
||||||
if (currentBatteryDiffEntry.isSystemEntry()) {
|
|
||||||
systemEntries.add(currentBatteryDiffEntry);
|
|
||||||
} else {
|
|
||||||
appEntries.add(currentBatteryDiffEntry);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (consumePowerFromOtherUsers != 0) {
|
|
||||||
systemEntries.add(createOtherUsersEntry(context, consumePowerFromOtherUsers));
|
|
||||||
}
|
|
||||||
|
|
||||||
// If there is no data, return null instead of empty item.
|
// If there is no data, return null instead of empty item.
|
||||||
if (appEntries.isEmpty() && systemEntries.isEmpty()) {
|
if (appEntries.isEmpty() && systemEntries.isEmpty()) {
|
||||||
@@ -1518,27 +1514,6 @@ public final class DataProcessor {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BatteryDiffEntry createOtherUsersEntry(
|
|
||||||
Context context, final double consumePower) {
|
|
||||||
final ContentValues values = new ContentValues();
|
|
||||||
values.put(BatteryHistEntry.KEY_UID, BatteryUtils.UID_OTHER_USERS);
|
|
||||||
values.put(BatteryHistEntry.KEY_USER_ID, BatteryUtils.UID_OTHER_USERS);
|
|
||||||
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
|
|
||||||
// We will show the percentage for the "other users" item only, the aggregated
|
|
||||||
// running time information is useless for users to identify individual apps.
|
|
||||||
final BatteryDiffEntry batteryDiffEntry = new BatteryDiffEntry(
|
|
||||||
context,
|
|
||||||
/*foregroundUsageTimeInMs=*/ 0,
|
|
||||||
/*backgroundUsageTimeInMs=*/ 0,
|
|
||||||
consumePower,
|
|
||||||
/*foregroundUsageConsumePower=*/ 0,
|
|
||||||
/*foregroundServiceUsageConsumePower=*/ 0,
|
|
||||||
/*backgroundUsageConsumePower=*/ 0,
|
|
||||||
/*cachedUsageConsumePower=*/ 0,
|
|
||||||
new BatteryHistEntry(values));
|
|
||||||
return batteryDiffEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static long getCurrentTimeMillis() {
|
private static long getCurrentTimeMillis() {
|
||||||
return sFakeCurrentTimeMillis > 0 ? sFakeCurrentTimeMillis : System.currentTimeMillis();
|
return sFakeCurrentTimeMillis > 0 ? sFakeCurrentTimeMillis : System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
@@ -464,19 +464,6 @@ public final class BatteryDiffEntryTest {
|
|||||||
assertThat(entry.getPackageName()).isEqualTo(expectedPackageName);
|
assertThat(entry.getPackageName()).isEqualTo(expectedPackageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getAppLabel_withOtherUsersUid_returnExpectedLabel() {
|
|
||||||
final ContentValues values = getContentValuesWithType(
|
|
||||||
ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
|
|
||||||
values.put(BatteryHistEntry.KEY_UID, BatteryUtils.UID_OTHER_USERS);
|
|
||||||
|
|
||||||
final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry(
|
|
||||||
/*consumePower=*/ 0, new BatteryHistEntry(values));
|
|
||||||
|
|
||||||
assertThat(batteryDiffEntry.getAppLabel())
|
|
||||||
.isEqualTo(mContext.getString(R.string.battery_usage_other_users));
|
|
||||||
}
|
|
||||||
|
|
||||||
private BatteryDiffEntry createBatteryDiffEntry(
|
private BatteryDiffEntry createBatteryDiffEntry(
|
||||||
int consumerType, long uid, boolean isHidden) {
|
int consumerType, long uid, boolean isHidden) {
|
||||||
final ContentValues values = getContentValuesWithType(consumerType);
|
final ContentValues values = getContentValuesWithType(consumerType);
|
||||||
|
@@ -41,7 +41,6 @@ import android.os.RemoteException;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
|
||||||
import com.android.settings.fuelgauge.BatteryUtils;
|
|
||||||
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
|
|
||||||
@@ -934,13 +933,7 @@ public final class DataProcessorTest {
|
|||||||
/*foregroundUsageConsumePower=*/ 5, /*foregroundServiceUsageConsumePower=*/ 5,
|
/*foregroundUsageConsumePower=*/ 5, /*foregroundServiceUsageConsumePower=*/ 5,
|
||||||
/*backgroundUsageConsumePower=*/ 5, /*cachedUsageConsumePower=*/ 5,
|
/*backgroundUsageConsumePower=*/ 5, /*cachedUsageConsumePower=*/ 5,
|
||||||
/*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 10);
|
/*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 10);
|
||||||
assertBatteryDiffEntry(
|
assertThat(resultDiffData.getSystemDiffEntryList()).isEmpty();
|
||||||
resultDiffData.getSystemDiffEntryList().get(0), BatteryUtils.UID_OTHER_USERS,
|
|
||||||
/*uid=*/ BatteryUtils.UID_OTHER_USERS, ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
|
|
||||||
/*consumePercentage=*/ 100.0,
|
|
||||||
/*foregroundUsageConsumePower=*/ 0, /*foregroundServiceUsageConsumePower=*/ 0,
|
|
||||||
/*backgroundUsageConsumePower=*/ 0, /*cachedUsageConsumePower=*/ 0,
|
|
||||||
/*foregroundUsageTimeInMs=*/ 0, /*backgroundUsageTimeInMs=*/ 0);
|
|
||||||
assertThat(resultMap.get(0).get(0)).isNotNull();
|
assertThat(resultMap.get(0).get(0)).isNotNull();
|
||||||
assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull();
|
assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user