From 73246523e3e07b10a605ef8e0a72bce34314c6f4 Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Sun, 27 Feb 2022 23:42:33 +0800 Subject: [PATCH] Initial commit --- .gitignore | 15 + .idea/.gitignore | 3 + .idea/compiler.xml | 6 + .idea/gradle.xml | 20 + .idea/inspectionProfiles/Project_Default.xml | 10 + .idea/misc.xml | 20 + README.md | 63 ++ app/.gitignore | 1 + app/build.gradle | 80 +++ app/proguard-rules.pro | 48 ++ .../coloros/notify/ExampleInstrumentedTest.kt | 24 + app/src/main/AndroidManifest.xml | 55 ++ app/src/main/assets/xposed_init | 1 + app/src/main/assets/yukihookapi_init | 1 + app/src/main/ic_launcher-playstore.png | Bin 0 -> 14532 bytes .../notify/application/CNNApplication.kt | 48 ++ .../coloros/notify/bean/IconDataBean.kt | 50 ++ .../fankes/coloros/notify/hook/HookConst.kt | 37 ++ .../fankes/coloros/notify/hook/HookEntry.kt | 373 ++++++++++++ .../notify/hook/factory/DataFactory.kt | 70 +++ .../coloros/notify/param/IconPackParams.kt | 103 ++++ .../coloros/notify/ui/ConfigureActivity.kt | 289 +++++++++ .../fankes/coloros/notify/ui/MainActivity.kt | 192 ++++++ .../coloros/notify/ui/base/BaseActivity.kt | 47 ++ .../coloros/notify/utils/ClientRequestTool.kt | 110 ++++ .../coloros/notify/utils/DialogBuilder.kt | 113 ++++ .../coloros/notify/utils/SystemUITool.kt | 69 +++ .../com/fankes/coloros/notify/utils/Utils.kt | 331 ++++++++++ .../drawable/drawabletoolbox/Compatible.kt | 293 +++++++++ .../drawable/drawabletoolbox/Constants.kt | 30 + .../drawabletoolbox/DrawableBuilder.kt | 490 +++++++++++++++ .../drawabletoolbox/DrawableProperties.kt | 222 +++++++ .../drawabletoolbox/DrawableWrapperBuilder.kt | 35 ++ .../drawable/drawabletoolbox/FlipDrawable.kt | 79 +++ .../drawabletoolbox/FlipDrawableBuilder.kt | 36 ++ .../drawabletoolbox/LayerDrawableBuilder.kt | 182 ++++++ .../PathShapeDrawableBuilder.kt | 62 ++ .../drawabletoolbox/RippleDrawableBuilder.kt | 74 +++ .../drawabletoolbox/RotateDrawableBuilder.kt | 53 ++ .../drawabletoolbox/ScaleDrawableBuilder.kt | 46 ++ .../StateListDrawableBuilder.kt | 61 ++ .../coloros/notify/view/MaterialSwitch.kt | 69 +++ .../main/res/drawable-night/bg_dark_round.xml | 6 + .../res/drawable-night/bg_permotion_round.xml | 6 + app/src/main/res/drawable/bg_button_round.xml | 10 + app/src/main/res/drawable/bg_dark_round.xml | 6 + app/src/main/res/drawable/bg_green_round.xml | 6 + .../main/res/drawable/bg_permotion_round.xml | 6 + app/src/main/res/drawable/bg_yellow_round.xml | 6 + app/src/main/res/layout/activity_config.xml | 172 ++++++ app/src/main/res/layout/activity_main.xml | 576 ++++++++++++++++++ app/src/main/res/layout/adapter_config.xml | 87 +++ app/src/main/res/layout/dia_icon_filter.xml | 24 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1560 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1261 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3510 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1132 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 793 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2234 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2161 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 1751 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5028 bytes app/src/main/res/mipmap-xxhdpi/bg_qr_pay.png | Bin 0 -> 206098 bytes app/src/main/res/mipmap-xxhdpi/ic_about.png | Bin 0 -> 4357 bytes app/src/main/res/mipmap-xxhdpi/ic_back.png | Bin 0 -> 3633 bytes app/src/main/res/mipmap-xxhdpi/ic_filter.png | Bin 0 -> 3330 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3361 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 2863 bytes .../res/mipmap-xxhdpi/ic_launcher_icon.png | Bin 0 -> 7020 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 7874 bytes .../main/res/mipmap-xxhdpi/ic_page_bottom.png | Bin 0 -> 3972 bytes .../main/res/mipmap-xxhdpi/ic_page_top.png | Bin 0 -> 2991 bytes app/src/main/res/mipmap-xxhdpi/ic_restart.png | Bin 0 -> 4880 bytes app/src/main/res/mipmap-xxhdpi/ic_success.png | Bin 0 -> 4948 bytes app/src/main/res/mipmap-xxhdpi/ic_sync.png | Bin 0 -> 3116 bytes app/src/main/res/mipmap-xxhdpi/ic_warn.png | Bin 0 -> 4102 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 4666 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 4223 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 11368 bytes app/src/main/res/values-night/color.xml | 6 + app/src/main/res/values-night/themes.xml | 16 + app/src/main/res/values/color.xml | 6 + app/src/main/res/values/colors.xml | 11 + .../res/values/ic_launcher_background.xml | 4 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/themes.xml | 16 + .../fankes/coloros/notify/ExampleUnitTest.kt | 17 + build.gradle | 14 + gradle.properties | 23 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++++++ gradlew.bat | 89 +++ keystore/public | Bin 0 -> 2423 bytes settings.gradle | 19 + 97 files changed, 5241 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 README.md create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/fankes/coloros/notify/ExampleInstrumentedTest.kt create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/assets/xposed_init create mode 100644 app/src/main/assets/yukihookapi_init create mode 100644 app/src/main/ic_launcher-playstore.png create mode 100644 app/src/main/java/com/fankes/coloros/notify/application/CNNApplication.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/bean/IconDataBean.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/hook/HookConst.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/hook/HookEntry.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/hook/factory/DataFactory.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/param/IconPackParams.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/ui/ConfigureActivity.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/ui/MainActivity.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/ui/base/BaseActivity.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/utils/ClientRequestTool.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/utils/DialogBuilder.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/utils/SystemUITool.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/utils/Utils.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/Compatible.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/Constants.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableBuilder.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableProperties.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableWrapperBuilder.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/FlipDrawable.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/FlipDrawableBuilder.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/LayerDrawableBuilder.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/PathShapeDrawableBuilder.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/RippleDrawableBuilder.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/RotateDrawableBuilder.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/ScaleDrawableBuilder.kt create mode 100755 app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/StateListDrawableBuilder.kt create mode 100644 app/src/main/java/com/fankes/coloros/notify/view/MaterialSwitch.kt create mode 100755 app/src/main/res/drawable-night/bg_dark_round.xml create mode 100644 app/src/main/res/drawable-night/bg_permotion_round.xml create mode 100644 app/src/main/res/drawable/bg_button_round.xml create mode 100755 app/src/main/res/drawable/bg_dark_round.xml create mode 100755 app/src/main/res/drawable/bg_green_round.xml create mode 100644 app/src/main/res/drawable/bg_permotion_round.xml create mode 100755 app/src/main/res/drawable/bg_yellow_round.xml create mode 100644 app/src/main/res/layout/activity_config.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/adapter_config.xml create mode 100644 app/src/main/res/layout/dia_icon_filter.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100755 app/src/main/res/mipmap-xxhdpi/bg_qr_pay.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_about.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_back.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_filter.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_icon.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_page_bottom.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_page_top.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_restart.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_success.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_sync.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_warn.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values-night/color.xml create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values/color.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/ic_launcher_background.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/test/java/com/fankes/coloros/notify/ExampleUnitTest.kt create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 keystore/public create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..526b4c2 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..98f4325 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d74f0d9 --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +# ColorOS 通知图标增强 + +![Eclipse Marketplace](https://img.shields.io/badge/build-passing-brightgreen) +![Eclipse Marketplace](https://img.shields.io/badge/license-AGPL3.0-blue) +![Eclipse Marketplace](https://img.shields.io/badge/version-v1.0-green) +

+ +
+Optimize notification icons for ColorOS and adapt to native notification icon specifications.
+为 ColorOS 优化通知图标以及适配原生通知图标规范,理论支持 OxygenOS 和 RealmeOS。 + +# 开始使用 + +点击下载最新版本 +![Eclipse Marketplace](https://img.shields.io/badge/download-v1.0-green) +

