// Path: app/src/main/java/app/com/cn/album/dao/Photo.java
// public class Photo {
// 
//     public String sMediumUrl;
//     public String sThumbnailUrl;
//     public String sLargeSize;
//     public String sLargeUrl;
//     public String ids;
//     public String sFolderName;
//     public Photo(String ids, String sFolderName, String sMediumUrl, String sThumbnailUrl, String sLargeSize, String sLargeUrl){
//         this.ids = ids;
//         this.sFolderName = sFolderName;
//         this.sMediumUrl = sMediumUrl;
//         this.sThumbnailUrl = sThumbnailUrl;
//         this.sLargeSize = sLargeSize;
//         this.sLargeUrl = sLargeUrl;
//     }
// 
//     public String getLargeUrl() {
//         return sLargeUrl;
//     }
// 
//     public void setLargeUrl(String sLargeUrl) {
//         this.sLargeUrl = sLargeUrl;
//     }
// 
//     public String getMediumUrl() {
//         return sMediumUrl;
//     }
// 
//     public void setMediumUrl(String sMediumUrl) {
//         this.sMediumUrl = sMediumUrl;
//     }
// 
//     public String getThumbnailUrl() {
//         return sThumbnailUrl;
//     }
// 
//     public void setThumbnailUrl(String sThumbnailUrl) {
//         this.sThumbnailUrl = sThumbnailUrl;
//     }
// 
//     public String getLargeSize() {
//         return sLargeSize;
//     }
// 
//     public void setLargeSize(String sLargeSize) {
//         this.sLargeSize = sLargeSize;
//     }
// }
// 
// Path: app/src/main/java/app/com/cn/album/net/GlideHelper.java
// public class GlideHelper {
// 
//     private static final ViewPropertyAnimation.Animator ANIMATOR =
//             new ViewPropertyAnimation.Animator() {
//                 @Override
//                 public void animate(View view) {
//                     view.setAlpha(0f);
//                     view.animate().alpha(1f);
//                 }
//             };
// 
// 
//     public static void loadResource(@DrawableRes int drawableId, @NonNull ImageView image) {
//         DisplayMetrics metrics = image.getResources().getDisplayMetrics();
//         final int w = metrics.widthPixels, h = metrics.heightPixels;
// 
//         Glide.with(image.getContext())
//                 .load(drawableId)
//                 .animate(ANIMATOR)
//                 .diskCacheStrategy(DiskCacheStrategy.NONE)
//                 .into(new GlideDrawableImageViewTarget(image) {
//                     @Override
//                     public void getSize(final SizeReadyCallback cb) {
//                         // We don't want to load very big images on devices with small screens.
//                         // This will help Glide correctly choose images scale when reading them.
//                         super.getSize(new SizeReadyCallback() {
//                             @Override
//                             public void onSizeReady(int width, int height) {
//                                 cb.onSizeReady(w / 2, h / 2);
//                             }
//                         });
//                     }
//                 });
//     }
// 
//     public static void loadFlickrThumb(@Nullable Photo photo, @NonNull final ImageView image) {
//         Glide.with(image.getContext())
//                 .load(photo == null ? null : photo.getMediumUrl())
//                 .dontAnimate()
//                 .thumbnail(Glide.with(image.getContext())
//                         .load(photo == null ? null : photo.getThumbnailUrl())
//                         .animate(ANIMATOR)
//                         .diskCacheStrategy(DiskCacheStrategy.SOURCE))
//                 .into(new GlideDrawableTarget(image));
//     }
// 
//     public static void loadFlickrFull(@NonNull Photo photo,
//             @NonNull final ImageView image,
//             @Nullable final ImageLoadingListener listener) {
// 
//         final String photoUrl = photo.getLargeSize() == null
//                 ? photo.getMediumUrl() : photo.getLargeUrl();
// 
//         Glide.with(image.getContext())
//                 .load(photoUrl)
//                 .dontAnimate()
//                 .placeholder(image.getDrawable())
//                 .thumbnail(Glide.with(image.getContext())
//                         .load(photo.getThumbnailUrl())
//                         .animate(ANIMATOR)
//                         .diskCacheStrategy(DiskCacheStrategy.SOURCE))
//                 .diskCacheStrategy(DiskCacheStrategy.SOURCE)
//                 .listener(new GlideDrawableListener() {
//                     @Override
//                     public void onSuccess(String url) {
//                         if (url.equals(photoUrl)) {
//                             if (listener != null) {
//                                 listener.onLoaded();
//                             }
//                         }
//                     }
// 
//                     @Override
//                     public void onFail(String url) {
//                         if (listener != null) {
//                             listener.onFailed();
//                         }
//                     }
//                 })
//                 .into(new GlideDrawableTarget(image));
//     }
// 
// 
//     public interface ImageLoadingListener {
//         void onLoaded();
// 
//         void onFailed();
//     }
// 
// }


