diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/AppDatabase.kt b/app/src/main/java/com/idormy/sms/forwarder/database/AppDatabase.kt index 790c0dd6..5f54c88c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/AppDatabase.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/AppDatabase.kt @@ -15,7 +15,7 @@ import com.idormy.sms.forwarder.utils.DATABASE_NAME @Database( entities = [Frpc::class, Msg::class, Logs::class, Rule::class, Sender::class], views = [LogsDetail::class], - version = 17, + version = 18, exportSchema = false ) @TypeConverters(ConvertersDate::class) @@ -98,6 +98,7 @@ custom_domains = smsf.demo.com MIGRATION_14_15, MIGRATION_15_16, MIGRATION_16_17, + MIGRATION_17_18 ) /*if (BuildConfig.DEBUG) { @@ -381,6 +382,13 @@ CREATE TABLE "Logs" ( } } + //规则配置增加uid条件 + private val MIGRATION_17_18 = object : Migration(17, 18) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("Alter table rule add column uid INTEGER NOT NULL DEFAULT 0 ") + } + } + } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt index a6d45e7a..efd30aa4 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt @@ -51,6 +51,7 @@ data class Rule( //免打扰(禁用转发)时间段 @ColumnInfo(name = "silent_period_start", defaultValue = "0") var silentPeriodStart: Int = 0, @ColumnInfo(name = "silent_period_end", defaultValue = "0") var silentPeriodEnd: Int = 0, + @ColumnInfo(name = "uid", defaultValue = "0") var uid: Int = 0, ) : Parcelable { companion object { @@ -158,6 +159,10 @@ data class Rule( //检查这一行和上一行合并的结果是否命中 var mixChecked = false if (msg != null) { + if(this.uid != 0 && msg.uid != this.uid){ + Log.i(TAG, "rule:$this checkMsg:$msg checked:false") + return false + } //先检查规则是否命中 when (this.filed) { FILED_TRANSPOND_ALL -> mixChecked = true diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt index c39b364b..89df7296 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt @@ -27,6 +27,7 @@ data class MsgInfo( var simSlot: Int = -1, //卡槽id:-1=获取失败、0=卡槽1、1=卡槽2 var subId: Int = 0, //卡槽主键 var callType: Int = 0, //通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 + var uid: Int = 0, ) : Serializable { val titleForSend: String diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt index 8416f790..7e970221 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt @@ -130,6 +130,7 @@ class RulesEditFragment : BaseFragment(), View.OnClic initAppSpinner() //监听已安装App信息列表加载完成事件 LiveEventBus.get(EVENT_LOAD_APP_LIST, String::class.java).observeStickyForever(appListObserver) + binding!!.layoutUid.visibility = View.VISIBLE } "call" -> { @@ -157,6 +158,7 @@ class RulesEditFragment : BaseFragment(), View.OnClic binding!!.spCallType.selectedIndex = callTypeIndex } binding!!.spCallType.selectedIndex = callTypeIndex + binding!!.layoutUid.visibility = View.GONE } else -> { @@ -167,6 +169,7 @@ class RulesEditFragment : BaseFragment(), View.OnClic binding!!.btInsertSenderApp.visibility = View.GONE binding!!.btInsertTitleApp.visibility = View.GONE binding!!.btInsertContentApp.visibility = View.GONE + binding!!.layoutUid.visibility = View.GONE } } @@ -592,7 +595,7 @@ class RulesEditFragment : BaseFragment(), View.OnClic binding!!.sbStatus.isChecked = rule.statusChecked silentPeriodStart = rule.silentPeriodStart silentPeriodEnd = rule.silentPeriodEnd - + binding!!.etUid.setText(rule.uid.toString()) //初始化发送通道下拉框 initSenderSpinner() } @@ -659,8 +662,29 @@ class RulesEditFragment : BaseFragment(), View.OnClic //if (status == STATUS_OFF) { // throw Exception(getString(R.string.invalid_rule_status)) //} - - return Rule(ruleId, ruleType, filed, check, value, senderId, smsTemplate, regexReplace, simSlot, status, Date(), senderListSelected, senderLogic, silentPeriodStart, silentPeriodEnd) + val uidText = binding!!.etUid.text + var uid = 0 + if(uidText!=null&& uidText.isNotEmpty()){ + uid = uidText.toString().toInt() + } + return Rule( + ruleId, + ruleType, + filed, + check, + value, + senderId, + smsTemplate, + regexReplace, + simSlot, + status, + Date(), + senderListSelected, + senderLogic, + silentPeriodStart, + silentPeriodEnd, + uid + ) } //检查多重匹配规则是否正确 diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.kt b/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.kt index 5b4c7c3a..c69b6f64 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.kt @@ -127,7 +127,10 @@ class NotifyService : NotificationListenerService() { if (TextUtils.isEmpty(title) && TextUtils.isEmpty(text)) return val msgInfo = MsgInfo("app", from, text, Date(), title, -1) - + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + Log.d(TAG, "消息的UID====>" + sbn.uid) + msgInfo.uid = sbn.uid + } //TODO:自动消除通知(临时方案,重复查询换取准确性) if (SettingUtils.enableCancelAppNotify) { val ruleList: List = Core.rule.getRuleList(msgInfo.type, 1, "SIM0") diff --git a/app/src/main/res/layout/fragment_rules_edit.xml b/app/src/main/res/layout/fragment_rules_edit.xml index 21dc1e81..f3e540d1 100644 --- a/app/src/main/res/layout/fragment_rules_edit.xml +++ b/app/src/main/res/layout/fragment_rules_edit.xml @@ -143,6 +143,28 @@ + + + + + + + - Enable {{LOCATION}} Tag Insert location info into forwarded msg. + UID diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bb0a5e2a..57626d8e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1073,4 +1073,5 @@ 启用 {{定位信息}} 标签 在转发信息中插入手机的当前定位信息 + UID