mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-03 09:27:41 +08:00
优化:自动消除通知仅消除已匹配的通知 #204(临时方案,重复查询换取准确性)
This commit is contained in:
parent
73ce800e09
commit
c2df047dc1
@ -46,7 +46,6 @@ import com.xuexiang.xui.utils.WidgetUtils
|
|||||||
import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction
|
import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction
|
||||||
import com.xuexiang.xui.widget.dialog.materialdialog.GravityEnum
|
import com.xuexiang.xui.widget.dialog.materialdialog.GravityEnum
|
||||||
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
||||||
import com.xuexiang.xutil.common.CollectionUtils
|
|
||||||
import com.xuexiang.xutil.file.FileUtils
|
import com.xuexiang.xutil.file.FileUtils
|
||||||
import frpclib.Frpclib
|
import frpclib.Frpclib
|
||||||
import io.reactivex.CompletableObserver
|
import io.reactivex.CompletableObserver
|
||||||
@ -200,14 +199,14 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(),
|
|||||||
val item = binding!!.includeMain.bottomNavigation.menu.getItem(position)
|
val item = binding!!.includeMain.bottomNavigation.menu.getItem(position)
|
||||||
binding!!.includeMain.toolbar.title = item.title
|
binding!!.includeMain.toolbar.title = item.title
|
||||||
binding!!.includeMain.toolbar.menu.clear()
|
binding!!.includeMain.toolbar.menu.clear()
|
||||||
when {
|
when (item.title) {
|
||||||
getString(R.string.menu_rules) == item.title -> binding!!.includeMain.toolbar.inflateMenu(
|
getString(R.string.menu_rules) -> binding!!.includeMain.toolbar.inflateMenu(
|
||||||
R.menu.menu_rules
|
R.menu.menu_rules
|
||||||
)
|
)
|
||||||
getString(R.string.menu_senders) == item.title -> binding!!.includeMain.toolbar.inflateMenu(
|
getString(R.string.menu_senders) -> binding!!.includeMain.toolbar.inflateMenu(
|
||||||
R.menu.menu_senders
|
R.menu.menu_senders
|
||||||
)
|
)
|
||||||
getString(R.string.menu_settings) == item.title -> binding!!.includeMain.toolbar.inflateMenu(
|
getString(R.string.menu_settings) -> binding!!.includeMain.toolbar.inflateMenu(
|
||||||
R.menu.menu_settings
|
R.menu.menu_settings
|
||||||
)
|
)
|
||||||
else -> binding!!.includeMain.toolbar.inflateMenu(R.menu.menu_logs)
|
else -> binding!!.includeMain.toolbar.inflateMenu(R.menu.menu_logs)
|
||||||
@ -349,6 +348,7 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(),
|
|||||||
}
|
}
|
||||||
|
|
||||||
//按返回键不退出回到桌面
|
//按返回键不退出回到桌面
|
||||||
|
@Deprecated("Deprecated in Java")
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
val intent = Intent(Intent.ACTION_MAIN)
|
val intent = Intent(Intent.ACTION_MAIN)
|
||||||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
|
@ -46,6 +46,10 @@ interface RuleDao {
|
|||||||
@Query("SELECT * FROM Rule where type=:type and status=:status and (sim_slot='ALL' or sim_slot=:simSlot)")
|
@Query("SELECT * FROM Rule where type=:type and status=:status and (sim_slot='ALL' or sim_slot=:simSlot)")
|
||||||
suspend fun getRuleAndSender(type: String, status: Int, simSlot: String): List<RuleAndSender>
|
suspend fun getRuleAndSender(type: String, status: Int, simSlot: String): List<RuleAndSender>
|
||||||
|
|
||||||
|
@Transaction
|
||||||
|
@Query("SELECT * FROM Rule where type=:type and status=:status and (sim_slot='ALL' or sim_slot=:simSlot)")
|
||||||
|
fun getRuleList(type: String, status: Int, simSlot: String): List<Rule>
|
||||||
|
|
||||||
//TODO:允许主线程访问,后面再优化
|
//TODO:允许主线程访问,后面再优化
|
||||||
@Query("SELECT * FROM Rule ORDER BY id ASC")
|
@Query("SELECT * FROM Rule ORDER BY id ASC")
|
||||||
fun getAll(): List<Rule>
|
fun getAll(): List<Rule>
|
||||||
|
@ -26,6 +26,8 @@ class RuleRepository(
|
|||||||
|
|
||||||
suspend fun getRuleAndSender(type: String, status: Int, simSlot: String) = ruleDao.getRuleAndSender(type, status, simSlot)
|
suspend fun getRuleAndSender(type: String, status: Int, simSlot: String) = ruleDao.getRuleAndSender(type, status, simSlot)
|
||||||
|
|
||||||
|
fun getRuleList(type: String, status: Int, simSlot: String) = ruleDao.getRuleList(type, status, simSlot)
|
||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
fun update(rule: Rule) = ruleDao.update(rule)
|
fun update(rule: Rule) = ruleDao.update(rule)
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ import androidx.work.OneTimeWorkRequestBuilder
|
|||||||
import androidx.work.WorkManager
|
import androidx.work.WorkManager
|
||||||
import androidx.work.workDataOf
|
import androidx.work.workDataOf
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
|
import com.idormy.sms.forwarder.core.Core
|
||||||
|
import com.idormy.sms.forwarder.database.entity.Rule
|
||||||
import com.idormy.sms.forwarder.entity.MsgInfo
|
import com.idormy.sms.forwarder.entity.MsgInfo
|
||||||
import com.idormy.sms.forwarder.utils.PACKAGE_NAME
|
import com.idormy.sms.forwarder.utils.PACKAGE_NAME
|
||||||
import com.idormy.sms.forwarder.utils.SettingUtils
|
import com.idormy.sms.forwarder.utils.SettingUtils
|
||||||
@ -20,14 +22,11 @@ import java.util.*
|
|||||||
|
|
||||||
|
|
||||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||||
class NotifyService : NotificationListenerService()/*, LifecycleOwner*/ {
|
class NotifyService : NotificationListenerService() {
|
||||||
|
|
||||||
/*private val mRegistry = LifecycleRegistry(this)*/
|
|
||||||
private val TAG: String = "NotifyService"
|
private val TAG: String = "NotifyService"
|
||||||
|
|
||||||
override fun onListenerConnected() {
|
override fun onListenerConnected() {
|
||||||
//super.onListenerConnected()
|
|
||||||
// Check if Notification Listener Permission is allowed
|
|
||||||
Log.d(TAG, "onListenerConnected")
|
Log.d(TAG, "onListenerConnected")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,37 +80,32 @@ class NotifyService : NotificationListenerService()/*, LifecycleOwner*/ {
|
|||||||
if (TextUtils.isEmpty(title) && TextUtils.isEmpty(text)) return
|
if (TextUtils.isEmpty(title) && TextUtils.isEmpty(text)) return
|
||||||
|
|
||||||
val msgInfo = MsgInfo("app", from, text, Date(), title, -1)
|
val msgInfo = MsgInfo("app", from, text, Date(), title, -1)
|
||||||
val request = OneTimeWorkRequestBuilder<SendWorker>()
|
|
||||||
.setInputData(
|
|
||||||
workDataOf(
|
|
||||||
Worker.sendMsgInfo to Gson().toJson(msgInfo),
|
|
||||||
//Worker.sendSbnId to sbn.id
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
WorkManager.getInstance(applicationContext).enqueue(request)
|
|
||||||
|
|
||||||
//TODO:收不到返回信息,自动消除待解决
|
//TODO:自动消除通知(临时方案,重复查询换取准确性)
|
||||||
/*WorkManager.getInstance(context).getWorkInfoByIdLiveData(request.id)
|
if (SettingUtils.enableCancelAppNotify) {
|
||||||
.observe(this) { info: WorkInfo? ->
|
val ruleList: List<Rule> = Core.rule.getRuleList(msgInfo.type, 1, "SIM0")
|
||||||
Log.e(TAG, info.toString())
|
for (rule in ruleList) {
|
||||||
if (info != null && info.state == WorkInfo.State.SUCCEEDED) {
|
if (rule.checkMsg(msgInfo)) {
|
||||||
|
Log.d(TAG, "自动消除通知")
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
cancelNotification(sbn.key)
|
cancelNotification(sbn.key)
|
||||||
} else {
|
} else {
|
||||||
cancelNotification(sbn.packageName, sbn.tag, sbn.id)
|
cancelNotification(sbn.packageName, sbn.tag, sbn.id)
|
||||||
}
|
}
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}*/
|
|
||||||
//自动消除全部通知(临时方案)
|
|
||||||
if (SettingUtils.enableCancelAppNotify) {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
||||||
cancelNotification(sbn.key)
|
|
||||||
} else {
|
|
||||||
cancelNotification(sbn.packageName, sbn.tag, sbn.id)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val request = OneTimeWorkRequestBuilder<SendWorker>()
|
||||||
|
.setInputData(
|
||||||
|
workDataOf(
|
||||||
|
Worker.sendMsgInfo to Gson().toJson(msgInfo),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.build()
|
||||||
|
WorkManager.getInstance(applicationContext).enqueue(request)
|
||||||
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "Parsing Notification failed: " + e.message.toString())
|
Log.e(TAG, "Parsing Notification failed: " + e.message.toString())
|
||||||
}
|
}
|
||||||
@ -119,11 +113,7 @@ class NotifyService : NotificationListenerService()/*, LifecycleOwner*/ {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onNotificationRemoved(sbn: StatusBarNotification?) {
|
override fun onNotificationRemoved(sbn: StatusBarNotification?) {
|
||||||
//super.onNotificationRemoved(sbn)
|
|
||||||
Log.d(TAG, "Removed Package Name : ${sbn?.packageName}")
|
Log.d(TAG, "Removed Package Name : ${sbn?.packageName}")
|
||||||
}
|
}
|
||||||
|
|
||||||
/*override fun getLifecycle(): Lifecycle {
|
|
||||||
return mRegistry
|
|
||||||
}*/
|
|
||||||
}
|
}
|
@ -73,7 +73,6 @@ class SendWorker(
|
|||||||
HistoryUtils.put(key, timestamp)
|
HistoryUtils.put(key, timestamp)
|
||||||
}
|
}
|
||||||
|
|
||||||
//val sendSbnId = inputData.getInt(Worker.sendSbnId, 0)
|
|
||||||
//【注意】卡槽id:-1=获取失败、0=卡槽1、1=卡槽2,但是 Rule 表里存的是 SIM1/SIM2
|
//【注意】卡槽id:-1=获取失败、0=卡槽1、1=卡槽2,但是 Rule 表里存的是 SIM1/SIM2
|
||||||
val simSlot = "SIM" + (msgInfo.simSlot + 1)
|
val simSlot = "SIM" + (msgInfo.simSlot + 1)
|
||||||
val ruleList: List<RuleAndSender> = Core.rule.getRuleAndSender(msgInfo.type, 1, simSlot)
|
val ruleList: List<RuleAndSender> = Core.rule.getRuleAndSender(msgInfo.type, 1, simSlot)
|
||||||
@ -81,21 +80,13 @@ class SendWorker(
|
|||||||
return@withContext Result.failure(workDataOf("send" to "failed"))
|
return@withContext Result.failure(workDataOf("send" to "failed"))
|
||||||
}
|
}
|
||||||
|
|
||||||
//var matchNum = 0
|
|
||||||
for (rule in ruleList) {
|
for (rule in ruleList) {
|
||||||
if (!rule.rule.checkMsg(msgInfo)) continue
|
if (!rule.rule.checkMsg(msgInfo)) continue
|
||||||
//matchNum++
|
|
||||||
val log = Logs(0, msgInfo.type, msgInfo.from, msgInfo.content, rule.rule.id, msgInfo.simInfo)
|
val log = Logs(0, msgInfo.type, msgInfo.from, msgInfo.content, rule.rule.id, msgInfo.simInfo)
|
||||||
val logId = Core.logs.insert(log)
|
val logId = Core.logs.insert(log)
|
||||||
SendUtils.sendMsgSender(msgInfo, rule.rule, rule.sender, logId)
|
SendUtils.sendMsgSender(msgInfo, rule.rule, rule.sender, logId)
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO:自动消除通知
|
|
||||||
/*if (matchNum > 0 && sendSbnId != 0 && SettingUtils.enableCancelAppNotify) {
|
|
||||||
Log.e("SendWorker", "自动消除通知")
|
|
||||||
return@withContext Result.success(workDataOf("matchNum" to matchNum))
|
|
||||||
}*/
|
|
||||||
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
return@withContext Result.failure(workDataOf("send" to e.message.toString()))
|
return@withContext Result.failure(workDataOf("send" to e.message.toString()))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user