diff --git a/.idea/misc.xml b/.idea/misc.xml
index be0475d..6b0d1f4 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -9,6 +9,7 @@
+
diff --git a/app/src/main/java/com/fankes/coloros/notify/const/Const.kt b/app/src/main/java/com/fankes/coloros/notify/const/Const.kt
index fd3222d..ea36fdc 100644
--- a/app/src/main/java/com/fankes/coloros/notify/const/Const.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/const/Const.kt
@@ -41,7 +41,7 @@ object Const {
const val MODULE_VERSION_CODE = BuildConfig.VERSION_CODE
/** 当前模块的版本校验 */
- const val MODULE_VERSION_VERIFY = "${MODULE_VERSION_NAME}_${MODULE_VERSION_CODE}_202203252250"
+ const val MODULE_VERSION_VERIFY = "${MODULE_VERSION_NAME}_${MODULE_VERSION_CODE}_202203281333"
/** 当前模块的版本校验标签 */
const val MODULE_VERSION_VERIFY_TAG = "module_version_verify"
diff --git a/app/src/main/java/com/fankes/coloros/notify/ui/activity/ConfigureActivity.kt b/app/src/main/java/com/fankes/coloros/notify/ui/activity/ConfigureActivity.kt
index c0a4ac5..90e2754 100644
--- a/app/src/main/java/com/fankes/coloros/notify/ui/activity/ConfigureActivity.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/ui/activity/ConfigureActivity.kt
@@ -240,4 +240,18 @@ class ConfigureActivity : BaseActivity() {
else iconAllDatas.filter {
it.appName.lowercase().contains(filterText.lowercase()) || it.packageName.lowercase().contains(filterText.lowercase())
}
+
+ override fun onBackPressed() {
+ if (MainActivity.isActivityLive.not())
+ showDialog {
+ title = "提示"
+ msg = "要返回模块主页吗?"
+ confirmButton {
+ super.onBackPressed()
+ navigate()
+ }
+ cancelButton { super.onBackPressed() }
+ }
+ else super.onBackPressed()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/fankes/coloros/notify/ui/activity/MainActivity.kt b/app/src/main/java/com/fankes/coloros/notify/ui/activity/MainActivity.kt
index ccbf018..c3c0888 100644
--- a/app/src/main/java/com/fankes/coloros/notify/ui/activity/MainActivity.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/ui/activity/MainActivity.kt
@@ -44,6 +44,9 @@ class MainActivity : BaseActivity() {
companion object {
+ /** 窗口是否启动 */
+ internal var isActivityLive = false
+
/** 模块版本 */
private const val moduleVersion = BuildConfig.VERSION_NAME
@@ -58,6 +61,11 @@ class MainActivity : BaseActivity() {
private var isModuleValied = false
override fun onCreate() {
+ /** 设置可用性 */
+ isActivityLive = true
+ /** 设置文本 */
+ binding.mainTextVersion.text = "模块版本:$moduleVersion $pendingFlag"
+ binding.mainTextColorOsVersion.text = "系统版本:$colorOSFullVersion"
/** 检查更新 */
GithubReleaseTool.checkingForUpdate(context = this, moduleVersion) { version, function ->
binding.mainTextReleaseVersion.apply {
@@ -66,9 +74,6 @@ class MainActivity : BaseActivity() {
setOnClickListener { function() }
}
}
- /** 设置文本 */
- binding.mainTextVersion.text = "模块版本:$moduleVersion $pendingFlag"
- binding.mainTextColorOsVersion.text = "系统版本:$colorOSFullVersion"
when {
/** 判断是否为 ColorOS 系统 */
isNotColorOS ->
@@ -110,12 +115,14 @@ class MainActivity : BaseActivity() {
noCancelable()
}
}
- /** 获取 Sp 存储的信息 */
+ var notifyIconAutoSyncTime = modulePrefs.get(DataConst.NOTIFY_ICON_FIX_AUTO_TIME)
binding.devNotifyConfigItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE)
binding.a12StyleConfigItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE)
binding.notifyIconConfigItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE)
binding.notifyIconFixButton.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX)
binding.notifyIconFixNotifyItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX)
+ binding.notifyIconAutoSyncItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX)
+ binding.notifyIconAutoSyncChildItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX_AUTO)
binding.devNotifyConfigSwitch.isChecked = modulePrefs.get(DataConst.REMOVE_DEV_NOTIFY)
binding.crcpNotifyConfigSwitch.isChecked = modulePrefs.get(DataConst.REMOVE_CHANGECP_NOTIFY)
binding.dndNotifyConfigSwitch.isChecked = modulePrefs.get(DataConst.REMOVE_DNDALERT_NOTIFY)
@@ -125,6 +132,8 @@ class MainActivity : BaseActivity() {
binding.hideIconInLauncherSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_HIDE_ICON)
binding.notifyIconFixSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX)
binding.notifyIconFixNotifySwitch.isChecked = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX_NOTIFY)
+ binding.notifyIconAutoSyncSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX_AUTO)
+ binding.notifyIconAutoSyncText.text = notifyIconAutoSyncTime
binding.moduleEnableSwitch.setOnCheckedChangeListener { btn, b ->
if (btn.isPressed.not()) return@setOnCheckedChangeListener
modulePrefs.put(DataConst.ENABLE_MODULE, b)
@@ -153,6 +162,7 @@ class MainActivity : BaseActivity() {
modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FIX, b)
binding.notifyIconFixButton.isVisible = b
binding.notifyIconFixNotifyItem.isVisible = b
+ binding.notifyIconAutoSyncItem.isVisible = b
SystemUITool.refreshSystemUI(context = this)
}
binding.notifyIconFixNotifySwitch.setOnCheckedChangeListener { btn, b ->
@@ -180,8 +190,36 @@ class MainActivity : BaseActivity() {
modulePrefs.put(DataConst.ENABLE_ANDROID12_STYLE, b)
SystemUITool.refreshSystemUI(context = this)
}
+ binding.notifyIconAutoSyncSwitch.setOnCheckedChangeListener { btn, b ->
+ if (btn.isPressed.not()) return@setOnCheckedChangeListener
+ modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FIX_AUTO, b)
+ binding.notifyIconAutoSyncChildItem.isVisible = b
+ SystemUITool.refreshSystemUI(context = this, isRefreshCacheOnly = true)
+ }
/** 通知图标优化名单按钮点击事件 */
binding.notifyIconFixButton.setOnClickListener { navigate() }
+ /** 自动更新在线规则修改时间按钮点击事件 */
+ binding.notifyIconAutoSyncButton.setOnClickListener {
+ showTimePicker(notifyIconAutoSyncTime) {
+ showDialog {
+ title = "每天 $it 自动更新"
+ msg = "设置保存后将在每天 $it 自动同步名单到最新云端数据,若数据已是最新则不会显示任何提示,否则会发送一条通知。\n\n" +
+ "请确保:\n\n" +
+ "1.模块没有被禁止前台以及后台联网权限\n" +
+ "2.模块没有被禁止被其它 APP 关联唤醒\n" +
+ "3.模块的系统通知权限已开启\n\n" +
+ "模块无需保持在后台运行,到达同步时间后会自动启动,如果到达时间后模块正在运行则会自动取消本次计划任务。"
+ confirmButton(text = "保存设置") {
+ notifyIconAutoSyncTime = it
+ binding.notifyIconAutoSyncText.text = it
+ modulePrefs.put(DataConst.NOTIFY_ICON_FIX_AUTO_TIME, it)
+ SystemUITool.refreshSystemUI(context, isRefreshCacheOnly = true)
+ }
+ cancelButton()
+ noCancelable()
+ }
+ }
+ }
/** 重启按钮点击事件 */
binding.titleRestartIcon.setOnClickListener { SystemUITool.restartSystemUI(context = this) }
/** 项目地址按钮点击事件 */
diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/factory/DialogBuilderFactory.kt b/app/src/main/java/com/fankes/coloros/notify/utils/factory/DialogBuilderFactory.kt
index f51c37e..68d35a7 100644
--- a/app/src/main/java/com/fankes/coloros/notify/utils/factory/DialogBuilderFactory.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/utils/factory/DialogBuilderFactory.kt
@@ -25,6 +25,7 @@
package com.fankes.coloros.notify.utils.factory
import android.app.Dialog
+import android.app.TimePickerDialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
@@ -50,6 +51,14 @@ import com.highcapable.yukihookapi.hook.type.android.LayoutInflaterClass
fun Context.showDialog(isUseBlackTheme: Boolean = false, it: DialogBuilder.() -> Unit) =
DialogBuilder(this, isUseBlackTheme).apply(it).show()
+/**
+ * 显示时间选择对话框
+ * @param timeSet 当前时间 - 不写将使用当前时间格式:HH:mm
+ * @param it 回调 - 小时与分钟 HH:mm
+ */
+fun Context.showTimePicker(timeSet: String = "", it: (String) -> Unit) =
+ TimePickerDialog(this, { _, h, m -> it("${h.autoZero}:${m.autoZero}") }, timeSet.hour, timeSet.minute, true).show()
+
/**
* 对话框构造器
* @param context 实例
diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/factory/FunctionFactory.kt b/app/src/main/java/com/fankes/coloros/notify/utils/factory/FunctionFactory.kt
index 9651709..22171fc 100644
--- a/app/src/main/java/com/fankes/coloros/notify/utils/factory/FunctionFactory.kt
+++ b/app/src/main/java/com/fankes/coloros/notify/utils/factory/FunctionFactory.kt
@@ -193,6 +193,34 @@ fun Context.findAppName(name: String) =
fun Context.findAppIcon(name: String) =
safeOfNull { packageManager?.getPackageInfo(name, 0)?.applicationInfo?.loadIcon(packageManager) }
+/**
+ * 对数值自动补零
+ * @return [String]
+ */
+val Int.autoZero: String get() = if (this < 10) "0$this" else toString()
+
+/**
+ * 从字符串获取小时
+ * @return [Int]
+ */
+val String.hour
+ get() = safeOfNan {
+ Calendar.getInstance().also {
+ it.time = SimpleDateFormat("HH:mm", Locale.CHINA).parse(this) as Date
+ }.get(Calendar.HOUR_OF_DAY)
+ }
+
+/**
+ * 从字符串获取分钟
+ * @return [Int]
+ */
+val String.minute
+ get() = safeOfNan {
+ Calendar.getInstance().also {
+ it.time = SimpleDateFormat("HH:mm", Locale.CHINA).parse(this) as Date
+ }.get(Calendar.MINUTE)
+ }
+
/**
* 是否关闭了通知权限
* @return [Boolean]
diff --git a/app/src/main/res/drawable/ic_system_clock.xml b/app/src/main/res/drawable/ic_system_clock.xml
new file mode 100644
index 0000000..338b70a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_system_clock.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index e07ffbc..68d085f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,7 +7,7 @@
android:background="@color/colorThemeBackground"
android:orientation="vertical"
tools:context=".ui.activity.MainActivity"
- tools:ignore="HardcodedText,UseCompoundDrawables,ContentDescription">
+ tools:ignore="HardcodedText,UseCompoundDrawables,ContentDescription,TooManyViews">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+