From 0a703585b0f601594af43c8d3696cac4d9c2e2cf Mon Sep 17 00:00:00 2001 From: Viktor De Pasquale Date: Sun, 5 May 2019 11:50:27 +0200 Subject: [PATCH 1/6] Fixed items in navView not being checked --- .../java/com/topjohnwu/magisk/ui/MainActivity.kt | 16 +++++++++++++++- .../topjohnwu/magisk/ui/base/MagiskActivity.kt | 10 +++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt index b21e89a5e..57c86b028 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt @@ -71,6 +71,20 @@ open class MainActivity : MagiskActivity() { supportActionBar?.setTitle(titleId) } + override fun onTabTransaction(fragment: Fragment?, index: Int) { + val fragmentId = when (fragment) { + is HomeFragment -> R.id.magiskFragment + is SuperuserFragment -> R.id.superuserFragment + is MagiskHideFragment -> R.id.magiskHideFragment + is ModulesFragment -> R.id.modulesFragment + is ReposFragment -> R.id.reposFragment + is LogFragment -> R.id.logFragment + is SettingsFragment -> R.id.settings + else -> return + } + binding.navView.setCheckedItem(fragmentId) + } + override fun onBackPressed() { if (binding.drawerLayout.isDrawerOpen(binding.navView)) { binding.drawerLayout.closeDrawer(binding.navView) @@ -88,7 +102,7 @@ open class MainActivity : MagiskActivity() { private fun openNav() = binding.drawerLayout.openDrawer(GravityCompat.START) - fun checkHideSection() { + private fun checkHideSection() { val menu = binding.navView.menu menu.findItem(R.id.magiskHideFragment).isVisible = Shell.rootAccess() && Config.get(Config.Key.MAGISKHIDE) as Boolean diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/base/MagiskActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/base/MagiskActivity.kt index 22290629a..20384d02f 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/base/MagiskActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/base/MagiskActivity.kt @@ -31,7 +31,7 @@ import kotlin.reflect.KClass abstract class MagiskActivity : MagiskLeanbackActivity(), FragNavController.RootFragmentListener, - Navigator { + Navigator, FragNavController.TransactionListener { override val numberOfRootFragments: Int get() = baseFragments.size override val baseFragments: List> = listOf() @@ -62,6 +62,7 @@ abstract class MagiskActivity Unit) { From 79d704008b22d1ff0b155070c7eec7bfa3df6bea Mon Sep 17 00:00:00 2001 From: Viktor De Pasquale Date: Sun, 5 May 2019 12:09:22 +0200 Subject: [PATCH 2/6] Fixed rewritten java code being java-styled in kotlin Fixed accessing kotlin code illegally via companion helper --- .../com/topjohnwu/magisk/tasks/FlashZip.kt | 97 ++++++++------ .../topjohnwu/magisk/utils/DownloadApp.java | 2 +- .../com/topjohnwu/magisk/utils/PatchAPK.java | 12 +- .../com/topjohnwu/magisk/utils/RootUtils.kt | 120 +++++++++--------- .../com/topjohnwu/magisk/utils/ZipUtils.kt | 10 +- .../magisk/view/dialogs/EnvFixDialog.java | 6 +- 6 files changed, 135 insertions(+), 112 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/tasks/FlashZip.kt b/app/src/main/java/com/topjohnwu/magisk/tasks/FlashZip.kt index 0594dc2bb..0a42d1783 100644 --- a/app/src/main/java/com/topjohnwu/magisk/tasks/FlashZip.kt +++ b/app/src/main/java/com/topjohnwu/magisk/tasks/FlashZip.kt @@ -1,73 +1,96 @@ package com.topjohnwu.magisk.tasks import android.net.Uri - +import com.skoumal.teanity.extensions.subscribeK import com.topjohnwu.magisk.App import com.topjohnwu.magisk.Const -import com.topjohnwu.magisk.utils.* +import com.topjohnwu.magisk.utils.fileName +import com.topjohnwu.magisk.utils.inject +import com.topjohnwu.magisk.utils.readUri +import com.topjohnwu.magisk.utils.unzip import com.topjohnwu.superuser.Shell -import com.topjohnwu.superuser.internal.UiThreadHandler - +import io.reactivex.Single import java.io.File import java.io.FileNotFoundException import java.io.IOException -abstract class FlashZip(private val mUri: Uri, - private val console: MutableList, - private val logs: MutableList) { +abstract class FlashZip( + private val mUri: Uri, + private val console: MutableList, + private val logs: MutableList +) { - private val tmpFile: File = File(App.self.cacheDir, "install.zip") + private val app: App by inject() + private val tmpFile: File = File(app.cacheDir, "install.zip") @Throws(IOException::class) private fun unzipAndCheck(): Boolean { - unzip(tmpFile, tmpFile.parentFile!!, "META-INF/com/google/android", true) - return Shell.su("grep -q '#MAGISK' ${File(tmpFile.parentFile, "updater-script")}") - .exec().isSuccess + val parentFile = tmpFile.parentFile ?: return false + tmpFile.unzip(parentFile, "META-INF/com/google/android", true) + + val updaterScript = File(parentFile, "updater-script") + return Shell + .su("grep -q '#MAGISK' $updaterScript") + .exec() + .isSuccess } @Throws(IOException::class) private fun flash(): Boolean { console.add("- Copying zip to temp directory") - try { - App.self.readUri(mUri).use { input -> + + runCatching { + app.readUri(mUri).use { input -> tmpFile.outputStream().use { out -> input.copyTo(out) } } - } catch (e: FileNotFoundException) { - console.add("! Invalid Uri") - throw e - } catch (e: IOException) { - console.add("! Cannot copy to cache") - throw e + }.getOrElse { + when (it) { + is FileNotFoundException -> console.add("! Invalid Uri") + is IOException -> console.add("! Cannot copy to cache") + } + throw it } - try { - if (!unzipAndCheck()) { - console.add("! This zip is not a Magisk Module!") - return false - } - } catch (e: IOException) { + val isMagiskModule = runCatching { + unzipAndCheck() + }.getOrElse { console.add("! Unzip error") - throw e + throw it + } + + if (!isMagiskModule) { + console.add("! This zip is not a Magisk Module!") + return false } console.add("- Installing ${mUri.fileName}") - return Shell.su("cd " + tmpFile.parent!!, - "BOOTMODE=true sh update-binary dummy 1 $tmpFile") - .to(console, logs) - .exec().isSuccess + + val parentFile = tmpFile.parent ?: return false + + return Shell + .su( + "cd $parentFile", + "BOOTMODE=true sh update-binary dummy 1 $tmpFile" + ) + .to(console, logs) + .exec().isSuccess } - fun exec() { - App.THREAD_POOL.execute { - val success = try { + fun exec() = Single + .fromCallable { + runCatching { flash() - } catch (e: IOException) { + }.getOrElse { + it.printStackTrace() false + }.apply { + Shell.su("cd /", "rm -rf ${tmpFile.parent} ${Const.TMP_FOLDER_PATH}") + .submit() } - Shell.su("cd /", "rm -rf ${tmpFile.parent} ${Const.TMP_FOLDER_PATH}").submit() - UiThreadHandler.run { onResult(success) } } - } + .subscribeK(onError = { onResult(false) }) { onResult(it) } + .let { Unit } // ignores result disposable + protected abstract fun onResult(success: Boolean) } diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/DownloadApp.java b/app/src/main/java/com/topjohnwu/magisk/utils/DownloadApp.java index e10d38420..39727e52d 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/DownloadApp.java +++ b/app/src/main/java/com/topjohnwu/magisk/utils/DownloadApp.java @@ -89,7 +89,7 @@ public class DownloadApp { // Make it world readable apk.setReadable(true, false); if (Shell.su("pm install " + apk).exec().isSuccess()) - RootUtils.Companion.rmAndLaunch(app.getPackageName(), + RootUtils.rmAndLaunch(app.getPackageName(), new ComponentName(BuildConfig.APPLICATION_ID, ClassMap.get(SplashActivity.class).getName())); progress.dismiss(); diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/PatchAPK.java b/app/src/main/java/com/topjohnwu/magisk/utils/PatchAPK.java index 95389302f..13e6f65bf 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/PatchAPK.java +++ b/app/src/main/java/com/topjohnwu/magisk/utils/PatchAPK.java @@ -3,8 +3,6 @@ package com.topjohnwu.magisk.utils; import android.content.ComponentName; import android.widget.Toast; -import androidx.core.app.NotificationCompat; - import com.topjohnwu.magisk.App; import com.topjohnwu.magisk.BuildConfig; import com.topjohnwu.magisk.ClassMap; @@ -29,6 +27,8 @@ import java.util.ArrayList; import java.util.List; import java.util.jar.JarEntry; +import androidx.core.app.NotificationCompat; + public class PatchAPK { public static final String LOWERALPHA = "abcdefghijklmnopqrstuvwxyz"; @@ -56,7 +56,7 @@ public class PatchAPK { return builder.toString(); } - private static boolean findAndPatch(byte xml[], String from, String to) { + private static boolean findAndPatch(byte[] xml, String from, String to) { if (from.length() != to.length()) return false; CharBuffer buf = ByteBuffer.wrap(xml).order(ByteOrder.LITTLE_ENDIAN).asCharBuffer(); @@ -83,7 +83,7 @@ public class PatchAPK { return true; } - private static boolean findAndPatch(byte xml[], int a, int b) { + private static boolean findAndPatch(byte[] xml, int a, int b) { IntBuffer buf = ByteBuffer.wrap(xml).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer(); int len = xml.length / 4; for (int i = 0; i < len; ++i) { @@ -112,7 +112,7 @@ public class PatchAPK { Config.set(Config.Key.SU_MANAGER, pkg); Config.export(); - RootUtils.Companion.rmAndLaunch(BuildConfig.APPLICATION_ID, + RootUtils.rmAndLaunch(BuildConfig.APPLICATION_ID, new ComponentName(pkg, ClassMap.get(SplashActivity.class).getName())); return true; @@ -122,7 +122,7 @@ public class PatchAPK { try { JarMap jar = new JarMap(in); JarEntry je = jar.getJarEntry(Const.ANDROID_MANIFEST); - byte xml[] = jar.getRawData(je); + byte[] xml = jar.getRawData(je); if (!findAndPatch(xml, BuildConfig.APPLICATION_ID, pkg) || !findAndPatch(xml, R.string.app_name, R.string.re_app_name)) diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/RootUtils.kt b/app/src/main/java/com/topjohnwu/magisk/utils/RootUtils.kt index baa9ed7dd..5a1716931 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/RootUtils.kt +++ b/app/src/main/java/com/topjohnwu/magisk/utils/RootUtils.kt @@ -38,72 +38,70 @@ fun Intent.toCommand(args: MutableList) { } val extras = extras if (extras != null) { - for (key in extras.keySet()) { + loop@ for (key in extras.keySet()) { val v = extras.get(key) ?: continue var value: Any = v val arg: String - if (v is String) - arg = "--es" - else if (v is Boolean) - arg = "--ez" - else if (v is Int) - arg = "--ei" - else if (v is Long) - arg = "--el" - else if (v is Float) - arg = "--ef" - else if (v is Uri) - arg = "--eu" - else if (v is ComponentName) { - arg = "--ecn" - value = v.flattenToString() - } else if (v is ArrayList<*>) { - if (v.size <= 0) - /* Impossible to know the type due to type erasure */ - continue - - arg = if (v[0] is Int) - "--eial" - else if (v[0] is Long) - "--elal" - else if (v[0] is Float) - "--efal" - else if (v[0] is String) - "--esal" - else - continue /* Unsupported */ - - val sb = StringBuilder() - for (o in v) { - sb.append(o.toString().replace(",", "\\,")) - sb.append(',') + when { + v is String -> arg = "--es" + v is Boolean -> arg = "--ez" + v is Int -> arg = "--ei" + v is Long -> arg = "--el" + v is Float -> arg = "--ef" + v is Uri -> arg = "--eu" + v is ComponentName -> { + arg = "--ecn" + value = v.flattenToString() } - // Remove trailing comma - sb.deleteCharAt(sb.length - 1) - value = sb - } else if (v.javaClass.isArray) { - arg = if (v is IntArray) - "--eia" - else if (v is LongArray) - "--ela" - else if (v is FloatArray) - "--efa" - else if (v is Array<*> && v.isArrayOf()) - "--esa" - else - continue /* Unsupported */ + v is ArrayList<*> -> { + if (v.size <= 0) + /* Impossible to know the type due to type erasure */ + continue@loop - val sb = StringBuilder() - val len = RArray.getLength(v) - for (i in 0 until len) { - sb.append(RArray.get(v, i)!!.toString().replace(",", "\\,")) - sb.append(',') + arg = if (v[0] is Int) + "--eial" + else if (v[0] is Long) + "--elal" + else if (v[0] is Float) + "--efal" + else if (v[0] is String) + "--esal" + else + continue@loop /* Unsupported */ + + val sb = StringBuilder() + for (o in v) { + sb.append(o.toString().replace(",", "\\,")) + sb.append(',') + } + // Remove trailing comma + sb.deleteCharAt(sb.length - 1) + value = sb } - // Remove trailing comma - sb.deleteCharAt(sb.length - 1) - value = sb - } else - continue /* Unsupported */ + v.javaClass.isArray -> { + arg = if (v is IntArray) + "--eia" + else if (v is LongArray) + "--ela" + else if (v is FloatArray) + "--efa" + else if (v is Array<*> && v.isArrayOf()) + "--esa" + else + continue@loop /* Unsupported */ + + val sb = StringBuilder() + val len = RArray.getLength(v) + for (i in 0 until len) { + sb.append(RArray.get(v, i)!!.toString().replace(",", "\\,")) + sb.append(',') + } + // Remove trailing comma + sb.deleteCharAt(sb.length - 1) + value = sb + } + else -> continue@loop + } /* Unsupported */ args.add(arg) args.add(key) @@ -153,10 +151,12 @@ class RootUtils : Shell.Initializer() { companion object { + @JvmStatic fun rmAndLaunch(rm: String, component: ComponentName) { Shell.su("(rm_launch $rm ${component.flattenToString()})").exec() } + @JvmStatic fun reboot() { Shell.su("/system/bin/reboot ${if (Config.recovery) "recovery" else ""}").submit() } diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/ZipUtils.kt b/app/src/main/java/com/topjohnwu/magisk/utils/ZipUtils.kt index 80a90a13a..322750717 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/ZipUtils.kt +++ b/app/src/main/java/com/topjohnwu/magisk/utils/ZipUtils.kt @@ -9,16 +9,16 @@ import java.util.zip.ZipEntry import java.util.zip.ZipInputStream @Throws(IOException::class) -fun unzip(zip: File, folder: File, path: String = "", junkPath: Boolean = false) { - zip.inputStream().buffered().use { - unzip(it, folder, path, junkPath) +fun File.unzip(folder: File, path: String = "", junkPath: Boolean = false) { + inputStream().buffered().use { + it.unzip(folder, path, junkPath) } } @Throws(IOException::class) -fun unzip(zip: InputStream, folder: File, path: String, junkPath: Boolean) { +fun InputStream.unzip(folder: File, path: String, junkPath: Boolean) { try { - val zin = ZipInputStream(zip) + val zin = ZipInputStream(this) var entry: ZipEntry while (true) { entry = zin.nextEntry ?: break diff --git a/app/src/main/java/com/topjohnwu/magisk/view/dialogs/EnvFixDialog.java b/app/src/main/java/com/topjohnwu/magisk/view/dialogs/EnvFixDialog.java index aff566fb3..95e1364b6 100644 --- a/app/src/main/java/com/topjohnwu/magisk/view/dialogs/EnvFixDialog.java +++ b/app/src/main/java/com/topjohnwu/magisk/view/dialogs/EnvFixDialog.java @@ -4,8 +4,6 @@ import android.app.Activity; import android.app.ProgressDialog; import android.widget.Toast; -import androidx.annotation.NonNull; - import com.topjohnwu.magisk.R; import com.topjohnwu.magisk.tasks.MagiskInstaller; import com.topjohnwu.magisk.utils.RootUtils; @@ -14,6 +12,8 @@ import com.topjohnwu.superuser.Shell; import com.topjohnwu.superuser.internal.UiThreadHandler; import com.topjohnwu.superuser.io.SuFile; +import androidx.annotation.NonNull; + public class EnvFixDialog extends CustomAlertDialog { public EnvFixDialog(@NonNull Activity activity) { @@ -38,7 +38,7 @@ public class EnvFixDialog extends CustomAlertDialog { pd.dismiss(); Utils.toast(success ? R.string.reboot_delay_toast : R.string.setup_fail, Toast.LENGTH_LONG); if (success) - UiThreadHandler.handler.postDelayed(RootUtils.Companion::reboot, 5000); + UiThreadHandler.handler.postDelayed(RootUtils::reboot, 5000); } }.exec(); }); From 0167bd76f13d5e7cc793e74e397e02deb2082c4d Mon Sep 17 00:00:00 2001 From: Viktor De Pasquale Date: Sun, 5 May 2019 12:46:28 +0200 Subject: [PATCH 3/6] Removed unnecessary overriding of observable list and replaced it copy function within observable changed callback --- .../magisk/ui/flash/FlashViewModel.kt | 14 +--- .../java/com/topjohnwu/magisk/utils/XList.kt | 74 +++++++++++-------- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt index 968faeab4..99d72aa13 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt @@ -24,8 +24,7 @@ import com.topjohnwu.magisk.utils.* import com.topjohnwu.superuser.Shell import me.tatarka.bindingcollectionadapter2.ItemBinding import java.io.File -import java.util.Collections -import kotlin.collections.ArrayList +import java.util.* class FlashViewModel( action: String, @@ -44,17 +43,12 @@ class FlashViewModel( itemBinding.bindExtra(BR.viewModel, this@FlashViewModel) } - private val outItems = object : ObservableArrayList() { - override fun add(element: String?): Boolean { - if (element != null) - logItems.add(element) - return super.add(element) - } - } - private val logItems = Collections.synchronizedList(ArrayList()) + private val outItems = ObservableArrayList() + private val logItems = Collections.synchronizedList(mutableListOf()) init { outItems.sendUpdatesTo(items) { it.map { ConsoleRvItem(it) } } + outItems.copyNewInputInto(logItems) state = State.LOADING diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/XList.kt b/app/src/main/java/com/topjohnwu/magisk/utils/XList.kt index 26b5009fa..fd4ddc2e5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/XList.kt +++ b/app/src/main/java/com/topjohnwu/magisk/utils/XList.kt @@ -10,7 +10,7 @@ fun MutableList.update(newList: List) { addAll(newList) } -fun List.toShellCmd() : String { +fun List.toShellCmd(): String { val sb = StringBuilder() for (s in this) { if (s.contains(" ")) { @@ -27,37 +27,53 @@ fun List.toShellCmd() : String { fun ObservableList.sendUpdatesTo( target: DiffObservableList, mapper: (List) -> List -) { - addOnListChangedCallback(object : - ObservableList.OnListChangedCallback>() { - override fun onChanged(sender: ObservableList?) { - updateAsync(sender ?: return) - } +) = addOnListChangedCallback(object : + ObservableList.OnListChangedCallback>() { + override fun onChanged(sender: ObservableList?) { + updateAsync(sender ?: return) + } - override fun onItemRangeRemoved(sender: ObservableList?, p0: Int, p1: Int) { - updateAsync(sender ?: return) - } + override fun onItemRangeRemoved(sender: ObservableList?, p0: Int, p1: Int) { + updateAsync(sender ?: return) + } - override fun onItemRangeMoved(sender: ObservableList?, p0: Int, p1: Int, p2: Int) { - updateAsync(sender ?: return) - } + override fun onItemRangeMoved(sender: ObservableList?, p0: Int, p1: Int, p2: Int) { + updateAsync(sender ?: return) + } - override fun onItemRangeInserted(sender: ObservableList?, p0: Int, p1: Int) { - updateAsync(sender ?: return) - } + override fun onItemRangeInserted(sender: ObservableList?, p0: Int, p1: Int) { + updateAsync(sender ?: return) + } - override fun onItemRangeChanged(sender: ObservableList?, p0: Int, p1: Int) { - updateAsync(sender ?: return) - } + override fun onItemRangeChanged(sender: ObservableList?, p0: Int, p1: Int) { + updateAsync(sender ?: return) + } - private var updater: Disposable? = null + private var updater: Disposable? = null - private fun updateAsync(sender: List) { - updater?.dispose() - updater = sender.toSingle() - .map { mapper(it) } - .map { it to target.calculateDiff(it) } - .subscribeK { target.update(it.first, it.second) } - } - }) -} \ No newline at end of file + private fun updateAsync(sender: List) { + updater?.dispose() + updater = sender.toSingle() + .map { mapper(it) } + .map { it to target.calculateDiff(it) } + .subscribeK { target.update(it.first, it.second) } + } +}) + +fun ObservableList.copyNewInputInto( + target: MutableList +) = addOnListChangedCallback(object : ObservableList.OnListChangedCallback>() { + override fun onChanged(p0: ObservableList?) = Unit + override fun onItemRangeRemoved(p0: ObservableList?, p1: Int, p2: Int) = Unit + override fun onItemRangeMoved(p0: ObservableList?, p1: Int, p2: Int, p3: Int) = Unit + override fun onItemRangeChanged(p0: ObservableList?, p1: Int, p2: Int) = Unit + override fun onItemRangeInserted( + sender: ObservableList?, + positionStart: Int, + itemCount: Int + ) { + val positionEnd = positionStart + itemCount + val addedValues = sender?.slice(positionStart until positionEnd).orEmpty() + target.addAll(addedValues) + } +}) \ No newline at end of file From 61ebc335c49e88548e7fcd7061bbfac0046ba2be Mon Sep 17 00:00:00 2001 From: Alexander Pohl Date: Sun, 5 May 2019 20:39:38 +0200 Subject: [PATCH 4/6] Add hi6250 support not only hi3660 and kirin970,980 need this, also kirin 659 does --- native/jni/core/init.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/native/jni/core/init.cpp b/native/jni/core/init.cpp index 3f6adbcc6..e7f160a5b 100644 --- a/native/jni/core/init.cpp +++ b/native/jni/core/init.cpp @@ -268,7 +268,7 @@ void MagiskInit::load_kernel_info() { } else if (key == "enter_recovery") { enter_recovery = value[0] == '1'; } else if (key == "androidboot.hardware") { - kirin = strstr(value, "kirin") || strstr(value, "hi3660"); + kirin = strstr(value, "kirin") || strstr(value, "hi3660") || strstr(value, "hi6250"); } }); From ed7babcbf16626d27efedee52717e755fdea837f Mon Sep 17 00:00:00 2001 From: Andrea Cioccarelli <23010471+AndreaCioccarelli@users.noreply.github.com> Date: Fri, 3 May 2019 10:54:08 +0200 Subject: [PATCH 5/6] Translation fixes --- app/src/main/res/values-it/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 68a3fb53e..b3b769362 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -16,7 +16,7 @@ Canale di aggiornamento non valido Tocca per controllare SafetyNet Controllo stato SafetyNet… - Controllo SafetyNet OK + Controllo SafetyNet Superato Errore API SafetyNet La risposta non è valida. Magisk è aggiornato @@ -28,9 +28,9 @@ Ultima: %1$s Disinstalla Disinstalla Magisk - Tutti i moduli verranno disabilitati/rimossi. Il root verrà rimosso e i tuoi dati potrebbero venire criptati, nel caso non lo siano già. + Tutti i moduli verranno disabilitati/rimossi. Il root verrà rimosso e i tuoi dati potrebbero essere criptati, nel caso non lo siano già. Aggiorna - (Modalità solo Core abilitata) + (Modalità solo-core abilitata) (Nessuna informazione) From a9350f50c97467af580506965c3a1001ae984ac7 Mon Sep 17 00:00:00 2001 From: dark-basic Date: Thu, 2 May 2019 11:44:55 -0400 Subject: [PATCH 6/6] Update strings.xml New Lines Added. --- app/src/main/res/values-es/strings.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 35a812904..b572355e8 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -99,14 +99,16 @@ DTBO fue parchado! Magisk Manager ha parcheado dtbo.img, por favor reinicia - Flasheando + Flasheando… + ¡Hecho! + Ha fallado Ocultando Magisk Manager… La Ocultación de Magisk Manager ha fallado… No se encontró ninguna aplicación para abrir el enlace… - Advertencia + Advertencia Desinstalación completa Restaurar imágenes - Restaurando … + Restaurando … ¡Restauración Terminada! ¡El respaldo de la imagen boot Stock no existe! Descargar Código Propietario