mirror of
https://github.com/KitsunePie/AppErrorsTracking.git
synced 2025-09-01 08:45:16 +08:00
Modify merge to CompoundButtonDataBinder and optimize code in MainActivity
This commit is contained in:
@@ -25,7 +25,6 @@ package com.fankes.apperrorstracking.data
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.widget.CompoundButton
|
|
||||||
import com.highcapable.yukihookapi.hook.factory.modulePrefs
|
import com.highcapable.yukihookapi.hook.factory.modulePrefs
|
||||||
import com.highcapable.yukihookapi.hook.log.loggerW
|
import com.highcapable.yukihookapi.hook.log.loggerW
|
||||||
import com.highcapable.yukihookapi.hook.param.PackageParam
|
import com.highcapable.yukihookapi.hook.param.PackageParam
|
||||||
@@ -126,7 +125,7 @@ object ConfigData {
|
|||||||
* @param data 键值数据模板
|
* @param data 键值数据模板
|
||||||
* @return [Boolean]
|
* @return [Boolean]
|
||||||
*/
|
*/
|
||||||
private fun getBoolean(data: PrefsData<Boolean>) = when (instance) {
|
internal fun getBoolean(data: PrefsData<Boolean>) = when (instance) {
|
||||||
is Context -> (instance as Context).modulePrefs.get(data)
|
is Context -> (instance as Context).modulePrefs.get(data)
|
||||||
is PackageParam -> (instance as PackageParam).prefs.get(data)
|
is PackageParam -> (instance as PackageParam).prefs.get(data)
|
||||||
else -> error("Unknown type for get prefs data")
|
else -> error("Unknown type for get prefs data")
|
||||||
@@ -137,7 +136,7 @@ object ConfigData {
|
|||||||
* @param data 键值数据模板
|
* @param data 键值数据模板
|
||||||
* @param value 键值内容
|
* @param value 键值内容
|
||||||
*/
|
*/
|
||||||
private fun putBoolean(data: PrefsData<Boolean>, value: Boolean) {
|
internal fun putBoolean(data: PrefsData<Boolean>, value: Boolean) {
|
||||||
when (instance) {
|
when (instance) {
|
||||||
is Context -> (instance as Context).modulePrefs.put(data, value)
|
is Context -> (instance as Context).modulePrefs.put(data, value)
|
||||||
is PackageParam -> loggerW(msg = "Not support for this method")
|
is PackageParam -> loggerW(msg = "Not support for this method")
|
||||||
@@ -145,21 +144,6 @@ object ConfigData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 绑定到 [CompoundButton] 自动设置选中状态
|
|
||||||
* @param data 键值数据模板
|
|
||||||
* @param onChange 当改变时回调
|
|
||||||
*/
|
|
||||||
fun CompoundButton.bind(data: PrefsData<Boolean>, onChange: (Boolean) -> Unit = {}) {
|
|
||||||
isChecked = getBoolean(data).also(onChange)
|
|
||||||
setOnCheckedChangeListener { button, isChecked ->
|
|
||||||
if (button.isPressed) {
|
|
||||||
putBoolean(data, isChecked)
|
|
||||||
onChange(isChecked)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否显示开发者提示
|
* 是否显示开发者提示
|
||||||
* @return [Boolean]
|
* @return [Boolean]
|
||||||
|
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||||
|
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||||
|
* https://github.com/KitsunePie/AppErrorsTracking
|
||||||
|
*
|
||||||
|
* This software is non-free but opensource software: you can redistribute it
|
||||||
|
* and/or modify it under the terms of the GNU Affero General Public License
|
||||||
|
* as published by the Free Software Foundation; either
|
||||||
|
* version 3 of the License, or any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* and eula along with this software. If not, see
|
||||||
|
* <https://www.gnu.org/licenses/>
|
||||||
|
*
|
||||||
|
* This file is Created by fankes on 2023/2/3.
|
||||||
|
*/
|
||||||
|
@file:Suppress("unused", "MemberVisibilityCanBePrivate")
|
||||||
|
|
||||||
|
package com.fankes.apperrorstracking.data.factory
|
||||||
|
|
||||||
|
import android.widget.CompoundButton
|
||||||
|
import com.fankes.apperrorstracking.data.ConfigData
|
||||||
|
import com.highcapable.yukihookapi.hook.xposed.prefs.data.PrefsData
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定到 [CompoundButton] 自动设置选中状态
|
||||||
|
* @param data 键值数据模板
|
||||||
|
* @param initiate 方法体
|
||||||
|
*/
|
||||||
|
fun CompoundButton.bind(data: PrefsData<Boolean>, initiate: CompoundButtonDataBinder.(CompoundButton) -> Unit = {}) {
|
||||||
|
val binder = CompoundButtonDataBinder(button = this).also { initiate(it, this) }
|
||||||
|
isChecked = ConfigData.getBoolean(data).also { binder.initializeCallback?.invoke(it) }
|
||||||
|
binder.applyChangesCallback = { ConfigData.putBoolean(data, it) }
|
||||||
|
setOnCheckedChangeListener { button, isChecked ->
|
||||||
|
if (button.isPressed) {
|
||||||
|
binder.changedCallback?.invoke(isChecked)
|
||||||
|
if (binder.isAutoApplyChanges) binder.applyChangesCallback?.invoke(isChecked)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [CompoundButton] 数据绑定管理器实例
|
||||||
|
* @param button 当前实例
|
||||||
|
*/
|
||||||
|
class CompoundButtonDataBinder(private val button: CompoundButton) {
|
||||||
|
|
||||||
|
/** 状态初始化回调事件 */
|
||||||
|
internal var initializeCallback: ((Boolean) -> Unit)? = null
|
||||||
|
|
||||||
|
/** 状态改变回调事件 */
|
||||||
|
internal var changedCallback: ((Boolean) -> Unit)? = null
|
||||||
|
|
||||||
|
/** 应用更改回调事件 */
|
||||||
|
internal var applyChangesCallback: ((Boolean) -> Unit)? = null
|
||||||
|
|
||||||
|
/** 是否启用自动应用更改 */
|
||||||
|
var isAutoApplyChanges = true
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监听状态初始化
|
||||||
|
* @param result 回调结果
|
||||||
|
*/
|
||||||
|
fun onInitialize(result: (Boolean) -> Unit) {
|
||||||
|
initializeCallback = result
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监听状态改变
|
||||||
|
* @param result 回调结果
|
||||||
|
*/
|
||||||
|
fun onChanged(result: (Boolean) -> Unit) {
|
||||||
|
changedCallback = result
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重新初始化 */
|
||||||
|
fun reinitialize() {
|
||||||
|
initializeCallback?.invoke(button.isChecked)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 应用更改并重新初始化 */
|
||||||
|
fun applyChangesAndReinitialize() {
|
||||||
|
applyChanges()
|
||||||
|
reinitialize()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 应用更改 */
|
||||||
|
fun applyChanges() {
|
||||||
|
applyChangesCallback?.invoke(button.isChecked)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消更改 */
|
||||||
|
fun cancelChanges() {
|
||||||
|
button.isChecked = button.isChecked.not()
|
||||||
|
}
|
||||||
|
}
|
@@ -28,7 +28,7 @@ import androidx.core.view.isVisible
|
|||||||
import com.fankes.apperrorstracking.BuildConfig
|
import com.fankes.apperrorstracking.BuildConfig
|
||||||
import com.fankes.apperrorstracking.R
|
import com.fankes.apperrorstracking.R
|
||||||
import com.fankes.apperrorstracking.data.ConfigData
|
import com.fankes.apperrorstracking.data.ConfigData
|
||||||
import com.fankes.apperrorstracking.data.ConfigData.bind
|
import com.fankes.apperrorstracking.data.factory.bind
|
||||||
import com.fankes.apperrorstracking.databinding.ActivityMainBinding
|
import com.fankes.apperrorstracking.databinding.ActivityMainBinding
|
||||||
import com.fankes.apperrorstracking.locale.LocaleString
|
import com.fankes.apperrorstracking.locale.LocaleString
|
||||||
import com.fankes.apperrorstracking.ui.activity.base.BaseActivity
|
import com.fankes.apperrorstracking.ui.activity.base.BaseActivity
|
||||||
@@ -62,21 +62,24 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
|||||||
setOnClickListener { function() }
|
setOnClickListener { function() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/** 显示开发者提示 */
|
||||||
|
if (ConfigData.isShowDeveloperNotice)
|
||||||
|
showDialog {
|
||||||
|
title = LocaleString.developerNotice
|
||||||
|
msg = LocaleString.developerNoticeTip
|
||||||
|
confirmButton(LocaleString.gotIt) { ConfigData.isShowDeveloperNotice = false }
|
||||||
|
noCancelable()
|
||||||
|
}
|
||||||
binding.mainTextVersion.text = LocaleString.moduleVersion(BuildConfig.VERSION_NAME)
|
binding.mainTextVersion.text = LocaleString.moduleVersion(BuildConfig.VERSION_NAME)
|
||||||
binding.mainTextSystemVersion.text = LocaleString.systemVersion(systemVersion)
|
binding.mainTextSystemVersion.text = LocaleString.systemVersion(systemVersion)
|
||||||
binding.onlyShowErrorsInFrontSwitch.bind(ConfigData.ENABLE_ONLY_SHOW_ERRORS_IN_FRONT)
|
binding.onlyShowErrorsInFrontSwitch.bind(ConfigData.ENABLE_ONLY_SHOW_ERRORS_IN_FRONT)
|
||||||
binding.onlyShowErrorsInMainProcessSwitch.bind(ConfigData.ENABLE_ONLY_SHOW_ERRORS_IN_MAIN)
|
binding.onlyShowErrorsInMainProcessSwitch.bind(ConfigData.ENABLE_ONLY_SHOW_ERRORS_IN_MAIN)
|
||||||
binding.alwaysShowsReopenAppOptionsSwitch.bind(ConfigData.ENABLE_ALWAYS_SHOWS_REOPEN_APP_OPTIONS)
|
binding.alwaysShowsReopenAppOptionsSwitch.bind(ConfigData.ENABLE_ALWAYS_SHOWS_REOPEN_APP_OPTIONS)
|
||||||
binding.enableAppsConfigsTemplateSwitch.bind(ConfigData.ENABLE_APP_CONFIG_TEMPLATE) {
|
binding.enableAppsConfigsTemplateSwitch.bind(ConfigData.ENABLE_APP_CONFIG_TEMPLATE) {
|
||||||
binding.mgrAppsConfigsTemplateButton.isVisible = it
|
onInitialize { binding.mgrAppsConfigsTemplateButton.isVisible = it }
|
||||||
|
onChanged { reinitialize() }
|
||||||
}
|
}
|
||||||
binding.enableMaterial3AppErrorsDialogSwitch.bind(ConfigData.ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG)
|
binding.enableMaterial3AppErrorsDialogSwitch.bind(ConfigData.ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG)
|
||||||
/** 设置桌面图标显示隐藏 */
|
|
||||||
binding.hideIconInLauncherSwitch.isChecked = isLauncherIconShowing.not()
|
|
||||||
binding.hideIconInLauncherSwitch.setOnCheckedChangeListener { btn, b ->
|
|
||||||
if (btn.isPressed.not()) return@setOnCheckedChangeListener
|
|
||||||
hideOrShowLauncherIcon(b)
|
|
||||||
}
|
|
||||||
/** 设置匿名统计 */
|
/** 设置匿名统计 */
|
||||||
binding.enableAnonymousStatisticsSwitch.bindAppAnalytics()
|
binding.enableAnonymousStatisticsSwitch.bindAppAnalytics()
|
||||||
/** 系统版本点击事件 */
|
/** 系统版本点击事件 */
|
||||||
@@ -98,14 +101,12 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
|||||||
binding.titleRestartIcon.setOnClickListener { FrameworkTool.restartSystem(context = this) }
|
binding.titleRestartIcon.setOnClickListener { FrameworkTool.restartSystem(context = this) }
|
||||||
/** 项目地址按钮点击事件 */
|
/** 项目地址按钮点击事件 */
|
||||||
binding.titleGithubIcon.setOnClickListener { openBrowser(url = "https://github.com/KitsunePie/AppErrorsTracking") }
|
binding.titleGithubIcon.setOnClickListener { openBrowser(url = "https://github.com/KitsunePie/AppErrorsTracking") }
|
||||||
/** 显示开发者提示 */
|
/** 设置桌面图标显示隐藏 */
|
||||||
if (ConfigData.isShowDeveloperNotice)
|
binding.hideIconInLauncherSwitch.isChecked = isLauncherIconShowing.not()
|
||||||
showDialog {
|
binding.hideIconInLauncherSwitch.setOnCheckedChangeListener { btn, b ->
|
||||||
title = LocaleString.developerNotice
|
if (btn.isPressed.not()) return@setOnCheckedChangeListener
|
||||||
msg = LocaleString.developerNoticeTip
|
hideOrShowLauncherIcon(b)
|
||||||
confirmButton(LocaleString.gotIt) { ConfigData.isShowDeveloperNotice = false }
|
}
|
||||||
noCancelable()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 刷新模块状态 */
|
/** 刷新模块状态 */
|
||||||
|
Reference in New Issue
Block a user