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