Use IconProvider to get application icon.
Changes logic to get app icon to use IconProvider. Also places it such that icon and name are fetched on WindowDecor creation rather than every time handle menu is built. Bug: 268363572 Test: Manual, ensure correct icon/name are still fetched. Change-Id: I546fbead9b4d86a3fae61e1a21814df57f8363a2
This commit is contained in:
@@ -26,6 +26,7 @@ import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.view.Choreographer;
|
||||
@@ -38,6 +39,7 @@ import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.window.WindowContainerTransaction;
|
||||
|
||||
import com.android.launcher3.icons.IconProvider;
|
||||
import com.android.wm.shell.R;
|
||||
import com.android.wm.shell.ShellTaskOrganizer;
|
||||
import com.android.wm.shell.common.DisplayController;
|
||||
@@ -81,6 +83,9 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
|
||||
private final int mHandleMenuCornerRadiusId = R.dimen.caption_menu_corner_radius;
|
||||
private PointF mHandleMenuPosition = new PointF();
|
||||
|
||||
private Drawable mAppIcon;
|
||||
private CharSequence mAppName;
|
||||
|
||||
DesktopModeWindowDecoration(
|
||||
Context context,
|
||||
DisplayController displayController,
|
||||
@@ -95,6 +100,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
|
||||
mHandler = handler;
|
||||
mChoreographer = choreographer;
|
||||
mSyncQueue = syncQueue;
|
||||
|
||||
loadAppInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -185,7 +192,9 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
|
||||
mWindowDecorViewHolder = new DesktopModeAppControlsWindowDecorationViewHolder(
|
||||
mResult.mRootView,
|
||||
mOnCaptionTouchListener,
|
||||
mOnCaptionButtonClickListener
|
||||
mOnCaptionButtonClickListener,
|
||||
mAppName,
|
||||
mAppIcon
|
||||
);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unexpected layout resource id");
|
||||
@@ -243,22 +252,24 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
|
||||
|
||||
final ImageView appIcon = menu.findViewById(R.id.application_icon);
|
||||
final TextView appName = menu.findViewById(R.id.application_name);
|
||||
loadAppInfo(appName, appIcon);
|
||||
appIcon.setImageDrawable(mAppIcon);
|
||||
appName.setText(mAppName);
|
||||
}
|
||||
|
||||
boolean isHandleMenuActive() {
|
||||
return mHandleMenu != null;
|
||||
}
|
||||
|
||||
private void loadAppInfo(TextView appNameTextView, ImageView appIconImageView) {
|
||||
private void loadAppInfo() {
|
||||
String packageName = mTaskInfo.realActivity.getPackageName();
|
||||
PackageManager pm = mContext.getApplicationContext().getPackageManager();
|
||||
try {
|
||||
// TODO(b/268363572): Use IconProvider or BaseIconCache to set drawable/name.
|
||||
IconProvider provider = new IconProvider(mContext);
|
||||
mAppIcon = provider.getIcon(pm.getActivityInfo(mTaskInfo.baseActivity,
|
||||
PackageManager.ComponentInfoFlags.of(0)));
|
||||
ApplicationInfo applicationInfo = pm.getApplicationInfo(packageName,
|
||||
PackageManager.ApplicationInfoFlags.of(0));
|
||||
appNameTextView.setText(pm.getApplicationLabel(applicationInfo));
|
||||
appIconImageView.setImageDrawable(pm.getApplicationIcon(applicationInfo));
|
||||
mAppName = pm.getApplicationLabel(applicationInfo);
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
Log.w(TAG, "Package not found: " + packageName, e);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package com.android.wm.shell.windowdecor.viewholder
|
||||
|
||||
import android.app.ActivityManager.RunningTaskInfo
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.ImageButton
|
||||
import android.widget.ImageView
|
||||
@@ -19,7 +18,9 @@ import com.android.wm.shell.R
|
||||
internal class DesktopModeAppControlsWindowDecorationViewHolder(
|
||||
rootView: View,
|
||||
onCaptionTouchListener: View.OnTouchListener,
|
||||
onCaptionButtonClickListener: View.OnClickListener
|
||||
onCaptionButtonClickListener: View.OnClickListener,
|
||||
appName: CharSequence,
|
||||
appIcon: Drawable
|
||||
) : DesktopModeWindowDecorationViewHolder(rootView) {
|
||||
|
||||
private val captionView: View = rootView.findViewById(R.id.desktop_mode_caption)
|
||||
@@ -35,10 +36,11 @@ internal class DesktopModeAppControlsWindowDecorationViewHolder(
|
||||
captionHandle.setOnTouchListener(onCaptionTouchListener)
|
||||
openMenuButton.setOnClickListener(onCaptionButtonClickListener)
|
||||
closeWindowButton.setOnClickListener(onCaptionButtonClickListener)
|
||||
appNameTextView.text = appName
|
||||
appIconImageView.setImageDrawable(appIcon)
|
||||
}
|
||||
|
||||
override fun bindData(taskInfo: RunningTaskInfo) {
|
||||
bindAppInfo(taskInfo)
|
||||
|
||||
val captionDrawable = captionView.background as GradientDrawable
|
||||
captionDrawable.setColor(taskInfo.taskDescription.statusBarColor)
|
||||
@@ -50,20 +52,6 @@ internal class DesktopModeAppControlsWindowDecorationViewHolder(
|
||||
appNameTextView.setTextColor(getCaptionAppNameTextColor(taskInfo))
|
||||
}
|
||||
|
||||
private fun bindAppInfo(taskInfo: RunningTaskInfo) {
|
||||
val packageName: String = taskInfo.realActivity.packageName
|
||||
val pm: PackageManager = context.applicationContext.packageManager
|
||||
try {
|
||||
// TODO(b/268363572): Use IconProvider or BaseIconCache to set drawable/name.
|
||||
val applicationInfo = pm.getApplicationInfo(packageName,
|
||||
PackageManager.ApplicationInfoFlags.of(0))
|
||||
appNameTextView.text = pm.getApplicationLabel(applicationInfo)
|
||||
appIconImageView.setImageDrawable(pm.getApplicationIcon(applicationInfo))
|
||||
} catch (e: PackageManager.NameNotFoundException) {
|
||||
Log.w(TAG, "Package not found: $packageName", e)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getCaptionAppNameTextColor(taskInfo: RunningTaskInfo): Int {
|
||||
return if (shouldUseLightCaptionColors(taskInfo)) {
|
||||
context.getColor(R.color.desktop_mode_caption_app_name_light)
|
||||
|
||||
Reference in New Issue
Block a user