aboutsummaryrefslogtreecommitdiff
path: root/imagepicker/src/main/kotlin/ca/allanwang/kau/imagepicker/ImageItemBasic.kt
blob: 62a0b09416ecd9b7a0ed1a7e8adb25172e8cd3f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package ca.allanwang.kau.imagepicker

import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.graphics.drawable.Drawable
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.RecyclerView
import android.view.View
import ca.allanwang.kau.iitems.KauIItem
import ca.allanwang.kau.ui.views.MeasuredImageView
import ca.allanwang.kau.utils.bindView
import ca.allanwang.kau.utils.buildIsLollipopAndUp
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import com.mikepenz.fastadapter.FastAdapter

/**
 * Created by Allan Wang on 2017-07-04.
 */
class ImageItemBasic(val data: ImageModel)
    : KauIItem<ImageItem, ImageItemBasic.ViewHolder>(R.layout.kau_iitem_image_basic, { ViewHolder(it) }) {

    companion object {
        @SuppressLint("NewApi")
        fun bindEvents(activity: Activity, fastAdapter: FastAdapter<ImageItemBasic>) {
            fastAdapter.withSelectable(false)
                    //add image data and return right away
                    .withOnClickListener { v, _, item, _ ->
                        val intent = Intent()
                        val data = arrayListOf(item.data)
                        intent.putParcelableArrayListExtra(IMAGE_PICKER_RESULT, data)
                        activity.setResult(AppCompatActivity.RESULT_OK, intent)
                        if (buildIsLollipopAndUp) activity.finishAfterTransition()
                        else activity.finish()
                        true
                    }
        }
    }

    override fun isSelectable(): Boolean = false

    override fun bindView(holder: ViewHolder, payloads: List<Any>?) {
        super.bindView(holder, payloads)
        Glide.with(holder.itemView)
                .load(data.data)
                .listener(object : RequestListener<Drawable> {
                    override fun onLoadFailed(e: GlideException?, model: Any, target: Target<Drawable>, isFirstResource: Boolean): Boolean {
                        holder.image.setImageDrawable(ImagePickerCore.getErrorDrawable(holder.itemView.context))
                        return true;
                    }

                    override fun onResourceReady(resource: Drawable, model: Any, target: Target<Drawable>, dataSource: DataSource, isFirstResource: Boolean): Boolean {
                        return false
                    }
                })
                .into(holder.image)
    }

    override fun unbindView(holder: ViewHolder) {
        super.unbindView(holder)
        Glide.with(holder.itemView).clear(holder.image)
    }

    class ViewHolder(v: View) : RecyclerView.ViewHolder(v) {
        val image: MeasuredImageView by bindView(R.id.kau_image)
    }
}