package com.tencent.tws.assistant.gaussblur; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.os.AsyncTask; public class GlassBlurTask { protected static final String TAG = "BlurTask"; private Bitmap source; private Canvas canvas; private AsyncTask<Void, Void, Void> task; private Bitmap blurred; private Listener listener; private Context context; private int radius; public interface Listener { void onBlurOperationFinished(); } public GlassBlurTask(Context context, Listener listener, Bitmap source) { this(context, listener, source, GlassBlurUtil.DEFAULT_BLUR_RADIUS); } public GlassBlurTask(Context context, Listener listener, Bitmap source, int radius) { this.context = context; this.listener = listener; this.source = source; this.radius = radius; canvas = new Canvas(source); startTask(); } private void startTask() { task = new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... args) { blurSourceBitmap(); return null; } @Override protected void onPostExecute(Void result) { canvas.drawBitmap(blurred, 0, 0, null); blurred.recycle(); listener.onBlurOperationFinished(); } }; task.execute(); } private void blurSourceBitmap() { Bitmap section = source; if (section == null) { // Probably indicates we've reached the end. return; } blurred = GlassBlur.apply(context, source, radius); } public void cancel() { if (task != null) { task.cancel(true); } task = null; } }