@@ -5,7 +5,6 @@ import android.content.Intent
55import android.net.Uri
66import android.os.Bundle
77import android.os.Parcelable
8- import android.support.design.widget.Snackbar
98import android.support.v7.widget.LinearLayoutManager
109import android.view.LayoutInflater
1110import android.view.View
@@ -28,12 +27,10 @@ import java.util.*
2827
2928class ItemsFragment : android.support.v4.app.Fragment (), ItemsAdapter.ItemOperationsListener {
3029 private var mListener: ItemInteractionListener ? = null
31- private var mSnackbar: Snackbar ? = null
3230 private var mStoredTextColor = 0
3331
34- lateinit var mItems: List <FileDirItem >
32+ lateinit var mItems: ArrayList <FileDirItem >
3533 lateinit var mConfig: Config
36- lateinit var mToBeDeleted: MutableList <String >
3734
3835 private var mShowHidden = false
3936 var mPath = " "
@@ -46,7 +43,6 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
4643 mConfig = context.config
4744 mShowHidden = mConfig.showHidden
4845 mItems = ArrayList <FileDirItem >()
49- mToBeDeleted = ArrayList <String >()
5046 fillItems()
5147
5248 items_swipe_refresh.setOnRefreshListener({ fillItems() })
@@ -69,7 +65,6 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
6965
7066 override fun onPause () {
7167 super .onPause()
72- deleteItems()
7368 mStoredTextColor = context.config.textColor
7469 }
7570
@@ -93,7 +88,6 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
9388 items_list.apply {
9489 this @apply.adapter = adapter
9590 addItemDecoration(RecyclerViewDivider (context))
96- setOnTouchListener { view, motionEvent -> checkDelete(); false }
9791 }
9892 } else {
9993 val state = (items_list.layoutManager as LinearLayoutManager ).onSaveInstanceState()
@@ -112,7 +106,7 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
112106 mListener = listener
113107 }
114108
115- private fun getItems (path : String ): List <FileDirItem > {
109+ private fun getItems (path : String ): ArrayList <FileDirItem > {
116110 val items = ArrayList <FileDirItem >()
117111 val files = File (path).listFiles()
118112 if (files != null ) {
@@ -122,9 +116,6 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
122116 if (! mShowHidden && curName.startsWith(" ." ))
123117 continue
124118
125- if (mToBeDeleted.contains(curPath))
126- continue
127-
128119 val children = getChildren(file)
129120 val size = file.length()
130121
@@ -197,69 +188,42 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
197188 return " $type /*"
198189 }
199190
200- override fun prepareForDeleting (paths : ArrayList <String >) {
201- mToBeDeleted = paths
202- val deletedCnt = mToBeDeleted.size
203-
204- if ((activity as SimpleActivity ).isShowingPermDialog(File (mToBeDeleted[0 ])))
191+ override fun deleteFiles (files : ArrayList <File >) {
192+ val act = activity as SimpleActivity
193+ if (act.isShowingPermDialog(files[0 ])) {
205194 return
206-
207- notifyDeletion(deletedCnt)
208- }
209-
210- private fun notifyDeletion (cnt : Int ) {
211- val res = resources
212- /* val msg = res.getQuantityString(R.plurals.items_deleted, cnt, cnt)
213- mSnackbar = Snackbar.make(items_holder, msg, Snackbar.LENGTH_INDEFINITE)
214- mSnackbar!!.apply {
215- setAction(res.getString(R.string.undo), undoDeletion)
216- setActionTextColor(Color.WHITE)
217- show()
218- }
219- fillItems()*/
220- }
221-
222- fun checkDelete () {
223- if (mSnackbar?.isShown == true ) {
224- deleteItems()
225195 }
226- }
227196
228- private fun deleteItems () {
229- if (mToBeDeleted.isEmpty())
230- return
231-
232- mSnackbar?.dismiss()
233- mToBeDeleted
234- .map(::File )
235- .filter(File ::exists)
236- .forEach { deleteItem(it) }
237-
238- mToBeDeleted.clear()
239- }
240-
241- private fun deleteItem (item : File ) {
242- if (item.isDirectory) {
243- for (child in item.listFiles()) {
244- deleteItem(child)
197+ Thread ({
198+ var hadSuccess = false
199+ files.forEach {
200+ if (it.isDirectory) {
201+ for (child in it.listFiles()) {
202+ deleteFile(child, act)
203+ }
204+ }
205+ if (deleteFile(it, act)) {
206+ hadSuccess = true
207+ context.deleteFromMediaStore(it)
208+ }
245209 }
246- }
247-
248- if (context.needsStupidWritePermissions(item.absolutePath)) {
249- val document = context.getFileDocument(item.absolutePath, mConfig.treeUri) ? : return
210+ if (! hadSuccess)
211+ act.runOnUiThread {
212+ act.toast(R .string.unknown_error_occurred)
213+ }
214+ }).start()
215+ }
250216
251- // double check we have the uri to the proper file path, not some parent folder
252- if (document.uri.toString().endsWith(item.absolutePath.getFilenameFromPath()))
253- document.delete()
217+ private fun deleteFile ( file : File , act : SimpleActivity ): Boolean {
218+ if (file.delete() || act.tryFastDocumentDelete(file)) {
219+ return true
254220 } else {
255- item.delete()
221+ val document = act.getFileDocument(file.absolutePath, context.config.treeUri) ? : return false
222+ if (document.isFile && document.delete()) {
223+ return true
224+ }
256225 }
257- }
258-
259- private val undoDeletion = View .OnClickListener {
260- mToBeDeleted.clear()
261- mSnackbar!! .dismiss()
262- fillItems()
226+ return false
263227 }
264228
265229 override fun refreshItems () {
0 commit comments