Java 类android.graphics.drawable.AdaptiveIconDrawable 实例源码

项目:LaunchEnr    文件:LauncherIcons.java   
/**
 * Creates a normalized bitmap suitable for the all apps view. The bitmap is also visually
 * normalized with other icons and has enough spacing to add shadow.
 */
public static Bitmap createScaledBitmapWithoutShadow(Drawable icon, Context context, int iconAppTargetSdk) {
    RectF iconBounds = new RectF();
    IconNormalizer normalizer;
    float scale = 1f;
        normalizer = IconNormalizer.getInstance(context);
        if (AndroidVersion.isAtLeastOreo() && iconAppTargetSdk >= Build.VERSION_CODES.O) {
            boolean[] outShape = new boolean[1];
            AdaptiveIconDrawable dr = (AdaptiveIconDrawable)
                    context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate();
            dr.setBounds(0, 0, 1, 1);
            scale = normalizer.getScale(icon, iconBounds, dr.getIconMask(), outShape);
            if (AndroidVersion.isAtLeastOreo() &&
                    !outShape[0]) {
                Drawable wrappedIcon = wrapToAdaptiveIconDrawable(context, icon, scale);
                if (wrappedIcon != icon) {
                    icon = wrappedIcon;
                    scale = normalizer.getScale(icon, iconBounds, null, null);
                }
            }

    }
    scale = Math.min(scale, ShadowGenerator.getScaleForBounds(iconBounds));
    return createIconBitmap(icon, context, scale);
}
项目:LaunchEnr    文件:LauncherIcons.java   
/**
 * If the platform is running O but the app is not providing AdaptiveIconDrawable, then
 * shrink the legacy icon and set it as foreground. Use color drawable as background to
 * create AdaptiveIconDrawable.
 */
private static Drawable wrapToAdaptiveIconDrawable(Context context, Drawable drawable, float scale) {
    if (!(AndroidVersion.isAtLeastOreo())) {
        return drawable;
    }

    try {
        if (!(drawable instanceof AdaptiveIconDrawable)) {
            AdaptiveIconDrawable iconWrapper = (AdaptiveIconDrawable)
                    context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate();
            FixedScaleDrawable fsd = ((FixedScaleDrawable) iconWrapper.getForeground());
            fsd.setDrawable(drawable);
            fsd.setScale(scale);
            return (Drawable) iconWrapper;
        }
    } catch (Exception e) {
        return drawable;
    }
    return drawable;
}
项目:emerald    文件:IconPackManager.java   
public Bitmap getDefaultBitmap(Drawable d) {
    if (d instanceof BitmapDrawable) {
        return ((BitmapDrawable) d).getBitmap();
    } else if (Build.VERSION.SDK_INT >= 26) {
        if (d instanceof AdaptiveIconDrawable) {
            AdaptiveIconDrawable icon = ((AdaptiveIconDrawable)d);
            int w = icon.getIntrinsicWidth();
            int h = icon.getIntrinsicHeight();
            Bitmap result = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(result);
            icon.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
            icon.draw(canvas);
            return result;
        }
    }
    float density = context.getResources().getDisplayMetrics().density;
    int defaultWidth = (int)(48* density);
    int defaultHeight = (int)(48* density);
    return Bitmap.createBitmap(defaultWidth, defaultHeight, Bitmap.Config.ARGB_8888);
}
项目:Phonograph    文件:AppShortcutIconGenerator.java   
private static IconCompat generateThemedIcon(Context context, int iconId, int foregroundColor, int backgroundColor) {
    // Get and tint foreground and background drawables
    Drawable vectorDrawable = Util.getTintedVectorDrawable(context, iconId, foregroundColor);
    Drawable backgroundDrawable = Util.getTintedVectorDrawable(context, R.drawable.ic_app_shortcut_background, backgroundColor);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        AdaptiveIconDrawable adaptiveIconDrawable = new AdaptiveIconDrawable(backgroundDrawable, vectorDrawable);
        return IconCompat.createWithAdaptiveBitmap(drawableToBitmap(adaptiveIconDrawable));
    } else {
        // Squash the two drawables together
        LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{backgroundDrawable, vectorDrawable});

        // Return as an Icon
        return IconCompat.createWithBitmap(drawableToBitmap(layerDrawable));
    }
}
项目:LaunchEnr    文件:LauncherIcons.java   
/**
 * Returns a bitmap suitable for the all apps view. The icon is badged for {@param user}.
 * The bitmap is also visually normalized with other icons.
 */
public static Bitmap createBadgedIconBitmap(
        Drawable icon, UserHandle user, Context context, int iconAppTargetSdk) {

    IconNormalizer normalizer;
    float scale = 1f;
        normalizer = IconNormalizer.getInstance(context);
        if (AndroidVersion.isAtLeastOreo() && iconAppTargetSdk >= Build.VERSION_CODES.O) {
            boolean[] outShape = new boolean[1];
            AdaptiveIconDrawable dr = (AdaptiveIconDrawable)
                    context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate();
            dr.setBounds(0, 0, 1, 1);
            scale = normalizer.getScale(icon, null, dr.getIconMask(), outShape);
            if (!outShape[0]){
                Drawable wrappedIcon = wrapToAdaptiveIconDrawable(context, icon, scale);
                if (wrappedIcon != icon) {
                    icon = wrappedIcon;
                    scale = normalizer.getScale(icon, null, null, null);
                }
            }
    }
    Bitmap bitmap = createIconBitmap(icon, context, scale);
    if (AndroidVersion.isAtLeastOreo() &&
            icon instanceof AdaptiveIconDrawable) {
        bitmap = ShadowGenerator.getInstance(context).recreateIcon(bitmap);
    }
    return badgeIconForUser(bitmap, user, context);
}
项目:LaunchEnr    文件:LauncherIcons.java   
/**
 * Returns a bitmap suitable for the all apps view.
 */
public static Bitmap createIconBitmap(Drawable icon, Context context) {
    float scale = 1f;
    if (AndroidVersion.isAtLeastOreo() &&
            icon instanceof AdaptiveIconDrawable) {
        scale = ShadowGenerator.getScaleForBounds(new RectF(0, 0, 0, 0));
    }
    Bitmap bitmap =  createIconBitmap(icon, context, scale);
    if (AndroidVersion.isAtLeastOreo() &&
            icon instanceof AdaptiveIconDrawable) {
        bitmap = ShadowGenerator.getInstance(context).recreateIcon(bitmap);
    }
    return bitmap;
}
项目:Leanplum-Android-SDK    文件:LeanplumNotificationHelper.java   
/**
 * Checks a possibility to create icon drawable from current app icon.
 *
 * @param context Current application context.
 * @return boolean True if it is possible to create a drawable from current app icon.
 */
private static boolean canCreateIconDrawable(Context context) {
  try {
    // Try to create icon drawable.
    Drawable drawable = AdaptiveIconDrawable.createFromStream(
        context.getResources().openRawResource(context.getApplicationInfo().icon),
        "applicationInfo.icon");
    // If there was no crash, we still need to check for null.
    if (drawable != null) {
      return true;
    }
  } catch (Throwable ignored) {
  }
  return false;
}
项目:Jockey    文件:PresetThemeStore.java   
@Override
public Drawable getLargeAppIcon() {
    Drawable icon = ResourcesCompat.getDrawableForDensity(mContext.getResources(), getIconId(),
            getLargerDisplayDensity(), mContext.getTheme());

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && icon instanceof AdaptiveIconDrawable) {
        return ((AdaptiveIconDrawable) icon).getForeground();
    } else {
        return icon;
    }
}