update folder children count asynchronously
This commit is contained in:
parent
260da456c1
commit
f4388d7d8b
2 changed files with 23 additions and 2 deletions
|
@ -719,6 +719,13 @@ class ItemsAdapter(activity: SimpleActivity, var listItems: MutableList<ListItem
|
|||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun updateChildCount(path: String, count: Int) {
|
||||
val position = getItemKeyPosition(path.hashCode())
|
||||
val item = listItems.getOrNull(position) ?: return
|
||||
item.children = count
|
||||
notifyItemChanged(position)
|
||||
}
|
||||
|
||||
fun isASectionTitle(position: Int) = listItems.getOrNull(position)?.isSectionTitle ?: false
|
||||
|
||||
override fun onViewRecycled(holder: ViewHolder) {
|
||||
|
|
|
@ -241,13 +241,27 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
|
|||
val lastModifieds = context!!.getFolderLastModifieds(path)
|
||||
|
||||
for (file in files) {
|
||||
val fileDirItem = getFileDirItemFromFile(file, isSortingBySize, lastModifieds, getProperChildCount)
|
||||
val fileDirItem = getFileDirItemFromFile(file, isSortingBySize, lastModifieds, false)
|
||||
if (fileDirItem != null) {
|
||||
items.add(fileDirItem)
|
||||
}
|
||||
}
|
||||
|
||||
// send out the initial item list asap, get proper child count asynchronously as it can be slow
|
||||
callback(path, items)
|
||||
|
||||
if (getProperChildCount) {
|
||||
items.filter { it.mIsDirectory }.forEach {
|
||||
if (context != null) {
|
||||
val childrenCount = it.getDirectChildrenCount(context!!, showHidden)
|
||||
if (childrenCount != 0) {
|
||||
activity?.runOnUiThread {
|
||||
getRecyclerAdapter()?.updateChildCount(it.mPath, childrenCount)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getFileDirItemFromFile(file: File, isSortingBySize: Boolean, lastModifieds: HashMap<String, Long>, getProperChildCount: Boolean): ListItem? {
|
||||
|
@ -451,7 +465,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
|
|||
|
||||
private fun getRecyclerAdapter() = mView.items_list.adapter as? ItemsAdapter
|
||||
|
||||
fun setupLayoutManager() {
|
||||
private fun setupLayoutManager() {
|
||||
if (context!!.config.getFolderViewType(currentPath) == VIEW_TYPE_GRID) {
|
||||
currentViewType = VIEW_TYPE_GRID
|
||||
setupGridLayoutManager()
|
||||
|
|
Loading…
Reference in a new issue