package com.stardust.scriptdroid.tool;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import com.stardust.app.OnActivityResultDelegate;
import com.stardust.pio.PFile;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Created by Stardust on 2017/4/3.
*/
public abstract class DrawableSaver {
private static final String PREFIX = "saved_drawable_";
protected Drawable mOriginalDrawable;
private Context mContext;
private String mName;
public DrawableSaver(Context context, String name, Drawable originalDrawable) {
mContext = context;
mName = PREFIX + name;
mOriginalDrawable = originalDrawable;
readImageAndApply();
}
private void readImageAndApply() {
new Thread(new Runnable() {
@Override
public void run() {
try {
InputStream inputStream = mContext.openFileInput(mName);
Drawable drawable = BitmapDrawable.createFromStream(inputStream, mName);
applyDrawableToView(drawable);
} catch (FileNotFoundException e) {
}
}
}).start();
}
public void setDrawable(InputStream inputStream) {
saveDrawable(inputStream, new Runnable() {
@Override
public void run() {
readImageAndApply();
}
});
}
private void saveDrawable(final InputStream inputStream, final Runnable callback) {
new Thread(new Runnable() {
@Override
public void run() {
try {
OutputStream outputStream = mContext.openFileOutput(mName, Context.MODE_PRIVATE);
PFile.write(inputStream, outputStream);
outputStream.close();
inputStream.close();
callback.run();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
public void select(Activity activity, final OnActivityResultDelegate.Mediator mediator) {
new ImageSelector(activity, mediator, new ImageSelector.ImageSelectorCallback() {
@Override
public void onImageSelected(ImageSelector selector, InputStream inputStream) {
if (inputStream != null)
setDrawable(inputStream);
mediator.removeDelegate(selector);
}
}).select();
}
public void reset() {
applyDrawableToView(mOriginalDrawable);
mContext.deleteFile(mName);
}
public static void reset(Context context, String name) {
context.deleteFile(PREFIX + name);
}
protected abstract void applyDrawableToView(Drawable drawable);
public static class ViewBackgroundSaver extends DrawableSaver {
private View mView;
public ViewBackgroundSaver(Context activity, String name, View view) {
super(activity, name, view.getBackground());
mView = view;
}
@Override
protected void applyDrawableToView(final Drawable drawable) {
mView.post(new Runnable() {
@Override
public void run() {
mView.setBackground(drawable);
}
});
}
}
public static class ImageSaver extends DrawableSaver {
private ImageView mView;
public ImageSaver(Context activity, String name, ImageView view) {
super(activity, name, view.getDrawable());
mView = view;
}
@Override
protected void applyDrawableToView(final Drawable drawable) {
mView.post(new Runnable() {
@Override
public void run() {
mView.setImageDrawable(drawable);
}
});
}
}
}