From aa8ab646f5dde4d7f9ed406da45958af1eca5655 Mon Sep 17 00:00:00 2001 From: sensi Date: Fri, 8 Nov 2024 16:32:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=85=8D=E6=89=93?= =?UTF-8?q?=E6=89=B0=E6=94=AF=E6=8C=81=E6=8C=87=E5=AE=9A=E6=98=9F=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms/forwarder/database/AppDatabase.kt | 10 +- .../sms/forwarder/database/entity/Rule.kt | 1 + .../forwarder/fragment/RulesEditFragment.kt | 32 ++- .../idormy/sms/forwarder/utils/SendUtils.kt | 14 ++ .../main/res/layout/fragment_rules_edit.xml | 194 +++++++++++++++--- app/src/main/res/values-en/strings.xml | 7 + app/src/main/res/values-zh-rCN/strings.xml | 7 + app/src/main/res/values/strings.xml | 7 + 8 files changed, 239 insertions(+), 33 deletions(-) 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 90751632..0ea64f90 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 @@ -28,7 +28,7 @@ import com.idormy.sms.forwarder.utils.TAG_LIST @Database( entities = [Frpc::class, Msg::class, Logs::class, Rule::class, Sender::class, Task::class], views = [LogsDetail::class], - version = 19, + version = 20, exportSchema = false ) @TypeConverters(ConvertersDate::class) @@ -110,6 +110,7 @@ custom_domains = smsf.demo.com MIGRATION_16_17, MIGRATION_17_18, MIGRATION_18_19, + MIGRATION_19_20, ) /*if (BuildConfig.DEBUG) { @@ -452,6 +453,13 @@ CREATE TABLE "Task" ( } } + //免打扰星期段 + private val MIGRATION_19_20 = object : Migration(19, 20) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("Alter table rule add column silent_day_of_week TEXT NOT NULL DEFAULT '' ") + } + } + } } 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 92e8f9a4..07b0d016 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 @@ -54,6 +54,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 = "silent_day_of_week", defaultValue = "") var silentDayOfWeek: String = "", ) : Parcelable { companion object { 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 991288ae..0e108bf0 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 @@ -87,6 +87,7 @@ import io.reactivex.SingleObserver import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers +import java.util.Calendar import java.util.Date @Page(name = "转发规则·编辑器") @@ -639,6 +640,21 @@ class RulesEditFragment : BaseFragment(), View.OnClic silentPeriodEnd = rule.silentPeriodEnd //初始化发送通道下拉框 initSenderSpinner() + + //绑定免打扰日期 + val silentPeriodDays = rule.silentDayOfWeek.split(",").filter { it.isNotEmpty() }.map { it.toInt() } + if (silentPeriodDays.isNotEmpty()) { + val map = mapOf( + Calendar.SUNDAY to binding!!.sun, + Calendar.MONDAY to binding!!.mon, + Calendar.TUESDAY to binding!!.tue, + Calendar.WEDNESDAY to binding!!.wed, + Calendar.THURSDAY to binding!!.thu, + Calendar.FRIDAY to binding!!.fri, + Calendar.SATURDAY to binding!!.sat, + ) + silentPeriodDays.forEach { map[it]?.isChecked = true } + } } }) } @@ -715,6 +731,19 @@ class RulesEditFragment : BaseFragment(), View.OnClic } val status = if (binding!!.sbStatus.isChecked) STATUS_ON else STATUS_OFF + val map = mapOf( + Calendar.SUNDAY to binding!!.sun, + Calendar.MONDAY to binding!!.mon, + Calendar.TUESDAY to binding!!.tue, + Calendar.WEDNESDAY to binding!!.wed, + Calendar.THURSDAY to binding!!.thu, + Calendar.FRIDAY to binding!!.fri, + Calendar.SATURDAY to binding!!.sat, + ) + + val silentDayOfWeek = map.filter { it.value.isChecked } + .toList().map {it.first }.joinToString(",") + return Rule( ruleId, ruleType, @@ -730,7 +759,8 @@ class RulesEditFragment : BaseFragment(), View.OnClic senderListSelected, senderLogic, silentPeriodStart, - silentPeriodEnd + silentPeriodEnd, + silentDayOfWeek, ) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SendUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/SendUtils.kt index 7003231d..f6ae891f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SendUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SendUtils.kt @@ -49,6 +49,7 @@ import com.idormy.sms.forwarder.workers.UpdateLogsWorker import com.jeremyliao.liveeventbus.LiveEventBus import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.resource.ResUtils.getString +import java.util.Calendar object SendUtils { private const val TAG = "SendUtils" @@ -97,6 +98,19 @@ object SendUtils { senderLogic(0, msgInfo, rule, senderIndex, msgId) return } + //免打扰(禁用转发)日期段 + Log.d(TAG, "silentDayOfWeek = ${rule.silentDayOfWeek}") + val silentDayOfWeek = rule.silentDayOfWeek.split(",").filter { it.isNotEmpty() }.map { it.toInt() } + if (silentDayOfWeek.isNotEmpty()) { + val dayOfWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK) + if (silentDayOfWeek.contains(dayOfWeek)) { + Log.d(TAG, "免打扰(禁用转发)日期段") + updateLogs(logId, 0, getString(R.string.silent_time_period)) + senderLogic(0, msgInfo, rule, senderIndex, msgId) + return + } + } + //免打扰(禁用转发)时间段 Log.d(TAG, "silentPeriodStart = ${rule.silentPeriodStart}, silentPeriodEnd = ${rule.silentPeriodEnd}") if (rule.silentPeriodStart != rule.silentPeriodEnd) { diff --git a/app/src/main/res/layout/fragment_rules_edit.xml b/app/src/main/res/layout/fragment_rules_edit.xml index a5c9924d..95e400c5 100644 --- a/app/src/main/res/layout/fragment_rules_edit.xml +++ b/app/src/main/res/layout/fragment_rules_edit.xml @@ -509,52 +509,184 @@ style="@style/BarStyle" android:layout_width="match_parent" android:layout_height="wrap_content" + android:orientation="vertical" tools:ignore="RtlSymmetry"> + tools:ignore="RtlSymmetry"> + + + + + + + + + android:layout_marginStart="5dp" + android:layout_weight="1" + android:gravity="center" /> - + app:sb_color_unpressed="@color/colorPrimary" + app:sb_ripple_color="@color/white" + app:sb_ripple_duration="500" + app:sb_shape_type="rectangle" + tools:ignore="SmallSp" /> - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 1e6ef263..4b003378 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -186,6 +186,13 @@ Enable This Forwarding Rule The matched value cannot be null The call type is incorrect, you can only enter any number from 1 to 6. + MON + TUE + WED + THU + FRI + SAT + SUN Delete confirmation Are you sure to delete this sender? diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 19946a6a..78c6c23a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -187,6 +187,13 @@ 启用该条转发规则 匹配的值不可为空 通话类型不正确,只能填写1到6的任意一个数字 + 周一 + 周二 + 周三 + 周四 + 周五 + 周六 + 周日 发送通道操作确认 删除发送通道后会级联删除其相关的转发规则、转发日志的所有记录!\n\n确定删除该条发送通道? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 112bc5ee..00f090e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -214,6 +214,13 @@ 启用该条转发规则 匹配的值不可为空 通话类型不正确,只能填写1到6的任意一个数字 + 周一 + 周二 + 周三 + 周四 + 周五 + 周六 + 周日 发送通道操作确认 删除发送通道后会级联删除其相关的转发规则、转发日志的所有记录!\n\n确定删除该条发送通道?