@@ -25,7 +25,9 @@ import com.simplemobiletools.filemanager.R
2525import com.simplemobiletools.filemanager.activities.SimpleActivity
2626import com.simplemobiletools.filemanager.dialogs.CompressAsDialog
2727import com.simplemobiletools.filemanager.extensions.config
28+ import com.simplemobiletools.filemanager.extensions.isPathOnRoot
2829import com.simplemobiletools.filemanager.extensions.isZipFile
30+ import com.stericson.RootTools.RootTools
2931import kotlinx.android.synthetic.main.list_item.view.*
3032import java.io.Closeable
3133import java.io.File
@@ -207,11 +209,38 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
207209
208210 val source = if (files[0 ].isFile) files[0 ].parent else files[0 ].absolutePath
209211 FilePickerDialog (activity, source, false , config.shouldShowHidden, true ) {
210- activity.copyMoveFilesTo(files, source, it, isCopyOperation, false ) {
212+ if (activity.isPathOnRoot(source)) {
213+ copyRootItems(files, it)
214+ } else {
215+ activity.copyMoveFilesTo(files, source, it, isCopyOperation, false ) {
216+ listener?.refreshItems()
217+ actMode?.finish()
218+ }
219+ }
220+ }
221+ }
222+
223+ private fun copyRootItems (files : ArrayList <File >, destinationPath : String ) {
224+ activity.toast(R .string.copying)
225+ Thread ({
226+ var fileCnt = files.count()
227+ files.forEach {
228+ if (RootTools .copyFile(it.absolutePath, destinationPath, false , true )) {
229+ fileCnt--
230+ }
231+ }
232+
233+ when {
234+ fileCnt <= 0 -> activity.toast(R .string.copying_success)
235+ fileCnt == files.count() -> activity.toast(R .string.copy_failed)
236+ else -> activity.toast(R .string.copying_success_partial)
237+ }
238+
239+ activity.runOnUiThread {
211240 listener?.refreshItems()
212241 actMode?.finish()
213242 }
214- }
243+ }).start()
215244 }
216245
217246 private fun compressSelection () {
0 commit comments