From 06ef371f8250dc54b9a7811666ddba7e794a24f0 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Wed, 28 Sep 2022 20:12:09 +0800 Subject: [PATCH] Modify merge to new DialogBuilderFactory --- .../com/fankes/tsbattery/hook/HookEntry.kt | 2 +- .../utils/factory/DialogBuilderFactory.kt | 91 ++++++------------- 2 files changed, 27 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/com/fankes/tsbattery/hook/HookEntry.kt b/app/src/main/java/com/fankes/tsbattery/hook/HookEntry.kt index 98b205c..41cd25f 100644 --- a/app/src/main/java/com/fankes/tsbattery/hook/HookEntry.kt +++ b/app/src/main/java/com/fankes/tsbattery/hook/HookEntry.kt @@ -323,7 +323,7 @@ class HookEntry : IYukiHookXposedInit { afterHook { if (prefs.get(DataConst.ENABLE_RUN_INFO)) instance().apply { - showDialog(isUseBlackTheme = true) { + showDialog { title = "TSBattery 已激活" msg = "[提示模块运行信息功能已打开]\n\n" + "模块工作看起来一切正常,请自行测试是否能达到省电效果。\n\n" + diff --git a/app/src/main/java/com/fankes/tsbattery/utils/factory/DialogBuilderFactory.kt b/app/src/main/java/com/fankes/tsbattery/utils/factory/DialogBuilderFactory.kt index 953490a..317bcc1 100644 --- a/app/src/main/java/com/fankes/tsbattery/utils/factory/DialogBuilderFactory.kt +++ b/app/src/main/java/com/fankes/tsbattery/utils/factory/DialogBuilderFactory.kt @@ -25,78 +25,60 @@ package com.fankes.tsbattery.utils.factory import android.app.Dialog import android.content.Context -import android.graphics.Color -import android.graphics.drawable.GradientDrawable import android.view.Gravity import android.view.View import android.view.ViewGroup import android.widget.LinearLayout import android.widget.ProgressBar import android.widget.TextView -import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.app.AlertDialog +import com.fankes.tsbattery.R import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.highcapable.yukihookapi.annotation.CauseProblemsApi +import com.highcapable.yukihookapi.hook.factory.applyModuleTheme /** * 构造对话框 - * @param isUseBlackTheme 是否使用深色主题 * @param initiate 对话框方法体 */ -fun Context.showDialog(isUseBlackTheme: Boolean = false, initiate: DialogBuilder.() -> Unit) = - DialogBuilder(context = this, isUseBlackTheme).apply(initiate).show() +inline fun Context.showDialog(initiate: DialogBuilder.() -> Unit) = DialogBuilder(context = this).apply(initiate).show() /** * 对话框构造器 * @param context 实例 - * @param isUseBlackTheme 是否使用深色主题 - 对 AndroidX 风格无效 */ -class DialogBuilder(val context: Context, private val isUseBlackTheme: Boolean) { +class DialogBuilder(val context: Context) { - private var instanceAndroidX: androidx.appcompat.app.AlertDialog.Builder? = null // 实例对象 - private var instanceAndroid: android.app.AlertDialog.Builder? = null // 实例对象 + /** 实例对象 */ + private var instance: AlertDialog.Builder? = null - private var dialogInstance: Dialog? = null // 对话框实例 - private var customLayoutView: View? = null // 自定义布局 + /** 对话框实例 */ + private var dialogInstance: Dialog? = null - /** - * 是否需要使用 AndroidX 风格对话框 - * @return [Boolean] - */ - private val isUsingAndroidX get() = runCatching { context is AppCompatActivity }.getOrNull() ?: false + /** 自定义布局 */ + private var customLayoutView: View? = null init { - if (isUsingAndroidX) - runInSafe { instanceAndroidX = MaterialAlertDialogBuilder(context) } - else runInSafe { - instanceAndroid = android.app.AlertDialog.Builder( - context, - if (isUseBlackTheme) android.R.style.Theme_Material_Dialog else android.R.style.Theme_Material_Light_Dialog - ) - } + instance = MaterialAlertDialogBuilder(context.applyModuleTheme(R.style.Theme_TSBattery)) } /** 设置对话框不可关闭 */ fun noCancelable() { - if (isUsingAndroidX) - runInSafe { instanceAndroidX?.setCancelable(false) } - else runInSafe { instanceAndroid?.setCancelable(false) } + instance?.setCancelable(false) } /** 设置对话框标题 */ var title get() = "" set(value) { - if (isUsingAndroidX) - runInSafe { instanceAndroidX?.setTitle(value) } - else runInSafe { instanceAndroid?.setTitle(value) } + instance?.setTitle(value) } /** 设置对话框消息内容 */ var msg get() = "" set(value) { - if (isUsingAndroidX) - runInSafe { instanceAndroidX?.setMessage(value) } - else runInSafe { instanceAndroid?.setMessage(value) } + instance?.setMessage(value) } /** 设置进度条对话框消息内容 */ @@ -124,9 +106,7 @@ class DialogBuilder(val context: Context, private val isUseBlackTheme: Boolean) * @param callback 点击事件 */ fun confirmButton(text: String = "确定", callback: () -> Unit = {}) { - if (isUsingAndroidX) - runInSafe { instanceAndroidX?.setPositiveButton(text) { _, _ -> callback() } } - else runInSafe { instanceAndroid?.setPositiveButton(text) { _, _ -> callback() } } + instance?.setPositiveButton(text) { _, _ -> callback() } } /** @@ -135,9 +115,7 @@ class DialogBuilder(val context: Context, private val isUseBlackTheme: Boolean) * @param callback 点击事件 */ fun cancelButton(text: String = "取消", callback: () -> Unit = {}) { - if (isUsingAndroidX) - runInSafe { instanceAndroidX?.setNegativeButton(text) { _, _ -> callback() } } - else runInSafe { instanceAndroid?.setNegativeButton(text) { _, _ -> callback() } } + instance?.setNegativeButton(text) { _, _ -> callback() } } /** @@ -146,35 +124,18 @@ class DialogBuilder(val context: Context, private val isUseBlackTheme: Boolean) * @param callback 点击事件 */ fun neutralButton(text: String = "更多", callback: () -> Unit = {}) { - if (isUsingAndroidX) - runInSafe { instanceAndroidX?.setNeutralButton(text) { _, _ -> callback() } } - else runInSafe { instanceAndroid?.setNeutralButton(text) { _, _ -> callback() } } + instance?.setNeutralButton(text) { _, _ -> callback() } } /** 取消对话框 */ fun cancel() = dialogInstance?.cancel() /** 显示对话框 */ - internal fun show() = - if (isUsingAndroidX) runInSafe { - instanceAndroidX?.create()?.apply { - customLayoutView?.let { setView(it) } - dialogInstance = this - }?.show() - } else runInSafe { - instanceAndroid?.create()?.apply { - customLayoutView?.let { setView(it) } - window?.setBackgroundDrawable( - GradientDrawable( - GradientDrawable.Orientation.TOP_BOTTOM, - if (isUseBlackTheme) intArrayOf(0xFF2D2D2D.toInt(), 0xFF2D2D2D.toInt()) - else intArrayOf(Color.WHITE, Color.WHITE) - ).apply { - shape = GradientDrawable.RECTANGLE - gradientType = GradientDrawable.LINEAR_GRADIENT - cornerRadius = 15.dpFloat(this@DialogBuilder.context) - }) - dialogInstance = this - }?.show() - } + @CauseProblemsApi + fun show() { + instance?.create()?.apply { + customLayoutView?.let { setView(it) } + dialogInstance = this + }?.show() + } } \ No newline at end of file