Merge "Use IconProvider to get application icon." into udc-dev

This commit is contained in:
Matt Sziklay
2023-03-29 20:59:54 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 24 deletions

View File

@@ -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);
}

View File

@@ -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)