zijunchiang
|
42919cc8e3
|
V1.3.8: 均衡器频段改横向滑杆 + 遥控确认键调节/退出 + 触控需按住滑块
1) 频段 UI 改为横向滑动条
删除 VerticalEqBar, 新增自绘控件 EqSlider(横向), 音量与频段共用:
每个频段一行「频率 | 滑杆 | 增益(dB)」, 带 0dB 参考线并从参考线填充到当前值。
弹窗布局随之改为: 音量横向杆 → 均衡器开关 → 预设 → 5 行频段滑杆。
2) 电视遥控交互(按确认键才可调节控件点, 同理按确认键退出控制)
- 焦点在滑杆上时方向键**不**改数值(先让焦点在控件间正常移动);
- 按确认键进入「调节态」(描边变亮变粗), 此时左右/上下键才调值;
- 再按确认键退出调节态; 调节态下 BACK 也只退出调节态、不关弹窗; 失焦自动退出。
新增 onInteractionFinished 回调, 退出调节态/抬手/失焦时统一 applyPlaybackMode +
saveState(音量) 或 applyEqualizerSettings(频段), 避免逐步落盘。
3) 触控优化(含远程控制): 必须按住控件点(滑块)才能滑动
- App: EqSlider 触摸按下时先做 hitsThumb 命中判断(容差 26dp, 含纵向范围),
未命中直接不处理 -> 点轨道空白不会跳变数值;
- 远程点歌页面: 新增 attachThumbOnlyDrag(), 对 input[type=range] 的
pointerdown/touchstart/mousedown 做同样的滑块命中判断, 未命中则 preventDefault,
命中才放行浏览器原生拖动; 滑块光标改 grab/grabbing 提示可拖。
4) 自适应随之调整: 预算按「频段行数」均分得到行高(clamp 38~56dp),
两遍 fit 超出时收缩的是频段行高(下限 34dp), 文字行仍全部 wrap_content。
版本号 1.3.7 -> 1.3.8(versionCode 13 -> 14)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-20 19:00:53 +08:00 |
|
zijunchiang
|
7e3d233891
|
V1.3.7: 调音弹窗文字自适应 —— 修"文字显示不全"
问题: 上一版按分辨率压缩时把「文字行」也一起压扁了。label() 自带 6dp 上下内边距,
行高必须 >= 文本行高+12dp, 而紧凑模式给了 18dp(频段刻度)/28dp(音量标题)/42dp(标题),
sp 文本(尤其系统字体放大时)直接被裁掉 —— 这就是"文字显示不全"的根因。
修复: 改成「文字行 wrap_content + 只有无文字区域才用计算高度」
- 标题行/标题文字、音量标题、EQ 开关、预设行与预设按钮、频段数值与频率刻度
全部改为 wrap_content, 高度由文本自身决定, 任何字体缩放下都不会被裁。
- 频段刻度新增 caption(): 无内边距 + includeFontPadding=false, 12sp 完整显示。
- 预设按钮改 includeFontPadding=false + 等距 padding, 不再被固定 46dp 压扁。
- 滑杆用自身固有高度(-2), SeekBar 无文字不会被裁。
- 两遍 fit: afterShow 里先 panel.measure() 实测内容高度, 若超出「屏幕高*0.92 - 框架」
就把 EQ 频段区减掉(下限 dp(96)), 再调 fitDialogToScreen 收敛窗口 ——
收缩的永远是频段区而不是文字; 仍放不下才滚动。
新增 tuning dialog shrink band 日志便于现场核对。
版本号 1.3.6 -> 1.3.7(versionCode 12 -> 13)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-20 16:11:33 +08:00 |
|
zijunchiang
|
0c7aa46458
|
V1.3.6: 「调音」与「扫码点歌」弹窗分辨率自适应
问题: 两个弹窗都用固定 dp 尺寸 + WRAP_CONTENT 高度, 在矮屏(720p@1.5≈480dp 高、
1080p@2.0≈960dp 等)上会被屏幕裁掉, 底部内容(频段滑杆/二维码说明)看不到。
修复:
- 新增通用 helper fitDialogToScreen(dialog, scroll, content, preferredWidthDp):
宽度 = min(首选, 屏幕宽*0.94); 高度不再用 WRAP_CONTENT, 而是把内容所在的 ScrollView
限制为 屏幕高*0.92 - 弹窗标题/按钮框架高度。先按最终宽度量一次内容原始高度,
放得下就紧凑显示, 放不下就在弹窗内滚动 —— 任何分辨率下都不会被裁切。
- 调音弹窗: 按屏幕高度算出内容预算, 把剩余空间给 EQ 频段区并夹在 112~216dp,
同时矮屏(高度<620dp)压缩刻度区宽度/标签/预设行高度; 输出自适应日志便于现场核对。
- 扫码点歌弹窗: 二维码边长按 屏幕高*0.42 / 屏宽*0.62 自适应并夹在 160~220(矮屏)/280dp,
位图按最终显示尺寸生成保证清晰; 文案宽度改为 MATCH_PARENT, 内容包进 ScrollView。
- 声音设置弹窗同样接入该 helper(同一类裁切风险)。
版本号 1.3.5 -> 1.3.6(versionCode 11 -> 12)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-20 15:51:52 +08:00 |
|
zijunchiang
|
ce57068c68
|
V1.3.5: 调音弹窗重构(音量+均衡器) + 公放切歌修复 + 远程均衡器可折叠
1) 公放歌曲按「切歌」不再停止
原先 advancePlayback 在已点队列为空时把「用户主动切歌」一律当作停止(进入空闲态),
导致公放(随机)歌曲播放中按切歌就停了。现在: 若当前曲目属于公放清单
(RandomPlayQueue.isCurrentTrack), 按切歌直接接着播清单里的下一首;
不调用 markFinished(跳过不等于播完, 不该 +1), 但它已在 markStarted 计入本轮已播,
所以本轮不会重复。playRandomLocalSong 新增 skipped 参数用于提示文案。
2) 「调音」弹窗重构为 App 内唯一音控入口(播放界面 + 主界面右上角同一弹窗)
自上而下: 音量(横向控制杆, 即时生效) → 均衡器开关(默认关闭) → 均衡器预设
(自定义/流行/摇滚/舞曲, 手改频段自动转「自定义」并保存) → EQ 频段(竖向控制杆)。
全部即时生效, 因此没有「完成/确认」按钮, 只有关闭。
新增自绘控件 VerticalEqBar(SeekBar 只支持横向): 触摸拖动 + 遥控器上下键步进,
量程端点放行按键以便焦点离开, 焦点态自绘橙色边框并 suppressFill。
均衡器预设改为 标准(仅供远程"恢复标准", 不在 App 行内)/流行/摇滚/舞曲,
eqPreset 默认 "自定义"。
清除旧 UI 与代码: 删除 dialog_tuning.xml / dialog_audio_control.xml /
CircularVolumeView.kt, 移除 showAudioControlDialog / showAlignedTuningDialog /
showEqualizerDialog / showFullScreenVolumeDialog / bindAtmospherePreset /
updateToggleState 及 fullScreenVolume* / fullScreenToneControl /
hideFullScreenVolumeIndicatorRunnable 等字段与 dispatchKeyEvent 中的面板分支。
设置页「音频控制」改为指向调音弹窗(麦克风音量仍提示由功放硬件调节;
升降调保留在下一页「音调控制」)。
3) 远程点歌页面均衡器界面不变, 均衡器文字栏改为折叠按钮(默认收起)。
版本号 1.3.4 -> 1.3.5(versionCode 10 -> 11)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-20 15:38:48 +08:00 |
|
zijunchiang
|
4c22826ea1
|
V1.3.4: 新增音频均衡器(参考 OpenEQ) + 随机续播改为伪随机公放清单
1) 音频均衡器
- 新增 KtvEqualizer:参考开源项目 OpenEQ(Turbofan3360/OpenEQ, GPL-3.0) 的 EQUtils,
直接用系统 android.media.audiofx.Equalizer, 按设备真实频段数与增益范围自适应
(频段动态生成, 频段标签规则同 OpenEQ: 60/230/910/3.6K ...)。
- 挂载方式改为按"实际播放会话": player.audioSessionId() /
vocalPlayer.audioSessionId / embeddedVocalEngine.audioSessionId()(IJK 原生
IjkMediaPlayer_getAudioSessionId 即真实 AudioTrack 会话)。会话随歌曲变化,
由 500ms lyricTicker -> syncEqualizerSessions() 周期对齐, 消失会话延迟 3s 释放;
设备不支持按会话挂载时可显式开启 globalMix(会话 0, 默认关闭)。
- UI(showEqualizerDialog)与调音弹窗同风格: 深色圆角面板/紫色频段卡/橙色焦点反馈;
滑杆固定 30 档、步进由设备增益范围均分(保证 0 dB 可选中), 5 个预设
标准/流行/抒情/摇滚/唱将, 手动调整后转"自定义"。
- 四个入口: 主页顶栏「调音」弹窗、播放界面「调音」面板、声音设置「均衡器入口」、
远程点歌页面「均衡器」卡片(PATCH /api/v1/player/equalizer, 状态随
GET /api/v1/state 的 equalizer 下发)。
- 设置持久化: KtvStore.eqEnabled/eqPreset/eqLevels/eqGlobalMix。
2) 随机续播改为伪随机公放清单
- 新增 RandomPlayQueue(纯内存): 随机续播一次性生成打乱顺序的临时清单, 一轮内不重复;
播完一首 markFinished +1; next() 每次重新比对曲库, 自动吸纳新增歌曲、剔除已删除歌曲;
一轮播完自动开新一轮(尽量不把刚播完的放开头)。
- 不显示(界面不展示)、不关联已点清单(orderQueue 完全独立, 随机歌曲不入队)、
App 退出即清理(onDestroy 里 isFinishing 时 clear(), 不落盘)。
版本号 1.3.3 -> 1.3.4(versionCode 9 -> 10)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-20 12:02:07 +08:00 |
|
zijunchiang
|
4eb6b7b382
|
V1.3.3: 移除点击时的纯色遮罩层 + App 音量默认值改为 85%
1) 纯色遮罩层: TvFocusStyler.install() 会把背景整体换成不透明的红→橙渐变作为
焦点/按下反馈, 而 prepareTvFocusableTree(window.decorView) 会遍历整棵树施加。
按钮/Tab/卡片需要该反馈, 但铺满屏幕或覆盖播放画面的「表面型」View 一旦被套上,
触摸一次(state_pressed)就会用纯色盖住整屏内容。
新增 TvFocusStyler.suppressFill(view, focusable) 显式排除:
- 播放触摸层 playerTouchOverlay(浮在播放画面上方, 主要元凶; 传 focusable=false
保持其 isFocusable=false, 不再抢遥控器焦点)
- 全屏播放容器 R.id.container、启动加载遮罩 databaseLoadingOverlay
- 手机点歌二维码浮层(首页右下 + 全屏右上)、全屏音量面板
- 原 preserveBackground 更名为 suppressFill(播放画面宿主/海报沿用)
同时 install() 对已标记的 View 直接跳过, 不再替调用方强制可聚焦。
2) App 音量默认 85%: 新增 KtvStore.DEFAULT_MUSIC_VOLUME 作为唯一来源,
KtvStore 字段默认值与 optInt 兜底、MainActivity.musicVolume 初值、
调音弹窗「默认」按钮(原 80)统一引用; 远程页面 assets/mobile 默认值同步为 85。
版本号 1.3.2 -> 1.3.3(versionCode 8 -> 9)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-14 03:37:17 +08:00 |
|
zijunchiang
|
0549f910a6
|
V1.3.2: 音量控制只作用于 App 内部输出, 不再修改系统音量
三处入口全部收敛到 applyPlaybackMode():
- 播放界面-调音(全屏音量面板 showFullScreenVolumeDialog() 与调音弹窗
showAudioControlDialog() 的音乐音量滑杆)
- 声音设置-歌曲最大音量
- 远程控制-音乐音量(mobile PATCH /api/v1/player/audio -> remoteAudio())
musicVolume(0-100) 作为 App 内部输出音量, 按线性系数施加到主播放器
(KtvVideoView.setPlaybackVolume / selectAudioChannel)与副音轨播放器
(vocalPlayer / embeddedVocalEngine); 删除 applySystemMusicVolume() 及其 4 处调用,
AudioManager.setStreamVolume / getStreamMaxVolume 已全部移除。
副作用修正: 原先 App 音量 70% 时既把系统音量压到 70%、又把播放器衰减到 70%,
实际响度只有约 49%(重复衰减); 现在只衰减一次, 100% 即 unity gain。
版本号 1.3.1 -> 1.3.2(versionCode 7 -> 8)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-14 03:20:17 +08:00 |
|
zijunchiang
|
485235e96e
|
V1.3.1: 设备MAC改取当前网卡 + 播放界面当前/下一首实时刷新 + 日志IP与启动信息调整
1) 设备 MAC: 新增 DeviceMac 解析「当前在用网卡」硬件地址(优先 wlan/eth/en,
忽略虚拟/蜂窝/VPN; 直接读 NetworkInterface.getHardwareAddress, 规避 Android 6+
WifiInfo 恒返回 02:00:00:00:00:00 的限制), 读出无效值或失败时回退历史抓包值。
结果按进程缓存, 网络切换时由 remoteNetworkMonitor 重解析。
消费方: KtvJsBridge.DEVICE_MAC(JS 端 mac)、whoami 心跳 _mac/androidid/_cid。
2) 播放界面: 抽出 refreshNowPlayingLabels() 作为「当前播放/下一首」的唯一刷新入口,
只在文本变化时写 View, 并挂到 lyricTicker(500ms), 使播放界面左上角、首页播放条、
旧版播放区与顶部状态栏在本地点歌/扫码点歌/自动切歌后都能实时同步;
顶部状态栏的「下首」改为按当前曲目位置取其后一首(原先固定取队列第 2 首)。
3) 远程日志: serverip 改为主机 IP(公网出口 IP, 查询后缓存 5 分钟、失败 1 分钟后重试,
后台线程执行), 新增 clientip 字段承载设备网卡获取到的局域网 IP; 启动上报改为
采集 10 项: 包名、版本号、安装时间、品牌、型号、设备名、Android 版本、CPU 架构、
内核版本、屏幕分辨率。
4) 版本号 1.3.0 -> 1.3.1(versionCode 6 -> 7)。本次不发布 Release, 仅本地打包测试。
|
2026-09-14 02:59:21 +08:00 |
|
zijunchiang
|
914450bc6e
|
发布 V1.3.0: 关于界面标注框架来源, 清理旧日志 TLS 证书, 文档脱敏
- 删除 app/src/main/res/raw/mili_log.crt(旧 syslog/TLS 上报遗留, 已无引用)
- 关于界面(弹窗+设置页)补充: 框架来源 杨家三郎/麦动KTV, 内核 由 DSH 重构数据库源
- app/build.gradle: versionCode 6 / versionName 1.3.0
- 文档: 远程日志域名脱敏(仅指向 MiliLog.ENDPOINT), 同步 KTV_BRIDGE_API: 8 与版本号
|
2026-09-12 17:47:50 +08:00 |
|
zijunchiang
|
0c26f6da68
|
麦动KTV: 移除Gitee数据库(改官方Muse同步), 歌曲源切w.w345.my, 远程日志+广告屏蔽
- DatabaseBootstrapper: 删除 Gitee 分片/manifest/blob 下载逻辑, 曲库只走官方 MuseDbSync
- build.gradle: 移除 GITEE_DATABASE_* 构建参数
- MainActivity: 重置数据库文案改为官方同步
- ktv_api.js: 歌曲源仅 w.w345.my, 缓存标记 7, 广告/错号资源拦截+重试
- 远程日志: 点歌记录 编号/标题/请求源/状态
|
2026-09-04 21:23:21 +08:00 |
|