From e9421fd24fdf5d83fd8fcbd2500906128c2031e0 Mon Sep 17 00:00:00 2001 From: Mygod Date: Fri, 21 Dec 2018 13:44:47 +0800 Subject: [PATCH] Fix crash in SmartSnackbar --- .../main/java/be/mygod/vpnhotspot/MainActivity.kt | 2 +- .../be/mygod/vpnhotspot/widget/SmartSnackbar.kt | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt b/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt index 72770f09..ba5ff176 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt @@ -57,7 +57,7 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS badge.badgeGravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL badge.setGravityOffset(16f, 0f, true) ServiceForegroundConnector(this, this, ClientMonitorService::class) - SmartSnackbar.Register(binding.fragmentHolder) + SmartSnackbar.Register(lifecycle, binding.fragmentHolder) } override fun onNavigationItemSelected(item: MenuItem) = when (item.itemId) { 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 8aa7f33a..bd4aa51e 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt @@ -1,6 +1,7 @@ package be.mygod.vpnhotspot.widget import android.annotation.SuppressLint +import android.os.Looper import android.view.View import android.widget.Toast import androidx.annotation.StringRes @@ -21,8 +22,10 @@ sealed class SmartSnackbar { fun make(@StringRes text: Int): SmartSnackbar = make(app.getText(text)) fun make(text: CharSequence? = ""): SmartSnackbar { val holder = holder - return if (holder == null) ToastWrapper(Toast.makeText(app, text, Toast.LENGTH_LONG)) else - SnackbarWrapper(Snackbar.make(holder, text ?: null.toString(), Snackbar.LENGTH_LONG)) + return if (holder == null) { + 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) { 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 { - (view.context as LifecycleOwner).lifecycle.addObserver(this) + lifecycle.addObserver(this) } @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() { - override fun show() { - app.handler.post(toast::show) - } + override fun show() = toast.show() override fun shortToast() = apply { toast.duration = Toast.LENGTH_SHORT } }