+⚠️ 适配说明
+ +- 此模块仅支持 LSPosed(作用域“系统界面”)、~~EdXposed(随时停止支持)~~、不支持太极无极 +- 目前仅在 ColorOS 12 for OnePlus 上测试通过,如有问题请提交 `issues` +- 建议在不低于 ColorOS 11 的版本上使用 + +# 请勿用于非法用途 + +- 本模块完全开源免费,如果好用你可以打赏支持开发,但是请不要用于非法用途。 +- 本模块发布地址仅有 [Xposed-Modules-Repo](https://github.com/Xposed-Modules-Repo/com.fankes.coloros.notify/releases)、 + [Release](https://github.com/fankes/ColorOSNotifyIcon/releases) + 及[蓝奏云](https://fankes.lanzouy.com/b030rvjyf),从其他非正规渠道下载到的版本或对您造成任何影响均与我们无关。 + +# 贡献通知图标优化名单 + +此项目是 `AndroidNotifyIconAdapt` 项目的一部分,详情请参考下方。
+ +- [Android 通知图标规范适配](https://github.com/fankes/AndroidNotifyIconAdapt) + +# 历史背景 + +继 MIUI 之后的第二大系统 ColorOS 虽然支持原生通知图标,但是第三方推送五颜六色的图标系统并没有做适配,甚至系统自己的图标都是彩色的,极其不友好。

+而且从 ColorOS 12 开始,原生图标丢失了着色属性,这也是一种对原生 Android 生态的破坏。 + +# 许可证 + +- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) + +``` +Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + +This program is free 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 (at your option) any later version. + +This program 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 +along with this program. If not, see . +``` + +Powered by [YukiHookAPI](https://github.com/fankes/YukiHookAPI)

+版权所有 © 2019-2022 Fankes Studio(qzmmcn@163.com) \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..2c7d9bd --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,80 @@ +plugins { + id 'com.android.application' + id 'org.jetbrains.kotlin.android' + id 'com.google.devtools.ksp' version '1.6.10-1.0.2' +} + +android { + compileSdk 31 + + signingConfigs { + debug { + storeFile file('../keystore/public') + storePassword '123456' + keyAlias 'public' + keyPassword '123456' + v1SigningEnabled true + v2SigningEnabled true + } + } + + defaultConfig { + applicationId "com.fankes.coloros.notify" + minSdk 29 + targetSdk 31 + versionCode rootProject.ext.appVersionCode + versionName rootProject.ext.appVersionName + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + signingConfig signingConfigs.debug + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } +} + +/** 移除无效耗时 lint Task */ +tasks.whenTaskAdded { + task -> if (task.name == "lintVitalRelease") task.enabled = false +} + +/** 移除无效耗时 lint Task */ +tasks.whenTaskAdded { + task -> if (task.name == "lintVitalAnalyzeRelease") task.enabled = false +} + +/** 移除无效耗时 lint Task */ +tasks.whenTaskAdded { + task -> if (task.name == "lintVitalReportRelease") task.enabled = false +} + +dependencies { + implementation "com.github.topjohnwu.libsu:core:3.1.2" + implementation 'androidx.annotation:annotation:1.3.0' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' + compileOnly 'de.robv.android.xposed:api:82' + implementation 'com.highcapable.yukihookapi:api:1.0.2' + ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0.2' + implementation 'com.geyifeng.immersionbar:immersionbar:3.2.0' + implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.0' + implementation 'com.squareup.okhttp3:okhttp:4.9.3' + implementation 'androidx.core:core-ktx:1.7.0' + implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'com.google.android.material:material:1.5.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..786522e --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,48 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +-dontwarn +-ignorewarnings +-optimizationpasses 10 +-dontusemixedcaseclassnames +-dontoptimize +-verbose +-overloadaggressively +-repackageclasses o +-allowaccessmodification +-adaptclassstrings +-adaptresourcefilenames +-adaptresourcefilecontents + +#-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* +-renamesourcefileattribute H +-keepattributes SourceFile,LineNumberTable + +-keep class android.support** +-keep class androidx** + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference \ No newline at end of file diff --git a/app/src/androidTest/java/com/fankes/coloros/notify/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/fankes/coloros/notify/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..19afee1 --- /dev/null +++ b/app/src/androidTest/java/com/fankes/coloros/notify/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.fankes.coloros.notify + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.fankes.coloros.notify", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..57b7e6e --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/xposed_init b/app/src/main/assets/xposed_init new file mode 100644 index 0000000..0874363 --- /dev/null +++ b/app/src/main/assets/xposed_init @@ -0,0 +1 @@ +com.fankes.coloros.notify.hook.HookEntry_YukiHookXposedInit \ No newline at end of file diff --git a/app/src/main/assets/yukihookapi_init b/app/src/main/assets/yukihookapi_init new file mode 100644 index 0000000..c5e2fb5 --- /dev/null +++ b/app/src/main/assets/yukihookapi_init @@ -0,0 +1 @@ +com.fankes.coloros.notify.hook.HookEntry \ No newline at end of file diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..44a3a0a5f196a0865f7dcd8fb897f67818df94cb GIT binary patch literal 14532 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 literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/fankes/coloros/notify/application/CNNApplication.kt b/app/src/main/java/com/fankes/coloros/notify/application/CNNApplication.kt new file mode 100644 index 0000000..20ea087 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/application/CNNApplication.kt @@ -0,0 +1,48 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/24. + */ +@file:Suppress("unused") + +package com.fankes.coloros.notify.application + +import android.app.Application +import androidx.appcompat.app.AppCompatDelegate + +class CNNApplication : Application() { + + companion object { + + /** 全局静态实例 */ + private var context: CNNApplication? = null + + /** 调用全局静态实例 */ + val appContext get() = context ?: error("App is death") + } + + override fun onCreate() { + super.onCreate() + /** 设置静态实例 */ + context = this + /** 跟随系统夜间模式 */ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/bean/IconDataBean.kt b/app/src/main/java/com/fankes/coloros/notify/bean/IconDataBean.kt new file mode 100644 index 0000000..04da6f0 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/bean/IconDataBean.kt @@ -0,0 +1,50 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/30. + */ +package com.fankes.coloros.notify.bean + +import android.graphics.Bitmap +import com.fankes.coloros.notify.utils.base64 +import java.io.Serializable + +/** + * 通知栏小图标 bean + * @param appName APP 名称 - 仅限默认语言区域 + * @param packageName 包名 + * @param iconBitmap 图标位图 + * @param iconColor 通知栏中显示的图标颜色 - 设置为 0 使用系统默认颜色 + * @param contributorName 贡献者昵称 + * @param isEnabled 是否默认启用替换彩色图标 - 关闭后将全部停止替换 + * @param isEnabledAll 是否默认启用替换全部图标 + */ +data class IconDataBean( + var appName: String, + var packageName: String, + var iconBitmap: Bitmap, + var iconColor: Int = 0, + var contributorName: String, + var isEnabled: Boolean, + var isEnabledAll: Boolean, +) : Serializable { + fun toEnabledName() = ("$appName$packageName").base64 + "_enable" + fun toEnabledAllName() = ("$appName$packageName").base64 + "_enable_all" +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/hook/HookConst.kt b/app/src/main/java/com/fankes/coloros/notify/hook/HookConst.kt new file mode 100644 index 0000000..fe3cb50 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/hook/HookConst.kt @@ -0,0 +1,37 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/24. + */ +package com.fankes.coloros.notify.hook + +object HookConst { + + const val ENABLE_MODULE = "_enable_module" + const val ENABLE_MODULE_LOG = "_enable_module_log" + const val ENABLE_HIDE_ICON = "_hide_icon" + const val ENABLE_ANDROID12_STYLE = "_notify_android12_style" + const val ENABLE_NOTIFY_ICON_FIX = "_notify_icon_fix" + const val REMOVE_DEV_NOTIFY = "_remove_dev_notify" + const val REMOVE_CHANGECP_NOTIFY = "_remove_charge_complete_notify" + const val NOTIFY_ICON_DATAS = "_notify_icon_datas" + + const val SYSTEMUI_PACKAGE_NAME = "com.android.systemui" +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/hook/HookEntry.kt b/app/src/main/java/com/fankes/coloros/notify/hook/HookEntry.kt new file mode 100644 index 0000000..2ed4590 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/hook/HookEntry.kt @@ -0,0 +1,373 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/2/26. + */ +package com.fankes.coloros.notify.hook + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.Color +import android.graphics.drawable.Drawable +import android.graphics.drawable.Icon +import android.graphics.drawable.VectorDrawable +import android.service.notification.StatusBarNotification +import android.widget.ImageView +import androidx.core.graphics.drawable.toBitmap +import com.fankes.coloros.notify.bean.IconDataBean +import com.fankes.coloros.notify.hook.HookConst.ENABLE_ANDROID12_STYLE +import com.fankes.coloros.notify.hook.HookConst.ENABLE_MODULE +import com.fankes.coloros.notify.hook.HookConst.ENABLE_MODULE_LOG +import com.fankes.coloros.notify.hook.HookConst.ENABLE_NOTIFY_ICON_FIX +import com.fankes.coloros.notify.hook.HookConst.REMOVE_CHANGECP_NOTIFY +import com.fankes.coloros.notify.hook.HookConst.REMOVE_DEV_NOTIFY +import com.fankes.coloros.notify.hook.HookConst.SYSTEMUI_PACKAGE_NAME +import com.fankes.coloros.notify.hook.factory.isAppNotifyHookAllOf +import com.fankes.coloros.notify.hook.factory.isAppNotifyHookOf +import com.fankes.coloros.notify.param.IconPackParams +import com.fankes.coloros.notify.utils.* +import com.fankes.coloros.notify.utils.drawable.drawabletoolbox.DrawableBuilder +import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed +import com.highcapable.yukihookapi.hook.bean.VariousClass +import com.highcapable.yukihookapi.hook.factory.configs +import com.highcapable.yukihookapi.hook.factory.encase +import com.highcapable.yukihookapi.hook.factory.field +import com.highcapable.yukihookapi.hook.factory.method +import com.highcapable.yukihookapi.hook.log.loggerD +import com.highcapable.yukihookapi.hook.log.loggerW +import com.highcapable.yukihookapi.hook.param.PackageParam +import com.highcapable.yukihookapi.hook.type.android.ContextClass +import com.highcapable.yukihookapi.hook.type.android.DrawableClass +import com.highcapable.yukihookapi.hook.type.android.IconClass +import com.highcapable.yukihookapi.hook.type.android.ImageViewClass +import com.highcapable.yukihookapi.hook.type.java.BooleanType +import com.highcapable.yukihookapi.hook.type.java.IntType +import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy + +@InjectYukiHookWithXposed +class HookEntry : YukiHookXposedInitProxy { + + companion object { + + /** 原生存在的类 */ + private const val ContrastColorUtilClass = "com.android.internal.util.ContrastColorUtil" + + /** 原生存在的类 */ + private const val NotificationUtilsClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.NotificationUtils" + + /** 原生存在的类 */ + private const val NotificationEntryClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.collection.NotificationEntry" + + /** 原生存在的类 */ + private const val StatusBarIconClass = "com.android.internal.statusbar.StatusBarIcon" + + /** 原生存在的类 */ + private const val IconBuilderClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.icon.IconBuilder" + + /** 原生存在的类 */ + private const val IconManagerClass = "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.icon.IconManager" + + /** ColorOS 存在的类 */ + private const val OplusContrastColorUtilClass = "com.oplusos.util.OplusContrastColorUtil" + + /** ColorOS 存在的类 */ + private const val OplusPowerNotificationWarningsClass = + "com.oplusos.systemui.notification.power.OplusPowerNotificationWarnings" + + /** ColorOS 存在的类 */ + private const val SystemPromptControllerClass = "com.oplusos.systemui.statusbar.policy.SystemPromptController" + + /** 根据多个版本存在不同的包名相同的类 */ + private val ExpandableNotificationRowClass = VariousClass( + "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.row.ExpandableNotificationRow", + "$SYSTEMUI_PACKAGE_NAME.statusbar.ExpandableNotificationRow" + ) + + /** 根据多个版本存在不同的包名相同的类 */ + private val NotificationViewWrapperClass = VariousClass( + "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.row.wrapper.NotificationViewWrapper", + "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.NotificationViewWrapper" + ) + + /** 根据多个版本存在不同的包名相同的类 */ + private val NotificationHeaderViewWrapperClass = VariousClass( + "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.row.wrapper.NotificationHeaderViewWrapper", + "$SYSTEMUI_PACKAGE_NAME.statusbar.notification.NotificationHeaderViewWrapper" + ) + } + + /** 缓存的通知优化图标数组 */ + private var iconDatas = ArrayList() + + /** + * 获取推送通知的应用名称 + * @param packageName APP 包名 + * @return [String] + */ + private fun Context.findAppName(packageName: String) = safeOf(default = "") { + packageManager.getPackageInfo(packageName, 0).applicationInfo.loadLabel(packageManager) + } + + /** + * 打印日志 + * @param tag 标识 + * @param context 实例 + * @param packageName APP 包名 + * @param isCustom 是否为通知优化生效图标 + * @param isGrayscale 是否为灰度图标 + */ + private fun PackageParam.printLogcat( + tag: String, + context: Context, + packageName: String, + isCustom: Boolean, + isGrayscale: Boolean + ) { + if (prefs.getBoolean(ENABLE_MODULE_LOG)) loggerD( + msg = "$tag --> [${context.findAppName(packageName)}][$packageName] " + + "custom [$isCustom] " + + "grayscale [$isGrayscale]" + ) + } + + /** + * - 这个是修复彩色图标的关键核心代码判断 + * + * 判断是否为灰度图标 - 反射执行系统方法 + * @param context 实例 + * @param drawable 要判断的图标 + * @return [Boolean] + */ + private fun PackageParam.isGrayscaleIcon(context: Context?, drawable: Drawable?) = + ContrastColorUtilClass.clazz.let { + drawable is VectorDrawable || it.method { + name = "isGrayscaleIcon" + param(DrawableClass) + }.get(it.method { + name = "getInstance" + param(ContextClass) + }.get().invoke(context)).invoke(drawable) ?: false + } + + /** + * 自动适配状态栏、通知栏自定义小图标 + * @param isGrayscaleIcon 是否为灰度图标 + * @param packageName APP 包名 + * @return [Pair] - ([Bitmap] 位图,[Int] 颜色) + */ + private fun PackageParam.compatCustomIcon(isGrayscaleIcon: Boolean, packageName: String): Pair { + var customPair: Pair? = null + if (prefs.getBoolean(ENABLE_NOTIFY_ICON_FIX, default = true)) + run { + if (iconDatas.isNotEmpty()) + iconDatas.forEach { + if (packageName == it.packageName && isAppNotifyHookOf(it)) { + if (!isGrayscaleIcon || isAppNotifyHookAllOf(it)) + customPair = Pair(it.iconBitmap, it.iconColor) + return@run + } + } + } + return customPair ?: Pair(null, 0) + } + + /** + * 自动适配状态栏小图标 + * @param context 实例 + * @param isGrayscaleIcon 是否为灰度图标 + * @param packageName APP 包名 + * @param drawable 原始图标 + * @return [Bitmap] + */ + private fun PackageParam.compatStatusIcon(context: Context, isGrayscaleIcon: Boolean, packageName: String, drawable: Drawable) = + compatCustomIcon(isGrayscaleIcon, packageName).first.also { + /** 打印日志 */ + printLogcat(tag = "StatusIcon", context, packageName, isCustom = it != null, isGrayscaleIcon) + } ?: drawable.toBitmap() + + /** + * 自动适配通知栏小图标 + * @param isGrayscaleIcon 是否为灰度图标 + * @param packageName APP 包名 + * @param drawable 原始图标 + * @param iconColor 原生图标颜色 + * @param iconView 图标 [ImageView] + */ + private fun PackageParam.compatNotifyIcon( + isGrayscaleIcon: Boolean, + packageName: String, + drawable: Drawable, + iconColor: Int, + iconView: ImageView + ) { + compatCustomIcon(isGrayscaleIcon, packageName).also { customPair -> + when { + customPair.first != null || isGrayscaleIcon -> iconView.apply { + setImageBitmap(customPair.first ?: drawable.toBitmap()) + /** 是否开启 Android 12 风格 */ + val isA12Style = prefs.getBoolean(ENABLE_ANDROID12_STYLE, isUpperOfAndroidS) + + /** 旧版风格 */ + val oldStyle = (if (context.isSystemInDarkMode) 0xffdcdcdc else 0xff707173).toInt() + + /** 新版风格 */ + val newStyle = (if (context.isSystemInDarkMode) 0xff2d2d2d else Color.WHITE).toInt() + + /** 图标着色 */ + val applyColor = customPair.second.takeIf { it != 0 } ?: iconColor.takeIf { it != 0 } ?: oldStyle + /** 判断风格并开始 Hook */ + if (isA12Style) { + background = DrawableBuilder().rounded().solidColor(applyColor).build() + setColorFilter(if (isA12Style) newStyle else oldStyle) + setPadding(2.dp(context), 2.dp(context), 2.dp(context), 2.dp(context)) + } else { + background = null + setColorFilter(applyColor) + setPadding(0, 0, 0, 0) + } + } + else -> iconView.apply { + setImageDrawable(drawable) + setPadding(0, 0, 0, 0) + background = null + colorFilter = null + } + } + /** 打印日志 */ + printLogcat(tag = "NotifyIcon", iconView.context, packageName, isCustom = customPair.first != null, isGrayscaleIcon) + } + } + + override fun onHook() = encase { + configs { + debugTag = "ColorOSNotify" + isDebug = false + } + loadApp(SYSTEMUI_PACKAGE_NAME) { + when { + /** 不是 ColorOS 系统停止 Hook */ + isNotColorOS -> loggerW(msg = "Aborted Hook -> This System is not ColorOS") + /** Hook 被手动关闭停止 Hook */ + !prefs.getBoolean(ENABLE_MODULE, default = true) -> loggerW(msg = "Aborted Hook -> Hook Closed") + /** 开始 Hook */ + else -> { + /** 缓存图标数据 */ + iconDatas = IconPackParams(param = this).iconDatas + /** 移除开发者警告通知 */ + SystemPromptControllerClass.hook { + injectMember { + method { name = "updateDeveloperMode" } + beforeHook { + /** 是否移除 */ + if (prefs.getBoolean(REMOVE_DEV_NOTIFY, default = true)) resultNull() + } + } + } + /** 移除充电完成通知 */ + OplusPowerNotificationWarningsClass.hook { + injectMember { + method { + name = "showChargeErrorDialog" + param(IntType) + } + beforeHook { + /** 是否移除 */ + if (firstArgs as Int == 7 && prefs.getBoolean(REMOVE_CHANGECP_NOTIFY, default = false)) resultNull() + } + } + } + /** 修复并替换 ColorOS 原生灰度图标色彩判断 */ + NotificationUtilsClass.hook { + injectMember { + method { + name = "isGrayscaleOplus" + param(ImageViewClass, OplusContrastColorUtilClass.clazz) + } + replaceAny { (firstArgs as? ImageView?)?.let { isGrayscaleIcon(it.context, it.drawable) } } + } + } + /** 替换状态栏图标 */ + IconManagerClass.hook { + injectMember { + method { + name = "getIconDescriptor" + param(NotificationEntryClass.clazz, BooleanType) + } + afterHook { + IconBuilderClass.clazz.field { name = "context" } + .of(field { name = "iconBuilder" }.of(instance))?.also { context -> + NotificationEntryClass.clazz.method { + name = "getSbn" + }.get(firstArgs).invoke()?.also { nf -> + nf.notification.smallIcon.loadDrawable(context).also { iconDrawable -> + StatusBarIconClass.clazz.field { + name = "icon" + type = IconClass + }.get(result).set( + Icon.createWithBitmap( + compatStatusIcon( + context = context, + isGrayscaleIcon = isGrayscaleIcon(context, iconDrawable), + packageName = nf.packageName, + drawable = iconDrawable + ) + ) + ) + } + } + } + } + } + } + /** 替换通知图标和样式 */ + NotificationHeaderViewWrapperClass.hook { + injectMember { + method { name = "resolveHeaderViews" } + afterHook { + NotificationHeaderViewWrapperClass.clazz + .field { name = "mIcon" }.of(instance)?.apply { + ExpandableNotificationRowClass.clazz + .method { name = "getEntry" } + .get(NotificationViewWrapperClass.clazz.field { + name = "mRow" + }.get(instance).self).call()?.let { + it.javaClass.method { + name = "getSbn" + }.get(it).invoke() + }?.notification?.also { nf -> + nf.smallIcon.loadDrawable(context).also { iconDrawable -> + compatNotifyIcon( + isGrayscaleIcon = isGrayscaleIcon(context, iconDrawable), + packageName = context.packageName, + drawable = iconDrawable, + iconColor = nf.color, + iconView = this + ) + } + } + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/hook/factory/DataFactory.kt b/app/src/main/java/com/fankes/coloros/notify/hook/factory/DataFactory.kt new file mode 100644 index 0000000..ed78bcc --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/hook/factory/DataFactory.kt @@ -0,0 +1,70 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/2/15. + */ +package com.fankes.coloros.notify.hook.factory + +import android.content.Context +import com.fankes.coloros.notify.bean.IconDataBean +import com.highcapable.yukihookapi.hook.factory.modulePrefs +import com.highcapable.yukihookapi.hook.param.PackageParam + +/** + * 获取此 APP 的通知图标是否被 Hook + * @param bean 图标 bean + */ +fun PackageParam.isAppNotifyHookOf(bean: IconDataBean) = prefs.getBoolean(key = bean.toEnabledName(), default = bean.isEnabled) + +/** + * 获取此 APP 的通知图标是否被 Hook + * @param bean 图标 bean + */ +fun Context.isAppNotifyHookOf(bean: IconDataBean) = modulePrefs.getBoolean(key = bean.toEnabledName(), default = bean.isEnabled) + +/** + * 设置 Hook 此 APP 的通知图标 + * @param bean 图标 bean + * @param isHook 是否 Hook + */ +fun Context.putAppNotifyHookOf(bean: IconDataBean, isHook: Boolean) = + modulePrefs.putBoolean(key = bean.toEnabledName(), value = isHook) + +/** + * 获取此 APP 的通知图标是否被全部 Hook + * @param bean 图标 bean + */ +fun PackageParam.isAppNotifyHookAllOf(bean: IconDataBean) = + prefs.getBoolean(key = bean.toEnabledAllName(), default = bean.isEnabledAll) + +/** + * 获取此 APP 的通知图标是否被全部 Hook + * @param bean 图标 bean + */ +fun Context.isAppNotifyHookAllOf(bean: IconDataBean) = + modulePrefs.getBoolean(key = bean.toEnabledAllName(), default = bean.isEnabledAll) + +/** + * 设置全部 Hook 此 APP 的通知图标 + * @param bean 图标 bean + * @param isHook 是否 Hook + */ +fun Context.putAppNotifyHookAllOf(bean: IconDataBean, isHook: Boolean) = + modulePrefs.putBoolean(key = bean.toEnabledAllName(), value = isHook) \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/param/IconPackParams.kt b/app/src/main/java/com/fankes/coloros/notify/param/IconPackParams.kt new file mode 100644 index 0000000..007ea20 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/param/IconPackParams.kt @@ -0,0 +1,103 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/24. + */ +package com.fankes.coloros.notify.param + +import android.content.Context +import android.graphics.Color +import com.fankes.coloros.notify.bean.IconDataBean +import com.fankes.coloros.notify.hook.HookConst.NOTIFY_ICON_DATAS +import com.fankes.coloros.notify.utils.bitmap +import com.fankes.coloros.notify.utils.safeOf +import com.fankes.coloros.notify.utils.safeOfNan +import com.highcapable.yukihookapi.hook.factory.modulePrefs +import com.highcapable.yukihookapi.hook.param.PackageParam +import org.json.JSONArray +import org.json.JSONObject + +/** + * 通知栏小图标适配类 + * + * 国内 APP 不规范的图标将由这里完成其自定义单色小图标绘制 + * @param context 实例 - 二选一 + * @param param 实例 - 二选一 + */ +class IconPackParams(private val context: Context? = null, private val param: PackageParam? = null) { + + /** + * 已存储的 JSON 数据 + * @return [String] + */ + private val storageDataJson get() = (context?.modulePrefs ?: param?.prefs)?.getString(NOTIFY_ICON_DATAS) + + /** + * 获取图标数据 + * @return [Array] 通知栏小图标数组 + */ + val iconDatas + get() = ArrayList().apply { + storageDataJson?.also { + if (it.isNotBlank()) runCatching { + JSONArray(it).also { array -> + for (i in 0 until array.length()) runCatching { + (array.get(i) as JSONObject).apply { + add( + IconDataBean( + appName = getString("appName"), + packageName = getString("packageName"), + isEnabled = getBoolean("isEnabled"), + isEnabledAll = getBoolean("isEnabledAll"), + iconBitmap = getString("iconBitmap").bitmap, + iconColor = safeOfNan { Color.parseColor(getString("iconColor")) }, + contributorName = getString("contributorName") + ) + ) + } + } + } + } + } + } + + /** + * 拼接图标数组数据 + * @param dataJson1 图标数据 JSON + * @param dataJson2 图标数据 JSON + * @return [String] 拼接后的数据 + */ + fun splicingJsonArray(dataJson1: String, dataJson2: String) = safeOf(default = "[]") { + dataJson1.replace(oldValue = "]", newValue = "") + "," + dataJson2.replace(oldValue = "[", newValue = "") + } + + /** + * 比较图标数据不相等 + * @param dataJson 图标数据 JSON + * @return [Boolean] 是否不相等 + */ + fun isCompareDifferent(dataJson: String) = storageDataJson?.trim() != dataJson.trim() + + /** + * 保存图标数据 + * @param dataJson 图标数据 JSON + */ + fun save(dataJson: String) = context?.modulePrefs?.putString(NOTIFY_ICON_DATAS, dataJson) +} diff --git a/app/src/main/java/com/fankes/coloros/notify/ui/ConfigureActivity.kt b/app/src/main/java/com/fankes/coloros/notify/ui/ConfigureActivity.kt new file mode 100644 index 0000000..da03b4e --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/ui/ConfigureActivity.kt @@ -0,0 +1,289 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/30. + */ +@file:Suppress("SetTextI18n", "InflateParams", "DEPRECATION") + +package com.fankes.coloros.notify.ui + +import android.app.ProgressDialog +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.BaseAdapter +import android.widget.ListView +import android.widget.TextView +import androidx.constraintlayout.utils.widget.ImageFilterView +import androidx.core.view.isVisible +import com.fankes.coloros.notify.R +import com.fankes.coloros.notify.bean.IconDataBean +import com.fankes.coloros.notify.hook.factory.isAppNotifyHookAllOf +import com.fankes.coloros.notify.hook.factory.isAppNotifyHookOf +import com.fankes.coloros.notify.hook.factory.putAppNotifyHookAllOf +import com.fankes.coloros.notify.hook.factory.putAppNotifyHookOf +import com.fankes.coloros.notify.param.IconPackParams +import com.fankes.coloros.notify.ui.base.BaseActivity +import com.fankes.coloros.notify.utils.* +import com.fankes.coloros.notify.view.MaterialSwitch +import com.google.android.material.textfield.TextInputEditText +import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus + +class ConfigureActivity : BaseActivity() { + + /** 当前筛选条件 */ + private var filterText = "" + + /** 回调适配器改变 */ + private var onChanged: (() -> Unit)? = null + + /** 回调滚动事件改变 */ + private var onScrollEvent: ((Boolean) -> Unit)? = null + + /** 全部的通知优化图标数据 */ + private var iconAllDatas = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_config) + /** 检查激活状态 */ + if (!YukiHookModuleStatus.isActive()) { + showDialog { + title = "模块没有激活" + msg = "模块没有激活,你无法使用这里的功能,请先激活模块。" + confirmButton(text = "我知道了") { finish() } + noCancelable() + } + return + } + /** 返回按钮点击事件 */ + findViewById(R.id.title_back_icon).setOnClickListener { onBackPressed() } + /** 刷新适配器结果相关 */ + refreshAdapterResult() + /** 设置上下按钮点击事件 */ + findViewById(R.id.config_title_up).setOnClickListener { + snake(msg = "滚动到顶部") + onScrollEvent?.invoke(false) + } + findViewById(R.id.config_title_down).setOnClickListener { + snake(msg = "滚动到底部") + onScrollEvent?.invoke(true) + } + /** 设置过滤按钮点击事件 */ + findViewById(R.id.config_title_filter).setOnClickListener { + showDialog { + title = "按条件过滤" + var editText: TextInputEditText + addView(R.layout.dia_icon_filter).apply { + editText = findViewById(R.id.dia_icon_filter_input_edit).apply { + requestFocus() + invalidate() + if (filterText.isNotBlank()) { + setText(filterText) + setSelection(filterText.length) + } + } + } + confirmButton { + if (editText.text.toString().isNotBlank()) { + filterText = editText.text.toString().trim() + refreshAdapterResult() + } else { + toast(msg = "条件不能为空") + it.performClick() + } + } + cancelButton() + if (filterText.isNotBlank()) + neutralButton(text = "清除条件") { + filterText = "" + refreshAdapterResult() + } + } + } + /** 设置同步列表按钮点击事件 */ + findViewById(R.id.config_title_sync).setOnClickListener { onStartRefresh() } + /** 设置列表元素和 Adapter */ + findViewById(R.id.config_list_view).apply { + adapter = object : BaseAdapter() { + + private val inflater = LayoutInflater.from(context) + + override fun getCount() = iconDatas.size + + override fun getItem(position: Int) = iconDatas[position] + + override fun getItemId(position: Int) = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { + var cView = convertView + val holder: ViewHolder + if (convertView == null) { + holder = ViewHolder() + cView = inflater.inflate(R.layout.adapter_config, null).also { + holder.appIcon = it.findViewById(R.id.adp_app_icon) + holder.appName = it.findViewById(R.id.adp_app_name) + holder.pkgName = it.findViewById(R.id.adp_app_pkg_name) + holder.cbrName = it.findViewById(R.id.adp_cbr_name) + holder.switchOpen = it.findViewById(R.id.adp_app_open_switch) + holder.switchAll = it.findViewById(R.id.adp_app_all_switch) + } + cView.tag = holder + } else holder = convertView.tag as ViewHolder + getItem(position).also { + holder.appIcon.setImageBitmap(it.iconBitmap) + (if (it.iconColor != 0) it.iconColor else resources.getColor(R.color.colorTextGray)).also { color -> + holder.appIcon.setColorFilter(color) + holder.appName.setTextColor(color) + } + holder.appName.text = it.appName + holder.pkgName.text = it.packageName + holder.cbrName.text = "贡献者:" + it.contributorName + isAppNotifyHookOf(it).also { e -> + holder.switchOpen.isChecked = e + holder.switchAll.isEnabled = e + } + holder.switchOpen.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + putAppNotifyHookOf(it, b) + holder.switchAll.isEnabled = b + SystemUITool.showNeedRestartSnake(context = this@ConfigureActivity) + } + holder.switchAll.isChecked = isAppNotifyHookAllOf(it) + holder.switchAll.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + putAppNotifyHookAllOf(it, b) + SystemUITool.showNeedRestartSnake(context = this@ConfigureActivity) + } + } + return cView!! + } + + inner class ViewHolder { + lateinit var appIcon: ImageFilterView + lateinit var appName: TextView + lateinit var pkgName: TextView + lateinit var cbrName: TextView + lateinit var switchOpen: MaterialSwitch + lateinit var switchAll: MaterialSwitch + } + }.apply { onChanged = { notifyDataSetChanged() } } + onScrollEvent = { post { setSelection(if (it) iconDatas.lastIndex else 0) } } + } + /** 设置点击事件 */ + findViewById(R.id.config_cbr_button).setOnClickListener { + runCatching { + startActivity(Intent().apply { + action = "android.intent.action.VIEW" + data = Uri.parse("https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/CONTRIBUTING.md") + /** 防止顶栈一样重叠在自己的 APP 中 */ + flags = Intent.FLAG_ACTIVITY_NEW_TASK + }) + }.onFailure { + toast(msg = "无法启动系统默认浏览器") + } + } + /** 装载数据 */ + mockLocalData() + /** 更新数据 */ + onStartRefresh() + } + + /** 装载或刷新本地数据 */ + private fun mockLocalData() { + iconAllDatas = IconPackParams(context = this).iconDatas + refreshAdapterResult() + } + + /** 首次进入或更新数据 */ + private fun onStartRefresh() = + showDialog { + title = if (iconAllDatas.isNotEmpty()) "同步列表" else "初始化" + msg = (if (iconAllDatas.isNotEmpty()) "建议定期从云端拉取数据以获得最新的通知图标优化名单适配数据。\n\n" + else "首次装载需要从云端下载最新适配数据,后续可继续前往这里检查更新。\n\n") + + "通过从 Github 同步最新数据,无法连接可能需要魔法上网。" + confirmButton(text = "开始同步") { onRefreshing() } + cancelButton() + } + + /** 开始更新数据 */ + private fun onRefreshing() { + ProgressDialog(this).apply { + setDefaultStyle(context = this@ConfigureActivity) + setCancelable(false) + setTitle("同步中") + setMessage("正在同步 OS 数据") + show() + }.also { + ClientRequestTool.wait( + context = this, + url = "https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/OS/ColorOS/NotifyIconsSupportConfig.json" + ) { isDone1, ctOS -> + it.setMessage("正在同步 APP 数据") + ClientRequestTool.wait( + context = this, + url = "https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/APP/NotifyIconsSupportConfig.json" + ) { isDone2, ctAPP -> + it.cancel() + IconPackParams(context = this).also { params -> + if (isDone1 && isDone2) params.splicingJsonArray(ctOS, ctAPP).also { + if (params.isCompareDifferent(it)) { + params.save(it) + filterText = "" + mockLocalData() + SystemUITool.showNeedUpdateApplySnake(context = this) + } else snake(msg = "列表数据已是最新") + } else + showDialog { + title = "连接失败" + msg = "连接失败,错误如下:\n${if (!isDone1) ctOS else ctAPP}" + confirmButton(text = "我知道了") + } + } + } + } + } + } + + /** 刷新适配器结果相关 */ + private fun refreshAdapterResult() { + onChanged?.invoke() + findViewById(R.id.config_title_count_text).text = + if (filterText.isBlank()) "已适配 ${iconDatas.size} 个 APP 的通知图标" + else "“${filterText}” 匹配到 ${iconDatas.size} 个结果" + findViewById(R.id.config_list_no_data_view).apply { + text = if (iconAllDatas.isEmpty()) "噫,竟然什么都没有~\n请点击右上角同步按钮获取云端数据" else "噫,竟然什么都没找到~" + isVisible = iconDatas.isEmpty() + } + } + + /** + * 当前结果下的图标数组 + * @return [Array] + */ + private val iconDatas + get() = if (filterText.isBlank()) iconAllDatas + else iconAllDatas.filter { + it.appName.lowercase().contains(filterText.lowercase()) || it.packageName.lowercase().contains(filterText.lowercase()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/ui/MainActivity.kt b/app/src/main/java/com/fankes/coloros/notify/ui/MainActivity.kt new file mode 100644 index 0000000..117d5d1 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/ui/MainActivity.kt @@ -0,0 +1,192 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/2/26. + */ +@file:Suppress("SetTextI18n") + +package com.fankes.coloros.notify.ui + +import android.content.ComponentName +import android.content.Intent +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Bundle +import android.view.View +import android.widget.LinearLayout +import android.widget.TextView +import androidx.appcompat.widget.SwitchCompat +import androidx.constraintlayout.utils.widget.ImageFilterView +import androidx.core.view.isVisible +import com.fankes.coloros.notify.BuildConfig +import com.fankes.coloros.notify.R +import com.fankes.coloros.notify.hook.HookConst.ENABLE_ANDROID12_STYLE +import com.fankes.coloros.notify.hook.HookConst.ENABLE_HIDE_ICON +import com.fankes.coloros.notify.hook.HookConst.ENABLE_MODULE +import com.fankes.coloros.notify.hook.HookConst.ENABLE_MODULE_LOG +import com.fankes.coloros.notify.hook.HookConst.ENABLE_NOTIFY_ICON_FIX +import com.fankes.coloros.notify.hook.HookConst.REMOVE_CHANGECP_NOTIFY +import com.fankes.coloros.notify.hook.HookConst.REMOVE_DEV_NOTIFY +import com.fankes.coloros.notify.ui.base.BaseActivity +import com.fankes.coloros.notify.utils.* +import com.highcapable.yukihookapi.hook.factory.modulePrefs +import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus + +class MainActivity : BaseActivity() { + + companion object { + + /** 模块版本 */ + private const val moduleVersion = BuildConfig.VERSION_NAME + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + /** 设置文本 */ + findViewById(R.id.main_text_version).text = "当前版本:$moduleVersion" + findViewById(R.id.main_text_coloros_version).text = "系统版本:$colorOSVersion" + when { + /** 判断是否为 ColorOS 系统 */ + isNotColorOS -> + showDialog { + title = "不是 ColorOS 系统" + msg = "此模块专为 ColorOS 系统打造,当前无法识别你的系统为 ColorOS,所以模块无法工作。\n" + + "如有问题请联系 酷安 @星夜不荟" + confirmButton(text = "退出") { finish() } + noCancelable() + } + /** 判断是否 Hook */ + YukiHookModuleStatus.isActive() -> { + findViewById(R.id.main_lin_status).setBackgroundResource(R.drawable.bg_green_round) + findViewById(R.id.main_img_status).setImageResource(R.mipmap.ic_success) + findViewById(R.id.main_text_status).text = "模块已激活" + } + else -> + showDialog { + title = "模块没有激活" + msg = "检测到模块没有激活,模块需要 Xposed 环境依赖," + + "同时需要系统拥有 Root 权限," + + "请自行查看本页面使用帮助与说明第二条。\n" + + "由于需要修改系统应用达到效果,模块不支持太极阴、应用转生。" + confirmButton(text = "我知道了") + noCancelable() + } + } + /** 初始化 View */ + val moduleEnableSwitch = findViewById(R.id.module_enable_switch) + val moduleEnableLogSwitch = findViewById(R.id.module_enable_log_switch) + val devNotifyConfigItem = findViewById(R.id.config_item_dev) + val a12StyleConfigItem = findViewById(R.id.config_item_a12) + val notifyIconConfigItem = findViewById(R.id.config_item_notify) + val devNotifyConfigSwitch = findViewById(R.id.remove_dev_n_enable_switch) + val crcpNotifyConfigSwitch = findViewById(R.id.remove_chargecp_n_enable_switch) + val a12StyleConfigSwitch = findViewById(R.id.a12_style_enable_switch) + val hideIconInLauncherSwitch = findViewById(R.id.hide_icon_in_launcher_switch) + val notifyIconFixSwitch = findViewById(R.id.notify_icon_fix_switch) + val notifyIconFixButton = findViewById(R.id.config_notify_app_button) + /** 获取 Sp 存储的信息 */ + devNotifyConfigItem.isVisible = modulePrefs.getBoolean(ENABLE_MODULE, default = true) + a12StyleConfigItem.isVisible = modulePrefs.getBoolean(ENABLE_MODULE, default = true) + notifyIconConfigItem.isVisible = modulePrefs.getBoolean(ENABLE_MODULE, default = true) + moduleEnableLogSwitch.isVisible = modulePrefs.getBoolean(ENABLE_MODULE, default = true) + notifyIconFixButton.isVisible = modulePrefs.getBoolean(ENABLE_NOTIFY_ICON_FIX, default = true) + devNotifyConfigSwitch.isChecked = modulePrefs.getBoolean(REMOVE_DEV_NOTIFY, default = true) + crcpNotifyConfigSwitch.isChecked = modulePrefs.getBoolean(REMOVE_CHANGECP_NOTIFY, default = false) + a12StyleConfigSwitch.isChecked = modulePrefs.getBoolean(ENABLE_ANDROID12_STYLE, isUpperOfAndroidS) + moduleEnableSwitch.isChecked = modulePrefs.getBoolean(ENABLE_MODULE, default = true) + moduleEnableLogSwitch.isChecked = modulePrefs.getBoolean(ENABLE_MODULE_LOG, default = false) + hideIconInLauncherSwitch.isChecked = modulePrefs.getBoolean(ENABLE_HIDE_ICON) + notifyIconFixSwitch.isChecked = modulePrefs.getBoolean(ENABLE_NOTIFY_ICON_FIX, default = true) + moduleEnableSwitch.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + modulePrefs.putBoolean(ENABLE_MODULE, b) + moduleEnableLogSwitch.isVisible = b + notifyIconConfigItem.isVisible = b + devNotifyConfigItem.isVisible = b + a12StyleConfigItem.isVisible = b + SystemUITool.showNeedRestartSnake(context = this) + } + moduleEnableLogSwitch.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + modulePrefs.putBoolean(ENABLE_MODULE_LOG, b) + SystemUITool.showNeedRestartSnake(context = this) + } + hideIconInLauncherSwitch.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + modulePrefs.putBoolean(ENABLE_HIDE_ICON, b) + packageManager.setComponentEnabledSetting( + ComponentName(packageName, "com.fankes.coloros.notify.Home"), + if (b) PackageManager.COMPONENT_ENABLED_STATE_DISABLED else PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP + ) + } + notifyIconFixSwitch.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + modulePrefs.putBoolean(ENABLE_NOTIFY_ICON_FIX, b) + notifyIconFixButton.isVisible = b + SystemUITool.showNeedRestartSnake(context = this) + } + devNotifyConfigSwitch.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + modulePrefs.putBoolean(REMOVE_DEV_NOTIFY, b) + } + crcpNotifyConfigSwitch.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + modulePrefs.putBoolean(REMOVE_CHANGECP_NOTIFY, b) + } + a12StyleConfigSwitch.setOnCheckedChangeListener { btn, b -> + if (!btn.isPressed) return@setOnCheckedChangeListener + modulePrefs.putBoolean(ENABLE_ANDROID12_STYLE, b) + SystemUITool.showNeedRestartSnake(context = this) + } + /** 通知图标优化名单按钮点击事件 */ + notifyIconFixButton.setOnClickListener { startActivity(Intent(this, ConfigureActivity::class.java)) } + /** 重启按钮点击事件 */ + findViewById(R.id.title_restart_icon).setOnClickListener { SystemUITool.restartSystemUI(context = this) } + /** 恰饭! */ + findViewById(R.id.link_with_follow_me).setOnClickListener { + runCatching { + startActivity(Intent().apply { + setPackage("com.coolapk.market") + action = "android.intent.action.VIEW" + data = Uri.parse("https://www.coolapk.com/u/876977") + /** 防止顶栈一样重叠在自己的 APP 中 */ + flags = Intent.FLAG_ACTIVITY_NEW_TASK + }) + }.onFailure { + toast(msg = "你可能没有安装酷安") + } + } + /** 项目地址点击事件 */ + findViewById(R.id.link_with_project_address).setOnClickListener { + runCatching { + startActivity(Intent().apply { + action = "android.intent.action.VIEW" + data = Uri.parse("https://github.com/fankes/ColorOSNotifyIcon") + /** 防止顶栈一样重叠在自己的 APP 中 */ + flags = Intent.FLAG_ACTIVITY_NEW_TASK + }) + }.onFailure { + toast(msg = "无法启动系统默认浏览器") + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/ui/base/BaseActivity.kt b/app/src/main/java/com/fankes/coloros/notify/ui/base/BaseActivity.kt new file mode 100644 index 0000000..f1a3308 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/ui/base/BaseActivity.kt @@ -0,0 +1,47 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/30. + */ +package com.fankes.coloros.notify.ui.base + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.fankes.coloros.notify.R +import com.fankes.coloros.notify.utils.isNotSystemInDarkMode +import com.gyf.immersionbar.ktx.immersionBar + +abstract class BaseActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + /** 隐藏系统的标题栏 */ + supportActionBar?.hide() + /** 初始化沉浸状态栏 */ + immersionBar { + statusBarColor(R.color.colorThemeBackground) + autoDarkModeEnable(true) + statusBarDarkFont(isNotSystemInDarkMode) + navigationBarColor(R.color.colorThemeBackground) + navigationBarDarkIcon(isNotSystemInDarkMode) + fitsSystemWindows(true) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/ClientRequestTool.kt b/app/src/main/java/com/fankes/coloros/notify/utils/ClientRequestTool.kt new file mode 100644 index 0000000..968c695 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/ClientRequestTool.kt @@ -0,0 +1,110 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/2/25. + */ +@file:Suppress("TrustAllX509TrustManager", "CustomX509TrustManager") + +package com.fankes.coloros.notify.utils + +import android.app.Activity +import com.highcapable.yukihookapi.hook.log.loggerD +import okhttp3.* +import java.io.IOException +import java.security.SecureRandom +import java.security.cert.X509Certificate +import javax.net.ssl.* + +/** + * 网络请求管理类 + */ +object ClientRequestTool { + + /** + * 发送 GET 请求内容并等待 + * @param context 实例 + * @param url 请求地址 + * @param it 回调 - ([Boolean] 是否成功,[String] 成功的内容或失败消息) + */ + fun wait(context: Activity, url: String, it: (Boolean, String) -> Unit) { + OkHttpClient().newBuilder().apply { + SSLSocketClient.sSLSocketFactory?.let { sslSocketFactory(it, SSLSocketClient.trustManager) } + hostnameVerifier(SSLSocketClient.hostnameVerifier) + }.build().newCall( + Request.Builder() + .url(url) + .get() + .build() + ).enqueue(object : Callback { + override fun onFailure(call: Call, e: IOException) { + context.runOnUiThread { it(false, e.toString()) } + } + + override fun onResponse(call: Call, response: Response) { + val bodyString = response.body?.string() ?: "" + context.runOnUiThread { it(true, bodyString) } + } + }) + } + + /** + * 自动信任 SSL 证书 + * + * 放行全部加密 SSL 请求 + */ + object SSLSocketClient { + + /** + * 格式化实例 + * @return [SSLSocketFactory] or null + */ + val sSLSocketFactory + get() = safeOfNull { + SSLContext.getInstance("TLS").let { + it.init(null, arrayOf(trustManager), SecureRandom()) + it.socketFactory + } + } + + /** + * 使用的实例 + * @return [HostnameVerifier] + */ + val hostnameVerifier get() = HostnameVerifier { _, _ -> true } + + /** + * 信任管理者 + * @return [X509TrustManager] + */ + val trustManager + get() = object : X509TrustManager { + + override fun checkClientTrusted(chain: Array?, authType: String?) { + loggerD(msg = "TrustX509 --> $authType") + } + + override fun checkServerTrusted(chain: Array?, authType: String?) { + loggerD(msg = "TrustX509 --> $authType") + } + + override fun getAcceptedIssuers() = arrayOf() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/DialogBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/DialogBuilder.kt new file mode 100644 index 0000000..1cf1644 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/DialogBuilder.kt @@ -0,0 +1,113 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/7. + */ +@file:Suppress("unused", "DEPRECATION") + +package com.fankes.coloros.notify.utils + +import android.app.AlertDialog +import android.content.Context +import android.util.DisplayMetrics +import android.view.LayoutInflater +import android.view.View +import android.view.WindowManager +import kotlin.math.round + +/** + * 构造对话框 + * @param it 对话框方法体 + */ +fun Context.showDialog(it: DialogBuilder.() -> Unit) = DialogBuilder(this).apply(it).show() + +/** + * 对话框构造器 + * @param context 实例 + */ +class DialogBuilder(private val context: Context) { + + private var instance: AlertDialog.Builder? = null // 实例对象 + + private var customLayoutView: View? = null // 自定义布局 + + init { + instance = AlertDialog.Builder(context, android.R.style.Theme_Material_Light_Dialog) + } + + /** 设置对话框不可关闭 */ + fun noCancelable() = instance?.setCancelable(false) + + /** 设置对话框标题 */ + var title + get() = "" + set(value) { + instance?.setTitle(value) + } + + /** 设置对话框消息内容 */ + var msg + get() = "" + set(value) { + instance?.setMessage(value) + } + + /** + * 设置对话框自定义布局 + * @param resId 属性资源 Id + * @return [View] + */ + fun addView(resId: Int): View { + customLayoutView = LayoutInflater.from(context).inflate(resId, null) + return customLayoutView ?: error("Inflate $resId failed") + } + + /** + * 设置对话框确定按钮 + * @param text 按钮文本内容 + * @param it 点击事件 + */ + fun confirmButton(text: String = "确定", it: () -> Unit = {}) = + instance?.setPositiveButton(text) { _, _ -> it() } + + /** + * 设置对话框取消按钮 + * @param text 按钮文本内容 + * @param it 点击事件 + */ + fun cancelButton(text: String = "取消", it: () -> Unit = {}) = + instance?.setNegativeButton(text) { _, _ -> it() } + + /** + * 设置对话框第三个按钮 + * @param text 按钮文本内容 + * @param it 点击事件 + */ + fun neutralButton(text: String = "更多", it: () -> Unit = {}) = + instance?.setNeutralButton(text) { _, _ -> it() } + + /** 显示对话框 */ + internal fun show() = instance?.create()?.apply { + val dm = DisplayMetrics() + (context.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay.getMetrics(dm) + customLayoutView?.let { setView(it.apply { minimumWidth = round(x = dm.widthPixels / 1.3).toInt() }) } + setDefaultStyle(context = this@DialogBuilder.context) + }?.show() +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/SystemUITool.kt b/app/src/main/java/com/fankes/coloros/notify/utils/SystemUITool.kt new file mode 100644 index 0000000..4c081db --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/SystemUITool.kt @@ -0,0 +1,69 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/2/8. + */ +package com.fankes.coloros.notify.utils + +import android.content.Context +import com.google.android.material.snackbar.Snackbar +import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus + +/** + * 系统界面工具 + */ +object SystemUITool { + + /** + * 重启系统界面 + * @param context 实例 + */ + fun restartSystemUI(context: Context) = + context.showDialog { + title = "重启系统界面" + msg = "你确定要立即重启系统界面吗?" + confirmButton { + execShellSu(cmd = "pgrep systemui").also { pid -> + if (pid.isNotBlank()) + execShellSu(cmd = "kill -9 $pid") + else toast(msg = "ROOT 权限获取失败") + } + } + cancelButton() + } + + /** + * 显示需要重启系统界面的 [Snackbar] + * @param context 实例 + */ + fun showNeedRestartSnake(context: Context) = + if (YukiHookModuleStatus.isActive()) + context.snake(msg = "设置需要重启系统界面才能生效", actionText = "立即重启") { restartSystemUI(context) } + else context.snake(msg = "模块没有激活,更改不会生效") + + /** + * 显示更新数据后需要重启系统界面的 [Snackbar] + * @param context 实例 + */ + fun showNeedUpdateApplySnake(context: Context) = + if (YukiHookModuleStatus.isActive()) + context.snake(msg = "数据已更新,请重启系统界面使更改生效", actionText = "立即重启") { restartSystemUI(context) } + else context.snake(msg = "模块没有激活,更改不会生效") +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/Utils.kt b/app/src/main/java/com/fankes/coloros/notify/utils/Utils.kt new file mode 100644 index 0000000..2310977 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/Utils.kt @@ -0,0 +1,331 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/7. + */ +@file:Suppress("DEPRECATION", "PrivateApi", "unused", "ObsoleteSdkInt") + +package com.fankes.coloros.notify.utils + +import android.app.Activity +import android.app.AlertDialog +import android.content.Context +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.content.res.Configuration +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Color +import android.graphics.drawable.GradientDrawable +import android.os.Build +import android.util.Base64 +import android.widget.Toast +import com.fankes.coloros.notify.application.CNNApplication.Companion.appContext +import com.google.android.material.snackbar.Snackbar +import com.highcapable.yukihookapi.hook.factory.classOf +import com.highcapable.yukihookapi.hook.factory.hasClass +import com.highcapable.yukihookapi.hook.factory.method +import com.highcapable.yukihookapi.hook.log.loggerE +import com.highcapable.yukihookapi.hook.type.java.StringType +import com.topjohnwu.superuser.Shell + +/** + * 系统深色模式是否开启 + * @return [Boolean] 是否开启 + */ +val isSystemInDarkMode + get() = (appContext.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES + +/** + * 系统深色模式是否没开启 + * @return [Boolean] 是否开启 + */ +inline val isNotSystemInDarkMode get() = !isSystemInDarkMode + +/** + * 系统深色模式是否开启 + * @return [Boolean] 是否开启 + */ +val Context.isSystemInDarkMode get() = (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES + +/** + * 系统深色模式是否没开启 + * @return [Boolean] 是否开启 + */ +inline val Context.isNotSystemInDarkMode get() = !isSystemInDarkMode + +/** + * 系统版本是否高于或等于 Android 12 + * @return [Boolean] 是否符合条件 + */ +inline val isUpperOfAndroidS get() = Build.VERSION.SDK_INT > Build.VERSION_CODES.R + +/** + * 系统版本是否低于 Android 9 + * @return [Boolean] 是否符合条件 + */ +inline val isLowerAndroidP get() = Build.VERSION.SDK_INT < Build.VERSION_CODES.P + +/** + * 当前设备是否是 ColorOS 定制 Android 系统 + * @return [Boolean] 是否符合条件 + */ +val isColorOS by lazy { ("oppo.R").hasClass || ("com.color.os.ColorBuild").hasClass || ("oplus.R").hasClass } + +/** + * 当前设备是否不是 ColorOS 定制 Android 系统 + * @return [Boolean] 是否符合条件 + */ +inline val isNotColorOS get() = !isColorOS + +/** + * 获取 ColorOS 版本 + * @return [String] + */ +val colorOSVersion + get() = safeOf(default = "无法获取") { + findPropString(key = "ro.system.build.fingerprint", default = "无法获取") + .split("ossi:")[1] + .split("/")[0].trim() + } + +/** + * 得到安装包信息 + * @return [PackageInfo] + */ +val Context.packageInfo get() = packageManager?.getPackageInfo(packageName, 0) ?: PackageInfo() + +/** + * 判断应用是否安装 + * @return [Boolean] + */ +val String.isInstall + get() = safeOfFalse { + appContext.packageManager.getPackageInfo( + this, + PackageManager.GET_UNINSTALLED_PACKAGES + ) + true + } + +/** + * 得到版本信息 + * @return [String] + */ +val Context.versionName get() = packageInfo.versionName ?: "" + +/** + * 得到版本号 + * @return [Int] + */ +val Context.versionCode get() = packageInfo.versionCode + +/** + * dp 转换为 px + * @return [Int] + */ +val Number.dp get() = (toFloat() * appContext.resources.displayMetrics.density).toInt() + +/** + * dp 转换为 px + * @param context 使用的实例 + * @return [Int] + */ +fun Number.dp(context: Context) = (toFloat() * context.resources.displayMetrics.density).toInt() + +/** + * Base64 加密 + * @return [String] + */ +val String.base64: String get() = Base64.encodeToString(toByteArray(), Base64.DEFAULT) + +/** + * Base64 解密为字节流 + * @return [ByteArray] + */ +val String.unbase64 get() = Base64.decode(this, Base64.DEFAULT) ?: ByteArray(0) + +/** + * 字节流解析为位图 + * @return [Bitmap] + */ +val ByteArray.bitmap: Bitmap get() = BitmapFactory.decodeByteArray(this, 0, size) + +/** + * 字符串解析为位图 + * @return [Bitmap] + */ +val String.bitmap: Bitmap get() = unbase64.bitmap + +/** + * 设置对话框默认风格 + * @param context 使用的实例 + */ +fun AlertDialog.setDefaultStyle(context: Context) = + window?.setBackgroundDrawable( + GradientDrawable( + GradientDrawable.Orientation.TOP_BOTTOM, + intArrayOf(Color.WHITE, Color.WHITE) + ).apply { + shape = GradientDrawable.RECTANGLE + gradientType = GradientDrawable.LINEAR_GRADIENT + cornerRadius = 15.dp(context).toFloat() + }) + +/** + * 获取系统 Prop 值 + * @param key Key + * @param default 默认值 + * @return [String] + */ +fun findPropString(key: String, default: String = "") = safeOf(default) { + (classOf(name = "android.os.SystemProperties").method { + name = "get" + param(StringType, StringType) + }.get().invoke(key, default)) ?: default +} + +/** + * 执行命令 - su + * @param cmd 命令 + * @return [String] 执行结果 + */ +fun execShellSu(cmd: String) = safeOfNothing { + Shell.su(cmd).exec().out.let { + if (it.isNotEmpty()) it[0].trim() else "" + } +} + +/** + * 弹出 [Toast] + * @param msg 提示内容 + */ +fun toast(msg: String) = Toast.makeText(appContext, msg, Toast.LENGTH_SHORT).show() + +/** + * 弹出 [Snackbar] + * @param msg 提示内容 + * @param actionText 按钮文本 - 不写默认取消按钮 + * @param it 按钮事件回调 + */ +fun Context.snake(msg: String, actionText: String = "", it: () -> Unit = {}) = + Snackbar.make((this as Activity).findViewById(android.R.id.content), msg, Snackbar.LENGTH_LONG) + .apply { + if (actionText.isBlank()) return@apply + setActionTextColor(Color.WHITE) + setAction(actionText) { it() } + }.show() + +/** + * 忽略异常返回值 + * @param it 回调 - 如果异常为空 + * @return [T] 发生异常时返回设定值否则返回正常值 + */ +inline fun safeOfNull(it: () -> T): T? = safeOf(null, it) + +/** + * 忽略异常返回值 + * @param it 回调 - 如果异常为 false + * @return [Boolean] 发生异常时返回设定值否则返回正常值 + */ +inline fun safeOfFalse(it: () -> Boolean) = safeOf(default = false, it) + +/** + * 忽略异常返回值 + * @param it 回调 - 如果异常为 true + * @return [Boolean] 发生异常时返回设定值否则返回正常值 + */ +inline fun safeOfTrue(it: () -> Boolean) = safeOf(default = true, it) + +/** + * 忽略异常返回值 + * @param it 回调 - 如果异常为 false + * @return [String] 发生异常时返回设定值否则返回正常值 + */ +inline fun safeOfNothing(it: () -> String) = safeOf(default = "", it) + +/** + * 忽略异常返回值 + * @param it 回调 - 如果异常为 false + * @return [Int] 发生异常时返回设定值否则返回正常值 + */ +inline fun safeOfNan(it: () -> Int) = safeOf(default = 0, it) + +/** + * 忽略异常返回值 + * @param default 异常返回值 + * @param it 正常回调值 + * @return [T] 发生异常时返回设定值否则返回正常值 + */ +inline fun safeOf(default: T, it: () -> T): T { + return try { + it() + } catch (t: NullPointerException) { + default + } catch (t: UnsatisfiedLinkError) { + default + } catch (t: UnsupportedOperationException) { + default + } catch (t: ClassNotFoundException) { + default + } catch (t: IllegalStateException) { + default + } catch (t: NoSuchMethodError) { + default + } catch (t: NoSuchFieldError) { + default + } catch (t: Error) { + default + } catch (t: Exception) { + default + } catch (t: Throwable) { + default + } +} + +/** + * 忽略异常运行 + * @param msg 出错输出的消息 - 默认为空 + * @param it 正常回调 + */ +inline fun safeRun(msg: String = "", it: () -> Unit) { + try { + it() + } catch (e: NullPointerException) { + if (msg.isNotBlank()) loggerE(msg = msg, e = e) + } catch (e: UnsatisfiedLinkError) { + if (msg.isNotBlank()) loggerE(msg = msg, e = e) + } catch (e: UnsupportedOperationException) { + if (msg.isNotBlank()) loggerE(msg = msg, e = e) + } catch (e: ClassNotFoundException) { + if (msg.isNotBlank()) loggerE(msg = msg, e = e) + } catch (e: IllegalStateException) { + if (msg.isNotBlank()) loggerE(msg = msg, e = e) + } catch (e: NoSuchMethodError) { + if (msg.isNotBlank()) loggerE(msg = msg, e = e) + } catch (e: NoSuchFieldError) { + if (msg.isNotBlank()) loggerE(msg = msg, e = e) + } catch (e: Error) { + if (msg.isNotBlank()) loggerE(msg = msg, e = e) + } catch (e: Exception) { + if (msg.isNotBlank()) loggerE(msg = msg, e = e) + } catch (e: Throwable) { + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/Compatible.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/Compatible.kt new file mode 100755 index 0000000..a125822 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/Compatible.kt @@ -0,0 +1,293 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +@file:Suppress("SameParameterValue") + +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.annotation.SuppressLint +import android.graphics.drawable.Drawable +import android.graphics.drawable.GradientDrawable +import android.graphics.drawable.RippleDrawable +import android.graphics.drawable.RotateDrawable +import android.os.Build +import java.lang.reflect.Field +import java.lang.reflect.Method + +private val gradientState = resolveGradientState() + +private fun resolveGradientState(): Class<*> { + val classes = GradientDrawable::class.java.declaredClasses + for (singleClass in classes) { + if (singleClass.simpleName == "GradientState") return singleClass + } + throw RuntimeException("GradientState could not be found in thisAny GradientDrawable implementation") +} + +private val rotateState = resolveRotateState() + +private fun resolveRotateState(): Class<*> { + val classes = RotateDrawable::class.java.declaredClasses + for (singleClass in classes) { + if (singleClass.simpleName == "RotateState") return singleClass + } + throw RuntimeException("RotateState could not be found in thisAny RotateDrawable implementation") +} + +@Throws(SecurityException::class, NoSuchFieldException::class) +private fun resolveField(source: Class<*>, fieldName: String): Field { + val field = source.getDeclaredField(fieldName) + field.isAccessible = true + return field +} + +@Throws(SecurityException::class, NoSuchMethodException::class) +private fun resolveMethod( + source: Class<*>, + methodName: String, + vararg parameterTypes: Class<*> +): Method { + val method = source.getDeclaredMethod(methodName, *parameterTypes) + method.isAccessible = true + return method +} + +fun setInnerRadius(drawable: GradientDrawable, value: Int) { + try { + val innerRadius = resolveField(gradientState, "mInnerRadius") + innerRadius.setInt(drawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } +} + +fun setInnerRadiusRatio(drawable: GradientDrawable, value: Float) { + try { + val innerRadius = resolveField(gradientState, "mInnerRadiusRatio") + innerRadius.setFloat(drawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } +} + +fun setThickness(drawable: GradientDrawable, value: Int) { + try { + val innerRadius = resolveField(gradientState, "mThickness") + innerRadius.setInt(drawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } +} + +fun setThicknessRatio(drawable: GradientDrawable, value: Float) { + try { + val innerRadius = resolveField(gradientState, "mThicknessRatio") + innerRadius.setFloat(drawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } +} + +fun setUseLevelForShape(drawable: GradientDrawable, value: Boolean) { + try { + val useLevelForShape = resolveField(gradientState, "mUseLevelForShape") + useLevelForShape.setBoolean(drawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } +} + +@SuppressLint("ObsoleteSdkInt") +fun setOrientation(drawable: GradientDrawable, value: GradientDrawable.Orientation) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + drawable.orientation = value + } else { + try { + val orientation = resolveField(gradientState, "mOrientation") + orientation.set(drawable.constantState, value) + val rectIdDirty = resolveField(GradientDrawable::class.java, "mRectIsDirty") + rectIdDirty.setBoolean(drawable, true) + drawable.invalidateSelf() + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + } +} + +@SuppressLint("ObsoleteSdkInt") +fun setColors(drawable: GradientDrawable, value: IntArray) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + drawable.colors = value + } else { + try { + val colors = resolveField(gradientState, "mColors") + colors.set(drawable.constantState, value) + drawable.invalidateSelf() + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + } +} + +fun setGradientRadiusType(drawable: GradientDrawable, value: Int) { + try { + val type = resolveField(gradientState, "mGradientRadiusType") + type.setInt(drawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } +} + +fun setGradientRadius(drawable: GradientDrawable, value: Float) { + try { + val gradientRadius = resolveField(gradientState, "mGradientRadius") + gradientRadius.setFloat(drawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } +} + +fun setStrokeColor(drawable: GradientDrawable, value: Int) { + try { + val type = resolveField(gradientState, "mStrokeColor") + type.setInt(drawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } +} + +fun setDrawable(rotateDrawable: RotateDrawable, drawable: Drawable) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + rotateDrawable.drawable = drawable + } else { + try { + val drawableField = resolveField(rotateState, "mDrawable") + val stateField = resolveField(RotateDrawable::class.java, "mState") + drawableField.set(stateField.get(rotateDrawable), drawable) + drawable.callback = rotateDrawable + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + } +} + +fun setPivotX(rotateDrawable: RotateDrawable, value: Float) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + rotateDrawable.pivotX = value + } else { + try { + val pivotXField = resolveField(rotateState, "mPivotX") + pivotXField.setFloat(rotateDrawable.constantState, value) + val pivotXRelField = resolveField(rotateState, "mPivotXRel") + pivotXRelField.setBoolean(rotateDrawable.constantState, true) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + } +} + +fun setPivotY(rotateDrawable: RotateDrawable, value: Float) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + rotateDrawable.pivotY = value + } else { + try { + val pivotYField = resolveField(rotateState, "mPivotY") + pivotYField.setFloat(rotateDrawable.constantState, value) + val pivotYRelField = resolveField(rotateState, "mPivotYRel") + pivotYRelField.setBoolean(rotateDrawable.constantState, true) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + } +} + +fun setFromDegrees(rotateDrawable: RotateDrawable, value: Float) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + rotateDrawable.fromDegrees = value + } else { + try { + val fromDegreesField = resolveField(rotateState, "mFromDegrees") + fromDegreesField.setFloat(rotateDrawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + } +} + +fun setToDegrees(rotateDrawable: RotateDrawable, value: Float) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + rotateDrawable.toDegrees = value + } else { + try { + val toDegreesField = resolveField(rotateState, "mToDegrees") + toDegreesField.setFloat(rotateDrawable.constantState, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + } +} + +fun setRadius(rippleDrawable: RippleDrawable, value: Int) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + rippleDrawable.radius = value + } else { + try { + val setRadiusMethod = + resolveMethod(RippleDrawable::class.java, "setMaxRadius", Int::class.java) + setRadiusMethod.invoke(rippleDrawable, value) + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/Constants.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/Constants.kt new file mode 100755 index 0000000..2f9b3ea --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/Constants.kt @@ -0,0 +1,30 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +class Constants { + + companion object { + const val DEFAULT_COLOR = 0xFFBA68C8.toInt() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableBuilder.kt new file mode 100755 index 0000000..0771683 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableBuilder.kt @@ -0,0 +1,490 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +@file:Suppress("unused", "MemberVisibilityCanBePrivate") + +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.content.res.ColorStateList +import android.graphics.drawable.Drawable +import android.graphics.drawable.GradientDrawable +import android.util.StateSet +import java.util.* +import java.util.concurrent.atomic.AtomicInteger + +class DrawableBuilder { + + private var properties = DrawableProperties() + private var order: AtomicInteger = AtomicInteger(1) + private var transformsMap = TreeMap Drawable>() + private var baseDrawable: Drawable? = null + + fun batch(properties: DrawableProperties) = apply { this.properties = properties.copy() } + fun baseDrawable(drawable: Drawable) = apply { baseDrawable = drawable } + + // + fun shape(shape: Int) = apply { properties.shape = shape } + + fun rectangle() = apply { shape(GradientDrawable.RECTANGLE) } + fun oval() = apply { shape(GradientDrawable.OVAL) } + fun line() = apply { shape(GradientDrawable.LINE) } + fun ring() = apply { shape(GradientDrawable.RING) } + fun innerRadius(innerRadius: Int) = apply { properties.innerRadius = innerRadius } + fun innerRadiusRatio(innerRadiusRatio: Float) = + apply { properties.innerRadiusRatio = innerRadiusRatio } + + fun thickness(thickness: Int) = apply { properties.thickness = thickness } + fun thicknessRatio(thicknessRatio: Float) = apply { properties.thicknessRatio = thicknessRatio } + + fun useLevelForRing(use: Boolean = true) = apply { properties.useLevelForRing = use } + + // + fun cornerRadius(cornerRadius: Int) = apply { properties.cornerRadius = cornerRadius } + + fun topLeftRadius(topLeftRadius: Int) = apply { properties.topLeftRadius = topLeftRadius } + fun topRightRadius(topRightRadius: Int) = apply { properties.topRightRadius = topRightRadius } + fun bottomRightRadius(bottomRightRadius: Int) = + apply { properties.bottomRightRadius = bottomRightRadius } + + fun bottomLeftRadius(bottomLeftRadius: Int) = + apply { properties.bottomLeftRadius = bottomLeftRadius } + + fun rounded() = apply { cornerRadius(Int.MAX_VALUE) } + fun cornerRadii( + topLeftRadius: Int, + topRightRadius: Int, + bottomRightRadius: Int, + bottomLeftRadius: Int + ) = apply { + topLeftRadius(topLeftRadius); topRightRadius(topRightRadius); bottomRightRadius( + bottomRightRadius + ); bottomLeftRadius(bottomLeftRadius) + } + + // + + fun gradient(useGradient: Boolean = true) = apply { properties.useGradient = useGradient } + + fun gradientType(type: Int) = apply { properties.type = type } + fun linearGradient() = apply { gradientType(GradientDrawable.LINEAR_GRADIENT) } + fun radialGradient() = apply { gradientType(GradientDrawable.RADIAL_GRADIENT) } + fun sweepGradient() = apply { gradientType(GradientDrawable.SWEEP_GRADIENT) } + fun angle(angle: Int) = apply { properties.angle = angle } + fun centerX(centerX: Float) = apply { properties.centerX = centerX } + fun centerY(centerY: Float) = apply { properties.centerY = centerY } + fun center(centerX: Float, centerY: Float) = apply { centerX(centerX); centerY(centerY) } + + fun useCenterColor(useCenterColor: Boolean = true) = + apply { properties.useCenterColor = useCenterColor } + + fun startColor(startColor: Int) = apply { properties.startColor = startColor } + fun centerColor(centerColor: Int) = apply { + properties.centerColor = centerColor + useCenterColor(true) + } + + fun endColor(endColor: Int) = apply { properties.endColor = endColor } + fun gradientColors(startColor: Int, endColor: Int, centerColor: Int?) = apply { + startColor(startColor); endColor(endColor) + useCenterColor(centerColor != null) + centerColor?.let { + centerColor(it) + } + } + + fun gradientRadiusType(gradientRadiusType: Int) = + apply { properties.gradientRadiusType = gradientRadiusType } + + fun gradientRadius(gradientRadius: Float) = apply { properties.gradientRadius = gradientRadius } + fun gradientRadius(radius: Float, type: Int) = + apply { gradientRadius(radius); gradientRadiusType(type) } + + fun gradientRadiusInPixel(radius: Float) = + apply { gradientRadius(radius); gradientRadiusType(DrawableProperties.RADIUS_TYPE_PIXELS) } + + fun gradientRadiusInFraction(radius: Float) = + apply { gradientRadius(radius); gradientRadiusType(DrawableProperties.RADIUS_TYPE_FRACTION) } + + fun useLevelForGradient(use: Boolean) = apply { properties.useLevelForGradient = use } + fun useLevelForGradient() = apply { useLevelForGradient(true) } + + // + fun width(width: Int) = apply { properties.width = width } + + fun height(height: Int) = apply { properties.height = height } + fun size(width: Int, height: Int) = apply { width(width); height(height) } + fun size(size: Int) = apply { width(size).height(size) } + + // + fun solidColor(solidColor: Int) = apply { properties.solidColor = solidColor } + + private var solidColorPressed: Int? = null + fun solidColorPressed(color: Int?) = apply { solidColorPressed = color } + private var solidColorPressedWhenRippleUnsupported: Int? = null + fun solidColorPressedWhenRippleUnsupported(color: Int?) = + apply { solidColorPressedWhenRippleUnsupported = color } + + private var solidColorDisabled: Int? = null + fun solidColorDisabled(color: Int?) = apply { solidColorDisabled = color } + private var solidColorSelected: Int? = null + fun solidColorSelected(color: Int?) = apply { solidColorSelected = color } + fun solidColorStateList(colorStateList: ColorStateList) = + apply { properties.solidColorStateList = colorStateList } + + // + fun strokeWidth(strokeWidth: Int) = apply { properties.strokeWidth = strokeWidth } + + fun strokeColor(strokeColor: Int) = apply { properties.strokeColor = strokeColor } + private var strokeColorPressed: Int? = null + fun strokeColorPressed(color: Int?) = apply { strokeColorPressed = color } + private var strokeColorDisabled: Int? = null + fun strokeColorDisabled(color: Int?) = apply { strokeColorDisabled = color } + private var strokeColorSelected: Int? = null + fun strokeColorSelected(color: Int?) = apply { strokeColorSelected = color } + fun strokeColorStateList(colorStateList: ColorStateList) = + apply { properties.strokeColorStateList = colorStateList } + + fun dashWidth(dashWidth: Int) = apply { properties.dashWidth = dashWidth } + fun dashGap(dashGap: Int) = apply { properties.dashGap = dashGap } + fun hairlineBordered() = apply { strokeWidth(1) } + fun shortDashed() = apply { dashWidth(12).dashGap(12) } + fun mediumDashed() = apply { dashWidth(24).dashGap(24) } + fun longDashed() = apply { dashWidth(36).dashGap(36) } + fun dashed() = apply { mediumDashed() } + + // + private var rotateOrder = 0 + + + fun rotate(boolean: Boolean = true) = apply { + properties.useRotate = boolean + rotateOrder = if (boolean) { + order.getAndIncrement() + } else { + 0 + } + } + + fun pivotX(pivotX: Float) = apply { properties.pivotX = pivotX } + fun pivotY(pivotY: Float) = apply { properties.pivotY = pivotY } + fun pivot(pivotX: Float, pivotY: Float) = apply { pivotX(pivotX).pivotY(pivotY) } + fun fromDegrees(degrees: Float) = apply { properties.fromDegrees = degrees } + fun toDegrees(degrees: Float) = apply { properties.toDegrees = degrees } + fun degrees(fromDegrees: Float, toDegrees: Float) = + apply { fromDegrees(fromDegrees).toDegrees(toDegrees) } + + fun degrees(degrees: Float) = apply { fromDegrees(degrees).toDegrees(degrees) } + fun rotate(fromDegrees: Float, toDegrees: Float) = + apply { rotate().fromDegrees(fromDegrees).toDegrees(toDegrees) } + + fun rotate(degrees: Float) = apply { rotate().degrees(degrees) } + + // + private var scaleOrder = 0 + + + fun scale(boolean: Boolean = true) = apply { + properties.useScale = boolean + scaleOrder = if (boolean) { + order.getAndIncrement() + } else { + 0 + } + } + + fun scaleLevel(level: Int) = apply { properties.scaleLevel = level } + fun scaleGravity(gravity: Int) = apply { properties.scaleGravity = gravity } + fun scaleWidth(scale: Float) = apply { properties.scaleWidth = scale } + fun scaleHeight(scale: Float) = apply { properties.scaleHeight = scale } + fun scale(scale: Float) = apply { scale().scaleWidth(scale).scaleHeight(scale) } + fun scale(scaleWidth: Float, scaleHeight: Float) = + apply { scale().scaleWidth(scaleWidth).scaleHeight(scaleHeight) } + + // flip + + fun flip(boolean: Boolean = true) = apply { properties.useFlip = boolean } + + fun orientation(orientation: Int) = apply { properties.orientation = orientation } + fun flipVertical() = apply { flip().orientation(FlipDrawable.ORIENTATION_VERTICAL) } + + // + + fun ripple(boolean: Boolean = true) = apply { properties.useRipple = boolean } + + fun rippleColor(color: Int) = apply { properties.rippleColor = color } + fun rippleColorStateList(colorStateList: ColorStateList) = + apply { properties.rippleColorStateList = colorStateList } + + fun rippleRadius(radius: Int) = apply { properties.rippleRadius = radius } + + fun build(): Drawable { + if (baseDrawable != null) { + return wrap(baseDrawable!!) + } + + var drawable: Drawable + + // fall back when ripple is unavailable on devices with API < 21 + if (shouldFallbackRipple()) { + if (solidColorPressedWhenRippleUnsupported != null) { + solidColorPressed(solidColorPressedWhenRippleUnsupported) + } else { + solidColorPressed(properties.rippleColor) + } + } + + if (needStateListDrawable()) { + drawable = StateListDrawableBuilder() + .pressed(buildPressedDrawable()) + .disabled(buildDisabledDrawable()) + .selected(buildSelectedDrawable()) + .normal(buildNormalDrawable()) + .build() + } else { + drawable = GradientDrawable() + setupGradientDrawable(drawable) + } + drawable = wrap(drawable) + return drawable + } + + private fun getSolidColorStateList(): ColorStateList { + if (properties.solidColorStateList != null) { + return properties.solidColorStateList!! + } + + val states = mutableListOf() + val colors = mutableListOf() + + solidColorPressed?.let { + states.add(intArrayOf(android.R.attr.state_pressed)) + colors.add(it) + } + solidColorDisabled?.let { + states.add(intArrayOf(-android.R.attr.state_enabled)) + colors.add(it) + } + solidColorSelected?.let { + states.add(intArrayOf(android.R.attr.state_selected)) + colors.add(it) + } + states.add(StateSet.WILD_CARD) + colors.add(properties.solidColor) + + return ColorStateList(states.toTypedArray(), colors.toIntArray()) + } + + private fun getStrokeColorStateList(): ColorStateList { + if (properties.strokeColorStateList != null) { + return properties.strokeColorStateList!! + } + + val states = mutableListOf() + val colors = mutableListOf() + + strokeColorPressed?.let { + states.add(intArrayOf(android.R.attr.state_pressed)) + colors.add(it) + } + strokeColorDisabled?.let { + states.add(intArrayOf(-android.R.attr.state_enabled)) + colors.add(it) + } + strokeColorSelected?.let { + states.add(intArrayOf(android.R.attr.state_selected)) + colors.add(it) + } + states.add(StateSet.WILD_CARD) + colors.add(properties.strokeColor) + + return ColorStateList(states.toTypedArray(), colors.toIntArray()) + } + + private fun buildPressedDrawable(): Drawable? { + if (solidColorPressed == null && strokeColorPressed == null) return null + + val pressedDrawable = GradientDrawable() + setupGradientDrawable(pressedDrawable) + solidColorPressed?.let { + pressedDrawable.setColor(it) + } + strokeColorPressed?.let { + setStrokeColor(pressedDrawable, it) + } + return pressedDrawable + } + + private fun buildDisabledDrawable(): Drawable? { + if (solidColorDisabled == null && strokeColorDisabled == null) return null + + val disabledDrawable = GradientDrawable() + setupGradientDrawable(disabledDrawable) + solidColorDisabled?.let { + disabledDrawable.setColor(it) + } + strokeColorDisabled?.let { + setStrokeColor(disabledDrawable, it) + } + return disabledDrawable + } + + private fun buildSelectedDrawable(): Drawable? { + if (solidColorSelected == null && strokeColorSelected == null) return null + + val selectedDrawable = GradientDrawable() + setupGradientDrawable(selectedDrawable) + solidColorSelected?.let { + selectedDrawable.setColor(it) + } + strokeColorSelected?.let { + setStrokeColor(selectedDrawable, it) + } + return selectedDrawable + } + + private fun buildNormalDrawable(): Drawable { + val pressedDrawable = GradientDrawable() + setupGradientDrawable(pressedDrawable) + return pressedDrawable + } + + private fun setupGradientDrawable(drawable: GradientDrawable) { + properties.apply { + drawable.shape = shape + if (shape == GradientDrawable.RING) { + setInnerRadius(drawable, innerRadius) + setInnerRadiusRatio(drawable, innerRadiusRatio) + setThickness(drawable, thickness) + setThicknessRatio(drawable, thicknessRatio) + setUseLevelForShape(drawable, useLevelForRing) + } + drawable.cornerRadii = getCornerRadii() + if (useGradient) { + drawable.gradientType = type + setGradientRadiusType(drawable, gradientRadiusType) + setGradientRadius(drawable, gradientRadius) + drawable.setGradientCenter(centerX, centerY) + setOrientation(drawable, getOrientation()) + setColors(drawable, getColors()) + drawable.useLevel = useLevelForGradient + } else { + drawable.color = getSolidColorStateList() + } + drawable.setSize(width, height) + drawable.setStroke( + strokeWidth, + getStrokeColorStateList(), + dashWidth.toFloat(), + dashGap.toFloat() + ) + } + } + + private fun needStateListDrawable(): Boolean { + return (hasStrokeColorStateList() || (!properties.useGradient && hasSolidColorStateList())) + } + + private fun needRotateDrawable(): Boolean { + return properties.useRotate && + !(properties.pivotX == 0.5f && properties.pivotY == 0.5f + && properties.fromDegrees == 0f && properties.toDegrees == 0f) + } + + private fun needScaleDrawable(): Boolean { + return properties.useScale + } + + private fun wrap(drawable: Drawable): Drawable { + var wrappedDrawable = drawable + + if (rotateOrder > 0) { + transformsMap[rotateOrder] = ::wrapRotateIfNeeded + } + if (scaleOrder > 0) { + transformsMap[scaleOrder] = ::wrapScaleIfNeeded + } + + for (action in transformsMap.values) { + wrappedDrawable = action.invoke(wrappedDrawable) + } + + if (properties.useFlip) { + wrappedDrawable = FlipDrawableBuilder() + .drawable(wrappedDrawable) + .orientation(properties.orientation) + .build() + } + + if (isRippleSupported() && properties.useRipple) { + wrappedDrawable = RippleDrawableBuilder() + .drawable(wrappedDrawable) + .color(properties.rippleColor) + .colorStateList(properties.rippleColorStateList) + .radius(properties.rippleRadius) + .build() + } + + return wrappedDrawable + } + + private fun shouldFallbackRipple(): Boolean { + return properties.useRipple && !isRippleSupported() + } + + private fun isRippleSupported() = true + + private fun wrapRotateIfNeeded(drawable: Drawable): Drawable { + if (!needRotateDrawable()) return drawable + + with(properties) { + return RotateDrawableBuilder() + .drawable(drawable) + .pivotX(pivotX) + .pivotY(pivotY) + .fromDegrees(fromDegrees) + .toDegrees(toDegrees) + .build() + } + } + + private fun wrapScaleIfNeeded(drawable: Drawable): Drawable { + if (!needScaleDrawable()) return drawable + + with(properties) { + return ScaleDrawableBuilder() + .drawable(drawable) + .level(scaleLevel) + .scaleGravity(scaleGravity) + .scaleWidth(scaleWidth) + .scaleHeight(scaleHeight) + .build() + } + } + + private fun hasSolidColorStateList(): Boolean { + return solidColorPressed != null || solidColorDisabled != null || solidColorSelected != null + } + + private fun hasStrokeColorStateList(): Boolean { + return strokeColorPressed != null || strokeColorDisabled != null || strokeColorSelected != null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableProperties.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableProperties.kt new file mode 100755 index 0000000..fc89986 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableProperties.kt @@ -0,0 +1,222 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +@file:Suppress("SetterBackingFieldAssignment", "unused") + +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.content.res.ColorStateList +import android.graphics.Color +import android.graphics.drawable.Drawable +import android.graphics.drawable.GradientDrawable +import android.os.Parcel +import android.os.Parcelable +import android.view.Gravity +import java.io.Serializable + +data class DrawableProperties( + + // + @JvmField var shape: Int = GradientDrawable.RECTANGLE, + @JvmField var innerRadius: Int = -1, + @JvmField var innerRadiusRatio: Float = 9f, + @JvmField var thickness: Int = -1, + @JvmField var thicknessRatio: Float = 3f, + @JvmField var useLevelForRing: Boolean = false, + + // + private var _cornerRadius: Int = 0, + @JvmField var topLeftRadius: Int = 0, + @JvmField var topRightRadius: Int = 0, + @JvmField var bottomRightRadius: Int = 0, + @JvmField var bottomLeftRadius: Int = 0, + + // + @JvmField var useGradient: Boolean = false, + @JvmField var type: Int = GradientDrawable.RADIAL_GRADIENT, + @JvmField var angle: Int = 0, + @JvmField var centerX: Float = 0.5f, + @JvmField var centerY: Float = 0.5f, + @JvmField var useCenterColor: Boolean = false, + @JvmField var startColor: Int = Constants.DEFAULT_COLOR, + @JvmField var centerColor: Int? = null, + @JvmField var endColor: Int = 0x7FFFFFFF, + @JvmField var gradientRadiusType: Int = RADIUS_TYPE_FRACTION, + @JvmField var gradientRadius: Float = 0.5f, + @JvmField var useLevelForGradient: Boolean = false, + + // + @JvmField var width: Int = -1, + @JvmField var height: Int = -1, + + // + @JvmField var solidColor: Int = Color.TRANSPARENT, + @JvmField var solidColorStateList: ColorStateList? = null, + + // + @JvmField var strokeWidth: Int = 0, + @JvmField var strokeColor: Int = Color.DKGRAY, + @JvmField var strokeColorStateList: ColorStateList? = null, + @JvmField var dashWidth: Int = 0, + @JvmField var dashGap: Int = 0, + + // + @JvmField var useRotate: Boolean = false, + @JvmField var pivotX: Float = 0.5f, + @JvmField var pivotY: Float = 0.5f, + @JvmField var fromDegrees: Float = 0f, + @JvmField var toDegrees: Float = 0f, + + // + @JvmField var useScale: Boolean = false, + @JvmField var scaleLevel: Int = 10000, + @JvmField var scaleGravity: Int = Gravity.CENTER, + @JvmField var scaleWidth: Float = 0f, + @JvmField var scaleHeight: Float = 0f, + + // flip + @JvmField var useFlip: Boolean = false, + @JvmField var orientation: Int = FlipDrawable.ORIENTATION_HORIZONTAL, + + // ripple + @JvmField var useRipple: Boolean = false, + @JvmField var rippleColor: Int = Constants.DEFAULT_COLOR, + @JvmField var rippleColorStateList: ColorStateList? = null, + @JvmField var rippleRadius: Int = -1 +) : Serializable { + + companion object { + const val RADIUS_TYPE_PIXELS = 0 + const val RADIUS_TYPE_FRACTION = 1 + + @JvmField + val CREATOR = object : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): DrawableProperties { + return DrawableProperties(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } + } + + var cornerRadius: Int = _cornerRadius + set(value) { + _cornerRadius = value + topLeftRadius = value + topRightRadius = value + bottomRightRadius = value + bottomLeftRadius = value + } + + constructor(parcel: Parcel) : this( + parcel.readInt(), + parcel.readInt(), + parcel.readFloat(), + parcel.readInt(), + parcel.readFloat(), + parcel.readByte() != 0.toByte(), + parcel.readInt(), + parcel.readInt(), + parcel.readInt(), + parcel.readInt(), + parcel.readInt(), + parcel.readByte() != 0.toByte(), + parcel.readInt(), + parcel.readInt(), + parcel.readFloat(), + parcel.readFloat(), + parcel.readByte() != 0.toByte(), + parcel.readInt(), + parcel.readValue(Int::class.java.classLoader) as? Int, + parcel.readInt(), + parcel.readInt(), + parcel.readFloat(), + parcel.readByte() != 0.toByte(), + parcel.readInt(), + parcel.readInt(), + parcel.readInt(), + parcel.readParcelable(ColorStateList::class.java.classLoader), + parcel.readInt(), + parcel.readInt(), + parcel.readParcelable(ColorStateList::class.java.classLoader), + parcel.readInt(), + parcel.readInt(), + parcel.readByte() != 0.toByte(), + parcel.readFloat(), + parcel.readFloat(), + parcel.readFloat(), + parcel.readFloat(), + parcel.readByte() != 0.toByte(), + parcel.readInt(), + parcel.readInt(), + parcel.readFloat(), + parcel.readFloat(), + parcel.readByte() != 0.toByte(), + parcel.readInt(), + parcel.readByte() != 0.toByte(), + parcel.readInt(), + parcel.readParcelable(ColorStateList::class.java.classLoader), + parcel.readInt() + ) + + fun copy(): DrawableProperties { + val parcel = Parcel.obtain() + parcel.setDataPosition(0) + val properties = CREATOR.createFromParcel(parcel) + parcel.recycle() + return properties + } + + fun getCornerRadii(): FloatArray { + return floatArrayOf( + topLeftRadius.toFloat(), topLeftRadius.toFloat(), + topRightRadius.toFloat(), topRightRadius.toFloat(), + bottomRightRadius.toFloat(), bottomRightRadius.toFloat(), + bottomLeftRadius.toFloat(), bottomLeftRadius.toFloat() + ) + } + + fun getOrientation(): GradientDrawable.Orientation { + val orientation: GradientDrawable.Orientation = when (val angle = this.angle % 360) { + 0 -> GradientDrawable.Orientation.LEFT_RIGHT + 45 -> GradientDrawable.Orientation.BL_TR + 90 -> GradientDrawable.Orientation.BOTTOM_TOP + 135 -> GradientDrawable.Orientation.BR_TL + 180 -> GradientDrawable.Orientation.RIGHT_LEFT + 225 -> GradientDrawable.Orientation.TR_BL + 270 -> GradientDrawable.Orientation.TOP_BOTTOM + 315 -> GradientDrawable.Orientation.TL_BR + else -> throw IllegalArgumentException("Unsupported angle: $angle") + } + return orientation + } + + fun getColors(): IntArray { + return if (useCenterColor && centerColor != null) { + intArrayOf(startColor, centerColor!!, endColor) + } else intArrayOf(startColor, endColor) + } + + fun materialization(): Drawable = DrawableBuilder().batch(this).build() +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableWrapperBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableWrapperBuilder.kt new file mode 100755 index 0000000..b79536c --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/DrawableWrapperBuilder.kt @@ -0,0 +1,35 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.graphics.drawable.Drawable + +abstract class DrawableWrapperBuilder> { + + protected var drawable: Drawable? = null + + @Suppress("UNCHECKED_CAST") + fun drawable(drawable: Drawable): T = apply { this.drawable = drawable } as T + + abstract fun build(): Drawable +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/FlipDrawable.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/FlipDrawable.kt new file mode 100755 index 0000000..6ed6b94 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/FlipDrawable.kt @@ -0,0 +1,79 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +@file:Suppress("DEPRECATION", "CanvasSize") + +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.graphics.Canvas +import android.graphics.ColorFilter +import android.graphics.Rect +import android.graphics.drawable.Drawable + +class FlipDrawable( + private var drawable: Drawable, + private var orientation: Int = ORIENTATION_HORIZONTAL +) : Drawable() { + + companion object { + const val ORIENTATION_HORIZONTAL = 0 + const val ORIENTATION_VERTICAL = 1 + } + + override fun draw(canvas: Canvas) { + val saveCount = canvas.save() + if (orientation == ORIENTATION_VERTICAL) { + canvas.scale(1f, -1f, (canvas.width / 2).toFloat(), (canvas.height / 2).toFloat()) + } else { + canvas.scale(-1f, 1f, (canvas.width / 2).toFloat(), (canvas.height / 2).toFloat()) + } + drawable.bounds = Rect(0, 0, canvas.width, canvas.height) + drawable.draw(canvas) + canvas.restoreToCount(saveCount) + } + + override fun onLevelChange(level: Int): Boolean { + drawable.level = level + invalidateSelf() + return true + } + + override fun getIntrinsicWidth(): Int { + return drawable.intrinsicWidth + } + + override fun getIntrinsicHeight(): Int { + return drawable.intrinsicHeight + } + + override fun setAlpha(alpha: Int) { + drawable.alpha = alpha + } + + override fun getOpacity(): Int { + return drawable.opacity + } + + override fun setColorFilter(colorFilter: ColorFilter?) { + drawable.colorFilter = colorFilter + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/FlipDrawableBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/FlipDrawableBuilder.kt new file mode 100755 index 0000000..6f01208 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/FlipDrawableBuilder.kt @@ -0,0 +1,36 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.graphics.drawable.Drawable + +class FlipDrawableBuilder : DrawableWrapperBuilder() { + + private var orientation: Int = FlipDrawable.ORIENTATION_HORIZONTAL + + fun orientation(orientation: Int) = apply { this.orientation = orientation } + + override fun build(): Drawable { + return FlipDrawable(drawable!!, orientation) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/LayerDrawableBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/LayerDrawableBuilder.kt new file mode 100755 index 0000000..5e68682 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/LayerDrawableBuilder.kt @@ -0,0 +1,182 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.graphics.drawable.Drawable +import android.graphics.drawable.LayerDrawable +import android.os.Build +import android.view.Gravity +import androidx.annotation.RequiresApi + +class LayerDrawableBuilder { + + companion object { + const val DIMEN_UNDEFINED = Int.MIN_VALUE + } + + @RequiresApi(Build.VERSION_CODES.LOLLIPOP) + private var paddingMode = LayerDrawable.PADDING_MODE_NEST + private var paddingLeft = 0 + private var paddingTop = 0 + private var paddingRight = 0 + private var paddingBottom = 0 + private var paddingStart = 0 + private var paddingEnd = 0 + private val layers = ArrayList() + + @RequiresApi(Build.VERSION_CODES.LOLLIPOP) + fun paddingMode(mode: Int) = apply { paddingMode = mode } + fun paddingLeft(padding: Int) = apply { paddingLeft = padding } + fun paddingTop(padding: Int) = apply { paddingTop = padding } + fun paddingRight(padding: Int) = apply { paddingRight = padding } + fun paddingBottom(padding: Int) = apply { paddingBottom = padding } + + @RequiresApi(Build.VERSION_CODES.M) + fun paddingStart(padding: Int) = apply { paddingStart = padding } + + @RequiresApi(Build.VERSION_CODES.M) + fun paddingEnd(padding: Int) = apply { paddingEnd = padding } + fun padding(padding: Int) = apply { + paddingLeft(padding).paddingTop(padding).paddingRight(padding).paddingBottom(padding) + } + + @RequiresApi(Build.VERSION_CODES.M) + fun paddingRelative(padding: Int) = apply { + paddingStart(padding).paddingTop(padding).paddingEnd(padding).paddingBottom(padding) + } + + fun add(drawable: Drawable) = apply { layers.add(Layer(drawable)) } + + fun width(width: Int) = apply { layers.last().width = width } + fun height(height: Int) = apply { layers.last().height = height } + + fun insetLeft(inset: Int) = apply { layers.last().insetLeft = inset } + fun insetTop(inset: Int) = apply { layers.last().insetTop = inset } + fun insetRight(inset: Int) = apply { layers.last().insetRight = inset } + fun insetBottom(inset: Int) = apply { layers.last().insetBottom = inset } + + @RequiresApi(Build.VERSION_CODES.M) + fun insetStart(inset: Int) = apply { layers.last().insetStart = inset } + + @RequiresApi(Build.VERSION_CODES.M) + fun insetEnd(inset: Int) = apply { layers.last().insetEnd = inset } + fun inset(inset: Int) = + apply { insetLeft(inset).insetTop(inset).insetRight(inset).insetBottom(inset) } + + fun inset(insetLeft: Int, insetTop: Int, insetRight: Int, insetBottom: Int) = apply { + insetLeft(insetLeft).insetTop(insetTop).insetRight(insetRight).insetBottom(insetBottom) + } + + @RequiresApi(Build.VERSION_CODES.M) + fun insetRelative(inset: Int) = + apply { insetStart(inset).insetTop(inset).insetEnd(inset).insetBottom(inset) } + + @RequiresApi(Build.VERSION_CODES.M) + fun insetRelative(insetStart: Int, insetTop: Int, insetEnd: Int, insetBottom: Int) = apply { + insetStart(insetStart).insetTop(insetTop).insetEnd(insetEnd).insetBottom(insetBottom) + } + + @RequiresApi(Build.VERSION_CODES.M) + fun gravity(gravity: Int) = apply { layers.last().gravity = gravity } + + fun modify( + index: Int, drawable: Drawable, + width: Int = DIMEN_UNDEFINED, + height: Int = DIMEN_UNDEFINED, + insetLeft: Int = DIMEN_UNDEFINED, + insetTop: Int = DIMEN_UNDEFINED, + insetRight: Int = DIMEN_UNDEFINED, + insetBottom: Int = DIMEN_UNDEFINED, + insetStart: Int = DIMEN_UNDEFINED, + insetEnd: Int = DIMEN_UNDEFINED + ) = + apply { + val layer = layers[index] + layer.drawable = drawable + if (width != DIMEN_UNDEFINED) layer.width = width + if (height != DIMEN_UNDEFINED) layer.height = height + if (insetLeft != DIMEN_UNDEFINED) layer.insetLeft = insetLeft + if (insetTop != DIMEN_UNDEFINED) layer.insetTop = insetTop + if (insetRight != DIMEN_UNDEFINED) layer.insetRight = insetRight + if (insetBottom != DIMEN_UNDEFINED) layer.insetBottom = insetBottom + if (insetStart != DIMEN_UNDEFINED) layer.insetStart = insetStart + if (insetEnd != DIMEN_UNDEFINED) layer.insetEnd = insetEnd + } + + fun build(): LayerDrawable { + val layerDrawable = LayerDrawable(layers.map { it -> it.drawable }.toTypedArray()) + for (i in 0 until layers.size) { + val layer = layers[i] + layerDrawable.setLayerInset( + i, + layer.insetLeft, + layer.insetTop, + layer.insetRight, + layer.insetBottom + ) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (layer.insetStart != DIMEN_UNDEFINED || layer.insetEnd != DIMEN_UNDEFINED) { + layerDrawable.setLayerInsetRelative( + i, + layer.insetStart, + layer.insetTop, + layer.insetEnd, + layer.insetBottom + ) + } + } + layerDrawable.setId(i, i) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + layerDrawable.setLayerGravity(i, layer.gravity) + layerDrawable.setLayerInsetStart(i, layer.insetStart) + layerDrawable.setLayerInsetEnd(i, layer.insetEnd) + } + } + layerDrawable.paddingMode = paddingMode + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + layerDrawable.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom) + if (paddingStart != DIMEN_UNDEFINED || paddingEnd != DIMEN_UNDEFINED) { + layerDrawable.setPaddingRelative( + paddingStart, + paddingTop, + paddingEnd, + paddingBottom + ) + } + } + + return layerDrawable + } + + internal class Layer(var drawable: Drawable) { + var gravity: Int = Gravity.NO_GRAVITY + var width: Int = -1 + var height: Int = -1 + var insetLeft: Int = 0 + var insetTop: Int = 0 + var insetRight: Int = 0 + var insetBottom: Int = 0 + var insetStart: Int = DIMEN_UNDEFINED + var insetEnd: Int = DIMEN_UNDEFINED + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/PathShapeDrawableBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/PathShapeDrawableBuilder.kt new file mode 100755 index 0000000..783d6da --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/PathShapeDrawableBuilder.kt @@ -0,0 +1,62 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.graphics.Path +import android.graphics.drawable.ShapeDrawable +import android.graphics.drawable.shapes.PathShape + +class PathShapeDrawableBuilder { + + private var path: Path? = null + private var pathStandardWidth: Float = 100f + private var pathStandardHeight: Float = 100f + private var width: Int = -1 + private var height: Int = -1 + + fun path(path: Path, pathStandardWidth: Float, pathStandardHeight: Float) = apply { + this.path = path + this.pathStandardWidth = pathStandardWidth + this.pathStandardHeight = pathStandardHeight + } + + fun width(width: Int) = apply { this.width = width } + fun height(height: Int) = apply { this.height = height } + fun size(size: Int) = apply { width(size).height(size) } + + fun build(custom: ((shapeDrawable: ShapeDrawable) -> Unit)? = null): ShapeDrawable { + val shapeDrawable = ShapeDrawable() + if (path == null || width <= 0 || height <= 0) { + return shapeDrawable + } + val pathShape = PathShape(path!!, pathStandardWidth, pathStandardHeight) + + shapeDrawable.shape = pathShape + shapeDrawable.intrinsicWidth = width + shapeDrawable.intrinsicHeight = height + if (custom != null) { + custom(shapeDrawable) + } + return shapeDrawable + } +} diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/RippleDrawableBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/RippleDrawableBuilder.kt new file mode 100755 index 0000000..1add1af --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/RippleDrawableBuilder.kt @@ -0,0 +1,74 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.content.res.ColorStateList +import android.graphics.Color +import android.graphics.drawable.* +import android.util.StateSet + +class RippleDrawableBuilder : DrawableWrapperBuilder() { + + private var color: Int = Constants.DEFAULT_COLOR + private var colorStateList: ColorStateList? = null + private var radius: Int = -1 + + fun color(color: Int) = apply { this.color = color } + fun colorStateList(colorStateList: ColorStateList?) = + apply { this.colorStateList = colorStateList } + + fun radius(radius: Int) = apply { this.radius = radius } + + override fun build(): Drawable { + var drawable = this.drawable!! + val colorStateList = this.colorStateList ?: ColorStateList( + arrayOf(StateSet.WILD_CARD), + intArrayOf(color) + ) + + var mask = if (drawable is DrawableContainer) drawable.getCurrent() else drawable + if (mask is ShapeDrawable) { + val state = mask.getConstantState() + if (state != null) { + val temp = state.newDrawable().mutate() as ShapeDrawable + temp.paint.color = Color.BLACK + mask = temp + } + } else if (mask is GradientDrawable) { + val state = mask.getConstantState() + if (state != null) { + val temp = state.newDrawable().mutate() as GradientDrawable + temp.setColor(Color.BLACK) + mask = temp + } + } else { + mask = ColorDrawable(Color.BLACK) + } + + val rippleDrawable = RippleDrawable(colorStateList, drawable, mask) + setRadius(rippleDrawable, radius) + rippleDrawable.invalidateSelf() + drawable = rippleDrawable + return drawable + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/RotateDrawableBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/RotateDrawableBuilder.kt new file mode 100755 index 0000000..87c0156 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/RotateDrawableBuilder.kt @@ -0,0 +1,53 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.graphics.drawable.Drawable +import android.graphics.drawable.RotateDrawable + +class RotateDrawableBuilder : DrawableWrapperBuilder() { + + private var pivotX: Float = 0.5f + private var pivotY: Float = 0.5f + private var fromDegrees: Float = 0f + private var toDegrees: Float = 360f + + fun pivotX(x: Float) = apply { pivotX = x } + fun pivotY(y: Float) = apply { pivotY = y } + fun fromDegrees(degree: Float) = apply { fromDegrees = degree } + fun toDegrees(degree: Float) = apply { toDegrees = degree } + + override fun build(): Drawable { + val rotateDrawable = RotateDrawable() + drawable?.let { + setDrawable(rotateDrawable, it) + apply { + setPivotX(rotateDrawable, pivotX) + setPivotY(rotateDrawable, pivotY) + setFromDegrees(rotateDrawable, fromDegrees) + setToDegrees(rotateDrawable, toDegrees) + } + } + return rotateDrawable + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/ScaleDrawableBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/ScaleDrawableBuilder.kt new file mode 100755 index 0000000..100065f --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/ScaleDrawableBuilder.kt @@ -0,0 +1,46 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.graphics.drawable.Drawable +import android.graphics.drawable.ScaleDrawable +import android.view.Gravity + +class ScaleDrawableBuilder : DrawableWrapperBuilder() { + + private var level: Int = 10000 + private var scaleGravity = Gravity.CENTER + private var scaleWidth: Float = 0f + private var scaleHeight: Float = 0f + + fun level(level: Int) = apply { this.level = level } + fun scaleGravity(gravity: Int) = apply { this.scaleGravity = gravity } + fun scaleWidth(scale: Float) = apply { this.scaleWidth = scale } + fun scaleHeight(scale: Float) = apply { this.scaleHeight = scale } + + override fun build(): Drawable { + val scaleDrawable = ScaleDrawable(drawable, scaleGravity, scaleWidth, scaleHeight) + scaleDrawable.level = level + return scaleDrawable + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/StateListDrawableBuilder.kt b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/StateListDrawableBuilder.kt new file mode 100755 index 0000000..5fd2d4a --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/utils/drawable/drawabletoolbox/StateListDrawableBuilder.kt @@ -0,0 +1,61 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +package com.fankes.coloros.notify.utils.drawable.drawabletoolbox + +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Drawable +import android.graphics.drawable.StateListDrawable +import android.util.StateSet + +class StateListDrawableBuilder { + + private var pressed: Drawable? = null + private var disabled: Drawable? = null + private var selected: Drawable? = null + private var normal: Drawable = ColorDrawable(Color.TRANSPARENT) + + fun pressed(pressed: Drawable?) = apply { this.pressed = pressed } + fun disabled(disabled: Drawable?) = apply { this.disabled = disabled } + fun selected(selected: Drawable?) = apply { this.selected = selected } + fun normal(normal: Drawable) = apply { this.normal = normal } + + fun build(): StateListDrawable { + val stateListDrawable = StateListDrawable() + setupStateListDrawable(stateListDrawable) + return stateListDrawable + } + + private fun setupStateListDrawable(stateListDrawable: StateListDrawable) { + pressed?.let { + stateListDrawable.addState(intArrayOf(android.R.attr.state_pressed), it) + } + disabled?.let { + stateListDrawable.addState(intArrayOf(-android.R.attr.state_enabled), it) + } + selected?.let { + stateListDrawable.addState(intArrayOf(android.R.attr.state_selected), it) + } + stateListDrawable.addState(StateSet.WILD_CARD, normal) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/coloros/notify/view/MaterialSwitch.kt b/app/src/main/java/com/fankes/coloros/notify/view/MaterialSwitch.kt new file mode 100644 index 0000000..86b6423 --- /dev/null +++ b/app/src/main/java/com/fankes/coloros/notify/view/MaterialSwitch.kt @@ -0,0 +1,69 @@ +/* + * ColorOSNotifyIcon - Optimize notification icons for ColorOS and adapt to native notification icon specifications. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/ColorOSNotifyIcon + * + * 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 + * + * + * This file is Created by fankes on 2022/1/8. + */ +@file:Suppress("SameParameterValue") + +package com.fankes.coloros.notify.view + +import android.content.Context +import android.content.res.ColorStateList +import android.graphics.Color +import android.util.AttributeSet +import androidx.appcompat.widget.SwitchCompat +import com.fankes.coloros.notify.utils.dp +import com.fankes.coloros.notify.utils.drawable.drawabletoolbox.DrawableBuilder + +class MaterialSwitch(context: Context, attrs: AttributeSet?) : SwitchCompat(context, attrs) { + + private fun toColors(selected: Int, pressed: Int, normal: Int): ColorStateList { + val colors = intArrayOf(selected, pressed, normal) + val states = arrayOfNulls(3) + states[0] = intArrayOf(android.R.attr.state_checked) + states[1] = intArrayOf(android.R.attr.state_pressed) + states[2] = intArrayOf() + return ColorStateList(states, colors) + } + + init { + trackDrawable = DrawableBuilder() + .rectangle() + .rounded() + .solidColor(0xFF656565.toInt()) + .height(20.dp) + .cornerRadius(15.dp) + .build() + thumbDrawable = DrawableBuilder() + .rectangle() + .rounded() + .solidColor(Color.WHITE) + .size(20.dp, 20.dp) + .cornerRadius(20.dp) + .strokeWidth(2.dp) + .strokeColor(Color.TRANSPARENT) + .build() + trackTintList = toColors( + 0xFF656565.toInt(), + 0xFFCCCCCC.toInt(), + 0xFFCCCCCC.toInt() + ) + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable-night/bg_dark_round.xml b/app/src/main/res/drawable-night/bg_dark_round.xml new file mode 100755 index 0000000..71baadb --- /dev/null +++ b/app/src/main/res/drawable-night/bg_dark_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-night/bg_permotion_round.xml b/app/src/main/res/drawable-night/bg_permotion_round.xml new file mode 100644 index 0000000..09cbc15 --- /dev/null +++ b/app/src/main/res/drawable-night/bg_permotion_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_button_round.xml b/app/src/main/res/drawable/bg_button_round.xml new file mode 100644 index 0000000..c7bf8cb --- /dev/null +++ b/app/src/main/res/drawable/bg_button_round.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_dark_round.xml b/app/src/main/res/drawable/bg_dark_round.xml new file mode 100755 index 0000000..ccc45c0 --- /dev/null +++ b/app/src/main/res/drawable/bg_dark_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_green_round.xml b/app/src/main/res/drawable/bg_green_round.xml new file mode 100755 index 0000000..5ac75d3 --- /dev/null +++ b/app/src/main/res/drawable/bg_green_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_permotion_round.xml b/app/src/main/res/drawable/bg_permotion_round.xml new file mode 100644 index 0000000..b7d8b2b --- /dev/null +++ b/app/src/main/res/drawable/bg_permotion_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_yellow_round.xml b/app/src/main/res/drawable/bg_yellow_round.xml new file mode 100755 index 0000000..215bdc4 --- /dev/null +++ b/app/src/main/res/drawable/bg_yellow_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_config.xml b/app/src/main/res/layout/activity_config.xml new file mode 100644 index 0000000..3bbd983 --- /dev/null +++ b/app/src/main/res/layout/activity_config.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..e0ec5e0 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,576 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_config.xml b/app/src/main/res/layout/adapter_config.xml new file mode 100644 index 0000000..02353d9 --- /dev/null +++ b/app/src/main/res/layout/adapter_config.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dia_icon_filter.xml b/app/src/main/res/layout/dia_icon_filter.xml new file mode 100644 index 0000000..dfdbfbb --- /dev/null +++ b/app/src/main/res/layout/dia_icon_filter.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3963f99e7b044c7d77406bd9cfd8831d6c0332 GIT binary patch literal 1560 zcmV+z2Iu*SP)X4~`VUW+sG)?3o?}hnwewQvS_w3#KU>ojT?{DTaJF|QDoc(_G z+;h*lJL}}6l~!75rIpGHoaXqX`pk1AFcUYXtV&Hyoy&dBQEJB7EE@Lt3!W zurtJ{&k4yk_}iH-L{Bk5^++FlsSo+#7G5aLUU|y0Q3BDf$gKVf&{Vv(ky0nG%$^q#U!#66Bv8Ry@_1l}^+QE66)RcL=j; zf;eb`1keNtpa~MdVFWGRu@YkTC%`9_8Ib-}E~I>s39-eA5K5ls9xDaa3tFBN%?LSr z`8;$#xDP`kLohNn$~@kG&;#eMwn65xJP6BOO}$qPsupC}9Rqde8ew2~5GE!jctKh9 z7fcYnXC2js5ULdvzH<#UUHlQu<7P^THSoCRj#Hq|e}`(z7K#@XVl*(JRu#lTsPVt~ zq|9^_%w}VbhB$J+}*x=uzK%$*jsmy3NDuM@o^|MeMa@ghoS{V<*kK3 zyKhg0!%>q^z7+Mu%Dg1u> zD%B?+iV_q`CQn@8-R!f3)f~U=nB<0ABqu#SE#I-Je!j*UaE^4%HVk0 z3FJ416d;(1y|vp?9E<3S$jC%}Pv%;qb{y84E=-RGq4k z^uwki1QpaBpu*UqXP_50mThL{5^IyWHSoAIU1!Pu?Om#WTPQ+MZOivmAR#W3OEr$X z<77>QTL|v!mY^I{do!~F=k_gxA_V==+C+sC1Fn;jD>ERidI$V+_;toItl=<%E|DF7Sgt0B7fp}=njirjRuJys#cnff(RJ%Gtl0H7)&5MGRYADq z$J?j_!vj=cso-L<`ph@5Oy+urk69J8hiozIA%_Je)wFzTS4p!bXlq59&3iv`!PRq7 zLkZQNTxLzs$DgM|>-CFdf!ASoaAb1(lgq3L!o5)>nN%b5_<6G+j@dp~g1>5TkK0qi0uAZ7VO@L!F`$w~lp>1v_s%0{ZS(g?89tO{KnAIc3V?Ngde@*_u z^%25Tew#ziu?;fT9RSRNnY=azw33W&Ojap>>cxtPh(JNki(hc__D&3J4g545a7Z$; zR19Va+!g^|@d0fv&p!PIX7urqaC%vmySw|N8YjF99LJ@$I0Vj!ZU>D2+yk=%z#;3NIgLwrJY(< z%fo5Dv%9nNLf3_h7Pu^UQq5on%z~M?G3`-k+Y!)8E3LFrMg0Q~K7ksXSVWot0000< KMNUMnLSTaUis#z^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..e058920d45b85dbff1f54d0e4dbf15252fd05b2b GIT binary patch literal 1261 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..aaaf3acad84b3d95a21a3743d4f19f74d6aa40e5 GIT binary patch literal 1132 zcmV-y1e5!TP)J~WS@feU1Hj9XF>oE}P|mU*aMSSF2mN8Bl2p%#U9wAe}19 zMHL1LZx@5rW(B9yNzwMh0{co2Q`fM_ZXm)G3mZvorK1OtOnNQZzRH>FoM2yeus>b{a|<4DX~J}m|$Ct zi!27#9*u|W%H!~&{uOjuyBI+o)($vztB?{Z1`ceTo%p#WH-J;)rMqQ}V6LDpTNj+H zIu8z~gAywQ&Q3VR^7Bh>;K+?UQtO?RAcw;NC3j1qq4^VaP6(W0u`>AiB{e`c8t}5= zH6@0nuCW0wR+oU?-upPfDHhiWetyXfB%MhmU5BoH7HoyG2Nh8L;=ZT}oMLgE;OCab zzz$MtVhhwS6J!jOKQu!jX$kC3?3lpW38z?GC-`|~Gq9^%D7bt4}( zpW6o8i}sMkZmVFQ=c5V(ER~O|s2qKvDg)*L1Ao~7uD&*VHzibzd$kXk=Occe-jKuq zCdArrv@}s7djn^z%lEGdKJ$nniGirRMCRek+HLDM-#dT6q4J|tPBA1gfYaZ>@*FsP zJ=YCRBck8j8#^%`=B34WRWBC7#x znW8&apsBqXp1ykq38%JDW%`S(1`ym;>BwU-?h*Ls{sh?#{B8bI1OM`$y9-iR%+{*3 z1$^TIe7IWOf_-V=9~U^4v_Lanq?#8TWak%hK-c24%5Mg06f}V0dVMou*=}uFSXK

^>g78o+QB7)hA!={+UL%WtOEYuvw;OQ8qIL> yaWr9!!i+{Ozb&2{I9Pm>eTOND=ztvvmBddrX%}RCH$Dsi0000{9KtHUuhW@fP1)YMeh z$e?#x!Kcdp+plSkS}f<5K7VRt>S}rBY=up$v!Z@(T%|kLHvHRL@=o zLtfZ+QIfw_{Tfc!rP{qOH)?4;(|g)tlsLa%LtaWd{!q^2jTco#KQ(+>8g`{b^{jc$ z?r-bwJYCw#vHJL?kR$G4H{t_-pSyT}`nI)eH0|xVf&}kZg+5(iB=vOv?mJEMzq9??_8<971x z)3%;ky>H=?LV5X~u9AbRrv+Etuok?k`}T71KSz0asU=LB=hqZe?hS97%6k7otBGuJ zY3U-RUd{b$D_rjcl(~G=yz2Y=#s!xt@w1k{{E(7je)HwoqQIB`)0Rqlmy>Gm{FDKu7zvau6`b)=KfUee#JF2%-?QYmM*KGoxtB!Nbr>Q_LzsqO3Z z1&M!EGa~9arLM&Tx#FT__q1atUOzQqKELXU1FJ!ndwa{(nJ*C6@?61w7Rb)KNJHOlf z=f8;biGRZ$Pd3%wYijrY_apm-&))RDnfibAiMo%~XTCFHrZ5JE18yJ0d$;ZX*m7n| P9!TEP)z4*}Q$iB}diimx literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..24ac32e4f29bc7217a6214556cc77f12d08662f3 GIT binary patch literal 2234 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 IM6N<$g22*Awg3PC literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..49ce6213b70b636a4e4cc6d2f7068c8606e88b02 GIT binary patch literal 2161 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..fc2b1a9cbfaf9011359edfcc28edd3866e94e99b GIT binary patch literal 1751 zcmbW1`&SYM8^?LaThw?xw!DRwHZ82FXn5Tc-HPcv-c3!H_Y063&I#rns);r+x7fU( z<`gS$A&ER3WvO&RAL z@;Fi(UuB>ZdghNguW!!g6M-i@j_nUnM|$%>|vlBLi9U#ZBq)R&sQf>Ac=vfxtA{EL;ilVfi> zBifp*+Jk7%H|5i-RCcknD1{KI%eVC#;VtNg<5`FARTV2LpZIbK33{;MP)Rns1}?f6 z(*a#Hd&&yl!_5ks7SBs==dfC52qj3IeNIDUHTHCqcr-h7tOcyQc1z*#d=<{8zgDG} zWyPl^cXx>=4}s+o8Rii-{MU2-=qFD}65(u9E0i&zDUB~YN;YP>_h_PbAG@(SQ^UKZ z?$Ik6CS^G9jF5<-YBRdGi+xSDN2NjIzNw_=5Q~PeW0>+ob-SFomUO=gOhbG?Z!tC2 z9T%OE8Q~4Dn;k(-@L=NZ70E%yy0E>gEq$QTqNDgM58;25zpHN|EFXR8e(xdbnA3=% zNsv3PJHJbCWNhERzI&E_86>Mc66L@M}!MUVIg^I*V0-LE{r0N zM{Gzp=6=E#_+S-jFQc+tHii0dd?Z9w2)U&Ze^=UXlDzHvKAIhsR&WY`MP08r@nRBQ z)isQo;H;S|CimJcU#hUoOv>6Vt-&y|2}QI??zVTc%dJF(OeV6Eqqj!~Dr!MqC6~%% zNM#Mr^TXHg(fOHK@d+uUy12|QM-7d}DIWF8mQp(!0o{?#u(-)ZNecw!#`ga!1e1-m z#0@u|y>7g}v;9KRVZDr?2!N*AdVllYZU>ho8EmwZ(VEXh78iyRo73kwvUwSikF@{r zDk!>BQJ)R$#4v6MHZBB+qdf6Gn&oY&sg4o;d{3vXV#!~vz5;46&~ZrA+C<$DJ52=H z)5LF>%RNn{dA7aQPdu94tILkz+~SBUebz9e1hiaLiwzLmOsa7Cg*DxHofQw;-6Hh? zpjrdw3=7+oM(pS17sqGUPKR`EBo3*5#NDyGT0o|spO2gErB1gD=Gl5G`i>3NrUQXI0|$Pl1Y=QF3DM!}=RpsCFZULuqZFb#@nmpv(!+E&U^?*<(2R zg79zuM?T3AYEJP|9p{xQmcrQa)hV@x4EP>}fM{*cMwS)?lI)&$2Vbnt3{L%``(@js zneYyz`s9u%X0!9+q7-Pj zj!_x_h!ab(6Z2$~b~0O%PSj}*ax$2q-A>V}OdJC?{?hv+`rT~qq#R&|RC0Lfq%mwq zO{ga05>E5^MSkG$^-K%L>&H`I;AIhC9!GGLpWZT?8UhxYfLE?VG;I&r`lIPI$qMn* z%TK=gP4+X{J7!wg*9Q-KAmb?1|E}i`w%$4KgUmMd8Eu7gvX4jHzV$-VFGbw`KM9vl AEdT%j literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..29c0e48e26bf23b99c1684f3434c9800b711cd44 GIT binary patch literal 5028 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_about.png b/app/src/main/res/mipmap-xxhdpi/ic_about.png new file mode 100644 index 0000000000000000000000000000000000000000..12a0dda1890ae23287760900f7e40a3a2867489e GIT binary patch literal 4357 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_back.png b/app/src/main/res/mipmap-xxhdpi/ic_back.png new file mode 100644 index 0000000000000000000000000000000000000000..49415ff18d6a1598eb02c8af8c26dd3ed36e043d GIT binary patch literal 3633 zcmX|Ec{r497k_39rVV4uQj9^ivTs=jW6#p?Qj@h2Wj8*1)_Q9Ug|ZEz)X-!PAvB{j z$k3uJSw_n8X03@K;(NT`b$x$4&wX9@eeQGr&bfc*KIf!6J6az(C~*(~fFrgx7%Vu_ zz%L)p1OBsY&u@YQBob?F4%7}F`v(+Sw8faY#(FK^3#s<76z?euhzZM-LE8|$iRmcs zk8p^Px%vrZo$`gwfWcD<_HjzwcAF_D3bkP-)ADlJ*%#Gw3iF`_7p7Va-;Pb@e=wg- zJ2zDg&m|#6Pa&ZMv&Ws3c0+$A`VFOXJHAwFzGPm`!F1v@J9&0CvrU!ok}3as!=utw z4}fUw8O7RB+kxq7NTJlvVYjNNGo4;7v;)1f5O57*OB~vCt8i8<@v3ptOURBn00Fvp z26@Z`Cen%a_~_SmD4a;+4Of;tM8gzNq^tlbjqQHJF&cPg+gaiBr`n8=*$M1Oan|f_ zNleqLYaRCRxUvmJ$}og}`ix_2G4Tcck-Vm-K<~0bve=EGXo(Np4}C>sP*1DOW`ABs zs}4xRy0lRQiM@662lbC}H7^!yr{pt@920V}EnM_C=9sq?W{6pY8c9Xhnr!7^U4Z(` zF%dn)d&>SKcj`o;smxb*;^q4y4?Mp)lYZGEkIwPGTGPcdw-PnKbDpgaZdR}ketQvn zz;9~Dj(P#&6W1YT>S>5_%QD^F{Q2#hU$KjOQ@m{U6}E!!Rp1>3OZA|-;yNkjc9BB8 z)!>OO0G*qOz7ie%%t%XX$ZuGr%>?fEVaHdjR)^s+%A55f%&dE1;bE3)-T6lUWL949 zt!kKNz%CL#j6zlYfZU&}FpzHWck1RrWh=2&D4{$l89b;D+XL%uZEZg*9Ez9RM{z8V-m1z1*=ClLmBKse@Br9+?MzIguUDzUkZg zSu9dRtM%4^f8)eu?cM%r6@rCab|72fM|u{KBON{JI~%n)yexiE>d_Mz{L%2v0pp2K zg3CRAq24?jJ~CQ)psbs-39O;3J}HkZuJhk0;i9U_K&e{Eg0uZzGt&H=nyrvS ziy~L_2sBhT?*X0+DA<{-Lq_d!qYffoH`>|Qe3=Y z`+LV!*l~ilE?mw(iQ>u)h-%@lPB=t);fF;|^B<7AxT}76L=w*+#~Hm3ZRu~uh3GZb z_Qu(zOoGf)2Exmne`2VvMUP#T_tv!e1>K;qa|3m`A2!x32BT3kcLDVW&AWz`wU@V? zQU*YN-O)JVWA!sv!yiQ|cPB?#s&d25fg~XTKAGg6p#lHM^7ogQE`of_6(H`PAOU0& zexkcg!7F0vM_Ht6b6u9&tRHyiDWQ5KG^##fKe6xP-D)TX|wA$zlr%J2%1JI zq&tHaJeLNNdYNC(>wVffv_D%ye+T0H3Qnls&P`@uJOqPOxpN?-Owz$0h86%S|2T4$D9ggpsWgC;dmDbgPs|tNq>CXffQt8Sl zT-@WIp2gmoEG~l5_ahKI^MfL3#pE2?6BLc&0(K^fMQxGh_Y@%6G4gCbLS zTG;dTACvvIwldQQaL=c+!VZJ{)Q4L_2H(bH|08Jk`M@ZrwRyPmS8x&~H}S}t{S{v1 zkNIMHjN9=KJ5~57t2EB9Cg*uy00;ePmYbm$~8q>1=>#s`ecR^s&L2AK9Qp?`w29fW%K;ux0add`R z`=|RJ=EyvlK*X6KPt$X2hl-MegO@Uhn<5`l_WvDWf9NXeUE`J~@AOosuM5>xqRv%0Au&y%;ZZT#doJd9N&>5t_d?BZ zY^T>AapeF(d%O`~oekB;#zbTnFYqij$NkUqk@K@U=L$gK#brNtH9_IH| zpbdqrC}21;_LfFF>2>*WNa;UMX0eK#{opNzMwHQCjEgnulgcXzW#=L9a?sTv2J{iY z%Fs%)0~+=j;q&MB`uGiZ%Ew$wXhSimYFqhHqWqo3cwRtM=)J5*TKQcQ=*hVl7o;Ww zmPwq_V`N&N^*j2dPabAs0lq$=uy-5HK&=sSMr!*o8p9uch2$6yuPlPrg?fiyWc?RR=t||kh zlR+r$D&6FgxXUf$0V9FU?fN>F{Z7#Iea#7w`^?M$afE|b5UC^pCa6c7Mf_XtboDXB zBF_q2wuA?g^1Wdl>Y&e-&QtC6e;{Y%aY3iAUK4t5jhotcnc-2>jJsJHbCqX>{}j2n zH0>a#^R_017aTDjZ_;@YYC||yFI5TGC$u&Q8rjMP4Ei$~?-1QIf=C`|unuk7BCrTd zA9K`Y6skN_e102LaYuH#22^ob0`YdX`x?>xN=@CDkHR&6@Ys+fJ?I1t7lukIIyH{Y=EeV!%5rHI8{#4h0eI@q=DrHpmcmjhd0OdWHFl<1Q9ycy1vrXM! zmtE!UfZ6c4*ro}FC&&Q$01%FdlnRwctvL2fbno<1hIeYYsv#*N%zuhbpoYUr3&#s2 z+gyuT4ykUEcvb(w(Me4A^Ic+FVq3O-=a$ehh_XUS_{%$eeSOiYC3m{4{K3*A3czIU zCj$z$!4T7%rwJu%B&YFrNp38SHTw1EpGv^yZ%^DTR$`9_^O)6(BF@utG#J5BV8WE8 zZ@0y`k^sNKofR4VbQa{9Zt;NpEvr{6Ldxz3_p7MTgSp*mU0L~d@`lh3a@xeaNjGz! z3Ub5Hkf3IqJ(vnsCffTW0kUo~_Ba5PM$6Jw-?GaV*EGYDIEU#kj(rwmA4aLllot?| z)w3ka4(*5TpTEU`|7Vgc(ZFWMCnJjl^9}`LBxf#Q1t2KiP++w961O}x z(~#4n$8ox^MA!+K=@jQ&Y(pu(v!bwLom*A$pWwvZ@;gquai_Byxtee_`0wk#CAS*M zWv4{h(sF8cRQ=mF@qZIKq7m|I23*im0Nk*vE#aEr~Jy*3Dcu!&Gj zObbcg$o3u)F14bcddqiz2k4d9uTm# Lbi~w}`=tFBNqyK~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_filter.png b/app/src/main/res/mipmap-xxhdpi/ic_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8dd3b432fd60063f42b72c6ace864273496ac2 GIT binary patch literal 3330 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7b51c5ec2acbb6f7edb036fa0664186ec4160565 GIT binary patch literal 3361 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..37ec957ed6a1790a9d13f021c2608258d7a263a8 GIT binary patch literal 2863 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 T^Rf=S_oo*pgbTdR&OiCTgK8b> literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_icon.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..22df8bf9fd6867d8de5e5d1687566f21dda13743 GIT binary patch literal 7020 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..fb4e2f8a7d7c8e98dcb72327187b3319f60c5719 GIT binary patch literal 7874 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 W7*rGKWyR6`Pxjd0O{-cTmil)V$dNPv literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_page_top.png b/app/src/main/res/mipmap-xxhdpi/ic_page_top.png new file mode 100644 index 0000000000000000000000000000000000000000..7f4adefb077328d994d119f3ac855d74daaedab6 GIT binary patch literal 2991 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 LYGX^4EyDi?Ys6*r literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_sync.png b/app/src/main/res/mipmap-xxhdpi/ic_sync.png new file mode 100644 index 0000000000000000000000000000000000000000..9c2a67c6df837bd48243ea1f515691799206a235 GIT binary patch literal 3116 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 B)j|LO literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a259c4153ed75bd04737a693593e51f4750054d8 GIT binary patch literal 4666 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..2930ed31bc894648e6b9673598f39438ca87b5e3 GIT binary patch literal 4223 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 A9{>OV literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2512a7e633f9eceb5ebe6c13cad6e6e4a16376 GIT binary patch literal 11368 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/values-night/color.xml b/app/src/main/res/values-night/color.xml new file mode 100644 index 0000000..809ab40 --- /dev/null +++ b/app/src/main/res/values-night/color.xml @@ -0,0 +1,6 @@ + + + #FF2D2D2D + #FFCFCFCF + #FFD3D3D3 + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..3ed2cbd --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/color.xml b/app/src/main/res/values/color.xml new file mode 100644 index 0000000..24917f9 --- /dev/null +++ b/app/src/main/res/values/color.xml @@ -0,0 +1,6 @@ + + + #FFFFFFFF + #FF777777 + #FF323B42 + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..0df5e08 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,11 @@ + + + #656565 + #656565 + #656565 + #656565 + #656565 + #FF000000 + #FFFFFFFF + #00000000 + \ No newline at end of file diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..b7dc6b0 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #4E8A5A + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..63666a5 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + ColorOS 通知图标增强 + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..ea58ec6 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/app/src/test/java/com/fankes/coloros/notify/ExampleUnitTest.kt b/app/src/test/java/com/fankes/coloros/notify/ExampleUnitTest.kt new file mode 100644 index 0000000..9d5cf45 --- /dev/null +++ b/app/src/test/java/com/fankes/coloros/notify/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.fankes.coloros.notify + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..e9f6b06 --- /dev/null +++ b/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'com.android.application' version '7.1.2' apply false + id 'com.android.library' version '7.1.2' apply false + id 'org.jetbrains.kotlin.android' version '1.6.10' apply false +} + +ext { + appVersionName = "1.0" + appVersionCode = 1 +} + +task clean(type: Delete) { + delete rootProject.buildDir +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..cd0519b --- /dev/null +++ b/gradle.properties @@ -0,0 +1,23 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..faf773b --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sat Feb 26 13:04:39 CST 2022 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/keystore/public b/keystore/public new file mode 100644 index 0000000000000000000000000000000000000000..4d53697180a3e756629a6c854a2726af6bb19e3e GIT binary patch literal 2423 zcmY+EXEYlM8^@C%B37wVxusDw#0oA!sid`9*Qj;XirI=$t2HilBU+d+vS&6JYC0n>iSoDFMCbdi}?IIw%NINs= zWAwAucqu`vsm<1N>C2Ey!w0HC4yLM-;Z^$yx6uZCK*_D4Jf|yV@ZFfI({JPO&18oW z(qx8>sT}1LHc(I$8F)p+B52{57WE$gZVEaC%+8rh@2v}WxaY2fBX14(%|0Q0>%;yQ zFbGl0_0*QS+jyns!jtS_E$)n|Vi6RxVc^#c#MOiSR5btm3cSI#(D)o|kKjJ19dCFx zW21eyN6$|?1j_gAuCI~2x|AAkJ4gYyPKOvYm@m`Bohn!C)vJA3E*p zO9FZ?q{W!iUzk4;k{ayugC`voS@-+-_|H9i_2<+(Rif_!xacepiVim6T>vC>&c0T2 zK2GsC_+TnU6je#uH)fKgxQv^36v>NHznyxOw{>4mHZlpE7-sBKFHGRtARJiK=jtT-mPudMgl z#pSpVH+H%+*~<7e#P(6aW8*xEvtd|y3TeipmzqpodZmS72Ep}WdmXq)+kHGJVYY3gpH877O{7(NYT^{tdOb=&m0E^KYWwet*wjYTJhU zNyVzF@#nX#0ZiNnnD_Fr2*Vs9-<0s~FnjMsX)nEywbI@}*$ZoJuXWQ4l%NQJ%-ZQm zTeVq@<+;$uFVVEcSL{@cw$juVZEUshD6_`*~PM1gSU&78Qg58(!ZYzkU@fZ*%H zt+(_#?N7Vjp|jhHsJGm{Dp(nQ+-<6@*;$k>=Nxu)UM@mH{j-}~Ho;Q%{pzp*-Rg0b zYaja3Q+d=v#@-n+%x0a!8ev99;BR*}s-JB(?9t9;-!K=N3}OEEMR6uXRI zt-#AvN<(ZTc6n5fVtsKfFoG05Gu&6>A$#gt!#73G1>Cf&4^4`E|K4FU`^JybiCG7B zZ!LmRXobQvlR8$rIqMo9UK!173%DWGYU6C_x?X(R^Q{3aIa#8A6%H?uJ^B;^v(C31 z4MJ;bKtd(<_Piu_Iyqo7122pWfa82?M$}*G)LPyV(>gSDLOGqpKLgw?rq2bvRcQTm zMI$c$ZpxleFjoj!D}gth_3DO+|9E8&;hiUR(5cqUvlbpX!V#8dO{VQsRQm^Yh%fhT zi5TmwmO{6$VZ9*l+@vnzb1+cH-qLolhafWHI8UISX*lHZyQN`BL<&eAGx=$z ziwEI&G?s+?xsI8EiO&AE-W2EMzUbNq*3ScVaL3)+xwOLB{(YQmmR`8pV*^Q}kLJla zwlVhyD|Rb3sW ztcW7A6#QLc2j>!5QcqA42naY?kN!!3|1vE2KZZ3p5OV&p#_qjd)zRT?gk;$HPh|er zummEDDYD*yjzWba@@W*aN0TFoKCRX|NWS|z-0W=-Rl7-9VJyvjsteiv0TlwOd^6kX?ADh432D7EB{dg{YP?;4pqs1e>lXadtXl{dx(mbLv5{n&l!m8dQL29_k zq4Bp=!52Qo`{LY5>rbWouG`>_b90QHEpK!dQ68~e`_&0bC%rw|Ri}EXNQQIOja!=s zib_BuWssV1<=vwBMdv0pnuCIRJbe?q-282A>+_wsl&ieoDTUKE1&Dy|omc#G)c)(EXKj4X^1VinF{ z=9o)xDc$L55+&SGBJTO+EkJEb3)B^^l2Z=6w&Bu2HG0^uq^z3FDMPE?^34cwzX+zv zhsP~a&o4LH8I;q#5BdAfD=_AFDxkN{^ja%bFKw#O#t(ghyAXfoaY<~lP*90TmP@Cm zP}YA;-Pl2ezcG(SGjBE!oL-%e#JBOnH@bCQ&UrscYJ@JmJIKcDudE=zySvr!`%S*n zT_rgcl&g{{$D>&61EN6m!+ROSDWuECp7Vs%H9dlZ1FuNn{E$qjwkorv>8aMp>erDV zi~iS=8X+N%5(5luWHa?&08CJqQDP_#Fq;ey3kb#rU=?8Q>XtQyc8hXjejT+Feq!`B hAF_W!`#ztGeSnqRt)CY5$8sro?gF