package at.favre.lib.dali.builder.live; import android.graphics.Bitmap; import android.os.Handler; import android.os.Looper; import android.view.View; import java.util.List; import at.favre.lib.dali.blur.EBlurAlgorithm; import at.favre.lib.dali.builder.ABuilder; import at.favre.lib.dali.builder.ContextWrapper; import at.favre.lib.dali.builder.blur.BlurBuilder; import at.favre.lib.dali.util.BuilderUtil; /** * Builder for creating a {@link at.favre.lib.dali.builder.live.LiveBlurWorker} */ public class LiveBlurBuilder extends ABuilder { private final static String TAG = BlurBuilder.class.getSimpleName(); private LiveBlurData data; protected static class LiveBlurData extends ABuilder.Data { public boolean silentFail = false; public int downSampleSize = 8; public View rootView; public List<View> viewsToBlurOnto; public Bitmap.Config config = Bitmap.Config.ARGB_8888; } public LiveBlurBuilder(ContextWrapper contextWrapper, View rootView, List<View> viewsToBlurOnto) { data = new LiveBlurData(); data.rootView = rootView; data.viewsToBlurOnto = viewsToBlurOnto; data.contextWrapper = contextWrapper; data.blurAlgorithm = BuilderUtil.getIBlurAlgorithm(EBlurAlgorithm.RS_GAUSS_FAST, contextWrapper); } public LiveBlurBuilder downScale(int downSampleSize) { data.downSampleSize = downSampleSize; return this; } /** * @param blurRadius the views use to blur the view, default is {@link at.favre.lib.dali.builder.BuilderDefaults#BLUR_RADIUS}; * @throws java.lang.IllegalStateException if blurradius not in range [{@link at.favre.lib.dali.builder.BuilderDefaults#BLUR_RADIUS_MIN},{@link at.favre.lib.dali.builder.BuilderDefaults#BLUR_RADIUS_MAX}} */ public LiveBlurBuilder blurRadius(int blurRadius) { BuilderUtil.checkBlurRadiusPrecondition(blurRadius); data.blurRadius = blurRadius; return this; } /** * When this is called, every exception in the updateBlur method * will only print to the log and continue. Use this only in production, * otherwise you might miss important errors. */ public LiveBlurBuilder silentFail() { data.silentFail = true; return this; } public LiveBlurWorker assemble() { return assemble(false); } public LiveBlurWorker assemble(boolean immediatelyBlur) { final LiveBlurWorker worker = new LiveBlurWorker(data); if (immediatelyBlur) { //this is a hack so that it will be immediately blurred, ViewTreeObserver does not work always Handler handler = new Handler(Looper.getMainLooper()); for (int i = 1; i < 5; i++) { handler.postDelayed(new Runnable() { @Override public void run() { worker.updateBlurView(); } }, 300 * i); } } return worker; } }