diff --git a/.idea/misc.xml b/.idea/misc.xml
index e4bca2a..c8003ef 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -15,6 +15,7 @@
+
@@ -22,7 +23,7 @@
-
+
diff --git a/app/src/main/java/com/fankes/miui/notify/const/Const.kt b/app/src/main/java/com/fankes/miui/notify/const/Const.kt
index 03ae095..0722088 100644
--- a/app/src/main/java/com/fankes/miui/notify/const/Const.kt
+++ b/app/src/main/java/com/fankes/miui/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}_202203281323"
/** 当前模块的版本校验标签 */
const val MODULE_VERSION_VERIFY_TAG = "module_version_verify"
diff --git a/app/src/main/java/com/fankes/miui/notify/ui/activity/ConfigureActivity.kt b/app/src/main/java/com/fankes/miui/notify/ui/activity/ConfigureActivity.kt
index ef5b794..cc81e0b 100644
--- a/app/src/main/java/com/fankes/miui/notify/ui/activity/ConfigureActivity.kt
+++ b/app/src/main/java/com/fankes/miui/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/miui/notify/ui/activity/MainActivity.kt b/app/src/main/java/com/fankes/miui/notify/ui/activity/MainActivity.kt
index a921025..03f354b 100644
--- a/app/src/main/java/com/fankes/miui/notify/ui/activity/MainActivity.kt
+++ b/app/src/main/java/com/fankes/miui/notify/ui/activity/MainActivity.kt
@@ -46,6 +46,9 @@ class MainActivity : BaseActivity() {
companion object {
+ /** 窗口是否启动 */
+ internal var isActivityLive = false
+
/** 模块版本 */
private const val moduleVersion = Const.MODULE_VERSION_NAME
@@ -60,6 +63,8 @@ class MainActivity : BaseActivity() {
private var isModuleValied = false
override fun onCreate() {
+ /** 设置可用性 */
+ isActivityLive = true
/** 设置文本 */
binding.mainTextVersion.text = "模块版本:$moduleVersion $pendingFlag"
binding.mainTextMiuiVersion.text = "系统版本:$miuiFullVersion"
@@ -130,22 +135,26 @@ class MainActivity : BaseActivity() {
noCancelable()
}
}
- /** 获取 Sp 存储的信息 */
var statusBarIconCount = modulePrefs.get(DataConst.HOOK_STATUS_ICON_COUNT)
+ var notifyIconAutoSyncTime = modulePrefs.get(DataConst.NOTIFY_ICON_FIX_AUTO_TIME)
binding.colorIconHookItem.isVisible = modulePrefs.get(DataConst.ENABLE_MODULE)
binding.statusIconCountItem.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.statusIconCountSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_HOOK_STATUS_ICON_COUNT)
binding.statusIconCountChildItem.isVisible = modulePrefs.get(DataConst.ENABLE_HOOK_STATUS_ICON_COUNT)
+ binding.notifyIconAutoSyncChildItem.isVisible = modulePrefs.get(DataConst.ENABLE_NOTIFY_ICON_FIX_AUTO)
binding.moduleEnableSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_MODULE)
binding.moduleEnableLogSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_MODULE_LOG)
binding.hideIconInLauncherSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_HIDE_ICON)
binding.colorIconCompatSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_COLOR_ICON_COMPAT)
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.statusIconCountText.text = statusBarIconCount.toString()
+ binding.notifyIconAutoSyncText.text = notifyIconAutoSyncTime
binding.moduleEnableSwitch.setOnCheckedChangeListener { btn, b ->
if (btn.isPressed.not()) return@setOnCheckedChangeListener
modulePrefs.put(DataConst.ENABLE_MODULE, b)
@@ -185,6 +194,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 ->
@@ -192,6 +202,12 @@ class MainActivity : BaseActivity() {
modulePrefs.put(DataConst.ENABLE_NOTIFY_ICON_FIX_NOTIFY, b)
SystemUITool.refreshSystemUI(context = this, isRefreshCacheOnly = true)
}
+ 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() }
/** 设置警告 */
@@ -222,6 +238,28 @@ class MainActivity : BaseActivity() {
cancelButton()
}
}
+ /** 自动更新在线规则修改时间按钮点击事件 */
+ 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/miui/notify/utils/factory/DialogBuilderFactory.kt b/app/src/main/java/com/fankes/miui/notify/utils/factory/DialogBuilderFactory.kt
index 2da31e9..29e0752 100644
--- a/app/src/main/java/com/fankes/miui/notify/utils/factory/DialogBuilderFactory.kt
+++ b/app/src/main/java/com/fankes/miui/notify/utils/factory/DialogBuilderFactory.kt
@@ -25,6 +25,7 @@
package com.fankes.miui.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/miui/notify/utils/factory/FunctionFactory.kt b/app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt
index 569cf5f..9440a03 100644
--- a/app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt
+++ b/app/src/main/java/com/fankes/miui/notify/utils/factory/FunctionFactory.kt
@@ -237,6 +237,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 0dbd200..0267ed6 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -568,6 +568,91 @@
android:textColor="@color/colorTextDark"
android:textSize="12sp" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+