Use AtomicReference for SmartSnackbar

This commit is contained in:
Mygod
2020-06-01 16:29:17 -04:00
parent 379c3b226f
commit b5d4eb8bca

View File

@@ -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<View?>()
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)
}
}