// Path: BigImageViewer/src/main/java/com/github/piasy/biv/BigImageViewer.java
// public final class BigImageViewer {
//     private static volatile BigImageViewer sInstance;
// 
//     private final ImageLoader mImageLoader;
// 
//     private BigImageViewer(ImageLoader imageLoader) {
//         mImageLoader = imageLoader;
//     }
// 
//     public static void initialize(ImageLoader imageLoader) {
//         sInstance = new BigImageViewer(imageLoader);
//     }
// 
//     public static ImageLoader imageLoader() {
//         if (sInstance == null) {
//             throw new IllegalStateException("You must initialize BigImageViewer before use it!");
//         }
//         return sInstance.mImageLoader;
//     }
// 
//     public static void prefetch(Uri... uris) {
//         if (uris == null) {
//             return;
//         }
// 
//         ImageLoader imageLoader = imageLoader();
//         for (Uri uri : uris) {
//             imageLoader.prefetch(uri);
//         }
//     }
// }
// 
// Path: app/src/main/java/com/github/piasy/biv/example/glide/SampleCustomImageSizeModel.java
// public class SampleCustomImageSizeModel implements CustomImageSizeModel {
// 
//   private Uri baseImageUrl;
// 
//   public void setBaseImageUrl(Uri baseImageUrl) {
//     this.baseImageUrl = baseImageUrl;
//   }
// 
//   @Override
//   public String requestCustomSizeUrl(Integer width, Integer height) {
//     if (baseImageUrl != null) {
//       return baseImageUrl
//           .buildUpon()
//           .appendQueryParameter("width", width.toString())
//           .appendQueryParameter("height", height.toString())
//           .build()
//           .toString();
//     }
//     throw new RuntimeException("You have to set the base image url first");
//   }
// }
// 
// Path: GlideImageLoader/src/main/java/com/github/piasy/biv/loader/glide/GlideCustomImageLoader.java
// public class GlideCustomImageLoader extends GlideImageLoader {
//     private final Class<? extends GlideModel> mModel;
// 
//     private GlideCustomImageLoader(Context context, OkHttpClient okHttpClient,
//             Class<? extends GlideModel> model) {
//         super(context, okHttpClient);
//         mModel = model;
//     }
// 
//     public static GlideCustomImageLoader with(Context context,
//             Class<? extends GlideModel> glideModel) {
//         return with(context, null, glideModel);
//     }
// 
//     public static GlideCustomImageLoader with(Context context, OkHttpClient okHttpClient,
//             Class<? extends GlideModel> glideModel) {
//         return new GlideCustomImageLoader(context, okHttpClient, glideModel);
//     }
// 
//     @Override
//     protected void downloadImageInto(Uri uri, Target<File> target) {
//         if (mModel != null) {
//             try {
//                 GlideModel glideModel = mModel.newInstance();
//                 glideModel.setBaseImageUrl(uri);
//                 mRequestManager
//                         .downloadOnly()
//                         .load(glideModel)
//                         .into(target);
//             } catch (InstantiationException e) {
//                 super.downloadImageInto(uri, target);
//             } catch (IllegalAccessException e) {
//                 super.downloadImageInto(uri, target);
//             }
//         } else {
//             super.downloadImageInto(uri, target);
//         }
//     }
// }


import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.LinearSnapHelper;
import androidx.recyclerview.widget.RecyclerView;
import com.github.piasy.biv.BigImageViewer;
import com.github.piasy.biv.example.glide.SampleCustomImageSizeModel;
import com.github.piasy.biv.loader.glide.GlideCustomImageLoader;
import java.util.ArrayList;
import java.util.List;
package com.github.piasy.biv.example;


