From 9436e3498bfdc3bdd13f06cb205fae02a67506c4 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Thu, 11 Jul 2024 15:03:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=85=8D=E6=89=93?= =?UTF-8?q?=E6=89=B0=E6=97=B6=E6=AE=B5=E8=B7=A8=E5=A4=A9=E4=B8=8D=E6=88=90?= =?UTF-8?q?=E5=8A=9FBUG=20#493?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms/forwarder/utils/DataProvider.kt | 45 +++++++++++++++++++ .../idormy/sms/forwarder/utils/SendUtils.kt | 28 ++---------- .../sms/forwarder/workers/SendWorker.kt | 37 +++------------ 3 files changed, 54 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/DataProvider.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/DataProvider.kt index 2fd9cc8f..5824c3ad 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/DataProvider.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/DataProvider.kt @@ -1,9 +1,13 @@ package com.idormy.sms.forwarder.utils +import android.annotation.SuppressLint import com.idormy.sms.forwarder.entity.CallInfo import com.idormy.sms.forwarder.entity.ContactInfo import com.idormy.sms.forwarder.entity.SmsInfo import com.xuexiang.xaop.annotation.MemoryCache +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Date @Suppress("SameParameterValue") object DataProvider { @@ -71,4 +75,45 @@ object DataProvider { } return list } + + /** + * 判断当前时间是否在时间段内 + */ + @SuppressLint("SimpleDateFormat") + fun isCurrentTimeInPeriod(periodStartIndex: Int, periodEndIndex: Int): Boolean { + val periodStartStr = timePeriodOption[periodStartIndex] + val periodEndStr = timePeriodOption[periodEndIndex] + + // 定义时间格式 + val formatter = SimpleDateFormat("HH:mm") + + // 解析时间字符串 + val periodStart = Calendar.getInstance().apply { + time = formatter.parse(periodStartStr) as Date + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + } + val periodEnd = Calendar.getInstance().apply { + time = formatter.parse(periodEndStr) as Date + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + } + + // 获取当前时间 + val currentTime = Calendar.getInstance() + val currentHour = currentTime.get(Calendar.HOUR_OF_DAY) + val currentMinute = currentTime.get(Calendar.MINUTE) + + // 判断是否跨天 + return if (periodEnd.before(periodStart)) { + // 跨天的情况 + (currentHour > periodStart.get(Calendar.HOUR_OF_DAY) || (currentHour == periodStart.get(Calendar.HOUR_OF_DAY) && currentMinute >= periodStart.get(Calendar.MINUTE))) || + (currentHour < periodEnd.get(Calendar.HOUR_OF_DAY) || (currentHour == periodEnd.get(Calendar.HOUR_OF_DAY) && currentMinute < periodEnd.get(Calendar.MINUTE))) + } else { + // 不跨天的情况 + (currentHour > periodStart.get(Calendar.HOUR_OF_DAY) || (currentHour == periodStart.get(Calendar.HOUR_OF_DAY) && currentMinute >= periodStart.get(Calendar.MINUTE))) && + (currentHour < periodEnd.get(Calendar.HOUR_OF_DAY) || (currentHour == periodEnd.get(Calendar.HOUR_OF_DAY) && currentMinute < periodEnd.get(Calendar.MINUTE))) + } + } + } \ No newline at end of file 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 bdfe9b40..7003231d 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,10 +49,6 @@ 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.text.ParsePosition -import java.text.SimpleDateFormat -import java.util.Calendar -import java.util.Date object SendUtils { private const val TAG = "SendUtils" @@ -102,28 +98,10 @@ object SendUtils { return } //免打扰(禁用转发)时间段 + Log.d(TAG, "silentPeriodStart = ${rule.silentPeriodStart}, silentPeriodEnd = ${rule.silentPeriodEnd}") if (rule.silentPeriodStart != rule.silentPeriodEnd) { - val periodStartDay = Date() - var periodStartEnd = Date() - //跨天了 - if (rule.silentPeriodStart > rule.silentPeriodEnd) { - val c: Calendar = Calendar.getInstance() - c.time = periodStartEnd - c.add(Calendar.DAY_OF_MONTH, 1) - periodStartEnd = c.time - } - - val dateFmt = SimpleDateFormat("yyyy-MM-dd") - val mTimeOption = DataProvider.timePeriodOption - val periodStartStr = dateFmt.format(periodStartDay) + " " + mTimeOption[rule.silentPeriodStart] + ":00" - val periodEndStr = dateFmt.format(periodStartEnd) + " " + mTimeOption[rule.silentPeriodEnd] + ":00" - - val timeFmt = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") - val periodStart = timeFmt.parse(periodStartStr, ParsePosition(0))?.time - val periodEnd = timeFmt.parse(periodEndStr, ParsePosition(0))?.time - - val now = System.currentTimeMillis() - if (periodStart != null && periodEnd != null && now in periodStart..periodEnd) { + val isSilentPeriod = DataProvider.isCurrentTimeInPeriod(rule.silentPeriodStart, rule.silentPeriodEnd) + if (isSilentPeriod) { Log.d(TAG, "免打扰(禁用转发)时间段") updateLogs(logId, 0, getString(R.string.silent_time_period)) senderLogic(0, msgInfo, rule, senderIndex, msgId) diff --git a/app/src/main/java/com/idormy/sms/forwarder/workers/SendWorker.kt b/app/src/main/java/com/idormy/sms/forwarder/workers/SendWorker.kt index d43dd683..abf9689d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/workers/SendWorker.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/workers/SendWorker.kt @@ -32,10 +32,6 @@ import com.xuexiang.xutil.resource.ResUtils import com.xuexiang.xutil.security.CipherUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -import java.text.ParsePosition -import java.text.SimpleDateFormat -import java.util.Calendar -import java.util.Date @Suppress("PrivatePropertyName", "DEPRECATION") class SendWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { @@ -61,34 +57,13 @@ class SendWorker(context: Context, params: WorkerParameters) : CoroutineWorker(c // 免打扰(禁用转发)时间段 var isSilentPeriod = false + Log.d(TAG, "silentPeriodStart = ${SettingUtils.silentPeriodStart}, silentPeriodEnd = ${SettingUtils.silentPeriodEnd}") if (SettingUtils.silentPeriodStart != SettingUtils.silentPeriodEnd) { - val periodStartDay = Date() - var periodStartEnd = Date() - //跨天了 - if (SettingUtils.silentPeriodStart > SettingUtils.silentPeriodEnd) { - val c: Calendar = Calendar.getInstance() - c.time = periodStartEnd - c.add(Calendar.DAY_OF_MONTH, 1) - periodStartEnd = c.time - } - - val dateFmt = SimpleDateFormat("yyyy-MM-dd") - val mTimeOption = DataProvider.timePeriodOption - val periodStartStr = dateFmt.format(periodStartDay) + " " + mTimeOption[SettingUtils.silentPeriodStart] + ":00" - val periodEndStr = dateFmt.format(periodStartEnd) + " " + mTimeOption[SettingUtils.silentPeriodEnd] + ":00" - - val timeFmt = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") - val periodStart = timeFmt.parse(periodStartStr, ParsePosition(0))?.time - val periodEnd = timeFmt.parse(periodEndStr, ParsePosition(0))?.time - - val now = System.currentTimeMillis() - if (periodStart != null && periodEnd != null && now in periodStart..periodEnd) { - if (SettingUtils.enableSilentPeriodLogs) { - isSilentPeriod = true - } else { - Log.e(TAG, "免打扰(禁用转发)时间段") - return@withContext Result.failure(workDataOf("send" to "failed")) - } + isSilentPeriod = DataProvider.isCurrentTimeInPeriod(SettingUtils.silentPeriodStart, SettingUtils.silentPeriodEnd) + Log.d(TAG, "isSilentPeriod = $isSilentPeriod, enableSilentPeriodLogs = ${SettingUtils.enableSilentPeriodLogs}") + if (isSilentPeriod && !SettingUtils.enableSilentPeriodLogs) { + Log.e(TAG, "免打扰(禁用转发)时间段") + return@withContext Result.failure(workDataOf("send" to "failed")) } }