js使用专属的toast,防止显示不全

This commit is contained in:
HapeLee
2025-08-30 01:35:25 +08:00
parent 8df6cc99a2
commit 7d76cf3b12
4 changed files with 76 additions and 7 deletions
@@ -41,12 +41,12 @@ import io.legato.kazusa.utils.externalCache
import io.legato.kazusa.utils.fromJsonObject
import io.legato.kazusa.utils.isAbsUrl
import io.legato.kazusa.utils.isMainThread
import io.legato.kazusa.utils.longToastOnUi
import io.legato.kazusa.utils.longToastForJs
import io.legato.kazusa.utils.mapAsync
import io.legato.kazusa.utils.stackTraceStr
import io.legato.kazusa.utils.startActivity
import io.legato.kazusa.utils.toStringArray
import io.legato.kazusa.utils.toastOnUi
import io.legato.kazusa.utils.toastForJs
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.flowOn
@@ -937,7 +937,7 @@ interface JsExtensions : JsEncodeUtils {
*/
fun toast(msg: Any?) {
rhinoContext.ensureActive()
appCtx.toastOnUi("${getSource()?.getTag()}: ${msg.toString()}")
appCtx.toastForJs("${getSource()?.getTag()}: ${msg.toString()}")
}
/**
@@ -945,7 +945,7 @@ interface JsExtensions : JsEncodeUtils {
*/
fun longToast(msg: Any?) {
rhinoContext.ensureActive()
appCtx.longToastOnUi("${getSource()?.getTag()}: ${msg.toString()}")
appCtx.longToastForJs("${getSource()?.getTag()}: ${msg.toString()}")
}
/**
@@ -6,8 +6,11 @@ import android.content.Context
import android.widget.Toast
import androidx.fragment.app.Fragment
import io.legato.kazusa.BuildConfig
import io.legato.kazusa.databinding.ViewToastBinding
import io.legato.kazusa.help.config.AppConfig
import splitties.systemservices.layoutInflater
private var toastForJs: Toast? = null
private var toast: Toast? = null
private var toastLegacy: Toast? = null
@@ -61,6 +64,43 @@ fun Context.longToastOnUiLegacy(message: CharSequence) {
}
}
/**
* JS 专用弹窗,短时间显示
*/
fun Context.toastForJs(message: CharSequence?, duration: Int = Toast.LENGTH_SHORT) {
runOnUI {
kotlin.runCatching {
toastForJs?.cancel()
toastForJs = Toast(this)
ViewToastBinding.inflate(layoutInflater).run {
toastForJs?.view = root
tvText.text = message
}
toastForJs?.duration = duration
toastForJs?.show()
}
}
}
fun Context.toastForJs(message: Int, duration: Int = Toast.LENGTH_SHORT) {
toastForJs(getString(message), duration)
}
fun Context.longToastForJs(message: CharSequence?) {
toastForJs(message, Toast.LENGTH_LONG)
}
fun Context.longToastForJs(message: Int) {
toastForJs(message, Toast.LENGTH_LONG)
}
// Fragment 调用代理
fun Fragment.toastForJs(message: CharSequence?) = requireContext().toastForJs(message)
fun Fragment.toastForJs(message: Int) = requireContext().toastForJs(message)
fun Fragment.longToastForJs(message: CharSequence?) = requireContext().longToastForJs(message)
fun Fragment.longToastForJs(message: Int) = requireContext().longToastForJs(message)
fun Fragment.toastOnUi(message: Int) = requireActivity().toastOnUi(message)
fun Fragment.toastOnUi(message: CharSequence) = requireActivity().toastOnUi(message)