public class RecyclerViewActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        BigImageViewer.initialize(GlideCustomImageLoader.with(getApplicationContext(), SampleCustomImageSizeModel.class));

        setContentView(R.layout.activity_recycler_view);

        configRecycler();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        BigImageViewer.imageLoader().cancelAll();
    }

    private void configRecycler() {
        final List<String> imageUrlsList = new ArrayList<>();

        imageUrlsList.add(
// Path: BigImageViewer/src/main/java/com/github/piasy/biv/BigImageViewer.java
// public final class BigImageViewer {
//     private static volatile BigImageViewer sInstance;
// 
//     private final ImageLoader mImageLoader;
// 
//     private BigImageViewer(ImageLoader imageLoader) {
//         mImageLoader = imageLoader;
//     }
// 
//     public static void initialize(ImageLoader imageLoader) {
//         sInstance = new BigImageViewer(imageLoader);
//     }
// 
//     public static ImageLoader imageLoader() {
//         if (sInstance == null) {
//             throw new IllegalStateException("You must initialize BigImageViewer before use it!");
//         }
//         return sInstance.mImageLoader;
//     }
// 
//     public static void prefetch(Uri... uris) {
//         if (uris == null) {
//             return;
//         }
// 
//         ImageLoader imageLoader = imageLoader();
//         for (Uri uri : uris) {
//             imageLoader.prefetch(uri);
//         }
//     }
// }
// 
// Path: app/src/main/java/com/github/piasy/biv/example/glide/SampleCustomImageSizeModel.java
// public class SampleCustomImageSizeModel implements CustomImageSizeModel {
// 
//   private Uri baseImageUrl;
// 
//   public void setBaseImageUrl(Uri baseImageUrl) {
//     this.baseImageUrl = baseImageUrl;
//   }
// 
//   @Override
//   public String requestCustomSizeUrl(Integer width, Integer height) {
//     if (baseImageUrl != null) {
//       return baseImageUrl
//           .buildUpon()
//           .appendQueryParameter("width", width.toString())
//           .appendQueryParameter("height", height.toString())
//           .build()
//           .toString();
//     }
//     throw new RuntimeException("You have to set the base image url first");
//   }
// }
// 
// Path: GlideImageLoader/src/main/java/com/github/piasy/biv/loader/glide/GlideCustomImageLoader.java
// public class GlideCustomImageLoader extends GlideImageLoader {
//     private final Class<? extends GlideModel> mModel;
// 
//     private GlideCustomImageLoader(Context context, OkHttpClient okHttpClient,
//             Class<? extends GlideModel> model) {
//         super(context, okHttpClient);
//         mModel = model;
//     }
// 
//     public static GlideCustomImageLoader with(Context context,
//             Class<? extends GlideModel> glideModel) {
//         return with(context, null, glideModel);
//     }
// 
//     public static GlideCustomImageLoader with(Context context, OkHttpClient okHttpClient,
//             Class<? extends GlideModel> glideModel) {
//         return new GlideCustomImageLoader(context, okHttpClient, glideModel);
//     }
// 
//     @Override
//     protected void downloadImageInto(Uri uri, Target<File> target) {
//         if (mModel != null) {
//             try {
//                 GlideModel glideModel = mModel.newInstance();
//                 glideModel.setBaseImageUrl(uri);
//                 mRequestManager
//                         .downloadOnly()
//                         .load(glideModel)
//                         .into(target);
//             } catch (InstantiationException e) {
//                 super.downloadImageInto(uri, target);
//             } catch (IllegalAccessException e) {
//                 super.downloadImageInto(uri, target);
//             }
//         } else {
//             super.downloadImageInto(uri, target);
//         }
//     }
// }


// Path: app/src/main/java/com/github/piasy/biv/example/RecyclerViewActivity.java
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.LinearSnapHelper;
import androidx.recyclerview.widget.RecyclerView;
import com.github.piasy.biv.BigImageViewer;
import com.github.piasy.biv.example.glide.SampleCustomImageSizeModel;
import com.github.piasy.biv.loader.glide.GlideCustomImageLoader;
import java.util.ArrayList;
import java.util.List;

package com.github.piasy.biv.example;


public class RecyclerViewActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        BigImageViewer.initialize(GlideCustomImageLoader.with(getApplicationContext(), SampleCustomImageSizeModel.class));

        setContentView(R.layout.activity_recycler_view);

        configRecycler();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        BigImageViewer.imageLoader().cancelAll();
    }

    private void configRecycler() {
        final List<String> imageUrlsList = new ArrayList<>();

        imageUrlsList.add(
                "https://upload.wikimedia.org/wikipedia/commons/3/3f/Francisco_de_Goya_y_Lucientes_-_Los_fusilamientos_del_tres_de_mayo_-_1814.jpg");