diff --git a/res/xml/storage_profile_fragment.xml b/res/xml/storage_profile_fragment.xml
index c6757447cef..98cb1dc87ff 100644
--- a/res/xml/storage_profile_fragment.xml
+++ b/res/xml/storage_profile_fragment.xml
@@ -20,22 +20,27 @@
android:title="@string/storage_settings">
-
+ android:title="@string/storage_photos_videos"
+ android:icon="@drawable/ic_photo_library_vd_theme_24"
+ android:order="2" />
-
+ android:title="@string/storage_music_audio"
+ android:icon="@drawable/ic_music_note_vd_theme_24"
+ android:order="3" />
-
+ android:title="@string/storage_games"
+ android:icon="@drawable/ic_videogame_vd_theme_24"
+ android:order="4" />
-
+ android:title="@string/storage_other_apps"
+ android:icon="@drawable/ic_apps_vd_theme_24"
+ android:order="5" />
-
+ android:title="@string/storage_files"
+ android:icon="@drawable/ic_folder_vd_theme_24"
+ android:order="6" />
diff --git a/src/com/android/settings/deviceinfo/StorageProfileFragment.java b/src/com/android/settings/deviceinfo/StorageProfileFragment.java
index 1a249620233..c5d1045f6f2 100644
--- a/src/com/android/settings/deviceinfo/StorageProfileFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageProfileFragment.java
@@ -73,8 +73,7 @@ public class StorageProfileFragment extends DashboardFragment
mPreferenceController.setVolume(mVolume);
mUserId = args.getInt(USER_ID_EXTRA, UserHandle.myUserId());
- // TODO(b/36224168): Use the user id to appropriately badge the preferences.
- mPreferenceController.setUserId(mUserId);
+ mPreferenceController.setUserId(UserHandle.of(mUserId));
}
@Override
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index e22aa24060a..5b2759253ea 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -20,6 +20,9 @@ import android.app.Fragment;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
@@ -165,8 +168,35 @@ public class StorageItemPreferenceController extends PreferenceController {
/**
* Sets the user id for which this preference controller is handling.
*/
- public void setUserId(int userId) {
- mUserId = userId;
+ public void setUserId(UserHandle userHandle) {
+ mUserId = userHandle.getIdentifier();
+
+ PackageManager pm = mContext.getPackageManager();
+ badgePreference(pm, userHandle, mPhotoPreference);
+ badgePreference(pm, userHandle, mAudioPreference);
+ badgePreference(pm, userHandle, mGamePreference);
+ badgePreference(pm, userHandle, mAppPreference);
+ badgePreference(pm, userHandle, mSystemPreference);
+ badgePreference(pm, userHandle, mFilePreference);
+ }
+
+ private void badgePreference(PackageManager pm, UserHandle userHandle, Preference preference) {
+ if (preference != null) {
+ Drawable currentIcon = preference.getIcon();
+ // Sigh... Applying the badge to the icon clobbers the tint on the base drawable.
+ // For some reason, re-applying it here means the tint remains.
+ currentIcon = applyTint(mContext, currentIcon);
+ preference.setIcon(pm.getUserBadgedIcon(currentIcon, userHandle));
+ }
+ }
+
+ private static Drawable applyTint(Context context, Drawable icon) {
+ TypedArray array =
+ context.obtainStyledAttributes(new int[]{android.R.attr.colorControlNormal});
+ icon = icon.mutate();
+ icon.setTint(array.getColor(0, 0));
+ array.recycle();
+ return icon;
}
@Override
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 18b0c82c680..7d1f79bd64f 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.when;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
+import android.graphics.drawable.Drawable;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
import android.support.v7.preference.PreferenceScreen;
@@ -243,4 +244,43 @@ public class StorageItemPreferenceControllerTest {
assertThat(system.getSummary().toString()).isEqualTo("16.00KB");
assertThat(files.getSummary().toString()).isEqualTo("5.00KB");
}
+
+ @Test
+ public void settingUserIdAppliesNewIcons() {
+ StorageItemPreference audio = spy(new StorageItemPreference(mContext));
+ audio.setIcon(R.drawable.ic_photo_library_vd_theme_24);
+ StorageItemPreference image = spy(new StorageItemPreference(mContext));
+ image.setIcon(R.drawable.ic_photo_library_vd_theme_24);
+ StorageItemPreference games = spy(new StorageItemPreference(mContext));
+ games.setIcon(R.drawable.ic_photo_library_vd_theme_24);
+ StorageItemPreference apps = spy(new StorageItemPreference(mContext));
+ apps.setIcon(R.drawable.ic_photo_library_vd_theme_24);
+ StorageItemPreference system = spy(new StorageItemPreference(mContext));
+ system.setIcon(R.drawable.ic_photo_library_vd_theme_24);
+ StorageItemPreference files = spy(new StorageItemPreference(mContext));
+ files.setIcon(R.drawable.ic_photo_library_vd_theme_24);
+ PreferenceScreen screen = mock(PreferenceScreen.class);
+ when(screen.findPreference(
+ eq(StorageItemPreferenceController.AUDIO_KEY))).thenReturn(audio);
+ when(screen.findPreference(
+ eq(StorageItemPreferenceController.PHOTO_KEY))).thenReturn(image);
+ when(screen.findPreference(
+ eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games);
+ when(screen.findPreference(
+ eq(StorageItemPreferenceController.OTHER_APPS_KEY))).thenReturn(apps);
+ when(screen.findPreference(
+ eq(StorageItemPreferenceController.SYSTEM_KEY))).thenReturn(system);
+ when(screen.findPreference(
+ eq(StorageItemPreferenceController.FILES_KEY))).thenReturn(files);
+ mController.displayPreference(screen);
+
+ mController.setUserId(new UserHandle(10));
+
+ verify(audio, times(2)).setIcon(any(Drawable.class));
+ verify(image, times(2)).setIcon(any(Drawable.class));
+ verify(games, times(2)).setIcon(any(Drawable.class));
+ verify(apps, times(2)).setIcon(any(Drawable.class));
+ verify(system, times(2)).setIcon(any(Drawable.class));
+ verify(files, times(2)).setIcon(any(Drawable.class));
+ }
}
\ No newline at end of file