android: Replace Picasso with Coil
parent
37cc94526b
commit
3fcc6b1104
@ -1,25 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.utils
|
|
||||||
|
|
||||||
import android.graphics.BitmapFactory
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import com.squareup.picasso.Request
|
|
||||||
import com.squareup.picasso.RequestHandler
|
|
||||||
import org.yuzu.yuzu_emu.NativeLibrary
|
|
||||||
|
|
||||||
class GameIconRequestHandler : RequestHandler() {
|
|
||||||
override fun canHandleRequest(data: Request): Boolean {
|
|
||||||
return "content" == data.uri.scheme
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun load(request: Request, networkPolicy: Int): Result {
|
|
||||||
val gamePath = request.uri.toString()
|
|
||||||
val data = NativeLibrary.GetIcon(gamePath)
|
|
||||||
val options = BitmapFactory.Options()
|
|
||||||
options.inMutable = true
|
|
||||||
val bitmap = BitmapFactory.decodeByteArray(data, 0, data.size, options)
|
|
||||||
return Result(bitmap, Picasso.LoadedFrom.DISK)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
package org.yuzu.yuzu_emu.utils;
|
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.BitmapShader;
|
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.Paint;
|
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.graphics.RectF;
|
|
||||||
|
|
||||||
import com.squareup.picasso.Transformation;
|
|
||||||
|
|
||||||
public class PicassoRoundedCornersTransformation implements Transformation {
|
|
||||||
@Override
|
|
||||||
public Bitmap transform(Bitmap icon) {
|
|
||||||
final int width = icon.getWidth();
|
|
||||||
final int height = icon.getHeight();
|
|
||||||
final Rect rect = new Rect(0, 0, width, height);
|
|
||||||
final int size = Math.min(width, height);
|
|
||||||
final int x = (width - size) / 2;
|
|
||||||
final int y = (height - size) / 2;
|
|
||||||
|
|
||||||
Bitmap squaredBitmap = Bitmap.createBitmap(icon, x, y, size, size);
|
|
||||||
if (squaredBitmap != icon) {
|
|
||||||
icon.recycle();
|
|
||||||
}
|
|
||||||
|
|
||||||
Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
|
||||||
Canvas canvas = new Canvas(output);
|
|
||||||
BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
|
|
||||||
Paint paint = new Paint();
|
|
||||||
paint.setAntiAlias(true);
|
|
||||||
paint.setShader(shader);
|
|
||||||
|
|
||||||
canvas.drawRoundRect(new RectF(rect), 10, 10, paint);
|
|
||||||
|
|
||||||
squaredBitmap.recycle();
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String key() {
|
|
||||||
return "circle";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
package org.yuzu.yuzu_emu.utils;
|
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
|
|
||||||
import com.squareup.picasso.Picasso;
|
|
||||||
|
|
||||||
import org.yuzu.yuzu_emu.YuzuApplication;
|
|
||||||
import org.yuzu.yuzu_emu.R;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
public class PicassoUtils {
|
|
||||||
private static boolean mPicassoInitialized = false;
|
|
||||||
|
|
||||||
public static void init() {
|
|
||||||
if (mPicassoInitialized) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Picasso picassoInstance = new Picasso.Builder(YuzuApplication.getAppContext())
|
|
||||||
.addRequestHandler(new GameIconRequestHandler())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Picasso.setSingletonInstance(picassoInstance);
|
|
||||||
mPicassoInitialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void loadGameIcon(ImageView imageView, String gamePath) {
|
|
||||||
Picasso
|
|
||||||
.get()
|
|
||||||
.load(Uri.parse(gamePath))
|
|
||||||
.fit()
|
|
||||||
.centerInside()
|
|
||||||
.config(Bitmap.Config.RGB_565)
|
|
||||||
.error(R.drawable.no_icon)
|
|
||||||
.transform(new PicassoRoundedCornersTransformation())
|
|
||||||
.into(imageView);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Blocking call. Load image from file and crop/resize it to fit in width x height.
|
|
||||||
@Nullable
|
|
||||||
public static Bitmap LoadBitmapFromFile(String uri, int width, int height) {
|
|
||||||
try {
|
|
||||||
return Picasso.get()
|
|
||||||
.load(Uri.parse(uri))
|
|
||||||
.config(Bitmap.Config.ARGB_8888)
|
|
||||||
.centerCrop()
|
|
||||||
.resize(width, height)
|
|
||||||
.get();
|
|
||||||
} catch (IOException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue