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" /> + + + + + + + + + + + + + + + + + +