add presenter for image zoom
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/1a62d23b Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/1a62d23b Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/1a62d23b Branch: refs/heads/master Commit: 1a62d23b6ccdc2c25cc04c675b087fa4555a2cf4 Parents: 1e01f64 Author: Sagar <[email protected]> Authored: Sun Jul 24 19:22:14 2016 +0530 Committer: Sagar <[email protected]> Committed: Sun Jul 24 19:22:14 2016 +0530 ---------------------------------------------------------------------- .../mobile/ui/imagezoom/ImageZoomMvpView.java | 19 ++ .../mobile/ui/imagezoom/ImageZoomPresenter.java | 183 +++++++++++++++++++ 2 files changed, 202 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1a62d23b/app/src/main/java/org/apache/taverna/mobile/ui/imagezoom/ImageZoomMvpView.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/imagezoom/ImageZoomMvpView.java b/app/src/main/java/org/apache/taverna/mobile/ui/imagezoom/ImageZoomMvpView.java new file mode 100644 index 0000000..2397691 --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/ui/imagezoom/ImageZoomMvpView.java @@ -0,0 +1,19 @@ +package org.apache.taverna.mobile.ui.imagezoom; + + +import org.apache.taverna.mobile.ui.base.MvpView; + +import android.content.Context; + +public interface ImageZoomMvpView extends MvpView{ + + void showErrorSnackBar(String error); + + Context getAppContext(); + + void setJPGuri(String uri); + + void setJPGImage(); + + void addImageAttacher(); +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1a62d23b/app/src/main/java/org/apache/taverna/mobile/ui/imagezoom/ImageZoomPresenter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/imagezoom/ImageZoomPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/imagezoom/ImageZoomPresenter.java new file mode 100644 index 0000000..7b5f21b --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/ui/imagezoom/ImageZoomPresenter.java @@ -0,0 +1,183 @@ +package org.apache.taverna.mobile.ui.imagezoom; + + +import com.bumptech.glide.GenericRequestBuilder; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.load.model.StreamEncoder; +import com.bumptech.glide.load.resource.file.FileToStreamDecoder; +import com.bumptech.glide.request.Request; +import com.bumptech.glide.request.animation.GlideAnimation; +import com.bumptech.glide.request.target.SizeReadyCallback; +import com.bumptech.glide.request.target.Target; +import com.caverock.androidsvg.SVG; + +import org.apache.taverna.mobile.R; +import org.apache.taverna.mobile.data.DataManager; +import org.apache.taverna.mobile.data.local.DBHelper; +import org.apache.taverna.mobile.ui.base.BasePresenter; +import org.apache.taverna.mobile.utils.SvgDecoder; +import org.apache.taverna.mobile.utils.SvgDrawableTranscoder; + +import android.graphics.drawable.Drawable; +import android.graphics.drawable.PictureDrawable; +import android.net.Uri; +import android.os.Build; +import android.widget.ImageView; + +import java.io.InputStream; +import java.util.Map; + +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ImageZoomPresenter extends BasePresenter<ImageZoomMvpView> { + + private DataManager mDataManager; + + private Subscription mSubscriptions; + + public static final String NO_IMAGE_URI = "NO Image Found"; + + public static final String DB_ERROR= "There is some problem. Please try after sometime "; + + private GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder; + + public ImageZoomPresenter(DataManager dataManager) { + + mDataManager = dataManager; + + } + + @Override + public void attachView(ImageZoomMvpView mvpView) { + + super.attachView(mvpView); + + requestBuilder = Glide.with(getMvpView().getAppContext()) + .using(Glide.buildStreamModelLoader(Uri.class, getMvpView().getAppContext()), InputStream.class) + .from(Uri.class) + .as(SVG.class) + .transcode(new SvgDrawableTranscoder(), PictureDrawable.class) + .sourceEncoder(new StreamEncoder()) + .cacheDecoder(new FileToStreamDecoder<SVG>(new SvgDecoder())) + .decoder(new SvgDecoder()) + .placeholder(R.drawable.placeholder) + .error(R.drawable.placeholder) + .override(Target.SIZE_ORIGINAL,Target.SIZE_ORIGINAL) + .animate(android.R.anim.fade_in); + + } + + @Override + public void detachView() { + super.detachView(); + if (mSubscriptions != null) mSubscriptions.unsubscribe(); + } + + public void loadImage(String id, final ImageView imageView) { + + if (mSubscriptions != null) mSubscriptions.unsubscribe(); + + mSubscriptions = mDataManager.getImageURI(id) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(new Observer<Map<String, String>>() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + getMvpView().showErrorSnackBar(DB_ERROR); + } + + @Override + public void onNext(Map<String, String> imageURI) { + if (imageURI.size() != 0) { + + setSVG(imageURI, imageView); + + getMvpView().setJPGuri(imageURI.get(DBHelper.JPG_URI)); + } else { + + getMvpView().showErrorSnackBar(NO_IMAGE_URI); + } + } + }); + } + + private void setSVG(final Map<String, String> imageURI, final ImageView imageView) { + + requestBuilder + .diskCacheStrategy(DiskCacheStrategy.SOURCE) + .load(Uri.parse(imageURI.get(DBHelper.SVG_URI))) + .into(new Target<PictureDrawable>() { + @Override + public void onLoadStarted(Drawable placeholder) { + imageView.setImageDrawable(placeholder); + } + + @Override + public void onLoadFailed(Exception e, Drawable errorDrawable) { + imageView.setImageDrawable(errorDrawable); + + if (Build.VERSION_CODES.HONEYCOMB <= Build.VERSION.SDK_INT) { + imageView.setLayerType(ImageView.LAYER_TYPE_NONE, null); + } + + getMvpView().setJPGImage(); + } + + @Override + public void onResourceReady(PictureDrawable resource, GlideAnimation<? super PictureDrawable> glideAnimation) { + if (Build.VERSION_CODES.HONEYCOMB <= Build.VERSION.SDK_INT) { + imageView.setLayerType(ImageView.LAYER_TYPE_SOFTWARE, null); + } + imageView.setImageDrawable(resource); + getMvpView().addImageAttacher(); + } + + @Override + public void onLoadCleared(Drawable placeholder) { + + } + + @Override + public void getSize(SizeReadyCallback cb) { + + } + + @Override + public void setRequest(Request request) { + + } + + @Override + public Request getRequest() { + return null; + } + + @Override + public void onStart() { + + } + + @Override + public void onStop() { + + } + + @Override + public void onDestroy() { + + } + }); + + } + + +}
