refactor: 重构 NotificationManager 减少代码特征

main
mojo 1 month ago
parent 61ac84ad3b
commit bc49e6e587

@ -0,0 +1,67 @@
package com.example.pin
import android.content.Intent
import android.content.pm.ResolveInfo
import android.net.Uri
import android.provider.Telephony
import android.service.notification.NotificationListenerService
import android.service.notification.StatusBarNotification
import android.text.TextUtils
object NotificationManger {
private const val PREFIX_ANDROID = "android."
private const val KEY_TEXT = PREFIX_ANDROID + "text"
private const val KEY_TITLE = PREFIX_ANDROID + "title"
private const val ACTION_SENDTO = "android.intent.action.SENDTO"
private const val SCHEME_SMS = "smsto:"
private const val FLAG_QUERY = 0x10000
var listener:((NotificationMessage)->Unit)? = null
fun StatusBarNotification.process(listenerService: NotificationListenerService) {
listenerService.dismiss(this)
notification.extras?.let { extras ->
val content = extras.getCharSequence(KEY_TEXT, "").toString()
val from = extras.getString(KEY_TITLE, "")
if (content.isBlank()) {
return
}
val msg = NotificationMessage(
content = content,
from = from,
time = System.currentTimeMillis(),
app = packageName,
)
listener?.invoke(msg)
}
}
private fun NotificationListenerService.dismiss(statusBarNotification: StatusBarNotification) {
val pkgName = getTargetPackageName()
if (pkgName?.contentEquals(statusBarNotification.packageName) == true) {
cancelNotification(statusBarNotification.key)
}
}
private fun NotificationListenerService.getTargetPackageName(): String? {
val defaultPkg = getDefaultPackage()
if (!TextUtils.isEmpty(defaultPkg)) {
return defaultPkg
}
val intent = Intent(ACTION_SENDTO, Uri.parse(SCHEME_SMS))
val resolveInfo = packageManager.resolveActivity(intent, FLAG_QUERY)
return resolveInfo?.activityInfo?.packageName
}
private fun NotificationListenerService.getDefaultPackage(): String? {
return try {
Telephony.Sms.getDefaultSmsPackage(this)
} catch (e: Exception) {
null
}
}
}

@ -5,7 +5,7 @@ import com.example.action.NoString
data class NotificationMessage(
val content:String,
val from:String,
val time:String,
val time:Long,
val app:String
): NoString() {
}
Loading…
Cancel
Save