系统选择框ResolverActivity修改记录 (Android10)
提交选择弹框、错误弹框修改;
diff --git a/frameworks/base/core/java/com/android/internal/app/AlertController.java b/frameworks/base/core/java/com/android/internal/app/AlertController.java
old mode 100644
new mode 100755
--- a/frameworks/base/core/java/com/android/internal/app/AlertController.java
+++ b/frameworks/base/core/java/com/android/internal/app/AlertController.java
@@ -28,6 +28,14 @@ import android.content.DialogInterface;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.PixelFormat;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
@@ -273,6 +281,7 @@ public class AlertController {
}
private int selectContentView() {
+
if (mButtonPanelSideLayout == 0) {
return mAlertDialogLayout;
}
@@ -438,13 +447,58 @@ public class AlertController {
if (mIconView != null) {
if (icon != null) {
mIconView.setVisibility(View.VISIBLE);
- mIconView.setImageDrawable(icon);
+ setIconView(mIconView, icon);
} else {
mIconView.setVisibility(View.GONE);
}
}
}
+ private void setIconView(ImageView imageView, int iconId) {
+ setIconView(imageView, mContext.getDrawable(iconId));
+ }
+
+ private void setIconView(ImageView imageView, Drawable icon) {
+ Bitmap bitmap = drawableToBitmap(icon);
+ imageView.setImageBitmap(setRoundCornerBitmap(bitmap, dp2px(mContext, 19)));
+ }
+
+ public int dp2px(Context context, float dpValue) {
+ final float scale = context.getResources().getDisplayMetrics().density;
+ return (int) (dpValue * scale + 0.5f);
+ }
+
+ public Bitmap drawableToBitmap(Drawable drawable) {
+ int width = drawable.getIntrinsicWidth();
+ int height = drawable.getIntrinsicHeight();
+
+ drawable.setBounds(0, 0, width, height);
+ Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
+ : Bitmap.Config.RGB_565;
+ Bitmap bitmap = Bitmap.createBitmap(width, height, config);
+ Canvas canvas = new Canvas(bitmap);
+ drawable.draw(canvas);
+ return bitmap;
+ }
+
+ public Bitmap setRoundCornerBitmap(Bitmap bitmap, float roundPx) {
+ int width = bitmap.getWidth();
+ int height = bitmap.getHeight();
+ Bitmap outBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(outBitmap);
+ final int color = 0xff424242;
+ final Paint paint = new Paint();
+ final Rect rect = new Rect(0, 0, width, height);
+ final RectF rectf = new RectF(rect);
+ paint.setAntiAlias(true);
+ canvas.drawARGB(0, 0, 0, 0);
+ paint.setColor(color);
+ canvas.drawRoundRect(rectf, roundPx, roundPx, paint);
+ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
+ canvas.drawBitmap(bitmap, rect, rect, paint);
+ return outBitmap;
+ }
+
@@ -682,9 +736,11 @@ public class AlertController {
if (mIconId != 0) {
- mIconView.setImageResource(mIconId);
+ setIconView(mIconView, mIconId);
+
} else if (mIcon != null) {
- mIconView.setImageDrawable(mIcon);
+ setIconView(mIconView, mIcon);
+
} else {
diff --git a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
old mode 100644
new mode 100755
index 9961587..2d40af9
--- a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
+++ b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
@@ -43,9 +43,16 @@ import android.content.pm.UserInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Insets;
+import android.graphics.Paint;
+import android.graphics.PixelFormat;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -84,6 +91,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.content.PackageMonitor;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
+import com.android.internal.util.ImageUtils;
import com.android.internal.widget.ResolverDrawerLayout;
import java.util.ArrayList;
@@ -1302,7 +1310,7 @@ public class ResolverActivity extends Activity {
if (useHeader && listView != null && listView.getHeaderViewsCount() == 0) {
- listView.setHeaderDividersEnabled(true);
+ listView.setHeaderDividersEnabled(false);
listView.addHeaderView(LayoutInflater.from(this).inflate(
R.layout.resolver_different_item_header, listView, false));
}
@@ -1333,6 +1341,7 @@ public class ResolverActivity extends Activity {
final ImageView iconView = findViewById(R.id.icon);
final DisplayResolveInfo iconInfo = mAdapter.getFilteredItem();
+ Log.i(TAG, "iconInfo:" + iconInfo);
if (iconView != null && iconInfo != null) {
new LoadIconTask(iconInfo, iconView).execute();
}
@@ -2061,6 +2070,7 @@ public class ResolverActivity extends Activity {
protected void onBindView(View view, TargetInfo info) {
final ViewHolder holder = (ViewHolder) view.getTag();
+
if (info == null) {
holder.icon.setImageDrawable(
getDrawable(R.drawable.resolver_icon_placeholder));
@@ -2089,16 +2099,18 @@ public class ResolverActivity extends Activity {
holder.icon.setColorFilter(null);
}
- if (info instanceof DisplayResolveInfo
+
+ String packageName = info.getResolveInfo().activityInfo.packageName;
+ holder.icon.setImageDrawable(ImageUtils.getAppIcon(getApplicationContext(), packageName));
+
}
}
-
@VisibleForTesting
public static final class ResolvedComponentInfo {
public final ComponentName name;
diff --git a/frameworks/base/core/java/com/android/internal/util/ImageUtils.java b/frameworks/base/core/java/com/android/internal/util/ImageUtils.java
old mode 100644
new mode 100755
index 274a513..61f0fdb
--- a/frameworks/base/core/java/com/android/internal/util/ImageUtils.java
+++ b/frameworks/base/core/java/com/android/internal/util/ImageUtils.java
@@ -18,6 +18,8 @@ package com.android.internal.util;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
@@ -26,8 +28,12 @@ import android.graphics.ImageDecoder.ImageInfo;
import android.graphics.ImageDecoder.Source;
import android.graphics.Matrix;
import android.graphics.Paint;
+import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -215,4 +221,19 @@ public class ImageUtils {
});
}
}
+
+ public static Drawable getAppIcon(Context context, String packageName) {
+ PackageManager packageManager = context.getPackageManager();
+ try {
+ return packageManager.getApplicationIcon(packageName);
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static int dp2px(Context context, float dpValue) {
+ float scale = context.getResources().getDisplayMetrics().density;
+ return (int) (dpValue * scale + 0.5f);
+ }
}
diff --git a/frameworks/base/core/java/com/android/internal/widget/RoundImageView.java b/frameworks/base/core/java/com/android/internal/widget/RoundImageView.java
new file mode 100755
index 0000000..d43710a
--- /dev/null
+++ b/frameworks/base/core/java/com/android/internal/widget/RoundImageView.java
@@ -0,0 +1,185 @@
+package com.android.internal.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PixelFormat;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+import java.lang.ref.WeakReference;
+
+public class RoundImageView extends ImageView {
+ private static final String TAG = RoundImageView.class.getSimpleName();
+
+ protected Context mContext;
+ protected int mShape;
+ protected int roundRadius;
+ protected int leftTopRadius;
+ protected int rightTopRadius;
+ protected int rightBottomRadius;
+ protected int leftBottomRadius;
+ private Paint shaderPaint;
+ private Paint mPaint;
+ private Shader shader;
+ private WeakReference<Bitmap> mWeakBitmap;
+
+ public RoundImageView(Context context) {
+ super(context);
+ sharedConstructor(context, null);
+ }
+
+ public RoundImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ sharedConstructor(context, attrs);
+ }
+
+ public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ sharedConstructor(context, attrs);
+ }
+
+ private void sharedConstructor(Context context, AttributeSet attrs) {
+ mContext = context;
+ shaderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+
+ if (attrs != null) {
+ TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.RoundImageView);
+ roundRadius = a.getDimensionPixelSize(com.android.internal.R.styleable.RoundImageView_roundRadius, 20);
+ leftTopRadius = a.getDimensionPixelSize(com.android.internal.R.styleable.RoundImageView_leftTopRadius, -1);
+ if (leftTopRadius == -1){
+ leftTopRadius = roundRadius;
+ }
+ rightTopRadius = a.getDimensionPixelSize(com.android.internal.R.styleable.RoundImageView_rightTopRadius, -1);
+ if (rightTopRadius == -1){
+ rightTopRadius = roundRadius;
+ }
+ rightBottomRadius = a.getDimensionPixelSize(com.android.internal.R.styleable.RoundImageView_rightBottomRadius, -1);
+ if (rightBottomRadius == -1){
+ rightBottomRadius = roundRadius;
+ }
+ leftBottomRadius = a.getDimensionPixelSize(