2020-10-08 22:20:20 +02:00
package org.mosad.teapod.util
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
2020-10-11 18:07:00 +02:00
import android.widget.*
2020-10-08 22:20:20 +02:00
import com.bumptech.glide.Glide
import org.mosad.teapod.R
2020-10-11 18:07:00 +02:00
import java.util.*
2020-10-08 22:20:20 +02:00
2020-10-12 17:52:24 +02:00
class CustomAdapter ( val context : Context , private val originalMedia : ArrayList < Media > ) : BaseAdapter ( ) , Filterable {
2020-10-11 18:07:00 +02:00
private var filteredMedia = originalMedia . map { it . copy ( ) }
private val customFilter = CustomFilter ( )
2020-10-08 22:20:20 +02:00
override fun getView ( position : Int , convertView : View ? , parent : ViewGroup ) : View {
2020-10-09 13:25:12 +02:00
val view = convertView ?: LayoutInflater . from ( context ) . inflate ( R . layout . linear _media , parent , false )
2020-10-08 22:20:20 +02:00
2020-10-09 13:25:12 +02:00
val textTitle = view . findViewById < TextView > ( R . id . text _title )
val imagePoster = view . findViewById < ImageView > ( R . id . image _poster )
2020-10-08 22:20:20 +02:00
2020-10-11 18:07:00 +02:00
textTitle . text = filteredMedia [ position ] . title
Glide . with ( context ) . load ( filteredMedia [ position ] . posterLink ) . into ( imagePoster )
2020-10-08 22:20:20 +02:00
2020-10-09 13:25:12 +02:00
return view
2020-10-08 22:20:20 +02:00
}
2020-10-11 18:07:00 +02:00
override fun getFilter ( ) : Filter {
return customFilter
}
override fun getCount ( ) : Int {
return filteredMedia . size
}
override fun getItem ( position : Int ) : Any {
return filteredMedia [ position ]
}
override fun getItemId ( position : Int ) : Long {
return position . toLong ( )
}
inner class CustomFilter : Filter ( ) {
override fun performFiltering ( constraint : CharSequence ? ) : FilterResults {
val filterTerm = constraint . toString ( ) . toLowerCase ( Locale . ROOT )
val results = FilterResults ( )
val filteredList = if ( filterTerm . isEmpty ( ) ) {
originalMedia
} else {
originalMedia . filter {
it . title . toLowerCase ( Locale . ROOT ) . contains ( filterTerm )
}
}
results . values = filteredList
results . count = filteredList . size
return results
}
override fun publishResults ( constraint : CharSequence ? , results : FilterResults ? ) {
2020-10-12 17:52:24 +02:00
filteredMedia = results ?. values as ArrayList < Media >
2020-10-11 18:07:00 +02:00
notifyDataSetChanged ( )
}
}
2020-10-08 22:20:20 +02:00
}