Merge "Support special tethering and removed apps UID in the usage list" into tm-dev
This commit is contained in:
@@ -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>
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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) ||
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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);
|
||||||
|
@@ -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";
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user