package com.goka.rssts.task; import com.goka.rssts.util.IOUtils; import com.goka.rssts.util.ViewUtils; import android.app.Activity; import android.graphics.Bitmap; import android.os.AsyncTask; import java.io.File; import java.io.IOException; /** * Created by katsuyagoto on 2015/04/26. */ public class ScreenshotTask extends AsyncTask<Void, Void, File> { private Activity activity; private Callback callback; private Bitmap bitmap; private IOException ioException; public ScreenshotTask(Activity activity, Callback callback) { if (activity == null) { throw new IllegalArgumentException("activity must not be null"); } if (callback == null) { throw new IllegalArgumentException("callback must not be null"); } this.activity = activity; this.callback = callback; } @Override protected void onPreExecute() { super.onPreExecute(); bitmap = ViewUtils.getDecorViewBitmap(activity); } @Override protected File doInBackground(Void... params) { try { File bitmapFile = obtainNewBitmapFile(); IOUtils.saveBitmap(bitmap, bitmapFile); return bitmapFile; } catch (IOException e) { ioException = e; return null; } } private File obtainNewBitmapFile() throws IOException { File directory = IOUtils.getCacheDirectory(activity); String cacheDirectoryPath = directory.getAbsolutePath(); return IOUtils.newUniqueTempFile(cacheDirectoryPath, "jpg"); } @Override protected void onPostExecute(File bitmapFile) { if (ioException != null) { callback.onCatchIOException(ioException); } else { callback.onTakeScreenshot(bitmapFile); } } public interface Callback { void onTakeScreenshot(File bitmapFile); void onCatchIOException(IOException e); } }