Merge "Support special tethering and removed apps UID in the usage list" into tm-dev

This commit is contained in:
YK Hung
2022-05-05 12:18:10 +00:00
committed by Android (Google) Code Review
8 changed files with 71 additions and 6 deletions

View File

@@ -6627,10 +6627,14 @@
<!-- Menu label for refreshing with latest usage numbers --> <!-- Menu label for refreshing with latest usage numbers -->
<string name="menu_stats_refresh">Refresh</string> <string name="menu_stats_refresh">Refresh</string>
<!-- Label for mediaserver process in battery usage --> <!-- Label for mediaserver process in battery usage [CHAR_LIMIT=NONE] -->
<string name="process_mediaserver_label">Mediaserver</string> <string name="process_mediaserver_label">Mediaserver</string>
<!-- Label for dex2oat process in battery usage used for the optimization of one or more apps --> <!-- Label for dex2oat process in battery usage used for the optimization of one or more apps -->
<string name="process_dex2oat_label">App optimization</string> <string name="process_dex2oat_label">App optimization</string>
<!-- Label for network tethering UID label in battery usage [CHAR_LIMIT=NONE] -->
<string name="process_network_tethering">Tethering</string>
<!-- Label for removed apps UID lablel in battery usage [CHAR_LIMIT=NONE] -->
<string name="process_removed_apps">Removed apps</string>
<!-- Battery saver: Label for feature, title + menu item [CHAR_LIMIT=40] --> <!-- Battery saver: Label for feature, title + menu item [CHAR_LIMIT=40] -->
<string name="battery_saver">Battery Saver</string> <string name="battery_saver">Battery Saver</string>

View File

@@ -243,7 +243,8 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro
continue; continue;
} }
final UserHandle userHandle = new UserHandle(UserHandle.getUserId(entry.getUid())); final int uid = entry.getUid();
final UserHandle userHandle = new UserHandle(UserHandle.getUserId(uid));
final Drawable badgedIcon = mUserManager.getBadgedIconForUser(entry.getIcon(), final Drawable badgedIcon = mUserManager.getBadgedIconForUser(entry.getIcon(),
userHandle); userHandle);
final CharSequence contentDescription = mUserManager.getBadgedLabelForUser( final CharSequence contentDescription = mUserManager.getBadgedLabelForUser(
@@ -261,6 +262,8 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro
pref.setOrder(i + 1); pref.setOrder(i + 1);
pref.setPercent(percentOfTotal); pref.setPercent(percentOfTotal);
pref.shouldShowAnomalyIcon(false); pref.shouldShowAnomalyIcon(false);
pref.setEnabled(uid != BatteryUtils.UID_TETHERING
&& uid != BatteryUtils.UID_REMOVED_APPS);
setUsageSummary(pref, entry); setUsageSummary(pref, entry);
addedSome = true; addedSome = true;
mAppListGroup.addPreference(pref); mAppListGroup.addPreference(pref);

View File

@@ -153,13 +153,16 @@ public class BatteryDiffEntry {
case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY: case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY:
return true; return true;
case ConvertUtils.CONSUMER_TYPE_UID_BATTERY: case ConvertUtils.CONSUMER_TYPE_UID_BATTERY:
if (mBatteryHistEntry.mIsHidden) { final int uid = (int) mBatteryHistEntry.mUid;
if (mBatteryHistEntry.mIsHidden
|| uid == BatteryUtils.UID_REMOVED_APPS
|| uid == BatteryUtils.UID_TETHERING) {
return true; return true;
} }
final boolean combineSystemComponents = final boolean combineSystemComponents =
mContext.getResources().getBoolean( mContext.getResources().getBoolean(
R.bool.config_battery_combine_system_components); R.bool.config_battery_combine_system_components);
return combineSystemComponents && isSystemUid((int) mBatteryHistEntry.mUid); return combineSystemComponents && isSystemUid(uid);
} }
return false; return false;
} }

View File

