5 Commits
1.86 ... 1.87

8 changed files with 87 additions and 57 deletions

View File

@@ -2,7 +2,7 @@
![Eclipse Marketplace](https://img.shields.io/badge/build-passing-brightgreen) ![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/license-AGPL3.0-blue)
![Eclipse Marketplace](https://img.shields.io/badge/version-v1.86-green) ![Eclipse Marketplace](https://img.shields.io/badge/version-v1.87-green)
<br/><br/> <br/><br/>
<img src="https://github.com/fankes/MIUINativeNotifyIcon/blob/master/app/src/main/ic_launcher-playstore.png" width = "100" height = "100"/> <img src="https://github.com/fankes/MIUINativeNotifyIcon/blob/master/app/src/main/ic_launcher-playstore.png" width = "100" height = "100"/>
<br/> <br/>
@@ -12,7 +12,7 @@ Fix the native notification bar icon function abandoned by the MIUI development
# 开始使用 # 开始使用
点击下载最新版本 点击下载最新版本
<a href='https://github.com/fankes/MIUINativeNotifyIcon/releases'>![Eclipse Marketplace](https://img.shields.io/badge/download-v1.86-green)</a> <a href='https://github.com/fankes/MIUINativeNotifyIcon/releases'>![Eclipse Marketplace](https://img.shields.io/badge/download-v1.87-green)</a>
<br/><br/> <br/><br/>
⚠️ 适配说明<br/> ⚠️ 适配说明<br/>

View File

@@ -68,8 +68,8 @@ dependencies {
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
compileOnly 'de.robv.android.xposed:api:82' compileOnly 'de.robv.android.xposed:api:82'
implementation 'com.highcapable.yukihookapi:api:1.0.2' implementation 'com.highcapable.yukihookapi:api:1.0.3'
ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0.2' ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0.3'
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.0' implementation 'com.geyifeng.immersionbar:immersionbar:3.2.0'
implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.0' implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.3' implementation 'com.squareup.okhttp3:okhttp:4.9.3'

View File

@@ -261,9 +261,7 @@ class HookEntry : YukiHookXposedInitProxy {
*/ */
private val PackageParam.globalContext private val PackageParam.globalContext
get() = safeOfNull { get() = safeOfNull {
if (SystemUIApplicationClass.clazz.hasMethod(name = "getContext")) SystemUIApplicationClass.clazz.method { name = "getContext" }.ignoredError().get().invoke<Context>()
SystemUIApplicationClass.clazz.method { name = "getContext" }.get().invoke<Context>()
else null
} }
/** /**
@@ -505,7 +503,7 @@ class HookEntry : YukiHookXposedInitProxy {
replaceAny { replaceAny {
hookIgnoreStatusBarIconColor( hookIgnoreStatusBarIconColor(
context = globalContext ?: error("GlobalContext got null"), context = globalContext ?: error("GlobalContext got null"),
expandedNf = args[0] as? StatusBarNotification? expandedNf = firstArgs as? StatusBarNotification?
) )
} }
} }
@@ -526,7 +524,7 @@ class HookEntry : YukiHookXposedInitProxy {
}.onFind { isUseLegacy = true } }.onFind { isUseLegacy = true }
} }
afterHook { afterHook {
(globalContext ?: args[0] as Context).also { context -> (globalContext ?: firstArgs as Context).also { context ->
hookSmallIconOnSet( hookSmallIconOnSet(
context = context, context = context,
args[if (isUseLegacy) 1 else 0] as? StatusBarNotification?, args[if (isUseLegacy) 1 else 0] as? StatusBarNotification?,
@@ -597,15 +595,15 @@ class HookEntry : YukiHookXposedInitProxy {
} }
} }
intercept() intercept()
}.ignoredAllFailure() }.ignoredHookingFailure()
injectMember { injectMember {
method { method {
name = "resetIconBgAndPaddings" name = "resetIconBgAndPaddings"
param(ImageViewClass, ExpandedNotificationClass.clazz) param(ImageViewClass, ExpandedNotificationClass.clazz)
} }
intercept() intercept()
}.ignoredAllFailure() }.ignoredHookingFailure()
} }.ignoredHookClassNotFoundFailure()
} }
} }
} }

View File

@@ -25,8 +25,6 @@
package com.fankes.miui.notify.ui package com.fankes.miui.notify.ui
import android.app.ProgressDialog import android.app.ProgressDialog
import android.content.Intent
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@@ -51,6 +49,9 @@ import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus
class ConfigureActivity : BaseActivity() { class ConfigureActivity : BaseActivity() {
/** 访问请求链接 */
private var rawGithubUrl = "https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main"
/** 当前筛选条件 */ /** 当前筛选条件 */
private var filterText = "" private var filterText = ""
@@ -192,16 +193,7 @@ class ConfigureActivity : BaseActivity() {
} }
/** 设置点击事件 */ /** 设置点击事件 */
findViewById<View>(R.id.config_cbr_button).setOnClickListener { findViewById<View>(R.id.config_cbr_button).setOnClickListener {
runCatching { openBrowser(url = "https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/CONTRIBUTING.md")
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() mockLocalData()
@@ -227,7 +219,7 @@ class ConfigureActivity : BaseActivity() {
} }
/** 开始更新数据 */ /** 开始更新数据 */
private fun onRefreshing() { private fun onRefreshing() = ClientRequestTool.checkingInternetConnect(context = this) {
ProgressDialog(this).apply { ProgressDialog(this).apply {
setDefaultStyle(context = this@ConfigureActivity) setDefaultStyle(context = this@ConfigureActivity)
setCancelable(false) setCancelable(false)
@@ -237,12 +229,12 @@ class ConfigureActivity : BaseActivity() {
}.also { }.also {
ClientRequestTool.wait( ClientRequestTool.wait(
context = this, context = this,
url = "https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/OS/MIUI/NotifyIconsSupportConfig.json" url = "$rawGithubUrl/OS/MIUI/NotifyIconsSupportConfig.json"
) { isDone1, ctOS -> ) { isDone1, ctOS ->
it.setMessage("正在同步 APP 数据") it.setMessage("正在同步 APP 数据")
ClientRequestTool.wait( ClientRequestTool.wait(
context = this, context = this,
url = "https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/APP/NotifyIconsSupportConfig.json" url = "$rawGithubUrl/APP/NotifyIconsSupportConfig.json"
) { isDone2, ctAPP -> ) { isDone2, ctAPP ->
it.cancel() it.cancel()
IconPackParams(context = this).also { params -> IconPackParams(context = this).also { params ->
@@ -253,12 +245,14 @@ class ConfigureActivity : BaseActivity() {
mockLocalData() mockLocalData()
SystemUITool.showNeedUpdateApplySnake(context = this) SystemUITool.showNeedUpdateApplySnake(context = this)
} else snake(msg = "列表数据已是最新") } else snake(msg = "列表数据已是最新")
} else } else showDialog {
showDialog { title = "连接失败"
title = "连接失败" msg = "连接失败,错误如下:\n${if (!isDone1) ctOS else ctAPP}"
msg = "连接失败,错误如下:\n${if (!isDone1) ctOS else ctAPP}" confirmButton(text = "解决方案") {
confirmButton(text = "我知道了") openBrowser(url = "https://www.baidu.com/s?wd=github%2Braw%2B%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE")
} }
cancelButton()
}
} }
} }
} }

View File

@@ -27,7 +27,6 @@ package com.fankes.miui.notify.ui
import android.content.ComponentName import android.content.ComponentName
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
@@ -177,30 +176,11 @@ class MainActivity : BaseActivity() {
findViewById<View>(R.id.title_restart_icon).setOnClickListener { SystemUITool.restartSystemUI(context = this) } findViewById<View>(R.id.title_restart_icon).setOnClickListener { SystemUITool.restartSystemUI(context = this) }
/** 恰饭! */ /** 恰饭! */
findViewById<View>(R.id.link_with_follow_me).setOnClickListener { findViewById<View>(R.id.link_with_follow_me).setOnClickListener {
runCatching { openBrowser(url = "https://www.coolapk.com/u/876977", packageName = "com.coolapk.market")
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<View>(R.id.link_with_project_address).setOnClickListener { findViewById<View>(R.id.link_with_project_address).setOnClickListener {
runCatching { openBrowser(url = "https://github.com/fankes/MIUINativeNotifyIcon")
startActivity(Intent().apply {
action = "android.intent.action.VIEW"
data = Uri.parse("https://github.com/fankes/MIUINativeNotifyIcon")
/** 防止顶栈一样重叠在自己的 APP 中 */
flags = Intent.FLAG_ACTIVITY_NEW_TASK
})
}.onFailure {
toast(msg = "无法启动系统默认浏览器")
}
} }
} }

View File

@@ -20,11 +20,15 @@
* *
* This file is Created by fankes on 2022/2/25. * This file is Created by fankes on 2022/2/25.
*/ */
@file:Suppress("TrustAllX509TrustManager", "CustomX509TrustManager") @file:Suppress("TrustAllX509TrustManager", "CustomX509TrustManager", "DEPRECATION")
package com.fankes.miui.notify.utils package com.fankes.miui.notify.utils
import android.app.Activity import android.app.Activity
import android.app.ProgressDialog
import android.content.Intent
import android.net.Uri
import android.provider.Settings
import com.highcapable.yukihookapi.hook.log.loggerD import com.highcapable.yukihookapi.hook.log.loggerD
import okhttp3.* import okhttp3.*
import java.io.IOException import java.io.IOException
@@ -37,6 +41,38 @@ import javax.net.ssl.*
*/ */
object ClientRequestTool { object ClientRequestTool {
/**
* 检查网络连接情况
* @param context 实例
* @param it 已连接回调
*/
fun checkingInternetConnect(context: Activity, it: () -> Unit) =
ProgressDialog(context).apply {
setDefaultStyle(context)
setCancelable(false)
setTitle("准备中")
setMessage("正在检查网络连接情况")
}.apply {
wait(context, url = "https://www.baidu.com") { isDone, _ ->
cancel()
if (isDone) it() else
context.showDialog {
title = "网络不可用"
msg = "无法连接到互联网,请检查你当前的设备是否可以上网,且没有在手机管家中禁用本模块的联网权限。"
confirmButton(text = "检查设置") {
runCatching {
context.startActivity(Intent().apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
data = Uri.fromParts("package", context.packageName, null)
})
}.onFailure { context.snake(msg = "启动应用信息页面失败") }
}
cancelButton()
}
}
}.show()
/** /**
* 发送 GET 请求内容并等待 * 发送 GET 请求内容并等待
* @param context 实例 * @param context 实例

View File

@@ -27,6 +27,7 @@ package com.fankes.miui.notify.utils
import android.app.Activity import android.app.Activity
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Context import android.content.Context
import android.content.Intent
import android.content.pm.PackageInfo import android.content.pm.PackageInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.Configuration import android.content.res.Configuration
@@ -34,6 +35,7 @@ import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.GradientDrawable import android.graphics.drawable.GradientDrawable
import android.net.Uri
import android.os.Build import android.os.Build
import android.provider.Settings import android.provider.Settings
import android.util.Base64 import android.util.Base64
@@ -276,6 +278,26 @@ fun Context.snake(msg: String, actionText: String = "", it: () -> Unit = {}) =
setAction(actionText) { it() } setAction(actionText) { it() }
}.show() }.show()
/**
* 启动系统浏览器
* @param url 网址
* @param packageName 指定包名 - 可不填
*/
fun Context.openBrowser(url: String, packageName: String = "") =
runCatching {
startActivity(Intent().apply {
if (packageName.isNotBlank()) setPackage(packageName)
action = Intent.ACTION_VIEW
data = Uri.parse(url)
/** 防止顶栈一样重叠在自己的 APP 中 */
flags = Intent.FLAG_ACTIVITY_NEW_TASK
})
}.onFailure {
if (packageName.isNotBlank())
snake(msg = "启动 $packageName 失败")
else snake(msg = "启动系统浏览器失败")
}
/** /**
* 忽略异常返回值 * 忽略异常返回值
* @param it 回调 - 如果异常为空 * @param it 回调 - 如果异常为空

View File

@@ -5,8 +5,8 @@ plugins {
} }
ext { ext {
appVersionName = "1.86" appVersionName = "1.87"
appVersionCode = 19 appVersionCode = 20
} }
task clean(type: Delete) { task clean(type: Delete) {