Modify merge to new DialogBuilderFactory

This commit is contained in:
2022-09-28 20:12:09 +08:00
parent f7f4427c61
commit 06ef371f82
2 changed files with 27 additions and 66 deletions

View File

@@ -323,7 +323,7 @@ class HookEntry : IYukiHookXposedInit {
afterHook { afterHook {
if (prefs.get(DataConst.ENABLE_RUN_INFO)) if (prefs.get(DataConst.ENABLE_RUN_INFO))
instance<Activity>().apply { instance<Activity>().apply {
showDialog(isUseBlackTheme = true) { showDialog {
title = "TSBattery 已激活" title = "TSBattery 已激活"
msg = "[提示模块运行信息功能已打开]\n\n" + msg = "[提示模块运行信息功能已打开]\n\n" +
"模块工作看起来一切正常,请自行测试是否能达到省电效果。\n\n" + "模块工作看起来一切正常,请自行测试是否能达到省电效果。\n\n" +

View File

@@ -25,78 +25,60 @@ package com.fankes.tsbattery.utils.factory
import android.app.Dialog import android.app.Dialog
import android.content.Context import android.content.Context
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.view.Gravity import android.view.Gravity
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView 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.google.android.material.dialog.MaterialAlertDialogBuilder
import com.highcapable.yukihookapi.annotation.CauseProblemsApi
import com.highcapable.yukihookapi.hook.factory.applyModuleTheme
/** /**
* 构造对话框 * 构造对话框
* @param isUseBlackTheme 是否使用深色主题
* @param initiate 对话框方法体 * @param initiate 对话框方法体
*/ */
fun Context.showDialog(isUseBlackTheme: Boolean = false, initiate: DialogBuilder.() -> Unit) = inline fun Context.showDialog(initiate: DialogBuilder.() -> Unit) = DialogBuilder(context = this).apply(initiate).show()
DialogBuilder(context = this, isUseBlackTheme).apply(initiate).show()
/** /**
* 对话框构造器 * 对话框构造器
* @param context 实例 * @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 风格对话框 private var customLayoutView: View? = null
* @return [Boolean]
*/
private val isUsingAndroidX get() = runCatching { context is AppCompatActivity }.getOrNull() ?: false
init { init {
if (isUsingAndroidX) instance = MaterialAlertDialogBuilder(context.applyModuleTheme(R.style.Theme_TSBattery))
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
)
}
} }
/** 设置对话框不可关闭 */ /** 设置对话框不可关闭 */
fun noCancelable() { fun noCancelable() {
if (isUsingAndroidX) instance?.setCancelable(false)
runInSafe { instanceAndroidX?.setCancelable(false) }
else runInSafe { instanceAndroid?.setCancelable(false) }
} }
/** 设置对话框标题 */ /** 设置对话框标题 */
var title var title
get() = "" get() = ""
set(value) { set(value) {
if (isUsingAndroidX) instance?.setTitle(value)
runInSafe { instanceAndroidX?.setTitle(value) }
else runInSafe { instanceAndroid?.setTitle(value) }
} }
/** 设置对话框消息内容 */ /** 设置对话框消息内容 */
var msg var msg
get() = "" get() = ""
set(value) { set(value) {
if (isUsingAndroidX) instance?.setMessage(value)
runInSafe { instanceAndroidX?.setMessage(value) }
else runInSafe { instanceAndroid?.setMessage(value) }
} }
/** 设置进度条对话框消息内容 */ /** 设置进度条对话框消息内容 */
@@ -124,9 +106,7 @@ class DialogBuilder(val context: Context, private val isUseBlackTheme: Boolean)
* @param callback 点击事件 * @param callback 点击事件
*/ */
fun confirmButton(text: String = "确定", callback: () -> Unit = {}) { fun confirmButton(text: String = "确定", callback: () -> Unit = {}) {
if (isUsingAndroidX) instance?.setPositiveButton(text) { _, _ -> callback() }
runInSafe { instanceAndroidX?.setPositiveButton(text) { _, _ -> callback() } }
else runInSafe { instanceAndroid?.setPositiveButton(text) { _, _ -> callback() } }
} }
/** /**
@@ -135,9 +115,7 @@ class DialogBuilder(val context: Context, private val isUseBlackTheme: Boolean)
* @param callback 点击事件 * @param callback 点击事件
*/ */
fun cancelButton(text: String = "取消", callback: () -> Unit = {}) { fun cancelButton(text: String = "取消", callback: () -> Unit = {}) {
if (isUsingAndroidX) instance?.setNegativeButton(text) { _, _ -> callback() }
runInSafe { instanceAndroidX?.setNegativeButton(text) { _, _ -> callback() } }
else runInSafe { instanceAndroid?.setNegativeButton(text) { _, _ -> callback() } }
} }
/** /**
@@ -146,35 +124,18 @@ class DialogBuilder(val context: Context, private val isUseBlackTheme: Boolean)
* @param callback 点击事件 * @param callback 点击事件
*/ */
fun neutralButton(text: String = "更多", callback: () -> Unit = {}) { fun neutralButton(text: String = "更多", callback: () -> Unit = {}) {
if (isUsingAndroidX) instance?.setNeutralButton(text) { _, _ -> callback() }
runInSafe { instanceAndroidX?.setNeutralButton(text) { _, _ -> callback() } }
else runInSafe { instanceAndroid?.setNeutralButton(text) { _, _ -> callback() } }
} }
/** 取消对话框 */ /** 取消对话框 */
fun cancel() = dialogInstance?.cancel() fun cancel() = dialogInstance?.cancel()
/** 显示对话框 */ /** 显示对话框 */
internal fun show() = @CauseProblemsApi
if (isUsingAndroidX) runInSafe { fun show() {
instanceAndroidX?.create()?.apply { instance?.create()?.apply {
customLayoutView?.let { setView(it) } customLayoutView?.let { setView(it) }
dialogInstance = this dialogInstance = this
}?.show() }?.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()
} }
} }