mirror of
https://github.com/fankes/TSBattery.git
synced 2025-09-06 18:55:45 +08:00
Modify merge to new DialogBuilderFactory
This commit is contained in:
@@ -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" +
|
||||||
|
@@ -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()
|
|
||||||
}
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user