Merge "Badge the icons for profile storage screen."
This commit is contained in:
@@ -20,22 +20,27 @@
|
|||||||
android:title="@string/storage_settings">
|
android:title="@string/storage_settings">
|
||||||
<com.android.settings.deviceinfo.StorageItemPreference
|
<com.android.settings.deviceinfo.StorageItemPreference
|
||||||
android:key="pref_photos_videos"
|
android:key="pref_photos_videos"
|
||||||
android:title="@string/storage_photos_videos">
|
android:title="@string/storage_photos_videos"
|
||||||
</com.android.settings.deviceinfo.StorageItemPreference>
|
android:icon="@drawable/ic_photo_library_vd_theme_24"
|
||||||
|
android:order="2" />
|
||||||
<com.android.settings.deviceinfo.StorageItemPreference
|
<com.android.settings.deviceinfo.StorageItemPreference
|
||||||
android:key="pref_music_audio"
|
android:key="pref_music_audio"
|
||||||
android:title="@string/storage_music_audio">
|
android:title="@string/storage_music_audio"
|
||||||
</com.android.settings.deviceinfo.StorageItemPreference>
|
android:icon="@drawable/ic_music_note_vd_theme_24"
|
||||||
|
android:order="3" />
|
||||||
<com.android.settings.deviceinfo.StorageItemPreference
|
<com.android.settings.deviceinfo.StorageItemPreference
|
||||||
android:key="pref_games"
|
android:key="pref_games"
|
||||||
android:title="@string/storage_games">
|
android:title="@string/storage_games"
|
||||||
</com.android.settings.deviceinfo.StorageItemPreference>
|
android:icon="@drawable/ic_videogame_vd_theme_24"
|
||||||
|
android:order="4" />
|
||||||
<com.android.settings.deviceinfo.StorageItemPreference
|
<com.android.settings.deviceinfo.StorageItemPreference
|
||||||
android:key="pref_other_apps"
|
android:key="pref_other_apps"
|
||||||
android:title="@string/storage_other_apps">
|
android:title="@string/storage_other_apps"
|
||||||
</com.android.settings.deviceinfo.StorageItemPreference>
|
android:icon="@drawable/ic_apps_vd_theme_24"
|
||||||
|
android:order="5" />
|
||||||
<com.android.settings.deviceinfo.StorageItemPreference
|
<com.android.settings.deviceinfo.StorageItemPreference
|
||||||
android:key="pref_files"
|
android:key="pref_files"
|
||||||
android:title="@string/storage_files">
|
android:title="@string/storage_files"
|
||||||
</com.android.settings.deviceinfo.StorageItemPreference>
|
android:icon="@drawable/ic_folder_vd_theme_24"
|
||||||
|
android:order="6" />
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
@@ -73,8 +73,7 @@ public class StorageProfileFragment extends DashboardFragment
|
|||||||
|
|
||||||
mPreferenceController.setVolume(mVolume);
|
mPreferenceController.setVolume(mVolume);
|
||||||
mUserId = args.getInt(USER_ID_EXTRA, UserHandle.myUserId());
|
mUserId = args.getInt(USER_ID_EXTRA, UserHandle.myUserId());
|
||||||
// TODO(b/36224168): Use the user id to appropriately badge the preferences.
|
mPreferenceController.setUserId(UserHandle.of(mUserId));
|
||||||
mPreferenceController.setUserId(mUserId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -20,6 +20,9 @@ import android.app.Fragment;
|
|||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
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.Bundle;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.storage.VolumeInfo;
|
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.
|
* Sets the user id for which this preference controller is handling.
|
||||||
*/
|
*/
|
||||||
public void setUserId(int userId) {
|
public void setUserId(UserHandle userHandle) {
|
||||||
mUserId = userId;
|
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
|
@Override
|
||||||
|
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.storage.VolumeInfo;
|
import android.os.storage.VolumeInfo;
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
@@ -243,4 +244,43 @@ public class StorageItemPreferenceControllerTest {
|
|||||||
assertThat(system.getSummary().toString()).isEqualTo("16.00KB");
|
assertThat(system.getSummary().toString()).isEqualTo("16.00KB");
|
||||||
assertThat(files.getSummary().toString()).isEqualTo("5.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));
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user