diff --git a/res/drawable/ic_system_update.xml b/res/drawable/ic_system_update.xml
deleted file mode 100644
index 3325fdd5c01..00000000000
--- a/res/drawable/ic_system_update.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
diff --git a/res/drawable/ic_system_update_vd_theme_24.xml b/res/drawable/ic_system_update_vd_theme_24.xml
deleted file mode 100644
index d1fc0616bf0..00000000000
--- a/res/drawable/ic_system_update_vd_theme_24.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
diff --git a/res/xml/storage_dashboard_fragment.xml b/res/xml/storage_dashboard_fragment.xml
index 3f2e55f2822..c4bd11d0193 100644
--- a/res/xml/storage_dashboard_fragment.xml
+++ b/res/xml/storage_dashboard_fragment.xml
@@ -66,7 +66,7 @@
mUsageData;
@@ -133,29 +135,32 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
mForegroundUsage = findPreference(KEY_FOREGROUND_USAGE);
mBackgroundUsage = findPreference(KEY_BACKGROUND_USAGE);
- mCycle = (SpinnerPreference) findPreference(KEY_CYCLE);
+ mCycle = findPreference(KEY_CYCLE);
mCycleAdapter = new CycleAdapter(mContext, mCycle, mCycleListener);
+ final UidDetailProvider uidDetailProvider = getUidDetailProvider();
+
if (mAppItem.key > 0) {
- if (mPackages.size() != 0) {
- try {
- ApplicationInfo info = mPackageManager.getApplicationInfoAsUser(
- mPackages.valueAt(0), 0, UserHandle.getUserId(mAppItem.key));
- mIcon = IconDrawableFactory.newInstance(getActivity()).getBadgedIcon(info);
- mLabel = info.loadLabel(mPackageManager);
- mPackageName = info.packageName;
- } catch (PackageManager.NameNotFoundException e) {
- }
- }
if (!UserHandle.isApp(mAppItem.key)) {
+ final UidDetail uidDetail = uidDetailProvider.getUidDetail(mAppItem.key, true);
+ mIcon = uidDetail.icon;
+ mLabel = uidDetail.label;
removePreference(KEY_UNRESTRICTED_DATA);
removePreference(KEY_RESTRICT_BACKGROUND);
} else {
- mRestrictBackground = (RestrictedSwitchPreference) findPreference(
- KEY_RESTRICT_BACKGROUND);
+ if (mPackages.size() != 0) {
+ try {
+ final ApplicationInfo info = mPackageManager.getApplicationInfoAsUser(
+ mPackages.valueAt(0), 0, UserHandle.getUserId(mAppItem.key));
+ mIcon = IconDrawableFactory.newInstance(getActivity()).getBadgedIcon(info);
+ mLabel = info.loadLabel(mPackageManager);
+ mPackageName = info.packageName;
+ } catch (PackageManager.NameNotFoundException e) {
+ }
+ }
+ mRestrictBackground = findPreference(KEY_RESTRICT_BACKGROUND);
mRestrictBackground.setOnPreferenceChangeListener(this);
- mUnrestrictedData = (RestrictedSwitchPreference) findPreference(
- KEY_UNRESTRICTED_DATA);
+ mUnrestrictedData = findPreference(KEY_UNRESTRICTED_DATA);
mUnrestrictedData.setOnPreferenceChangeListener(this);
}
mDataSaverBackend = new DataSaverBackend(mContext);
@@ -164,7 +169,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
mAppSettingsIntent = new Intent(Intent.ACTION_MANAGE_NETWORK_USAGE);
mAppSettingsIntent.addCategory(Intent.CATEGORY_DEFAULT);
- PackageManager pm = getPackageManager();
+ final PackageManager pm = getPackageManager();
boolean matchFound = false;
for (String packageName : mPackages) {
mAppSettingsIntent.setPackage(packageName);
@@ -179,7 +184,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
}
if (mPackages.size() > 1) {
- mAppList = (PreferenceCategory) findPreference(KEY_APP_LIST);
+ mAppList = findPreference(KEY_APP_LIST);
LoaderManager.getInstance(this).restartLoader(LOADER_APP_PREF, Bundle.EMPTY,
mAppPrefCallbacks);
} else {
@@ -187,7 +192,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
}
} else {
final Context context = getActivity();
- UidDetail uidDetail = new UidDetailProvider(context).getUidDetail(mAppItem.key, true);
+ final UidDetail uidDetail = uidDetailProvider.getUidDetail(mAppItem.key, true);
mIcon = uidDetail.icon;
mLabel = uidDetail.label;
mPackageName = context.getPackageName();
@@ -257,6 +262,11 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
updatePrefs(getAppRestrictBackground(), getUnrestrictData());
}
+ @VisibleForTesting
+ UidDetailProvider getUidDetailProvider() {
+ return new UidDetailProvider(mContext);
+ }
+
private void updatePrefs(boolean restrictBackground, boolean unrestrictData) {
final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMeteredDataRestricted(
mContext, mPackageName, UserHandle.getUserId(mAppItem.key));
@@ -276,7 +286,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
}
private void addUid(int uid) {
- String[] packages = getPackageManager().getPackagesForUid(uid);
+ String[] packages = mPackageManager.getPackagesForUid(uid);
if (packages != null) {
for (int i = 0; i < packages.length; i++) {
mPackages.add(packages[i]);
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index 735532a5e2c..8eeb925f5e1 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -33,6 +33,7 @@ import android.net.ConnectivityManager;
import android.net.NetworkPolicy;
import android.net.NetworkTemplate;
import android.os.Bundle;
+import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -362,7 +363,8 @@ public class DataUsageList extends DataUsageBaseFragment {
category = AppItem.CATEGORY_USER;
}
}
- } else if (uid == UID_REMOVED || uid == UID_TETHERING) {
+ } else if (uid == UID_REMOVED || uid == UID_TETHERING
+ || uid == Process.OTA_UPDATE_UID) {
collapseKey = uid;
category = AppItem.CATEGORY_APP;
} else {
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
index 28555546d87..4561ab67589 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
@@ -22,6 +22,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
@@ -31,10 +32,13 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.net.NetworkPolicyManager;
import android.net.NetworkTemplate;
import android.os.Bundle;
+import android.os.Process;
import android.telephony.SubscriptionManager;
import android.text.format.DateUtils;
import android.util.ArraySet;
@@ -56,6 +60,8 @@ import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.net.NetworkCycleDataForUid;
import com.android.settingslib.net.NetworkCycleDataForUidLoader;
+import com.android.settingslib.net.UidDetail;
+import com.android.settingslib.net.UidDetailProvider;
import org.junit.After;
import org.junit.Before;
@@ -95,6 +101,62 @@ public class AppDataUsageTest {
ShadowEntityHeaderController.reset();
}
+ @Test
+ public void onCreate_appUid_shouldGetAppLabelFromAppInfo() throws NameNotFoundException {
+ mFragment = spy(new AppDataUsage());
+ final FragmentActivity activity = spy(Robolectric.setupActivity(FragmentActivity.class));
+ doReturn(mPackageManager).when(activity).getPackageManager();
+ doReturn(activity).when(mFragment).getActivity();
+ doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
+ ReflectionHelpers.setField(mFragment, "mDashboardFeatureProvider",
+ FakeFeatureFactory.setupForTest().dashboardFeatureProvider);
+ final String packageName = "testPackage";
+ final int uid = (Process.FIRST_APPLICATION_UID + Process.LAST_APPLICATION_UID) / 2;
+ doReturn(new String[] {packageName}).when(mPackageManager).getPackagesForUid(uid);
+ final String label = "testLabel";
+ final AppItem appItem = new AppItem(uid);
+ appItem.uids.put(uid, true);
+ final ApplicationInfo info = spy(new ApplicationInfo());
+ doReturn(label).when(info).loadLabel(mPackageManager);
+ when(mPackageManager.getApplicationInfoAsUser(
+ eq(packageName), anyInt() /* flags */, anyInt() /* userId */)).thenReturn(info);
+ final Bundle args = new Bundle();
+ args.putParcelable(AppDataUsage.ARG_APP_ITEM, appItem);
+ args.putInt(AppInfoBase.ARG_PACKAGE_UID, uid);
+ mFragment.setArguments(args);
+
+ mFragment.onCreate(Bundle.EMPTY);
+
+ assertThat(mFragment.mLabel).isEqualTo(label);
+ }
+
+ @Test
+ public void onCreate_notAppUid_shouldGetAppLabelFromUidDetailProvider() {
+ mFragment = spy(new AppDataUsage());
+ ReflectionHelpers.setField(mFragment, "mDashboardFeatureProvider",
+ FakeFeatureFactory.setupForTest().dashboardFeatureProvider);
+ doReturn(Robolectric.setupActivity(FragmentActivity.class)).when(mFragment).getActivity();
+ doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
+ final UidDetailProvider uidDetailProvider = mock(UidDetailProvider.class);
+ doReturn(uidDetailProvider).when(mFragment).getUidDetailProvider();
+ final String label = "testLabel";
+ final int uid = Process.SYSTEM_UID;
+ final UidDetail uidDetail = new UidDetail();
+ uidDetail.label = label;
+ when(uidDetailProvider.getUidDetail(eq(uid), anyBoolean() /* blocking */)).
+ thenReturn(uidDetail);
+ final AppItem appItem = new AppItem(uid);
+ appItem.uids.put(uid, true);
+ final Bundle args = new Bundle();
+ args.putParcelable(AppDataUsage.ARG_APP_ITEM, appItem);
+ args.putInt(AppInfoBase.ARG_PACKAGE_UID, uid);
+ mFragment.setArguments(args);
+
+ mFragment.onCreate(Bundle.EMPTY);
+
+ assertThat(mFragment.mLabel).isEqualTo(label);
+ }
+
@Test
public void bindAppHeader_allWorkApps_shouldNotShowAppInfoLink() {
ShadowEntityHeaderController.setUseMock(mHeaderController);
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
index feb3533e49e..73fea77b0d3 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
@@ -341,7 +341,7 @@ public class StorageItemPreferenceControllerTest {
final StorageItemPreference apps = spy(new StorageItemPreference(mContext));
apps.setIcon(R.drawable.ic_storage_apps);
final StorageItemPreference system = spy(new StorageItemPreference(mContext));
- system.setIcon(R.drawable.ic_system_update_vd_theme_24);
+ system.setIcon(R.drawable.ic_system_update);
final StorageItemPreference files = spy(new StorageItemPreference(mContext));
files.setIcon(R.drawable.ic_folder_vd_theme_24);
final PreferenceScreen screen = mock(PreferenceScreen.class);