DroidFS/app/src/main/java/sushi/hardcore/droidfs/adapters/ExplorerElementAdapter.kt

112 lines
4.0 KiB
Kotlin
Raw Normal View History

2020-07-17 16:35:39 +02:00
package sushi.hardcore.droidfs.adapters
import android.content.Context
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import sushi.hardcore.droidfs.ConstValues.Companion.getAssociatedDrawable
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.explorers.ExplorerElement
import sushi.hardcore.droidfs.util.PathUtils
2020-07-17 16:35:39 +02:00
import java.text.DateFormat
import java.util.*
class ExplorerElementAdapter(private val context: Context) : BaseAdapter() {
private val dateFormat: DateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.getDefault())
private var explorerElements = listOf<ExplorerElement>()
2020-07-17 16:35:39 +02:00
private val inflater: LayoutInflater = LayoutInflater.from(context)
val selectedItems: MutableList<Int> = ArrayList()
override fun getCount(): Int {
return explorerElements.size
2020-07-17 16:35:39 +02:00
}
override fun getItem(position: Int): ExplorerElement {
return explorerElements[position]
2020-07-17 16:35:39 +02:00
}
override fun getItemId(position: Int): Long {
return 0
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val view: View = convertView ?: inflater.inflate(R.layout.adapter_explorer_element, parent, false)
val currentElement = getItem(position)
val textElementName = view.findViewById<TextView>(R.id.text_element_name)
textElementName.text = currentElement.name
val textElementMtime = view.findViewById<TextView>(R.id.text_element_mtime)
val textElementSize = view.findViewById<TextView>(R.id.text_element_size)
if (!currentElement.isParentFolder){
textElementSize.text = PathUtils.formatSize(currentElement.size)
} else {
textElementSize.text = ""
}
2020-07-17 16:35:39 +02:00
var drawableId = R.drawable.icon_folder
when {
currentElement.isDirectory -> {
textElementMtime.text = dateFormat.format(currentElement.mTime)
}
currentElement.isParentFolder -> {
textElementMtime.setText(R.string.parent_folder)
}
else -> {
textElementMtime.text = dateFormat.format(currentElement.mTime)
drawableId = getAssociatedDrawable(currentElement.name)
}
}
2021-11-09 11:12:09 +01:00
view.findViewById<ImageView>(R.id.icon_element).setImageResource(drawableId)
2020-07-17 16:35:39 +02:00
if (selectedItems.contains(position)) {
2021-11-09 11:12:09 +01:00
view.setBackgroundColor(ContextCompat.getColor(context, R.color.itemSelected))
2020-07-17 16:35:39 +02:00
} else {
view.setBackgroundColor(Color.alpha(0))
}
return view
}
fun onItemClick(position: Int) {
if (selectedItems.isNotEmpty()) {
if (!explorerElements[position].isParentFolder) {
2020-07-17 16:35:39 +02:00
if (selectedItems.contains(position)) {
selectedItems.remove(position)
} else {
selectedItems.add(position)
}
notifyDataSetChanged()
2020-07-17 16:35:39 +02:00
}
}
}
fun onItemLongClick(position: Int) {
if (!explorerElements[position].isParentFolder) {
2020-07-17 16:35:39 +02:00
if (!selectedItems.contains(position)) {
selectedItems.add(position)
} else {
selectedItems.remove(position)
}
notifyDataSetChanged()
2020-07-17 16:35:39 +02:00
}
}
fun selectAll() {
for (i in explorerElements.indices) {
if (!selectedItems.contains(i) && !explorerElements[i].isParentFolder) {
2020-07-17 16:35:39 +02:00
selectedItems.add(i)
}
}
notifyDataSetChanged()
2020-07-17 16:35:39 +02:00
}
fun unSelectAll() {
selectedItems.clear()
notifyDataSetChanged()
2020-07-17 16:35:39 +02:00
}
fun setExplorerElements(explorer_elements: List<ExplorerElement>) {
this.explorerElements = explorer_elements
unSelectAll()
2020-07-17 16:35:39 +02:00
}
}