From 7d76cf3b12c8d7bfa774968a814479f6d8393b78 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Sat, 30 Aug 2025 01:35:25 +0800 Subject: [PATCH] =?UTF-8?q?js=E4=BD=BF=E7=94=A8=E4=B8=93=E5=B1=9E=E7=9A=84?= =?UTF-8?q?toast=EF=BC=8C=E9=98=B2=E6=AD=A2=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legato/kazusa/help/JsExtensions.kt | 8 ++-- .../java/io/legato/kazusa/utils/ToastUtils.kt | 40 +++++++++++++++++++ app/src/main/res/layout/dialog_login.xml | 8 ++-- app/src/main/res/layout/view_toast.xml | 27 +++++++++++++ 4 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/layout/view_toast.xml diff --git a/app/src/main/java/io/legato/kazusa/help/JsExtensions.kt b/app/src/main/java/io/legato/kazusa/help/JsExtensions.kt index 11437afee..17faefa43 100644 --- a/app/src/main/java/io/legato/kazusa/help/JsExtensions.kt +++ b/app/src/main/java/io/legato/kazusa/help/JsExtensions.kt @@ -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()}") } /** diff --git a/app/src/main/java/io/legato/kazusa/utils/ToastUtils.kt b/app/src/main/java/io/legato/kazusa/utils/ToastUtils.kt index 6ff57a65f..fa4967bcc 100644 --- a/app/src/main/java/io/legato/kazusa/utils/ToastUtils.kt +++ b/app/src/main/java/io/legato/kazusa/utils/ToastUtils.kt @@ -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) diff --git a/app/src/main/res/layout/dialog_login.xml b/app/src/main/res/layout/dialog_login.xml index 03c0bf897..8082e0a55 100644 --- a/app/src/main/res/layout/dialog_login.xml +++ b/app/src/main/res/layout/dialog_login.xml @@ -25,11 +25,13 @@ android:id="@+id/flexbox" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="8dp" android:clipToPadding="false" - android:paddingVertical="8dp" + android:layout_marginTop="8dp" + android:overScrollMode="never" + app:dividerDrawable="@drawable/shape_space_divider" app:flexDirection="row" - app:flexWrap="wrap" /> + app:flexWrap="wrap" + app:showDivider="middle" /> diff --git a/app/src/main/res/layout/view_toast.xml b/app/src/main/res/layout/view_toast.xml new file mode 100644 index 000000000..ef692fcff --- /dev/null +++ b/app/src/main/res/layout/view_toast.xml @@ -0,0 +1,27 @@ + + + + + + + + + + \ No newline at end of file