package com.pitchedapps.butler.iconrequest.glide;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import com.bumptech.glide.load.ResourceDecoder;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.resource.drawable.DrawableResource;
import com.bumptech.glide.util.Util;
import com.pitchedapps.butler.iconrequest.App;
import java.io.IOException;
/**
* Created by Allan Wang on 2016-08-20.
*/
class AppIconDecoder implements ResourceDecoder<App, Drawable> {
private final Context context;
private final String mPkg;
public AppIconDecoder(Context context, String pkg) {
this.context = context;
this.mPkg = pkg;
}
@Override
public Resource<Drawable> decode(App source, int width, int height) throws IOException {
final Drawable icon;
try {
icon = context.getPackageManager().getApplicationIcon(source.getPackage());
} catch (PackageManager.NameNotFoundException e) {
throw new IOException("Unable to load app icon for " + source.getPackage());
}
return new DrawableResource<Drawable>(icon) {
@Override
public int getSize() {
if (drawable instanceof BitmapDrawable) {
return Util.getBitmapByteSize(((BitmapDrawable) drawable).getBitmap());
} else {
return 1;
}
}
@Override
public void recycle() {
}
};
}
@Override
public String getId() {
return "ApplicationIconDecoder_" + mPkg;
}
}