@@ -550,6 +550,10 @@ public class BatteryEntry {
Drawable icon = context.getDrawable(R.drawable.ic_power_system); Drawable icon = context.getDrawable(R.drawable.ic_power_system);
if (uid == 0) { if (uid == 0) {
name = context.getResources().getString(R.string.process_kernel_label); name = context.getResources().getString(R.string.process_kernel_label);
} else if (uid == BatteryUtils.UID_REMOVED_APPS) {
name = context.getResources().getString(R.string.process_removed_apps);
} else if (uid == BatteryUtils.UID_TETHERING) {
name = context.getResources().getString(R.string.process_network_tethering);
} else if ("mediaserver".equals(name)) { } else if ("mediaserver".equals(name)) {
name = context.getResources().getString(R.string.process_mediaserver_label); name = context.getResources().getString(R.string.process_mediaserver_label);
} else if ("dex2oat".equals(name) || "dex2oat32".equals(name) || } else if ("dex2oat".equals(name) || "dex2oat32".equals(name) ||

View File

@@ -65,6 +65,10 @@ import java.util.List;
public class BatteryUtils { public class BatteryUtils {
public static final int UID_NULL = -1; public static final int UID_NULL = -1;
public static final int SDK_NULL = -1; public static final int SDK_NULL = -1;
/** Special UID value for data usage by removed apps. */
public static final int UID_REMOVED_APPS = -4;
/** Special UID value for data usage by tethering. */
public static final int UID_TETHERING = -5;
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef({StatusType.SCREEN_USAGE, @IntDef({StatusType.SCREEN_USAGE,
@@ -188,7 +192,10 @@ public class BatteryUtils {
*/ */
boolean shouldHideUidBatteryConsumerUnconditionally(UidBatteryConsumer consumer, boolean shouldHideUidBatteryConsumerUnconditionally(UidBatteryConsumer consumer,
String[] packages) { String[] packages) {
return consumer.getUid() < 0 || isHiddenSystemModule(packages); final int uid = consumer.getUid();
return uid == UID_TETHERING
? false
: uid < 0 || isHiddenSystemModule(packages);
} }
/** /**

View File

@@ -26,6 +26,7 @@ import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Process;
import android.os.UserManager; import android.os.UserManager;
import android.text.format.DateUtils; import android.text.format.DateUtils;
@@ -101,13 +102,22 @@ public class BatteryAppListPreferenceControllerTest {
} }
@Test @Test
public void testSetUsageSummary_timeLessThanOneMinute_DoNotSetSummary() { public void testSetUsageSummary_timeLessThanOneMinute_doNotSetSummary() {
when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(59 * DateUtils.SECOND_IN_MILLIS); when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(59 * DateUtils.SECOND_IN_MILLIS);
mPreferenceController.setUsageSummary(mPreference, mBatteryEntry); mPreferenceController.setUsageSummary(mPreference, mBatteryEntry);
assertThat(mPreference.getSummary()).isNull(); assertThat(mPreference.getSummary()).isNull();
} }
@Test
public void testSetUsageSummary_systemProcessUid_doNotSetSummary() {
when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(DateUtils.MINUTE_IN_MILLIS);
when(mBatteryEntry.getUid()).thenReturn(Process.SYSTEM_UID);
mPreferenceController.setUsageSummary(mPreference, mBatteryEntry);
assertThat(mPreference.getSummary()).isNull();
}
@Test @Test
public void testSetUsageSummary_timeMoreThanOneMinute_normalApp_setScreenSummary() { public void testSetUsageSummary_timeMoreThanOneMinute_normalApp_setScreenSummary() {
when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(2 * DateUtils.MINUTE_IN_MILLIS); when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(2 * DateUtils.MINUTE_IN_MILLIS);

View File

@@ -357,6 +357,24 @@ public final class BatteryDiffEntryTest {
assertThat(entry.isSystemEntry()).isFalse(); assertThat(entry.isSystemEntry()).isFalse();
} }
@Test
public void testIsSystemEntry_uidBatteryWithTetheringProcess_returnTrue() {
final BatteryDiffEntry entry =
createBatteryDiffEntry(
ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
/*uid=*/ BatteryUtils.UID_TETHERING, /*isHidden=*/ false);
assertThat(entry.isSystemEntry()).isTrue();
}
@Test
public void testIsSystemEntry_uidBatteryWithRemovedAppsProcess_returnTrue() {
final BatteryDiffEntry entry =
createBatteryDiffEntry(
ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
/*uid=*/ BatteryUtils.UID_REMOVED_APPS, /*isHidden=*/ false);
assertThat(entry.isSystemEntry()).isTrue();
}
@Test @Test
public void testUpdateRestrictionFlagState_updateFlagAsExpected() throws Exception { public void testUpdateRestrictionFlagState_updateFlagAsExpected() throws Exception {
final String expectedAppLabel = "fake app label"; final String expectedAppLabel = "fake app label";

View File

@@ -278,6 +278,22 @@ public class BatteryEntryTest {
assertNameAndIcon("dex2oat", R.string.process_dex2oat_label); assertNameAndIcon("dex2oat", R.string.process_dex2oat_label);
} }
@Test
public void getNameAndIconFromUid_tetheringUid_rerturnExpectedName() {
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
mContext, /* name */ null, /* uid */ BatteryUtils.UID_TETHERING);
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_network_tethering));
}
@Test
public void getNameAndIconFromUid_removedAppsUid_rerturnExpectedName() {
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
mContext, /* name */ null, /* uid */ BatteryUtils.UID_REMOVED_APPS);
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_removed_apps));
}
@Test @Test
public void getNameAndIconFromPowerComponent_rerturnExpectedNameAndIcon() { public void getNameAndIconFromPowerComponent_rerturnExpectedNameAndIcon() {
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY, assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,