Added Android code
[wl-app.git] / Android / app / src / main / java / com / moiseum / wolnelektury / view / news / zoom / ZoomPhotosAdapter.java
1 package com.moiseum.wolnelektury.view.news.zoom;
2
3 import android.content.Context;
4 import android.graphics.PorterDuff;
5 import android.support.annotation.NonNull;
6 import android.support.v4.content.ContextCompat;
7 import android.support.v4.view.PagerAdapter;
8 import android.view.LayoutInflater;
9 import android.view.View;
10 import android.view.ViewGroup;
11 import android.widget.Button;
12 import android.widget.ProgressBar;
13 import android.widget.TextView;
14
15 import com.bumptech.glide.Glide;
16 import com.bumptech.glide.load.resource.drawable.GlideDrawable;
17 import com.bumptech.glide.request.RequestListener;
18 import com.bumptech.glide.request.target.Target;
19 import com.moiseum.wolnelektury.R;
20
21 import java.lang.ref.WeakReference;
22 import java.util.List;
23
24 import it.sephiroth.android.library.imagezoom.ImageViewTouch;
25 import it.sephiroth.android.library.imagezoom.ImageViewTouchBase;
26
27 /**
28  * Created by Piotr Ostrowski on 07.08.2018.
29  */
30 public class ZoomPhotosAdapter extends PagerAdapter {
31
32         private List<String> photoUrls;
33         private LayoutInflater inflater;
34         private WeakReference<Context> mContext;
35
36         ZoomPhotosAdapter(List<String> photoUrl, Context context) {
37                 inflater = LayoutInflater.from(context);
38                 mContext = new WeakReference<>(context);
39                 this.photoUrls = photoUrl;
40                 for (String photo : photoUrl) {
41                         Glide.with(context).load(photo).dontTransform().preload();
42                 }
43         }
44
45         @NonNull
46         @Override
47         public Object instantiateItem(@NonNull ViewGroup collection, int position) {
48                 final String photoUrl = photoUrls.get(position);
49                 View view = inflater.inflate(R.layout.zoom_item, collection, false);
50
51                 final ProgressBar pbLoading = view.findViewById(R.id.pbLoading);
52                 final TextView tvLoading = view.findViewById(R.id.tvLoading);
53                 final Button btnRetry = view.findViewById(R.id.btnRetry);
54                 final ImageViewTouch ivPhoto = view.findViewById(R.id.ivPointPhoto);
55
56                 btnRetry.setOnClickListener(v -> {
57                         pbLoading.setVisibility(View.VISIBLE);
58                         tvLoading.setVisibility(View.VISIBLE);
59                         btnRetry.setVisibility(View.GONE);
60                         fetchImageWithGlide(photoUrl, pbLoading, tvLoading, btnRetry, ivPhoto);
61                 });
62
63                 ivPhoto.setDisplayType(ImageViewTouchBase.DisplayType.FIT_HEIGHT);
64                 fetchImageWithGlide(photoUrl, pbLoading, tvLoading, btnRetry, ivPhoto);
65
66                 collection.addView(view);
67                 return view;
68         }
69
70         @Override
71         public void destroyItem(@NonNull ViewGroup collection, int position, @NonNull Object view) {
72                 collection.removeView((View) view);
73         }
74
75         @Override
76         public int getCount() {
77                 return photoUrls.size();
78         }
79
80         @Override
81         public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
82                 return view == object;
83         }
84
85         private void fetchImageWithGlide(String photoUrl, final ProgressBar pbLoading, final TextView tvLoading, final Button btnRetry, ImageViewTouch ivPhoto) {
86                 if (mContext.get() != null) {
87                         Glide.with(mContext.get()).load(photoUrl).dontTransform().listener(new RequestListener<String, GlideDrawable>() {
88                                 @Override
89                                 public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
90                                         pbLoading.setVisibility(View.GONE);
91                                         tvLoading.setVisibility(View.GONE);
92                                         btnRetry.setVisibility(View.VISIBLE);
93                                         return true;
94                                 }
95
96                                 @Override
97                                 public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
98                                         pbLoading.setVisibility(View.GONE);
99                                         tvLoading.setVisibility(View.GONE);
100                                         return false;
101                                 }
102                         }).into(ivPhoto);
103                 }
104         }
105 }