make item displaying asynchronous

This commit is contained in:
tibbi
2017-03-19 10:58:21 +01:00
parent c2fe859e94
commit 12d234d0d5

View File

@ -22,6 +22,7 @@ import com.simplemobiletools.filemanager.adapters.ItemsAdapter
import com.simplemobiletools.filemanager.dialogs.CreateNewItemDialog import com.simplemobiletools.filemanager.dialogs.CreateNewItemDialog
import com.simplemobiletools.filemanager.extensions.config import com.simplemobiletools.filemanager.extensions.config
import kotlinx.android.synthetic.main.items_fragment.* import kotlinx.android.synthetic.main.items_fragment.*
import kotlinx.android.synthetic.main.items_fragment.view.*
import java.io.File import java.io.File
import java.util.* import java.util.*
@ -31,12 +32,15 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
lateinit var mItems: ArrayList<FileDirItem> lateinit var mItems: ArrayList<FileDirItem>
lateinit var mConfig: Config lateinit var mConfig: Config
lateinit var fragmentView: View
private var mShowHidden = false private var mShowHidden = false
var mPath = "" var mPath = ""
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?) = override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
inflater!!.inflate(R.layout.items_fragment, container, false)!! fragmentView = inflater!!.inflate(R.layout.items_fragment, container, false)!!
return fragmentView
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@ -70,23 +74,27 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
private fun fillItems() { private fun fillItems() {
mPath = arguments.getString(PATH) mPath = arguments.getString(PATH)
val newItems = getItems(mPath) getItems(mPath) {
val newItems = it
Collections.sort(newItems) Collections.sort(newItems)
fragmentView.apply {
items_swipe_refresh.isRefreshing = false items_swipe_refresh.isRefreshing = false
if (newItems.hashCode() == mItems.hashCode()) { if (newItems.hashCode() == mItems.hashCode()) {
return return@getItems
} }
mItems = newItems mItems = newItems
val adapter = ItemsAdapter(activity as SimpleActivity, mItems, this) { val adapter = ItemsAdapter(activity as SimpleActivity, mItems, this@ItemsFragment) {
itemClicked(it) itemClicked(it)
} }
activity.runOnUiThread {
val currAdapter = items_list.adapter val currAdapter = items_list.adapter
if (currAdapter == null) { if (currAdapter == null) {
items_list.apply { items_list.apply {
this@apply.adapter = adapter this.adapter = adapter
addItemDecoration(RecyclerViewDivider(context)) addItemDecoration(RecyclerViewDivider(context))
} }
items_fastscroller.setViews(items_list, items_swipe_refresh) items_fastscroller.setViews(items_list, items_swipe_refresh)
@ -98,8 +106,11 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
getRecyclerLayoutManager().onRestoreInstanceState(arguments.getParcelable<Parcelable>(SCROLL_STATE)) getRecyclerLayoutManager().onRestoreInstanceState(arguments.getParcelable<Parcelable>(SCROLL_STATE))
} }
}
}
}
fun getRecyclerLayoutManager() = (items_list.layoutManager as LinearLayoutManager) fun getRecyclerLayoutManager() = (fragmentView.items_list.layoutManager as LinearLayoutManager)
fun getScrollState() = getRecyclerLayoutManager().onSaveInstanceState() fun getScrollState() = getRecyclerLayoutManager().onSaveInstanceState()
@ -107,7 +118,8 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
mListener = listener mListener = listener
} }
private fun getItems(path: String): ArrayList<FileDirItem> { private fun getItems(path: String, callback: (items: ArrayList<FileDirItem>) -> Unit) {
Thread({
val items = ArrayList<FileDirItem>() val items = ArrayList<FileDirItem>()
val files = File(path).listFiles() val files = File(path).listFiles()
if (files != null) { if (files != null) {
@ -123,7 +135,8 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
items.add(FileDirItem(curPath, curName, file.isDirectory, children, size)) items.add(FileDirItem(curPath, curName, file.isDirectory, children, size))
} }
} }
return items callback(items)
}).start()
} }
private fun getChildren(file: File): Int { private fun getChildren(file: File): Int {