fix: shockTime/shockIntervalTime 改为 Float(服务端下发小数如 0.50)

实测服务端 type=7 下发的 shockTime=0.50、shockIntervalTime=0.50,
之前用 optInt 解析会截断为 0,导致振动时长 0ms。

- VibrationPattern: shockTime/shockIntervalTime Int → Float
- VibrationConfigManager: optInt → optDouble().toFloat()
- FiseVibrationController: 毫秒计算适配 Float

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
dongliang
2026-04-30 20:01:12 +09:30
parent 6e8c93fc46
commit da74ca6d97
3 changed files with 8 additions and 8 deletions

View File

@@ -122,8 +122,8 @@ class FiseVibrationController @Inject constructor(
*/
@Suppress("DEPRECATION")
private suspend fun executePatternLoop(pattern: VibrationPattern) {
val vibrateDurationMs = pattern.shockTime * 1000L
val intervalMs = pattern.shockIntervalTime * 1000L
val vibrateDurationMs = (pattern.shockTime * 1000).toLong()
val intervalMs = (pattern.shockIntervalTime * 1000).toLong()
// 外层循环:频次循环
for (cycle in 0 until pattern.shockCycleTimes) {

View File

@@ -77,9 +77,9 @@ class VibrationConfigManager @Inject constructor() {
serverParams[planId] = VibrationPattern(
planId = planId,
planName = obj.optString("planName", ""),
shockTime = obj.optInt("shockTime", 1),
shockTime = obj.optDouble("shockTime", 1.0).toFloat(),
shockTimes = obj.optInt("shockTimes", 1),
shockIntervalTime = obj.optInt("shockIntervalTime", 0),
shockIntervalTime = obj.optDouble("shockIntervalTime", 0.0).toFloat(),
shockCycleTimes = obj.optInt("shockCycleTimes", 1),
shockState = obj.optInt("shockState", 1) == 1,
voiceState = obj.optInt("voiceState", 1) == 1,

View File

@@ -12,12 +12,12 @@ data class VibrationPattern(
val planId: Int,
/** 方案名称 */
val planName: String,
/** 单次振动时长(秒) */
val shockTime: Int,
/** 单次振动时长(秒,支持小数如 0.5 */
val shockTime: Float,
/** 每频次振动次数 */
val shockTimes: Int,
/** 振动间休息时长(秒) */
val shockIntervalTime: Int,
/** 振动间休息时长(秒,支持小数如 0.5 */
val shockIntervalTime: Float,
/** 频次循环次数 */
val shockCycleTimes: Int,
/** 是否启用振动 */