diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt b/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt index 9e7e9487..148cb766 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt @@ -12,15 +12,15 @@ import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.util.readableMessage import com.google.android.material.snackbar.Snackbar import com.topjohnwu.superuser.NoShellException +import java.util.concurrent.atomic.AtomicReference sealed class SmartSnackbar { companion object { - @SuppressLint("StaticFieldLeak") - private var holder: View? = null + private val holder = AtomicReference() fun make(@StringRes text: Int): SmartSnackbar = make(app.getText(text)) fun make(text: CharSequence = ""): SmartSnackbar { - val holder = holder + val holder = holder.get() return if (holder == null) @SuppressLint("ShowToast") { if (Looper.myLooper() == null) Looper.prepare() ToastWrapper(Toast.makeText(app, text, Toast.LENGTH_LONG)) @@ -37,11 +37,9 @@ sealed class SmartSnackbar { view.findViewTreeLifecycleOwner()!!.lifecycle.addObserver(this) } - override fun onResume(owner: LifecycleOwner) { - holder = view - } + override fun onResume(owner: LifecycleOwner) = holder.set(view) override fun onPause(owner: LifecycleOwner) { - if (holder === view) holder = null + holder.compareAndSet(view, null) } }