diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt index 823f8941..9c1ce554 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt @@ -143,7 +143,7 @@ fun installModule( } @Parcelize -sealed class LkmSelection: Parcelable { +sealed class LkmSelection : Parcelable { data class LkmUri(val uri: Uri) : LkmSelection() data class KmiString(val value: String) : LkmSelection() data object KmiNone : LkmSelection() @@ -340,7 +340,9 @@ fun getAppProfileTemplate(id: String): String { fun setAppProfileTemplate(id: String, template: String): Boolean { val shell = getRootShell() - return shell.newJob().add("${getKsuDaemonPath()} profile set-template '${id}' '${template}'") + val escapedTemplate = template.replace("\"", "\\\"") + val cmd = """${getKsuDaemonPath()} profile set-template "$id" "$escapedTemplate'"""" + return shell.newJob().add(cmd) .to(ArrayList(), null).exec().isSuccess } diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/TemplateViewModel.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/TemplateViewModel.kt index c5564a8f..f7109a15 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/TemplateViewModel.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/TemplateViewModel.kt @@ -22,6 +22,8 @@ import org.json.JSONArray import org.json.JSONObject import java.text.Collator import java.util.Locale +import java.util.concurrent.TimeUnit + /** * @author weishu @@ -136,7 +138,13 @@ class TemplateViewModel : ViewModel() { private fun fetchRemoteTemplates() { runCatching { - OkHttpClient().newCall( + val client: OkHttpClient = OkHttpClient.Builder() + .connectTimeout(5, TimeUnit.SECONDS) + .writeTimeout(5, TimeUnit.SECONDS) + .readTimeout(10, TimeUnit.SECONDS) + .build() + + client.newCall( Request.Builder().url(TEMPLATE_INDEX_URL).build() ).execute().use { response -> if (!response.isSuccessful) { @@ -146,7 +154,8 @@ private fun fetchRemoteTemplates() { Log.i(TAG, "fetchRemoteTemplates: $remoteTemplateIds") 0.until(remoteTemplateIds.length()).forEach { i -> val id = remoteTemplateIds.getString(i) - val templateJson = OkHttpClient().newCall( + Log.i(TAG, "fetch template: $id") + val templateJson = client.newCall( Request.Builder().url(TEMPLATE_URL.format(id)).build() ).runCatching { execute().use { response ->