Fix crash in SmartSnackbar

This commit is contained in:
Mygod
2018-12-21 13:44:47 +08:00
parent a48d441a15
commit e9421fd24f
2 changed files with 9 additions and 8 deletions

View File

@@ -57,7 +57,7 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS
badge.badgeGravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL badge.badgeGravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
badge.setGravityOffset(16f, 0f, true) badge.setGravityOffset(16f, 0f, true)
ServiceForegroundConnector(this, this, ClientMonitorService::class) ServiceForegroundConnector(this, this, ClientMonitorService::class)
SmartSnackbar.Register(binding.fragmentHolder) SmartSnackbar.Register(lifecycle, binding.fragmentHolder)
} }
override fun onNavigationItemSelected(item: MenuItem) = when (item.itemId) { override fun onNavigationItemSelected(item: MenuItem) = when (item.itemId) {

View File

@@ -1,6 +1,7 @@
package be.mygod.vpnhotspot.widget package be.mygod.vpnhotspot.widget
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Looper
import android.view.View import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.annotation.StringRes import androidx.annotation.StringRes
@@ -21,8 +22,10 @@ sealed class SmartSnackbar {
fun make(@StringRes text: Int): SmartSnackbar = make(app.getText(text)) fun make(@StringRes text: Int): SmartSnackbar = make(app.getText(text))
fun make(text: CharSequence? = ""): SmartSnackbar { fun make(text: CharSequence? = ""): SmartSnackbar {
val holder = holder val holder = holder
return if (holder == null) ToastWrapper(Toast.makeText(app, text, Toast.LENGTH_LONG)) else return if (holder == null) {
SnackbarWrapper(Snackbar.make(holder, text ?: null.toString(), Snackbar.LENGTH_LONG)) if (Looper.myLooper() == null) Looper.prepare()
ToastWrapper(Toast.makeText(app, text, Toast.LENGTH_LONG))
} else SnackbarWrapper(Snackbar.make(holder, text ?: null.toString(), Snackbar.LENGTH_LONG))
} }
fun make(e: Throwable) = make(when (e) { fun make(e: Throwable) = make(when (e) {
is NoShellException -> app.getText(R.string.root_unavailable) is NoShellException -> app.getText(R.string.root_unavailable)
@@ -30,9 +33,9 @@ sealed class SmartSnackbar {
}) })
} }
class Register(private val view: View) : LifecycleObserver { class Register(lifecycle: Lifecycle, private val view: View) : LifecycleObserver {
init { init {
(view.context as LifecycleOwner).lifecycle.addObserver(this) lifecycle.addObserver(this)
} }
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
@@ -54,9 +57,7 @@ private class SnackbarWrapper(private val snackbar: Snackbar) : SmartSnackbar()
} }
private class ToastWrapper(private val toast: Toast) : SmartSnackbar() { private class ToastWrapper(private val toast: Toast) : SmartSnackbar() {
override fun show() { override fun show() = toast.show()
app.handler.post(toast::show)
}
override fun shortToast() = apply { toast.duration = Toast.LENGTH_SHORT } override fun shortToast() = apply { toast.duration = Toast.LENGTH_SHORT }
} }