From a03ad51622d338d1c116aa8cae3c0effb1b7bcf2 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 28 Oct 2021 19:10:04 +0200 Subject: tunnel: remove kernel module downloader Nathan Chance dropped the ball repeatedly and never maintained this in a consistent way that anybody could use. With Android 12 out now, just drop it all together. A bummer, but I don't see much of a choice. Signed-off-by: Jason A. Donenfeld --- .../main/java/com/wireguard/android/Application.kt | 16 +--- .../wireguard/android/activity/SettingsActivity.kt | 20 +---- .../preference/KernelModuleDisablerPreference.kt | 88 ---------------------- .../preference/KernelModuleEnablerPreference.kt | 88 ++++++++++++++++++++++ .../preference/ModuleDownloaderPreference.kt | 70 ----------------- .../java/com/wireguard/android/util/UserKnobs.kt | 14 ++-- ui/src/main/res/values-ca-rES/strings.xml | 6 +- ui/src/main/res/values-cs-rCZ/strings.xml | 6 +- ui/src/main/res/values-de/strings.xml | 8 +- ui/src/main/res/values-es-rES/strings.xml | 8 +- ui/src/main/res/values-fa-rIR/strings.xml | 8 +- ui/src/main/res/values-fr/strings.xml | 8 +- ui/src/main/res/values-hi-rIN/strings.xml | 8 +- ui/src/main/res/values-hi/strings.xml | 8 +- ui/src/main/res/values-in/strings.xml | 8 +- ui/src/main/res/values-it/strings.xml | 8 +- ui/src/main/res/values-ja/strings.xml | 8 +- ui/src/main/res/values-ko-rKR/strings.xml | 8 +- ui/src/main/res/values-no-rNO/strings.xml | 8 +- ui/src/main/res/values-pa-rIN/strings.xml | 8 +- ui/src/main/res/values-pl-rPL/strings.xml | 8 +- ui/src/main/res/values-pt-rPT/strings.xml | 8 +- ui/src/main/res/values-ro-rRO/strings.xml | 8 +- ui/src/main/res/values-ru/strings.xml | 8 +- ui/src/main/res/values-sk-rSK/strings.xml | 2 +- ui/src/main/res/values-sl/strings.xml | 8 +- ui/src/main/res/values-sv-rSE/strings.xml | 8 +- ui/src/main/res/values-tr-rTR/strings.xml | 8 +- ui/src/main/res/values-uk-rUA/strings.xml | 8 +- ui/src/main/res/values-zh-rCN/strings.xml | 8 +- ui/src/main/res/values-zh-rTW/strings.xml | 4 +- ui/src/main/res/values/strings.xml | 8 +- ui/src/main/res/xml/preferences.xml | 3 +- 33 files changed, 198 insertions(+), 295 deletions(-) delete mode 100644 ui/src/main/java/com/wireguard/android/preference/KernelModuleDisablerPreference.kt create mode 100644 ui/src/main/java/com/wireguard/android/preference/KernelModuleEnablerPreference.kt delete mode 100644 ui/src/main/java/com/wireguard/android/preference/ModuleDownloaderPreference.kt (limited to 'ui') diff --git a/ui/src/main/java/com/wireguard/android/Application.kt b/ui/src/main/java/com/wireguard/android/Application.kt index 13d372c6..60b3d141 100644 --- a/ui/src/main/java/com/wireguard/android/Application.kt +++ b/ui/src/main/java/com/wireguard/android/Application.kt @@ -21,7 +21,6 @@ import com.wireguard.android.backend.GoBackend import com.wireguard.android.backend.WgQuickBackend import com.wireguard.android.configStore.FileConfigStore import com.wireguard.android.model.TunnelManager -import com.wireguard.android.util.ModuleLoader import com.wireguard.android.util.RootShell import com.wireguard.android.util.ToolsInstaller import com.wireguard.android.util.UserKnobs @@ -42,7 +41,6 @@ class Application : android.app.Application() { private val futureBackend = CompletableDeferred() private val coroutineScope = CoroutineScope(Job() + Dispatchers.Main.immediate) private var backend: Backend? = null - private lateinit var moduleLoader: ModuleLoader private lateinit var rootShell: RootShell private lateinit var preferencesDataStore: DataStore private lateinit var toolsInstaller: ToolsInstaller @@ -67,15 +65,7 @@ class Application : android.app.Application() { private suspend fun determineBackend(): Backend { var backend: Backend? = null var didStartRootShell = false - if (!ModuleLoader.isModuleLoaded() && moduleLoader.moduleMightExist()) { - try { - rootShell.start() - didStartRootShell = true - moduleLoader.loadModule() - } catch (ignored: Exception) { - } - } - if (!UserKnobs.disableKernelModule.first() && ModuleLoader.isModuleLoaded()) { + if (UserKnobs.enableKernelModule.first() && WgQuickBackend.hasKernelSupport()) { try { if (!didStartRootShell) rootShell.start() @@ -100,7 +90,6 @@ class Application : android.app.Application() { super.onCreate() rootShell = RootShell(applicationContext) toolsInstaller = ToolsInstaller(applicationContext, rootShell) - moduleLoader = ModuleLoader(applicationContext, rootShell, USER_AGENT) preferencesDataStore = PreferenceDataStoreFactory.create { applicationContext.preferencesDataStoreFile("settings") } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { coroutineScope.launch { @@ -140,9 +129,6 @@ class Application : android.app.Application() { @JvmStatic suspend fun getBackend() = get().futureBackend.await() - @JvmStatic - fun getModuleLoader() = get().moduleLoader - @JvmStatic fun getRootShell() = get().rootShell diff --git a/ui/src/main/java/com/wireguard/android/activity/SettingsActivity.kt b/ui/src/main/java/com/wireguard/android/activity/SettingsActivity.kt index 06091cae..4196797c 100644 --- a/ui/src/main/java/com/wireguard/android/activity/SettingsActivity.kt +++ b/ui/src/main/java/com/wireguard/android/activity/SettingsActivity.kt @@ -17,7 +17,6 @@ import com.wireguard.android.R import com.wireguard.android.backend.WgQuickBackend import com.wireguard.android.preference.PreferencesPreferenceDataStore import com.wireguard.android.util.AdminKnobs -import com.wireguard.android.util.ModuleLoader import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -79,30 +78,19 @@ class SettingsActivity : ThemeChangeAwareActivity() { startActivity(Intent(requireContext(), LogViewerActivity::class.java)) true } - val moduleInstaller = preferenceManager.findPreference("module_downloader") - val kernelModuleDisabler = preferenceManager.findPreference("kernel_module_disabler") - moduleInstaller?.isVisible = false - if (ModuleLoader.isModuleLoaded()) { - moduleInstaller?.parent?.removePreference(moduleInstaller) + val kernelModuleEnabler = preferenceManager.findPreference("kernel_module_enabler") + if (WgQuickBackend.hasKernelSupport()) { lifecycleScope.launch { if (Application.getBackend() !is WgQuickBackend) { try { withContext(Dispatchers.IO) { Application.getRootShell().start() } } catch (_: Throwable) { - kernelModuleDisabler?.parent?.removePreference(kernelModuleDisabler) + kernelModuleEnabler?.parent?.removePreference(kernelModuleEnabler) } } } } else { - kernelModuleDisabler?.parent?.removePreference(kernelModuleDisabler) - lifecycleScope.launch { - try { - withContext(Dispatchers.IO) { Application.getRootShell().start() } - moduleInstaller?.isVisible = true - } catch (_: Throwable) { - moduleInstaller?.parent?.removePreference(moduleInstaller) - } - } + kernelModuleEnabler?.parent?.removePreference(kernelModuleEnabler) } } } diff --git a/ui/src/main/java/com/wireguard/android/preference/KernelModuleDisablerPreference.kt b/ui/src/main/java/com/wireguard/android/preference/KernelModuleDisablerPreference.kt deleted file mode 100644 index 2b1e8e4e..00000000 --- a/ui/src/main/java/com/wireguard/android/preference/KernelModuleDisablerPreference.kt +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -package com.wireguard.android.preference - -import android.content.Context -import android.content.Intent -import android.util.AttributeSet -import android.util.Log -import androidx.lifecycle.lifecycleScope -import androidx.preference.Preference -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.activity.SettingsActivity -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.backend.WgQuickBackend -import com.wireguard.android.util.UserKnobs -import com.wireguard.android.util.activity -import com.wireguard.android.util.lifecycleScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.async -import kotlinx.coroutines.awaitAll -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import kotlin.system.exitProcess - -class KernelModuleDisablerPreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) { - private var state = State.UNKNOWN - - init { - isVisible = false - lifecycleScope.launch { - setState(if (Application.getBackend() is WgQuickBackend) State.ENABLED else State.DISABLED) - } - } - - override fun getSummary() = if (state == State.UNKNOWN) "" else context.getString(state.summaryResourceId) - - override fun getTitle() = if (state == State.UNKNOWN) "" else context.getString(state.titleResourceId) - - override fun onClick() { - activity.lifecycleScope.launch { - if (state == State.DISABLED) { - setState(State.ENABLING) - UserKnobs.setDisableKernelModule(false) - } else if (state == State.ENABLED) { - setState(State.DISABLING) - UserKnobs.setDisableKernelModule(true) - } - val observableTunnels = Application.getTunnelManager().getTunnels() - val downings = observableTunnels.map { async(SupervisorJob()) { it.setStateAsync(Tunnel.State.DOWN) } } - try { - downings.awaitAll() - withContext(Dispatchers.IO) { - val restartIntent = Intent(context, SettingsActivity::class.java) - restartIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - Application.get().startActivity(restartIntent) - exitProcess(0) - } - } catch (e: Throwable) { - Log.e(TAG, Log.getStackTraceString(e)) - } - } - } - - private fun setState(state: State) { - if (this.state == state) return - this.state = state - if (isEnabled != state.shouldEnableView) isEnabled = state.shouldEnableView - if (isVisible != state.visible) isVisible = state.visible - notifyChanged() - } - - private enum class State(val titleResourceId: Int, val summaryResourceId: Int, val shouldEnableView: Boolean, val visible: Boolean) { - UNKNOWN(0, 0, false, false), - ENABLED(R.string.module_disabler_enabled_title, R.string.module_disabler_enabled_summary, true, true), - DISABLED(R.string.module_disabler_disabled_title, R.string.module_disabler_disabled_summary, true, true), - ENABLING(R.string.module_disabler_disabled_title, R.string.success_application_will_restart, false, true), - DISABLING(R.string.module_disabler_enabled_title, R.string.success_application_will_restart, false, true); - } - - companion object { - private const val TAG = "WireGuard/KernelModuleDisablerPreference" - } -} diff --git a/ui/src/main/java/com/wireguard/android/preference/KernelModuleEnablerPreference.kt b/ui/src/main/java/com/wireguard/android/preference/KernelModuleEnablerPreference.kt new file mode 100644 index 00000000..46f699a5 --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/preference/KernelModuleEnablerPreference.kt @@ -0,0 +1,88 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +package com.wireguard.android.preference + +import android.content.Context +import android.content.Intent +import android.util.AttributeSet +import android.util.Log +import androidx.lifecycle.lifecycleScope +import androidx.preference.Preference +import com.wireguard.android.Application +import com.wireguard.android.R +import com.wireguard.android.activity.SettingsActivity +import com.wireguard.android.backend.Tunnel +import com.wireguard.android.backend.WgQuickBackend +import com.wireguard.android.util.UserKnobs +import com.wireguard.android.util.activity +import com.wireguard.android.util.lifecycleScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import kotlin.system.exitProcess + +class KernelModuleEnablerPreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) { + private var state = State.UNKNOWN + + init { + isVisible = false + lifecycleScope.launch { + setState(if (Application.getBackend() is WgQuickBackend) State.ENABLED else State.DISABLED) + } + } + + override fun getSummary() = if (state == State.UNKNOWN) "" else context.getString(state.summaryResourceId) + + override fun getTitle() = if (state == State.UNKNOWN) "" else context.getString(state.titleResourceId) + + override fun onClick() { + activity.lifecycleScope.launch { + if (state == State.DISABLED) { + setState(State.ENABLING) + UserKnobs.setEnableKernelModule(true) + } else if (state == State.ENABLED) { + setState(State.DISABLING) + UserKnobs.setEnableKernelModule(false) + } + val observableTunnels = Application.getTunnelManager().getTunnels() + val downings = observableTunnels.map { async(SupervisorJob()) { it.setStateAsync(Tunnel.State.DOWN) } } + try { + downings.awaitAll() + withContext(Dispatchers.IO) { + val restartIntent = Intent(context, SettingsActivity::class.java) + restartIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + Application.get().startActivity(restartIntent) + exitProcess(0) + } + } catch (e: Throwable) { + Log.e(TAG, Log.getStackTraceString(e)) + } + } + } + + private fun setState(state: State) { + if (this.state == state) return + this.state = state + if (isEnabled != state.shouldEnableView) isEnabled = state.shouldEnableView + if (isVisible != state.visible) isVisible = state.visible + notifyChanged() + } + + private enum class State(val titleResourceId: Int, val summaryResourceId: Int, val shouldEnableView: Boolean, val visible: Boolean) { + UNKNOWN(0, 0, false, false), + ENABLED(R.string.module_enabler_enabled_title, R.string.module_enabler_enabled_summary, true, true), + DISABLED(R.string.module_enabler_disabled_title, R.string.module_enabler_disabled_summary, true, true), + ENABLING(R.string.module_enabler_disabled_title, R.string.success_application_will_restart, false, true), + DISABLING(R.string.module_enabler_enabled_title, R.string.success_application_will_restart, false, true); + } + + companion object { + private const val TAG = "WireGuard/KernelModuleEnablerPreference" + } +} diff --git a/ui/src/main/java/com/wireguard/android/preference/ModuleDownloaderPreference.kt b/ui/src/main/java/com/wireguard/android/preference/ModuleDownloaderPreference.kt deleted file mode 100644 index 5ba2c4f0..00000000 --- a/ui/src/main/java/com/wireguard/android/preference/ModuleDownloaderPreference.kt +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright © 2019 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -package com.wireguard.android.preference - -import android.content.Context -import android.content.Intent -import android.system.OsConstants -import android.util.AttributeSet -import android.widget.Toast -import androidx.preference.Preference -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.activity.SettingsActivity -import com.wireguard.android.util.ErrorMessages -import com.wireguard.android.util.UserKnobs -import com.wireguard.android.util.lifecycleScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import kotlin.system.exitProcess - -class ModuleDownloaderPreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) { - private var state = State.INITIAL - override fun getSummary() = context.getString(state.messageResourceId) - - override fun getTitle() = context.getString(R.string.module_installer_title) - - override fun onClick() { - setState(State.WORKING) - lifecycleScope.launch { - try { - when (withContext(Dispatchers.IO) { Application.getModuleLoader().download() }) { - OsConstants.ENOENT -> setState(State.NOTFOUND) - OsConstants.EXIT_SUCCESS -> { - setState(State.SUCCESS) - UserKnobs.setDisableKernelModule(null) - withContext(Dispatchers.IO) { - val restartIntent = Intent(context, SettingsActivity::class.java) - restartIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - Application.get().startActivity(restartIntent) - exitProcess(0) - } - } - else -> setState(State.FAILURE) - } - } catch (e: Throwable) { - setState(State.FAILURE) - Toast.makeText(context, ErrorMessages[e], Toast.LENGTH_LONG).show() - } - } - } - - private fun setState(state: State) { - if (this.state == state) return - this.state = state - if (isEnabled != state.shouldEnableView) isEnabled = state.shouldEnableView - notifyChanged() - } - - private enum class State(val messageResourceId: Int, val shouldEnableView: Boolean) { - INITIAL(R.string.module_installer_initial, true), - FAILURE(R.string.module_installer_error, true), - WORKING(R.string.module_installer_working, false), - SUCCESS(R.string.success_application_will_restart, false), - NOTFOUND(R.string.module_installer_not_found, false); - } -} diff --git a/ui/src/main/java/com/wireguard/android/util/UserKnobs.kt b/ui/src/main/java/com/wireguard/android/util/UserKnobs.kt index a983bf5a..50e473ce 100644 --- a/ui/src/main/java/com/wireguard/android/util/UserKnobs.kt +++ b/ui/src/main/java/com/wireguard/android/util/UserKnobs.kt @@ -14,18 +14,18 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map object UserKnobs { - private val DISABLE_KERNEL_MODULE = booleanPreferencesKey("disable_kernel_module") - val disableKernelModule: Flow + private val ENABLE_KERNEL_MODULE = booleanPreferencesKey("enable_kernel_module") + val enableKernelModule: Flow get() = Application.getPreferencesDataStore().data.map { - it[DISABLE_KERNEL_MODULE] ?: false + it[ENABLE_KERNEL_MODULE] ?: false } - suspend fun setDisableKernelModule(disable: Boolean?) { + suspend fun setEnableKernelModule(enable: Boolean?) { Application.getPreferencesDataStore().edit { - if (disable == null) - it.remove(DISABLE_KERNEL_MODULE) + if (enable == null) + it.remove(ENABLE_KERNEL_MODULE) else - it[DISABLE_KERNEL_MODULE] = disable + it[ENABLE_KERNEL_MODULE] = enable } } diff --git a/ui/src/main/res/values-ca-rES/strings.xml b/ui/src/main/res/values-ca-rES/strings.xml index 7db86fd0..06ec2c50 100644 --- a/ui/src/main/res/values-ca-rES/strings.xml +++ b/ui/src/main/res/values-ca-rES/strings.xml @@ -142,9 +142,9 @@ Mostra el registre d\'aplicació Registre No es pot executar logcat: - El mòdul experimental del kernel pot millorar el rendiment - Activa el backend del mòdul del kernel - Desactiva el backend del mòdul del kernel + El mòdul experimental del kernel pot millorar el rendiment + Activa el backend del mòdul del kernel + Desactiva el backend del mòdul del kernel Alguna cosa ha anat malament. Si us plau, prova de nou El vostre dispositiu no té mòduls disponibles Descàrega i instala el mòdul kernel diff --git a/ui/src/main/res/values-cs-rCZ/strings.xml b/ui/src/main/res/values-cs-rCZ/strings.xml index a52e0a9f..3b50d711 100644 --- a/ui/src/main/res/values-cs-rCZ/strings.xml +++ b/ui/src/main/res/values-cs-rCZ/strings.xml @@ -119,9 +119,9 @@ Zobrazit log aplikace Log Nelze spustit logcat: - Experimentální kernel modul může zlepšit výkon - Povolit backend kernel modulu - Vypnout backend kernel modulu + Experimentální kernel modul může zlepšit výkon + Povolit backend kernel modulu + Vypnout backend kernel modulu Něco se pokazilo. Zkuste to prosím znovu Experimentální kernel modul může zlepšit výkon Pro toto zařízení nejsou dostupné žádné moduly diff --git a/ui/src/main/res/values-de/strings.xml b/ui/src/main/res/values-de/strings.xml index 57edd1da..db012dbf 100644 --- a/ui/src/main/res/values-de/strings.xml +++ b/ui/src/main/res/values-de/strings.xml @@ -142,10 +142,10 @@ Anwendungs-Protokoll anzeigen Protokoll Konnte logcat nicht ausführen: - Das experimentelle Kernelmodul kann die Leistung verbessern - Kernelmodul-Backend aktivieren - Das langsamere Userspace-Backend kann die Stabilität verbessern - Kernelmodul-Backend deaktivieren + Das experimentelle Kernelmodul kann die Leistung verbessern + Kernelmodul-Backend aktivieren + Das langsamere Userspace-Backend kann die Stabilität verbessern + Kernelmodul-Backend deaktivieren Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut Das experimentelle Kernelmodul kann die Leistung verbessern Für Ihr Gerät sind keine Module verfügbar diff --git a/ui/src/main/res/values-es-rES/strings.xml b/ui/src/main/res/values-es-rES/strings.xml index 478a5a7d..da5b89fb 100644 --- a/ui/src/main/res/values-es-rES/strings.xml +++ b/ui/src/main/res/values-es-rES/strings.xml @@ -142,10 +142,10 @@ Ver registro de aplicación Registro No se puede ejecutar logcat: - El módulo experimental del kernel puede mejorar el rendimiento - Habilitar backend del módulo del kernel - El backend más lento del espacio de usuario puede mejorar la estabilidad - Desactivar backend del módulo del kernel + El módulo experimental del kernel puede mejorar el rendimiento + Habilitar backend del módulo del kernel + El backend más lento del espacio de usuario puede mejorar la estabilidad + Desactivar backend del módulo del kernel Ocurrió un error. Intente de nuevo El módulo experimental del kernel puede mejorar el rendimiento No hay módulos disponibles para tu dispositivo diff --git a/ui/src/main/res/values-fa-rIR/strings.xml b/ui/src/main/res/values-fa-rIR/strings.xml index 3f4df028..cc3df4de 100644 --- a/ui/src/main/res/values-fa-rIR/strings.xml +++ b/ui/src/main/res/values-fa-rIR/strings.xml @@ -142,10 +142,10 @@ نمایش گزارش رویداد برنامه گزارش رویداد نمی‌توان logcat را اجرا کرد: - ماژول آزمایشی‌ِ کرنل می تواند کارایی را افزایش دهد - فعال‌سازی ماژول کرنل ِبک اند - فضای کاربری کند ممکن است پایداری را بهبود ببخشد - غیرفعال‌سازی پس‌زمینه واحد هسته + ماژول آزمایشی‌ِ کرنل می تواند کارایی را افزایش دهد + فعال‌سازی ماژول کرنل ِبک اند + فضای کاربری کند ممکن است پایداری را بهبود ببخشد + غیرفعال‌سازی پس‌زمینه واحد هسته مشکلی پیش آمد. لطفا دوباره تلاش کنید ماژول آزمایشی‌ِ کرنل می تواند کارایی را افزایش دهد هیچ واحدی برای دستگاه شما در دسترس نیست diff --git a/ui/src/main/res/values-fr/strings.xml b/ui/src/main/res/values-fr/strings.xml index 17abc8ab..33f413b1 100644 --- a/ui/src/main/res/values-fr/strings.xml +++ b/ui/src/main/res/values-fr/strings.xml @@ -142,10 +142,10 @@ Afficher le journal de l\'application Journal Impossible d\'exécuter logcat : - Le module expérimental du noyau peut améliorer les performances - Activer le backend du module du noyau - Le backend plus lent de l\'espace utilisateur peut améliorer la stabilité - Désactiver le backend du module du noyau + Le module expérimental du noyau peut améliorer les performances + Activer le backend du module du noyau + Le backend plus lent de l\'espace utilisateur peut améliorer la stabilité + Désactiver le backend du module du noyau Une erreur est survenue. Veuillez réessayer Le module expérimental du noyau peut améliorer les performances Aucun module n\'est disponible pour votre appareil diff --git a/ui/src/main/res/values-hi-rIN/strings.xml b/ui/src/main/res/values-hi-rIN/strings.xml index e16d69ea..b614b475 100644 --- a/ui/src/main/res/values-hi-rIN/strings.xml +++ b/ui/src/main/res/values-hi-rIN/strings.xml @@ -132,10 +132,10 @@ एप्लिकेशन लॉग देखें लॉग लॉगकैट चलाने में असमर्थ: - प्रयोगात्मक कर्नेल मॉड्यूल प्रदर्शन में सुधार कर सकता है - कर्नेल मॉड्यूल बैकएंड सक्षम करें - धीमे यूजरस्पेस बैकएंड में स्थिरता में सुधार हो सकता है - कर्नेल मॉड्यूल बैकएंड को अक्षम करें + प्रयोगात्मक कर्नेल मॉड्यूल प्रदर्शन में सुधार कर सकता है + कर्नेल मॉड्यूल बैकएंड सक्षम करें + धीमे यूजरस्पेस बैकएंड में स्थिरता में सुधार हो सकता है + कर्नेल मॉड्यूल बैकएंड को अक्षम करें कुछ गलत हो गया। कृपया पुन: प्रयास करें प्रयोगात्मक कर्नेल मॉड्यूल प्रदर्शन में सुधार कर सकता है आपके डिवाइस के लिए कोई मॉड्यूल उपलब्ध नहीं हैं diff --git a/ui/src/main/res/values-hi/strings.xml b/ui/src/main/res/values-hi/strings.xml index d0899dff..1d354ede 100644 --- a/ui/src/main/res/values-hi/strings.xml +++ b/ui/src/main/res/values-hi/strings.xml @@ -96,10 +96,10 @@ कर्नेल मॉड्यूल डाउनलोड और इंस्टॉल करें डाउनलोड कर रहा है और स्थापित कर रहा है… कुछ गलत हो गया। कृपया पुन: प्रयास करें - कर्नेल मॉड्यूल बैकएंड सक्षम करें - प्रयोगात्मक कर्नेल मॉड्यूल प्रदर्शन में सुधार कर सकता है - कर्नेल मॉड्यूल बैकएंड को अक्षम करें - धीमे यूजरस्पेस बैकएंड में स्थिरता में सुधार हो सकता है + कर्नेल मॉड्यूल बैकएंड सक्षम करें + प्रयोगात्मक कर्नेल मॉड्यूल प्रदर्शन में सुधार कर सकता है + कर्नेल मॉड्यूल बैकएंड को अक्षम करें + धीमे यूजरस्पेस बैकएंड में स्थिरता में सुधार हो सकता है MTU एक साथ कई टनलस को अनुमति दें एक साथ कई टनलस को चालू किया जा सकता है diff --git a/ui/src/main/res/values-in/strings.xml b/ui/src/main/res/values-in/strings.xml index e8e664de..7852ffd6 100644 --- a/ui/src/main/res/values-in/strings.xml +++ b/ui/src/main/res/values-in/strings.xml @@ -129,10 +129,10 @@ Lihat log aplikasi Log Tidak bisa menjalankan logcat: - Modul kernel eksperimental dapat meningkatkan kinerja - Aktifkan backend modul kernel - Backend userspace yang lebih lambat dapat meningkatkan stabilitas - Nonaktifkan backend modul kernel + Modul kernel eksperimental dapat meningkatkan kinerja + Aktifkan backend modul kernel + Backend userspace yang lebih lambat dapat meningkatkan stabilitas + Nonaktifkan backend modul kernel Ada yang salah. Silakan coba lagi Modul kernel eksperimental dapat meningkatkan kinerja Tidak tersedia modul untuk perangkat anda diff --git a/ui/src/main/res/values-it/strings.xml b/ui/src/main/res/values-it/strings.xml index 7b9a2d3f..519d4b52 100644 --- a/ui/src/main/res/values-it/strings.xml +++ b/ui/src/main/res/values-it/strings.xml @@ -142,10 +142,10 @@ Visualizza log dell\'applicazione Log Impossibile eseguire logcat: - Il modulo sperimentale del kernel può migliorare le prestazioni - Abilita il backend del modulo del kernel - Il backend in userspace più lento potrebbe migliorare la stabilità - Disabilita il backend del modulo del kernel + Il modulo sperimentale del kernel può migliorare le prestazioni + Abilita il backend del modulo del kernel + Il backend in userspace più lento potrebbe migliorare la stabilità + Disabilita il backend del modulo del kernel Qualcosa non ha funzionato. Riprova Il modulo sperimentale del kernel può migliorare le prestazioni Nessun modulo disponibile per il tuo dispositivo diff --git a/ui/src/main/res/values-ja/strings.xml b/ui/src/main/res/values-ja/strings.xml index 7aa5531a..e10a05a8 100644 --- a/ui/src/main/res/values-ja/strings.xml +++ b/ui/src/main/res/values-ja/strings.xml @@ -129,10 +129,10 @@ アプリケーションログを表示 ログ logcat を実行できません: - カーネルモジュールは実験的ですがパフォーマンスが向上する可能性があります。 - カーネルモジュールバックエンドの有効化 - ユーザースペースバックエンドは低速ですが安定しています。 - カーネルモジュールバックエンドの無効化 + カーネルモジュールは実験的ですがパフォーマンスが向上する可能性があります。 + カーネルモジュールバックエンドの有効化 + ユーザースペースバックエンドは低速ですが安定しています。 + カーネルモジュールバックエンドの無効化 失敗しました. 再度実行してみてください 実験的カーネルモジュールはパフォーマンスが向上する場合があります このデバイス用のモジュールは利用できません diff --git a/ui/src/main/res/values-ko-rKR/strings.xml b/ui/src/main/res/values-ko-rKR/strings.xml index a2890b26..c975945a 100644 --- a/ui/src/main/res/values-ko-rKR/strings.xml +++ b/ui/src/main/res/values-ko-rKR/strings.xml @@ -129,10 +129,10 @@ 앱 로그 보기 로그 logcat을 실행할 수 없음: - 아직 실험중이 커널 모듈을 사용하면 성능이 향상될 수 있음 - 커널 모듈 백엔드 활성화하기 - 사용자공간 백엔드를 사용하면 느리지만 안정성이 좋아짐 - 커널 모듈 백엔드를 비활성화하기 + 아직 실험중이 커널 모듈을 사용하면 성능이 향상될 수 있음 + 커널 모듈 백엔드 활성화하기 + 사용자공간 백엔드를 사용하면 느리지만 안정성이 좋아짐 + 커널 모듈 백엔드를 비활성화하기 문제가 발생했습니다. 다시 시도하십시오 아직 실험중이 커널 모듈을 사용하면 성능이 향상될 수 있음 이 기기에서 사용가능한 모듈이 없음 diff --git a/ui/src/main/res/values-no-rNO/strings.xml b/ui/src/main/res/values-no-rNO/strings.xml index f9c2c979..b0616f4e 100644 --- a/ui/src/main/res/values-no-rNO/strings.xml +++ b/ui/src/main/res/values-no-rNO/strings.xml @@ -142,10 +142,10 @@ Vis programlogg Logg Kan ikke kjøre logcat: - Den eksperimentelle kjernemodulen kan gi bedre ytelse - Aktiver backend for kjerne-modul - Backend i userspace er litt tregere men kan gi bedre stabilitet - Deaktiver backend for kjerne-modul + Den eksperimentelle kjernemodulen kan gi bedre ytelse + Aktiver backend for kjerne-modul + Backend i userspace er litt tregere men kan gi bedre stabilitet + Deaktiver backend for kjerne-modul Noe gikk galt. Vennligst prøv igjen Den eksperimentelle kjernemodulen kan gi bedre ytelse Ingen moduler er tilgjengelige for din enhet diff --git a/ui/src/main/res/values-pa-rIN/strings.xml b/ui/src/main/res/values-pa-rIN/strings.xml index ed7e96ba..1d7ac096 100644 --- a/ui/src/main/res/values-pa-rIN/strings.xml +++ b/ui/src/main/res/values-pa-rIN/strings.xml @@ -142,10 +142,10 @@ ਐਪਲੀਕੇਸ਼ਨ ਲਾਗ ਵੇਖੋ ਲਾਗ logcat ਚਲਾਉਣ ਲਈ ਅਸਮਰੱਥ: - ਤਜਰਬੇ ਅਧੀਨ ਕਰਨਲ ਮੋਡੀਊਲ ਕਾਰਗੁਜ਼ਾਰੀ ਸੁਧਾਰ ਸਕਦਾ ਹੈ - ਕਰਨਲ ਮੋਡੀਊਲ ਬੈਕਐਂਡ ਸਮਰੱਥ ਕਰੋ - ਹੌਲੀ ਵਰਤੋਂਕਾਰ-ਸਪੇਸ ਬੈਂਕਡ ਸਥਿਰਤਾ ਸੁਧਾਰ ਕਰ ਸਕਦਾ ਹੈ - ਕਰਨਲ ਮੋਡੀਊਲ ਬੈਕਐਂਡ ਅਸਮਰੱਥ ਕਰੋ + ਤਜਰਬੇ ਅਧੀਨ ਕਰਨਲ ਮੋਡੀਊਲ ਕਾਰਗੁਜ਼ਾਰੀ ਸੁਧਾਰ ਸਕਦਾ ਹੈ + ਕਰਨਲ ਮੋਡੀਊਲ ਬੈਕਐਂਡ ਸਮਰੱਥ ਕਰੋ + ਹੌਲੀ ਵਰਤੋਂਕਾਰ-ਸਪੇਸ ਬੈਂਕਡ ਸਥਿਰਤਾ ਸੁਧਾਰ ਕਰ ਸਕਦਾ ਹੈ + ਕਰਨਲ ਮੋਡੀਊਲ ਬੈਕਐਂਡ ਅਸਮਰੱਥ ਕਰੋ ਕੁਝ ਗਲਤ ਵਾਪਰ ਗਿਆ। ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਤਜਰਬੇ ਅਧੀਨ ਕਰਨਲ ਮੋਡੀਊਲ ਕਾਰਗੁਜ਼ਾਰੀ ਸੁਧਾਰ ਸਕਦਾ ਹੈ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਲਈ ਕੋਈ ਮੋਡੀਊਲ ਮੌਜੂਦ ਨਹੀਂ ਹਨ diff --git a/ui/src/main/res/values-pl-rPL/strings.xml b/ui/src/main/res/values-pl-rPL/strings.xml index b739035e..119bdc74 100644 --- a/ui/src/main/res/values-pl-rPL/strings.xml +++ b/ui/src/main/res/values-pl-rPL/strings.xml @@ -168,10 +168,10 @@ Wyświetl log aplikacji Log Nie można uruchomić narzędzia logcat: - Eksperymentalny moduł jądra może poprawić wydajność - Włącz moduł jądra - Wolniejsza implementacja w przestrzeni użytkownika może poprawić stabilność - Wyłącz moduł jądra + Eksperymentalny moduł jądra może poprawić wydajność + Włącz moduł jądra + Wolniejsza implementacja w przestrzeni użytkownika może poprawić stabilność + Wyłącz moduł jądra Coś poszło nie tak. Proszę spróbować ponownie Eksperymentalny moduł jądra może poprawić wydajność Brak dostępnych modułów dla tego urządzenia diff --git a/ui/src/main/res/values-pt-rPT/strings.xml b/ui/src/main/res/values-pt-rPT/strings.xml index b609cf2b..fc1f19cb 100644 --- a/ui/src/main/res/values-pt-rPT/strings.xml +++ b/ui/src/main/res/values-pt-rPT/strings.xml @@ -142,10 +142,10 @@ Ver log da aplicação Log Não foi possível executar o logcat: - O módulo experimental de kernel pode melhorar o desempenho - Habilitar módulo backend do kernel - O backend do userspace mais lento pode aumentar a estabilidade - Desabilitar módulo backend do kernel + O módulo experimental de kernel pode melhorar o desempenho + Habilitar módulo backend do kernel + O backend do userspace mais lento pode aumentar a estabilidade + Desabilitar módulo backend do kernel Ocorreu um erro. Por favor, tente novamente O módulo experimental do kernel pode melhorar o desempenho Não há módulos disponíveis para o seu dispositivo diff --git a/ui/src/main/res/values-ro-rRO/strings.xml b/ui/src/main/res/values-ro-rRO/strings.xml index e0249364..5caa3cae 100644 --- a/ui/src/main/res/values-ro-rRO/strings.xml +++ b/ui/src/main/res/values-ro-rRO/strings.xml @@ -155,10 +155,10 @@ Vizualizare jurnal aplicație Jurnal Programul logcat nu poate fi executat: - Modulul experimental de nucleu poate îmbunătăți performanța - Activează biblioteca modulului de nucleu - Biblioteca mai lentă a spațiului utilizatorului poate îmbunătăți stabilitatea - Dezactivează biblioteca modulului de nucleu + Modulul experimental de nucleu poate îmbunătăți performanța + Activează biblioteca modulului de nucleu + Biblioteca mai lentă a spațiului utilizatorului poate îmbunătăți stabilitatea + Dezactivează biblioteca modulului de nucleu A apărut o eroare. Încearcă din nou Modulul experimental de nucleu poate îmbunătăți performanța Nu sunt disponibile module pentru dispozitivul tău diff --git a/ui/src/main/res/values-ru/strings.xml b/ui/src/main/res/values-ru/strings.xml index 3fc6c911..b15436de 100644 --- a/ui/src/main/res/values-ru/strings.xml +++ b/ui/src/main/res/values-ru/strings.xml @@ -168,10 +168,10 @@ Просмотр журналов приложения Журнал Не удалось запустить logcat: - Экспериментальный модуль ядра может улучшить производительность - Включить бэкэнд модуля ядра - Пользовательское пространство немного медленнее и улучшает стабильность - Отключить бэкэнд модуля ядра + Экспериментальный модуль ядра может улучшить производительность + Включить бэкэнд модуля ядра + Пользовательское пространство немного медленнее и улучшает стабильность + Отключить бэкэнд модуля ядра Что-то пошло не так. Пожалуйста, попробуйте еще раз Экспериментальный модуль ядра может улучшить производительность Для вашего устройства нет доступных модулей diff --git a/ui/src/main/res/values-sk-rSK/strings.xml b/ui/src/main/res/values-sk-rSK/strings.xml index 3479091f..30ba9f98 100644 --- a/ui/src/main/res/values-sk-rSK/strings.xml +++ b/ui/src/main/res/values-sk-rSK/strings.xml @@ -77,7 +77,7 @@ Uložiť denník udalostí Denník udalosti môžu byt nápomocné pri ladení aplikácie Zobraziť denník udalostí aplikácie - Pomalšie užívatelské prostredie môže zlepšiť stabilitu + Pomalšie užívatelské prostredie môže zlepšiť stabilitu Niečo sa pokazilo. Prosím, skúste znova Pre vaše zariadenie nie sú k dispozícii žiadne moduly Stiahni a nainštaluj kernel modul diff --git a/ui/src/main/res/values-sl/strings.xml b/ui/src/main/res/values-sl/strings.xml index 87b548e1..8c98bc12 100644 --- a/ui/src/main/res/values-sl/strings.xml +++ b/ui/src/main/res/values-sl/strings.xml @@ -166,10 +166,10 @@ Prikaži dnevnik aplikacije Dnevnik Ukaza logcat ni bilo mogoče izvesti: - Eksperimentalni modul jedra lahko izboljša zmogljivost - Omogoči zaledje za modul jedra - Počasnejše uporabniško zaledje lahko izboljša stabilnost - Onemogoči zaledje za modul jedra + Eksperimentalni modul jedra lahko izboljša zmogljivost + Omogoči zaledje za modul jedra + Počasnejše uporabniško zaledje lahko izboljša stabilnost + Onemogoči zaledje za modul jedra Nekaj je šlo narobe, prosimo poskusite znova Eksperimentalni modul jedra lahko izboljša zmogljivost Za vašo napravo ni razpoložljivih modulov diff --git a/ui/src/main/res/values-sv-rSE/strings.xml b/ui/src/main/res/values-sv-rSE/strings.xml index 686bd338..16765166 100644 --- a/ui/src/main/res/values-sv-rSE/strings.xml +++ b/ui/src/main/res/values-sv-rSE/strings.xml @@ -114,10 +114,10 @@ Visa applikationslogg Logg Kunde inte köra logcat: - Den experimentella kärnmodulen kan förbättra prestanda - Aktivera backend för kärnmodul - Den långsammare backend för användarrymden kan förbättra stabiliteten - Inaktivera backend för kärnmodul + Den experimentella kärnmodulen kan förbättra prestanda + Aktivera backend för kärnmodul + Den långsammare backend för användarrymden kan förbättra stabiliteten + Inaktivera backend för kärnmodul Något gick fel. Vänligen försök igen Den experimentella kärnmodulen kan förbättra prestanda Inga moduler finns tillgängliga för din enhet diff --git a/ui/src/main/res/values-tr-rTR/strings.xml b/ui/src/main/res/values-tr-rTR/strings.xml index 89642b86..b05d395d 100644 --- a/ui/src/main/res/values-tr-rTR/strings.xml +++ b/ui/src/main/res/values-tr-rTR/strings.xml @@ -142,10 +142,10 @@ Uygulama günlüğünü görüntüle Günlük Logcat çalıştırılamıyor: - Deneysel çekirdek modülü performansı artırabilir - Çekirdek modülü arka ucunu etkinleştir - Daha yavaş kullanıcı alanı arka ucu kararlılığı artırabilir - Çekirdek modülü arka ucunu devre dışı bırak + Deneysel çekirdek modülü performansı artırabilir + Çekirdek modülü arka ucunu etkinleştir + Daha yavaş kullanıcı alanı arka ucu kararlılığı artırabilir + Çekirdek modülü arka ucunu devre dışı bırak Bir şeyler yanlış gitti. Lütfen tekrar deneyin Deneysel çekirdek modülü performansı artırabilir Cihazınız için uygun modül yok diff --git a/ui/src/main/res/values-uk-rUA/strings.xml b/ui/src/main/res/values-uk-rUA/strings.xml index 252595f0..4ecdb781 100644 --- a/ui/src/main/res/values-uk-rUA/strings.xml +++ b/ui/src/main/res/values-uk-rUA/strings.xml @@ -168,10 +168,10 @@ Переглянути журнал програми Журнал Не вдалося запустити logcat: - Експериментальний модуль ядра може підвищити продуктивність - Увімкнути модуль ядра - Користувацький простір повільніший, проте може покращити стабільність - Вимкнути модуль ядра + Експериментальний модуль ядра може підвищити продуктивність + Увімкнути модуль ядра + Користувацький простір повільніший, проте може покращити стабільність + Вимкнути модуль ядра Щось пішло не так. Спробуйте ще раз Експериментальний модуль ядра може підвищити продуктивність Немає доступних модулів для вашого пристрою diff --git a/ui/src/main/res/values-zh-rCN/strings.xml b/ui/src/main/res/values-zh-rCN/strings.xml index 24c5b6c3..60e84c7e 100644 --- a/ui/src/main/res/values-zh-rCN/strings.xml +++ b/ui/src/main/res/values-zh-rCN/strings.xml @@ -129,10 +129,10 @@ 查看应用日志 日志 无法运行 logcat: - 内核空间的模块性能较强,但可能不稳定 - 启用内核模块 - 用户空间的模块性能较弱,但稳定性更好 - 停用内核模块 + 内核空间的模块性能较强,但可能不稳定 + 启用内核模块 + 用户空间的模块性能较弱,但稳定性更好 + 停用内核模块 发生错误,请重试 使用内核模块可以提升性能(实验性) 没有可用于此设备的模块 diff --git a/ui/src/main/res/values-zh-rTW/strings.xml b/ui/src/main/res/values-zh-rTW/strings.xml index 2f58e445..f4150e2c 100644 --- a/ui/src/main/res/values-zh-rTW/strings.xml +++ b/ui/src/main/res/values-zh-rTW/strings.xml @@ -129,8 +129,8 @@ 檢視應用程式日誌 日誌 無法執行 logcat: - 使用還在實驗階段的 kernel module 以便改善效能 - 啟用 kernel module + 使用還在實驗階段的 kernel module 以便改善效能 + 啟用 kernel module 儲存 全選 切換全部 diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index badae61e..2754c632 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -144,10 +144,10 @@ View application log Log Unable to run logcat: - The experimental kernel module can improve performance - Enable kernel module backend - The slower userspace backend may improve stability - Disable kernel module backend + The experimental kernel module can improve performance + Enable kernel module backend + The slower userspace backend may improve stability + Disable kernel module backend Something went wrong. Please try again The experimental kernel module can improve performance No modules are available for your device diff --git a/ui/src/main/res/xml/preferences.xml b/ui/src/main/res/xml/preferences.xml index d330b875..5ab5c790 100644 --- a/ui/src/main/res/xml/preferences.xml +++ b/ui/src/main/res/xml/preferences.xml @@ -27,9 +27,8 @@ android:summaryOff="@string/multiple_tunnels_summary_off" android:summaryOn="@string/multiple_tunnels_summary_on" android:title="@string/multiple_tunnels_title" /> - - +