package net.dewep.intranetepitech.ui.widget;
import net.dewep.intranetepitech.R;
import net.dewep.intranetepitech.api.Configurations;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Bitmap.Config;
import android.graphics.Paint.Style;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;
import fr.qinder.api.APICallback;
import fr.qinder.api.APIImage;
import fr.qinder.layout.ImageViewLoader;
public class EpitechProfilPicture extends ImageViewLoader {
private boolean mCroppingCircular;
private int mCroppingCircularBorderSize;
private int mCroppingCircularBorderColor;
public EpitechProfilPicture(Context context) {
super(context);
getConfigs(context, null);
}
public EpitechProfilPicture(Context context, AttributeSet attrs) {
super(context, attrs);
getConfigs(context, attrs);
}
public EpitechProfilPicture(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
getConfigs(context, attrs);
}
private void getConfigs(Context context, AttributeSet attrs) {
mCroppingCircular = false;
mCroppingCircularBorderSize = 0;
mCroppingCircularBorderColor = Color.WHITE;
if (attrs != null) {
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.EpitechProfilPicture);
mCroppingCircular = ta.getBoolean(0, false);
mCroppingCircularBorderSize = getDimensionValue(ta, 1, 0);
mCroppingCircularBorderColor = ta.getColor(2, Color.WHITE);
ta.recycle();
}
}
public void execute(String login) {
APIImage api = new APIImage(this);
if (mCroppingCircular) {
api.setCallback(new APICallback() {
@Override
public void onResult() {
ImageView imageView = getImage();
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
getImage().setImageBitmap(getCircleBitmap(bitmap));
}
});
}
api.execute(Configurations.getUrlProfilPicture(login));
}
public Bitmap getCircleBitmap(Bitmap bmp) {
Bitmap sbmp;
int radius = bmp.getWidth();
if (bmp.getWidth() != radius || bmp.getHeight() != radius) {
float smallest = Math.min(bmp.getWidth(), bmp.getHeight());
float factor = smallest / radius;
sbmp = Bitmap.createScaledBitmap(bmp, (int) (bmp.getWidth() / factor), (int) (bmp.getHeight() / factor), false);
} else {
sbmp = bmp;
}
Bitmap output = Bitmap.createBitmap(radius + mCroppingCircularBorderSize * 2, radius + mCroppingCircularBorderSize * 2, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
paint.setStyle(Style.FILL);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(mCroppingCircularBorderColor);
canvas.drawCircle(radius / 2 + mCroppingCircularBorderSize, radius / 2 + mCroppingCircularBorderSize, radius / 2, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(sbmp, mCroppingCircularBorderSize, mCroppingCircularBorderSize, paint);
paint.setXfermode(null);
paint.setStyle(Style.STROKE);
paint.setColor(mCroppingCircularBorderColor);
paint.setStrokeWidth(mCroppingCircularBorderSize);
canvas.drawCircle(radius / 2 + mCroppingCircularBorderSize, radius / 2 + mCroppingCircularBorderSize, radius / 2, paint);
return output;
}
}