import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import java.util.List;
import app.com.cn.album.dao.Photo;
import app.com.cn.album.net.GlideHelper;
import app.com.cn.album.net.R;
    }

    public void setPhotos(List<Photo> photos, boolean hasMore) {
        List<Photo> old = mPhotos;
        mPhotos = photos;
        mHasMore = hasMore;

        RecyclerAdapterHelper.notifyChanges(this, old, photos, false);
    }

    @Override
    public int getCount() {
        return mPhotos == null ? 0 : mPhotos.size();
    }

    public boolean canLoadNext() {
        return mHasMore;
    }

    @Override
    protected ViewHolder onCreateHolder(ViewGroup parent, int viewType) {
        ViewHolder holder = new ViewHolder(parent);
        holder.image.setOnClickListener(this);
        return holder;
    }

    @Override
    protected void onBindHolder(ViewHolder holder, int position) {
        Photo photo = mPhotos.get(position);
        holder.image.setTag(R.id.tag_item, photo);
// Path: app/src/main/java/app/com/cn/album/dao/Photo.java
// public class Photo {
// 
//     public String sMediumUrl;
//     public String sThumbnailUrl;
//     public String sLargeSize;
//     public String sLargeUrl;
//     public String ids;
//     public String sFolderName;
//     public Photo(String ids, String sFolderName, String sMediumUrl, String sThumbnailUrl, String sLargeSize, String sLargeUrl){
//         this.ids = ids;
//         this.sFolderName = sFolderName;
//         this.sMediumUrl = sMediumUrl;
//         this.sThumbnailUrl = sThumbnailUrl;
//         this.sLargeSize = sLargeSize;
//         this.sLargeUrl = sLargeUrl;
//     }
// 
//     public String getLargeUrl() {
//         return sLargeUrl;
//     }
// 
//     public void setLargeUrl(String sLargeUrl) {
//         this.sLargeUrl = sLargeUrl;
//     }
// 
//     public String getMediumUrl() {
//         return sMediumUrl;
//     }
// 
//     public void setMediumUrl(String sMediumUrl) {
//         this.sMediumUrl = sMediumUrl;
//     }
// 
//     public String getThumbnailUrl() {
//         return sThumbnailUrl;
//     }
// 
//     public void setThumbnailUrl(String sThumbnailUrl) {
//         this.sThumbnailUrl = sThumbnailUrl;
//     }
// 
//     public String getLargeSize() {
//         return sLargeSize;
//     }
// 
//     public void setLargeSize(String sLargeSize) {
//         this.sLargeSize = sLargeSize;
//     }
// }
// 
// Path: app/src/main/java/app/com/cn/album/net/GlideHelper.java
// public class GlideHelper {
// 
//     private static final ViewPropertyAnimation.Animator ANIMATOR =
//             new ViewPropertyAnimation.Animator() {
//                 @Override
//                 public void animate(View view) {
//                     view.setAlpha(0f);
//                     view.animate().alpha(1f);
//                 }
//             };
// 
// 
//     public static void loadResource(@DrawableRes int drawableId, @NonNull ImageView image) {
//         DisplayMetrics metrics = image.getResources().getDisplayMetrics();
//         final int w = metrics.widthPixels, h = metrics.heightPixels;
// 
//         Glide.with(image.getContext())
//                 .load(drawableId)
//                 .animate(ANIMATOR)
//                 .diskCacheStrategy(DiskCacheStrategy.NONE)
//                 .into(new GlideDrawableImageViewTarget(image) {
//                     @Override
//                     public void getSize(final SizeReadyCallback cb) {
//                         // We don't want to load very big images on devices with small screens.
//                         // This will help Glide correctly choose images scale when reading them.
//                         super.getSize(new SizeReadyCallback() {
//                             @Override
//                             public void onSizeReady(int width, int height) {
//                                 cb.onSizeReady(w / 2, h / 2);
//                             }
//                         });
//                     }
//                 });
//     }
// 
//     public static void loadFlickrThumb(@Nullable Photo photo, @NonNull final ImageView image) {
//         Glide.with(image.getContext())
//                 .load(photo == null ? null : photo.getMediumUrl())
//                 .dontAnimate()
//                 .thumbnail(Glide.with(image.getContext())
//                         .load(photo == null ? null : photo.getThumbnailUrl())
//                         .animate(ANIMATOR)
//                         .diskCacheStrategy(DiskCacheStrategy.SOURCE))
//                 .into(new GlideDrawableTarget(image));
//     }
// 
//     public static void loadFlickrFull(@NonNull Photo photo,
//             @NonNull final ImageView image,
//             @Nullable final ImageLoadingListener listener) {
// 
//         final String photoUrl = photo.getLargeSize() == null
//                 ? photo.getMediumUrl() : photo.getLargeUrl();
// 
//         Glide.with(image.getContext())
//                 .load(photoUrl)
//                 .dontAnimate()
//                 .placeholder(image.getDrawable())
//                 .thumbnail(Glide.with(image.getContext())
//                         .load(photo.getThumbnailUrl())
//                         .animate(ANIMATOR)
//                         .diskCacheStrategy(DiskCacheStrategy.SOURCE))
//                 .diskCacheStrategy(DiskCacheStrategy.SOURCE)
//                 .listener(new GlideDrawableListener() {
//                     @Override
//                     public void onSuccess(String url) {
//                         if (url.equals(photoUrl)) {
//                             if (listener != null) {
//                                 listener.onLoaded();
//                             }
//                         }
//                     }
// 
//                     @Override
//                     public void onFail(String url) {
//                         if (listener != null) {
//                             listener.onFailed();
//                         }
//                     }
//                 })
//                 .into(new GlideDrawableTarget(image));
//     }
// 
// 
//     public interface ImageLoadingListener {
//         void onLoaded();
// 
//         void onFailed();
//     }
// 
// }


// Path: app/src/main/java/app/com/cn/album/adapter/FlickrPhotoListAdapter.java
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import java.util.List;
import app.com.cn.album.dao.Photo;
import app.com.cn.album.net.GlideHelper;
import app.com.cn.album.net.R;

    }

    public void setPhotos(List<Photo> photos, boolean hasMore) {
        List<Photo> old = mPhotos;
        mPhotos = photos;
        mHasMore = hasMore;

        RecyclerAdapterHelper.notifyChanges(this, old, photos, false);
    }

    @Override
    public int getCount() {
        return mPhotos == null ? 0 : mPhotos.size();
    }

    public boolean canLoadNext() {
        return mHasMore;
    }

    @Override
    protected ViewHolder onCreateHolder(ViewGroup parent, int viewType) {
        ViewHolder holder = new ViewHolder(parent);
        holder.image.setOnClickListener(this);
        return holder;
    }

    @Override
    protected void onBindHolder(ViewHolder holder, int position) {
        Photo photo = mPhotos.get(position);
        holder.image.setTag(R.id.tag_item, photo);
        GlideHelper.loadFlickrThumb(photo, holder.image);