From 7c335666962075e6b2bcc8bb100e6e7d129dba66 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Fri, 15 Nov 2024 15:37:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A`=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1-=E5=BF=AB=E6=8D=B7=E6=8C=87=E4=BB=A4-?= =?UTF-8?q?=E8=AD=A6=E6=8A=A5=E6=8F=90=E9=86=92`=E5=8A=A8=E4=BD=9C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0`=E6=8C=AF=E5=8A=A8=E6=8F=90=E9=86=92`?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=20#554=20#482?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../forwarder/entity/action/AlarmSetting.kt | 6 +-- .../fragment/action/AlarmFragment.kt | 48 +++++++------------ .../forwarder/service/ForegroundService.kt | 7 ++- .../sms/forwarder/utils/VibrationUtils.kt | 19 ++++++-- .../layout/fragment_tasks_action_alarm.xml | 2 +- app/src/main/res/values-en/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 9 files changed, 43 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/action/AlarmSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/action/AlarmSetting.kt index 2e51f526..c8ba14e0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/action/AlarmSetting.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/action/AlarmSetting.kt @@ -5,9 +5,9 @@ import java.io.Serializable data class AlarmSetting( var description: String = "", //描述 var action: String = "stop", //动作: start=启动警报, stop=停止警报 - var volume: Int = 80, //播放音量,0=禁用 - var playTimes: Int = 1, //播放次数,0=无限循环 + var volume: Int = 80, //播放音量,0-100 + var playTimes: Int = 1, //播放次数,0=无限循环,-1=禁用 var music: String = "", //音乐文件 - var repeatTimes: Int = 5, //振动重复次数,0=禁用 + var repeatTimes: Int = 5, //振动重复次数,0=无限循环,-1=禁用 var vibrate: String = "---___===___", //振动律动:=强振动, -弱震动, _不振动, 时长都是100ms ) : Serializable diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/AlarmFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/AlarmFragment.kt index 559dab05..955a7730 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/AlarmFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/AlarmFragment.kt @@ -86,29 +86,11 @@ class AlarmFragment : BaseFragment(), View.OnC }) binding!!.sbEnableMusic.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - binding!!.layoutAlarmSettingsContent.visibility = View.VISIBLE - val volume = binding!!.xsbVolume.selectedNumber - if (volume == 0) { - binding!!.xsbVolume.setDefaultValue(80) - } - } else { - binding!!.layoutAlarmSettingsContent.visibility = View.GONE - binding!!.xsbVolume.setDefaultValue(0) - } + binding!!.layoutAlarmSettingsContent.visibility = if (isChecked) View.VISIBLE else View.GONE checkSetting(true) } binding!!.sbEnableVibrate.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - binding!!.layoutVibrateSettingsContent.visibility = View.VISIBLE - val repeatTimes = binding!!.xsbRepeatTimes.selectedNumber - if (repeatTimes == 0) { - binding!!.xsbRepeatTimes.setDefaultValue(5) - } - } else { - binding!!.layoutVibrateSettingsContent.visibility = View.GONE - binding!!.xsbRepeatTimes.setDefaultValue(0) - } + binding!!.layoutVibrateSettingsContent.visibility = if (isChecked) View.VISIBLE else View.GONE checkSetting(true) } @@ -128,12 +110,12 @@ class AlarmFragment : BaseFragment(), View.OnC } } binding!!.xsbVolume.setDefaultValue(settingVo.volume) - binding!!.xsbLoopTimes.setDefaultValue(settingVo.playTimes) + binding!!.xsbPlayTimes.setDefaultValue(if (settingVo.playTimes >= 0) settingVo.playTimes else 0) binding!!.etMusicPath.setText(settingVo.music) - binding!!.xsbRepeatTimes.setDefaultValue(settingVo.repeatTimes) + binding!!.xsbRepeatTimes.setDefaultValue(if (settingVo.repeatTimes >= 0) settingVo.repeatTimes else 0) binding!!.etVibrationEffect.setText(settingVo.vibrate) - binding!!.sbEnableMusic.isChecked = settingVo.volume > 0 - binding!!.sbEnableVibrate.isChecked = settingVo.repeatTimes > 0 + binding!!.sbEnableMusic.isChecked = settingVo.playTimes >= 0 + binding!!.sbEnableVibrate.isChecked = settingVo.repeatTimes >= 0 } override fun onDestroyView() { @@ -150,7 +132,7 @@ class AlarmFragment : BaseFragment(), View.OnC binding!!.xsbVolume.setOnSeekBarListener { _, _ -> checkSetting(true) } - binding!!.xsbLoopTimes.setOnSeekBarListener { _, _ -> + binding!!.xsbPlayTimes.setOnSeekBarListener { _, _ -> checkSetting(true) } binding!!.rgAlarmState.setOnCheckedChangeListener { _, checkedId -> @@ -222,7 +204,7 @@ class AlarmFragment : BaseFragment(), View.OnC try { val settingVo = checkSetting() Log.d(TAG, settingVo.toString()) - if (settingVo.volume == 0 && settingVo.repeatTimes == 0) { + if (settingVo.playTimes < 0 && settingVo.repeatTimes < 0) { XToastUtils.error(getString(R.string.alarm_settings_error)) return } @@ -265,7 +247,7 @@ class AlarmFragment : BaseFragment(), View.OnC @SuppressLint("SetTextI18n") override fun onGranted(permissions: List, all: Boolean) { val settingVo = checkSetting() - if (settingVo.volume == 0 && settingVo.repeatTimes == 0) { + if (settingVo.playTimes < 0 && settingVo.repeatTimes < 0) { XToastUtils.error(getString(R.string.alarm_settings_error)) return } @@ -304,24 +286,28 @@ class AlarmFragment : BaseFragment(), View.OnC val enableMusic = binding!!.sbEnableMusic.isChecked val enableVibrate = binding!!.sbEnableVibrate.isChecked val volume = binding!!.xsbVolume.selectedNumber - val loopTimes = binding!!.xsbLoopTimes.selectedNumber + var playTimes = binding!!.xsbPlayTimes.selectedNumber val music = binding!!.etMusicPath.text.toString().trim() - val repeatTimes = binding!!.xsbRepeatTimes.selectedNumber + var repeatTimes = binding!!.xsbRepeatTimes.selectedNumber val vibrationEffect = binding!!.etVibrationEffect.text.toString().trim() val description = StringBuilder() val action = if (binding!!.rgAlarmState.checkedRadioButtonId == R.id.rb_start_alarm) { description.append(getString(R.string.start_alarm)) if (enableMusic) { description.append(", ").append(getString(R.string.alarm_volume)).append(":").append(volume).append("%") - description.append(", ").append(getString(R.string.alarm_play_times)).append(":").append(loopTimes) + description.append(", ").append(getString(R.string.alarm_play_times)).append(":").append(playTimes) if (music.isNotEmpty()) { description.append(", ").append(getString(R.string.alarm_music)).append(":").append(music) } + } else { + playTimes = -1 } if (enableVibrate) { vibrationEffect.ifEmpty { "---___===___".also { binding!!.etVibrationEffect.setText(it) } } description.append(", ").append(getString(R.string.alarm_vibration_effect)).append(":").append(vibrationEffect) description.append(", ").append(getString(R.string.alarm_repeat_times)).append(":").append(repeatTimes) + } else { + repeatTimes = -1 } "start" } else { @@ -333,7 +319,7 @@ class AlarmFragment : BaseFragment(), View.OnC binding!!.tvDescription.text = description.toString() } - return AlarmSetting(description.toString(), action, volume, loopTimes, music, repeatTimes, vibrationEffect) + return AlarmSetting(description.toString(), action, volume, playTimes, music, repeatTimes, vibrationEffect) } private fun findAudioFiles(directoryPath: String): List { diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt b/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt index 70cfd9cd..e78f7a5f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt @@ -111,7 +111,7 @@ class ForegroundService : Service() { alarmPlayer = null if (alarm.action == "start") { //播放音乐 - if (alarm.volume > 0) { + if (alarm.playTimes >= 0) { //获取音量 val audioManager = getSystemService(AUDIO_SERVICE) as AudioManager val maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) @@ -178,10 +178,9 @@ class ForegroundService : Service() { } } //振动提醒 - if (alarm.repeatTimes > 0) { + if (alarm.repeatTimes >= 0) { isVibrating = true - val patternString = alarm.vibrate.repeat(alarm.repeatTimes) - vibrationUtils.startVibration(patternString) + vibrationUtils.startVibration(alarm.vibrate, alarm.repeatTimes) } } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/VibrationUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/VibrationUtils.kt index 36bf1017..24379b36 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/VibrationUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/VibrationUtils.kt @@ -12,13 +12,15 @@ class VibrationUtils(context: Context) { private val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator private val handler = Handler(Looper.getMainLooper()) + private var currentRepeat = 0 var isVibrating = false private set - fun startVibration(patternString: String) { + fun startVibration(patternString: String, repeatTimes: Int) { isVibrating = true + currentRepeat = 0 val parsedPattern = parsePattern(patternString) - vibratePattern(parsedPattern, 0) + vibratePattern(parsedPattern, 0, repeatTimes) } fun stopVibration() { @@ -55,7 +57,7 @@ class VibrationUtils(context: Context) { return Triple(duration, intensity > 0, intensity) } - private fun vibratePattern(parsedPattern: List>, index: Int) { + private fun vibratePattern(parsedPattern: List>, index: Int, repeatTimes: Int) { if (isVibrating && index < parsedPattern.size) { val (duration, shouldVibrate, intensity) = parsedPattern[index] if (shouldVibrate) { @@ -69,7 +71,16 @@ class VibrationUtils(context: Context) { handler.postDelayed({ if (isVibrating) { vibrator.cancel() - vibratePattern(parsedPattern, index + 1) + if (index + 1 < parsedPattern.size) { + vibratePattern(parsedPattern, index + 1, repeatTimes) + } else { + currentRepeat++ + if (repeatTimes == 0 || currentRepeat < repeatTimes) { + vibratePattern(parsedPattern, 0, repeatTimes) // Restart pattern + } else { + stopVibration() + } + } } }, duration) } diff --git a/app/src/main/res/layout/fragment_tasks_action_alarm.xml b/app/src/main/res/layout/fragment_tasks_action_alarm.xml index 4b4b1ea5..be334a94 100644 --- a/app/src/main/res/layout/fragment_tasks_action_alarm.xml +++ b/app/src/main/res/layout/fragment_tasks_action_alarm.xml @@ -155,7 +155,7 @@ android:textStyle="bold" /> Alarm Volume Play Times(0=Infinite) Vibrate Phone - Repeat Times + Repeat Times(0=Infinite) Vibration Effect Syntax: =[strong], -[weak], _[no], 100ms each Strong vibration diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f588d602..bc27a78d 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1132,7 +1132,7 @@ 播放音量 播放次数(0=无限) 振动手机 - 重复次数 + 重复次数(0=无限) 振动效果 语法:=[强振动], -[弱震动], _[不振动], 每次100ms 强振动 100ms diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7afb697e..a6bcb7a0 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1125,7 +1125,7 @@ 播放音量 播放次數(0=無限) 振動手機 - 重複次數 + 重複次數(0=無限) 振動效果 語法:=[強振動], -[弱振動], _[不振動], 每次100ms 強振動 100ms diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7dbd2998..c09b59c3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1159,7 +1159,7 @@ 播放音量 播放次数(0=无限) 振动手机 - 重复次数 + 重复次数(0=无限) 振动效果 语法:=[强振动], -[弱震动], _[不振动], 每次100ms 强振动 100ms