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