From 638d3dc070703fa49965800516ae5949f4f18fc9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 16 Apr 2018 18:46:11 +0200 Subject: [PATCH] add an activity in RootHelpers constructor to avoid passing it around --- .../filemanager/activities/MainActivity.kt | 2 +- .../activities/SettingsActivity.kt | 2 +- .../dialogs/CreateNewItemDialog.kt | 4 +- .../filemanager/fragments/ItemsFragment.kt | 14 ++--- .../filemanager/helpers/RootHelpers.kt | 54 ++++++++++--------- 5 files changed, 41 insertions(+), 35 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/activities/MainActivity.kt index 55767ab1..b6af5c2e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/activities/MainActivity.kt @@ -277,7 +277,7 @@ class MainActivity : SimpleActivity() { Thread { config.isRootAvailable = RootTools.isRootAvailable() if (config.isRootAvailable && config.enableRootAccess) { - RootHelpers().askRootIfNeeded(this) { + RootHelpers(this).askRootIfNeeded { config.enableRootAccess = it } } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/activities/SettingsActivity.kt index 6ce657cc..98e2ff14 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/activities/SettingsActivity.kt @@ -136,7 +136,7 @@ class SettingsActivity : SimpleActivity() { settings_enable_root_access.isChecked = config.enableRootAccess settings_enable_root_access_holder.setOnClickListener { if (!config.enableRootAccess) { - RootHelpers().askRootIfNeeded(this) { + RootHelpers(this).askRootIfNeeded { toggleRootAccess(it) } } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CreateNewItemDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CreateNewItemDialog.kt index a2ce9b3e..d46770bb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CreateNewItemDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CreateNewItemDialog.kt @@ -67,7 +67,7 @@ class CreateNewItemDialog(val activity: SimpleActivity, val path: String, val ca } } else -> { - RootHelpers().createFileFolder(activity, path, false) { + RootHelpers(activity).createFileFolder(path, false) { if (it) { success(alertDialog) } else { @@ -100,7 +100,7 @@ class CreateNewItemDialog(val activity: SimpleActivity, val path: String, val ca } } else -> { - RootHelpers().createFileFolder(activity, path, true) { + RootHelpers(activity).createFileFolder(path, true) { if (it) { success(alertDialog) } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt index 08c71061..c0aec563 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt @@ -25,7 +25,6 @@ import com.simplemobiletools.filemanager.extensions.tryOpenPathIntent import com.simplemobiletools.filemanager.helpers.PATH import com.simplemobiletools.filemanager.helpers.RootHelpers import com.simplemobiletools.filemanager.interfaces.ItemOperationsListener -import com.stericson.RootTools.RootTools import kotlinx.android.synthetic.main.items_fragment.* import kotlinx.android.synthetic.main.items_fragment.view.* import java.io.File @@ -183,7 +182,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb } else if (!context!!.config.enableRootAccess || !context!!.isPathOnRoot(path)) { getRegularItemsOf(path, callback) } else { - RootHelpers().getFiles(activity as SimpleActivity, path, callback) + RootHelpers(activity!!).getFiles(path, callback) } } }.start() @@ -281,10 +280,13 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb override fun deleteFiles(files: ArrayList) { val hasFolder = files.any { it.isDirectory } - if (context!!.isPathOnRoot(files.firstOrNull()?.path ?: context!!.config.internalStoragePath)) { - files.forEach { - RootTools.deleteFileOrDirectory(it.path, false) - } + val firstPath = files.firstOrNull()?.path + if (firstPath == null || firstPath.isEmpty()) { + return + } + + if (context!!.isPathOnRoot(firstPath)) { + RootHelpers(activity!!).deleteFiles(files) } else { (activity as SimpleActivity).deleteFiles(files, hasFolder) { if (!it) { diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/helpers/RootHelpers.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/helpers/RootHelpers.kt index 6c5116d0..079057d6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/helpers/RootHelpers.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/helpers/RootHelpers.kt @@ -1,18 +1,18 @@ package com.simplemobiletools.filemanager.helpers +import android.app.Activity import com.simplemobiletools.commons.extensions.areDigitsOnly import com.simplemobiletools.commons.extensions.showErrorToast import com.simplemobiletools.commons.models.FileDirItem -import com.simplemobiletools.filemanager.activities.SimpleActivity import com.simplemobiletools.filemanager.extensions.config import com.stericson.RootShell.execution.Command import com.stericson.RootTools.RootTools import java.io.File -import java.util.* -class RootHelpers { - fun askRootIfNeeded(activity: SimpleActivity, callback: (success: Boolean) -> Unit) { - val command = object : Command(0, "ls -lA") { +class RootHelpers(val activity: Activity) { + fun askRootIfNeeded(callback: (success: Boolean) -> Unit) { + val cmd = "ls -lA" + val command = object : Command(0, cmd) { override fun commandOutput(id: Int, line: String) { callback(true) super.commandOutput(id, line) @@ -27,7 +27,7 @@ class RootHelpers { } } - fun getFiles(activity: SimpleActivity, path: String, callback: (originalPath: String, fileDirItems: ArrayList) -> Unit) { + fun getFiles(path: String, callback: (originalPath: String, fileDirItems: ArrayList) -> Unit) { val files = ArrayList() val hiddenArgument = if (activity.config.shouldShowHidden) "-A " else "" val cmd = "ls $hiddenArgument$path" @@ -45,17 +45,17 @@ class RootHelpers { if (files.isEmpty()) { callback(path, files) } else { - getChildrenCount(activity, files, path, callback) + getChildrenCount(files, path, callback) } super.commandCompleted(id, exitcode) } } - runCommand(activity, command) + runCommand(command) } - private fun getChildrenCount(activity: SimpleActivity, files: ArrayList, path: String, callback: (originalPath: String, fileDirItems: ArrayList) -> Unit) { + private fun getChildrenCount(files: ArrayList, path: String, callback: (originalPath: String, fileDirItems: ArrayList) -> Unit) { val hiddenArgument = if (activity.config.shouldShowHidden) "-A " else "" var cmd = "" files.forEach { @@ -81,15 +81,15 @@ class RootHelpers { fileDirItem.children = childrenCount.toInt() } } - getFileSizes(activity, files, path, callback) + getFileSizes(files, path, callback) super.commandCompleted(id, exitcode) } } - runCommand(activity, command) + runCommand(command) } - private fun getFileSizes(activity: SimpleActivity, files: ArrayList, path: String, callback: (originalPath: String, fileDirItems: ArrayList) -> Unit) { + private fun getFileSizes(files: ArrayList, path: String, callback: (originalPath: String, fileDirItems: ArrayList) -> Unit) { var cmd = "" files.forEach { cmd += if (it.isDirectory) { @@ -124,10 +124,10 @@ class RootHelpers { } } - runCommand(activity, command) + runCommand(command) } - private fun runCommand(activity: SimpleActivity, command: Command) { + private fun runCommand(command: Command) { try { RootTools.getShell(true).add(command) } catch (e: Exception) { @@ -135,8 +135,8 @@ class RootHelpers { } } - fun createFileFolder(activity: SimpleActivity, path: String, isFile: Boolean, callback: (success: Boolean) -> Unit) { - tryMountAsRW(activity, path) { + fun createFileFolder(path: String, isFile: Boolean, callback: (success: Boolean) -> Unit) { + tryMountAsRW(path) { val mountPoint = it val targetPath = path.trim('/') val mainCommand = if (isFile) "touch" else "mkdir" @@ -144,25 +144,25 @@ class RootHelpers { val command = object : Command(0, cmd) { override fun commandCompleted(id: Int, exitcode: Int) { callback(exitcode == 0) - mountAsRO(activity, mountPoint) + mountAsRO(mountPoint) super.commandCompleted(id, exitcode) } } - runCommand(activity, command) + runCommand(command) } } - private fun mountAsRO(activity: SimpleActivity, mountPoint: String?) { + private fun mountAsRO(mountPoint: String?) { if (mountPoint != null) { val cmd = "umount -r \"$mountPoint\"" val command = object : Command(0, cmd) {} - runCommand(activity, command) + runCommand(command) } } // inspired by Amaze File Manager - private fun tryMountAsRW(activity: SimpleActivity, path: String, callback: (mountPoint: String?) -> Unit) { + private fun tryMountAsRW(path: String, callback: (mountPoint: String?) -> Unit) { val mountPoints = ArrayList() val command = object : Command(0, "mount") { @@ -190,7 +190,7 @@ class RootHelpers { callback(null) } else if (types.contains("ro")) { val mountCommand = "mount -o rw,remount $mountPoint" - mountAsRW(activity, mountCommand) { + mountAsRW(mountCommand) { callback(it) } } @@ -200,10 +200,10 @@ class RootHelpers { } } - runCommand(activity, command) + runCommand(command) } - private fun mountAsRW(activity: SimpleActivity, commandString: String, callback: (mountPoint: String) -> Unit) { + private fun mountAsRW(commandString: String, callback: (mountPoint: String) -> Unit) { val command = object : Command(0, commandString) { override fun commandOutput(id: Int, line: String) { callback(line) @@ -211,6 +211,10 @@ class RootHelpers { } } - runCommand(activity, command) + runCommand(command) + } + + fun deleteFiles(fileDirItems: ArrayList) { + } }