Skip to content

Instantly share code, notes, and snippets.

@axarlotwala
Created June 15, 2022 14:15
Show Gist options
  • Save axarlotwala/f81440e5c05b084ef5ae8031613fdbe2 to your computer and use it in GitHub Desktop.
Save axarlotwala/f81440e5c05b084ef5ae8031613fdbe2 to your computer and use it in GitHub Desktop.
class FileListAdapter(
private val context: Context,
private var mFilteredList: List<Document>,
selectedPaths: MutableList<Uri>,
selectedPathsSize: MutableList<Long>,
private val mListener: FileAdapterListener?
) : SelectionAdapter<FileListAdapter.FileViewHolder, Document>(mFilteredList, selectedPaths,selectedPathsSize),
Filterable {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FileViewHolder {
val itemView = LayoutInflater.from(context).inflate(R.layout.item_doc_layout, parent, false)
return FileViewHolder(itemView)
}
// fun filterList(filterllist: List<Document>) {
// // below line is to add our filtered
// // list in our course array list.
// mFilteredList = filterllist
// // below line is to notify our adapter
// // as change in recycler view data.
// notifyDataSetChanged()
// }
override fun onBindViewHolder(holder: FileViewHolder, position: Int) {
val document = mFilteredList[position]
val drawable = document.fileType?.drawable ?: R.drawable.icon_file_unknown
holder.imageView.setImageResource(drawable)
if (drawable == R.drawable.icon_file_unknown || drawable == R.drawable.icon_file_pdf) {
holder.fileTypeTv.visibility = View.VISIBLE
holder.fileTypeTv.text = document.fileType?.title
} else {
holder.fileTypeTv.visibility = View.GONE
}
holder.fileNameTextView.text = document.name
holder.fileSizeTextView.text = Formatter.formatShortFileSize(context, java.lang.Long.parseLong(
(document.size
?: "0").toString()
))
holder.itemView.setOnClickListener { onItemClicked(document, holder) }
holder.checkBox.setOnCheckedChangeListener(null)
holder.checkBox.setOnClickListener { onItemClicked(document, holder) }
holder.checkBox.isChecked = isSelected(document)
holder.checkBox.setOnCheckedChangeListener(object : SmoothCheckBox.OnCheckedChangeListener {
override fun onCheckedChanged(checkBox: SmoothCheckBox, isChecked: Boolean) {
toggleSelection(document)
if (isChecked) {
PickerManager.add(document.path,document.size,FilePickerConst.FILE_TYPE_DOCUMENT)
} else {
PickerManager.remove(document.path,document.size,FilePickerConst.FILE_TYPE_DOCUMENT)
}
}
})
}
private fun onItemClicked(document: Document, holder: FileViewHolder) {
if (PickerManager.getMaxCount() == 1) {
PickerManager.add(document.path, document.size, FilePickerConst.FILE_TYPE_MEDIA)
// PickerManager.add(document.path, document.size,FilePickerConst.FILE_TYPE_DOCUMENT)
} else {
if (holder.checkBox.isChecked) {
holder.checkBox.setChecked(!holder.checkBox.isChecked, true)
} else if (PickerManager.shouldAdd()) {
holder.checkBox.setChecked(!holder.checkBox.isChecked, true)
}
}
mListener?.onItemSelected()
}
override fun getItemCount(): Int {
return mFilteredList.size
}
override fun getFilter(): Filter {
return object : Filter() {
override fun performFiltering(charSequence: CharSequence): FilterResults {
val charString = charSequence.toString()
if (charString.isEmpty()) {
mFilteredList = items
} else {
val filteredList = ArrayList<Document>()
for (document in items) {
if (document.name.toLowerCase().contains(charString)) {
filteredList.add(document)
}
}
mFilteredList = filteredList
}
val filterResults = FilterResults()
filterResults.values = mFilteredList
println("FileListAdapter.performFiltering"+filterResults.values)
return filterResults
}
@Suppress("UNCHECKED_CAST")
override fun publishResults(
charSequence: CharSequence,
filterResults: FilterResults
) {
mFilteredList = filterResults.values as List<Document>
notifyDataSetChanged()
}
}
}
class FileViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
internal var fileTypeTv: TextView = itemView.findViewById(R.id.txtFilesType)
internal var checkBox: SmoothCheckBox = itemView.findViewById(R.id.checkbox)
internal var imageView: ImageView = itemView.findViewById(R.id.imgIvFiles)
internal var fileNameTextView: TextView = itemView.findViewById(R.id.txtFilesName)
internal var fileSizeTextView: TextView = itemView.findViewById(R.id.txtFilesSize)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment