From 938399d881aa6b365be131ffb3a517d64be427bb Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sat, 26 Sep 2020 13:34:20 +0200 Subject: ui: queue up tunnel mutating on activity scope instead of fragment scope Fragment scopes get cancelled when the fragment goes away, but we don't actually want to cancel an in-flight transition in that case. Also, before when the fragment would cancel, there'd be an exception, and the exception handler would call Fragment::getString, which in turn called requireContext, which caused an exception. Work around this by using the `activity ?: Application.get()` idiom to always have a context for strings and toasts. Signed-off-by: Jason A. Donenfeld --- .../wireguard/android/preference/KernelModuleDisablerPreference.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ui/src/main/java/com/wireguard/android/preference') diff --git a/ui/src/main/java/com/wireguard/android/preference/KernelModuleDisablerPreference.kt b/ui/src/main/java/com/wireguard/android/preference/KernelModuleDisablerPreference.kt index 5d21a541..2b1e8e4e 100644 --- a/ui/src/main/java/com/wireguard/android/preference/KernelModuleDisablerPreference.kt +++ b/ui/src/main/java/com/wireguard/android/preference/KernelModuleDisablerPreference.kt @@ -8,6 +8,7 @@ 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 @@ -15,6 +16,7 @@ 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 @@ -39,7 +41,7 @@ class KernelModuleDisablerPreference(context: Context, attrs: AttributeSet?) : P override fun getTitle() = if (state == State.UNKNOWN) "" else context.getString(state.titleResourceId) override fun onClick() { - lifecycleScope.launch { + activity.lifecycleScope.launch { if (state == State.DISABLED) { setState(State.ENABLING) UserKnobs.setDisableKernelModule(false) -- cgit v1.2.3