Avoid loading action icons when possible

This is a similar memory optimization as applied to the app icon in
ag/12727673.

Bug: 160591450
Test: manual - heap_profile sysui while toggling play/pause.
Change-Id: I66fee5b8cb6b2abdbb7dadda09ccd1d4905c5706
This commit is contained in:
Robert Snoeberger
2020-09-29 16:32:06 -04:00
parent db5bf27c50
commit 0bc26bd994
3 changed files with 9 additions and 4 deletions

View File

@@ -329,7 +329,7 @@ public class MediaControlPanel {
int actionId = ACTION_IDS[i];
final ImageButton button = mViewHolder.getAction(actionId);
MediaAction mediaAction = actionIcons.get(i);
button.setImageDrawable(mediaAction.getDrawable());
button.setImageIcon(mediaAction.getIcon());
button.setContentDescription(mediaAction.getContentDescription());
Runnable action = mediaAction.getAction();

View File

@@ -109,7 +109,7 @@ data class MediaData(
/** State of a media action. */
data class MediaAction(
val drawable: Drawable?,
val icon: Icon?,
val action: Runnable?,
val contentDescription: CharSequence?
)

View File

@@ -501,8 +501,13 @@ class MediaDataManager(
} else {
null
}
val mediaActionIcon = if (action.getIcon()?.getType() == Icon.TYPE_RESOURCE) {
Icon.createWithResource(packageContext, action.getIcon()!!.getResId())
} else {
action.getIcon()
}
val mediaAction = MediaAction(
action.getIcon().loadDrawable(packageContext),
mediaActionIcon,
runnable,
action.title)
actionIcons.add(mediaAction)
@@ -612,7 +617,7 @@ class MediaDataManager(
private fun getResumeMediaAction(action: Runnable): MediaAction {
return MediaAction(
context.getDrawable(R.drawable.lb_ic_play),
Icon.createWithResource(context, R.drawable.lb_ic_play),
action,
context.getString(R.string.controls_media_resume)
)