 lanterngamescnandClaude Opus 4.8
|
7ae58e90ca
|
fix(录音): 补松手瞬间空 getaudiourl 回投(对齐 Android reset()双回投)
原工程 webviewActivity/NewwebviewActivity 正常发送=upload()后紧跟reset(),
reset()立刻回投 getaudiourl{audiourl:"",time:0},上传完成再回投真实URL。
我们漏了松手那次空回投,H5状态机未复位致录完不播放。改为任何结束都先空回投,
send 再补真实URL;上传失败不再重复空回投(已发过)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 18:11:02 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
1bea5a3598
|
fix(录音): 七牛 bucket 'gameauio'→'gameaudio'(原webviewActivity拼写错误)
真机上传 631 no-such-bucket 根因:抄了 webviewActivity 的 typo 'gameauio'(无d)。
区域查询确认正确 bucket 是 'gameaudio'(有d,与回放域名 gameaudio.daoqi88.cn +
NewwebviewActivity 一致),region z0/华东,up host upload.qiniup.com。同步改单测断言。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 18:00:08 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
1432fa25a1
|
fix(录音): 波形不跳动——ForEach 改用值相关 key(下标 key 致 ForEachNode skip mark dirty 不重绘)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 17:50:02 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
cb8e398bfb
|
feat(录音): 声明 MICROPHONE 权限 + reason_microphone 文案(Task8)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 17:29:53 +08:00 |
|
lanterngamescn
|
4c02ef0dc4
|
feat(录音): 容器接 Web触摸观察(方案A onTouch)+录音浮层+SHOW_RECORDING+计时/上滑取消/太短决策
- 补 import: AudioEvents, ShowRecordingRequest, RecordResult (from common) + RecordingOverlay
- 新增字段: recordOverlayVisible/recordState/recordResultEvent/touchDown/touchStartY/
recordingActive/wantCancel/recordSeconds/recordTimer
- subscribeEvents() 追加 SHOW_RECORDING → onShowRecording
- onShowRecording: 手指未按时立即 cancel 回投; 否则显浮层+启计时器
- onWebTouch(TouchEvent): Down记起点/Move判上滑(>100vp)/Up调 finishRecording
- finishRecording: <0.8s→tooShort延1.3s撤层; 上滑→cancel; 否则→send; 一次性清 resultEvent
- 大厅/子游戏 Web 各加 .onTouch((e)=>this.onWebTouch(e)) (方案A, 不消费触摸)
- Stack 顶层(ShareGuideDialog 之后)追加 RecordingOverlay({ state })
- aboutToDisappear 清 recordTimer
对应 §10 录音浮层设计; 手势观察接线
|
2026-06-27 17:27:00 +08:00 |
|
lanterngamescn
|
2680590590
|
feat(录音): AudioProvider 实现 prepareaudio 编排+分层静音+七牛上传+getaudiourl 回投
- 补 import: abilityAccessCtrl/EventBus/AudioEvents/ShowRecordingRequest/RecordResult/GetAudioUrlResp/QiniuUploader/QiniuToken/AmrRecorder
- 新增字段: instanceId/seq/recordMuted/currentVoiceUser/recorder/recordResultCancel
- 新增 effVolume()/applyAllVolume() 实现分层静音(muted||recordMuted)
- 重构 setMuted() 改用 applyAllVolume()
- 原 2 处 setVolume(muted?0:1) 换成 setVolume(effVolume())
- playVoiceMessage prepared 分支、spawn prepared 分支各 1 处
- 跟踪 currentVoiceUser:playVoiceMessage 创建时设置,releaseVoice() 时清空
- PrepareAudio handler 改为调用 onPrepareAudio() 真实编排
- 新增方法:onPrepareAudio/ensureMicPermission/onRecordResult/doUpload/emitAudioUrl
- onBackground/onDestroy 各追加:cancel 录音/清 recordMuted/取消 recordResultCancel 订阅
- 对应契约 §10.6 / T-M3-10
|
2026-06-27 17:13:39 +08:00 |
|
 lanterngamescnandClaude Sonnet 4.6
|
481afc803d
|
feat(录音): RecordingOverlay 录音浮层(波形/上滑取消/太短,触摸穿透)
新增 entry/src/main/ets/components/RecordingOverlay.ets:
- @Prop state: 'recording'|'cancel'|'tooShort' 三态展示
- recording 状态:7根波形柱 setInterval(120ms) 随机高度跳动动画
- cancel 状态:红底(#C0392B) + '✕'
- tooShort 状态:暗底 + '!'
- hitTestBehavior(HitTestMode.None) 触摸穿透到下方 Web,由容器 Web.onTouch 感知手势
- aboutToAppear/aboutToDisappear 正确管理 timer 生命周期
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-27 17:06:21 +08:00 |
|
 lanterngamescnandClaude Sonnet 4.6
|
0a9ba6c8be
|
feat(录音): 七牛 uploadToken 端侧生成(HMAC-SHA1,对齐原工程不走服务端) + 结构单测
新增 platform/src/main/ets/upload/QiniuToken.ets:
- QiniuToken.uploadToken() 异步生成 uploadToken(deadline=now+1h)
- HMAC-SHA1 via cryptoFramework.createMac('SHA1'),对齐原 Android 硬编码 AK/SK
- urlsafeBase64 工具方法(util.Base64Helper.encodeToStringSync + 替换+/-/_)
- eslint-disable-next-line @security/no-unsafe-mac 注释说明七牛协议强制要求
platform/Index.ets 导出 QiniuToken。
entry/src/test/QiniuToken.test.ets 结构单测(三段token格式/AK/scope验证)。
List.test.ets 注册 QiniuTokenTest。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-27 17:06:13 +08:00 |
|
 lanterngamescnandClaude Sonnet 4.6
|
acd31c6396
|
feat(录音): AudioEvents 事件通道(SHOW_RECORDING + RecordResult 载荷)
新增 common/src/main/ets/event/AudioEvents.ets:
- AudioEvents.SHOW_RECORDING 事件名常量
- ShowRecordingRequest 载荷(resultEvent 一次性回投事件名)
- RecordResult 载荷(action/timeSec,对齐 Android mTime)
common/Index.ets 同步导出三者。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-27 17:06:03 +08:00 |
|
lanterngamescn
|
9f79bd1d54
|
feat(录音): AmrRecorder AVRecorder(AMR-NB) 封装 start/stop/cancel
|
2026-06-27 17:00:09 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
2e81c0ee47
|
docs(录音): 录音流程实施计划(9任务,含真机spike决策关+TDD/build验证)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 16:43:18 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
3a224fd7e9
|
docs(录音): 录音流程设计文档(prepareaudio→AMR→七牛端侧token→getaudiourl)
对齐 Android webviewActivity 录音流程;手势走方案A(Web父层并行手势)、
AMR-NB(CFT_AMR+AUDIO_AMR_NB)、七牛token端侧生成(对齐原工程不走服务端)、
分层静音(录音暂停全部原生声音+gameui_stop_voice,取消/太短/发送都恢复)。
对应契约 §8.7/§9/§10.6,无需改契约。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 16:33:30 +08:00 |
|
lanterngamescn
|
ebf2bfe439
|
fix(share): 朋友圈(sharefriend=2)始终走文本分享引导窗,即使type=2也不走系统分享
调整 onShare 路由顺序: sharefriend==2 判断提到图片type判断之前,
使朋友圈分享一律弹引导窗(朋友圈步骤)而非系统分享面板。好友(sharefriend=1)图片仍走系统分享。
|
2026-06-27 16:02:52 +08:00 |
|
lanterngamescn
|
f82ec89027
|
feat(share): 朋友圈分享(sharefriend=2)走文本分享但指引专门指向朋友圈
ShareGuideRequest 加 timeline 标记(sharefriend==2);指引框 timeline 时显示『分享到朋友圈步骤』
(打开微信→发现→朋友圈→长按相机发表文字→粘贴→发表),否则好友/群聊步骤。
|
2026-06-27 15:58:58 +08:00 |
|
lanterngamescn
|
0b6c5dfc54
|
feat(share): 文本分享指引框重做为分步引导卡片(参考截图),去掉系统分享
ShareGuideDialog: 居中卡片 标题{渠道}分享准备完成 + 内容已复制到剪贴板 + 微信/QQ/抖音三套分步指引
+ 两按钮(稍后分享/立即打开{渠道},渠道主题色)。文本不再提供系统分享(移除onGuideAction system分支+systemText)。
容器移除 contentKind 接线。
|
2026-06-27 15:52:05 +08:00 |
|
lanterngamescn
|
290b7db6ea
|
fix(share): 图片(type2/3)截图后直接拉系统分享面板(可靠交付),不再走对图片无效的剪贴板/指引/面板
剪贴板PIXELMAP在微信/QQ对话框粘贴不出(§R-19)。图片: 截图(componentSnapshot)/下载→systemImage系统面板→用户选目标App→图片直达+乐观回传; 文本(type1)保留面板+剪贴板+指引不变。删除 writeClipboardImage 及 image/fileIo import。
|
2026-06-27 15:44:30 +08:00 |
|
 lanterngamescnandClaude Sonnet 4.6
|
1902e4e5be
|
fix(share): 截图改用 componentSnapshot 抓Web组件渲染像素(修WebGL黑屏) + 剪贴板图片改fd写入
- BridgeGameContainer: 大厅Web加 .id('web_lobby'),子游戏Web加 .id('web_subgame'),
供 componentSnapshot.get 按组件id定位
- WebSlot: captureCanvas 整体替换为 componentSnapshot.get + image.ImagePacker.packToData,
规避 WebGL canvas.toDataURL 黑屏;packToData 为 packing 的非废弃替代(§API13+);
删除 parseJsString(仅被旧 captureCanvas 内联用,新实现不需要)
- ShareProvider: writeClipboardImage 改用 fileIo.openSync 取 fd 再
createImageSource(fd),修复传路径字符串可能失败问题;补 import fileIo
API签名核对(devecocli docs):
componentSnapshot.get(id, options) → Promise<PixelMap>(deprecated API18,仍可用)
ImagePacker.packToData(pixelMap, PackingOption) → Promise<ArrayBuffer>(API13+,WARN无error)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-27 15:31:56 +08:00 |
|
lanterngamescn
|
75b7c7fb07
|
fix(share): 截图取默认canvas(传空串)不再误用sharetype当canvasId——修type=2分享降级为文本
对照原工程: sharetype 是闲聊二级字段非 canvasId; 截图始终 querySelector('canvas')。
此前 cap(bean.sharetype='0') → getElementById('0') 找不到→截图空→降级文本。
|
2026-06-27 15:13:43 +08:00 |
|
lanterngamescn
|
9d00fbc987
|
debug(share): onShare 打印原始data+解析字段+分支;字段归一string修数字type误落文本
|
2026-06-27 14:54:40 +08:00 |
|
lanterngamescn
|
02d0ae0856
|
fix: 桌面显示名 EntryAbility_label 改为 进贤聚友棋牌(原为模板占位 label)
|
2026-06-27 14:39:10 +08:00 |
|
 lanterngamescnandClaude Sonnet 4.6
|
90077a4b6e
|
fix(share): onShare 加 isActive 守卫 + PixelMap 延到 setData 完成后释放(final review C1/M1)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-27 14:29:43 +08:00 |
|
lanterngamescn
|
55cab6df68
|
docs(share): 分享去SDK化重构完成,更新 WBS(T-M3-13) + 登记图片剪贴板粘贴风险(R-19)
|
2026-06-27 14:18:56 +08:00 |
|
lanterngamescn
|
457ebf2f74
|
test(share): buildShareText 单测(单换行/空字段/无url,分享重构 §9)
|
2026-06-27 14:17:09 +08:00 |
|
 lanterngamescnandClaude Sonnet 4.6
|
b1055c79f6
|
feat(share): 容器接线 ShareGuideDialog(订阅 SHOW_GUIDE/渲染/返回键/一次性回投,分享重构 §7)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-27 14:15:23 +08:00 |
|
lanterngamescn
|
fffb353345
|
feat(share): 新增 ShareGuideDialog 指引弹窗(打开App/用系统分享/取消,分享重构 §7.2)
|
2026-06-27 14:12:21 +08:00 |
|
 lanterngamescnandClaude Sonnet 4.6
|
b51b9be167
|
fix(share): 释放PixelMap/ImageSource + 指引监听 onDestroy 退订(code review C1/C2)
- C1: writeClipboardImage 在 finally 显式 pm.release()/source.release(),消除原生堆对象泄漏
- C2: 新增 guideCancelFn 字段;guide() 先退订悬挂监听再登记新监听、触发后清空;onDestroy() 退订;防用户不操作指引窗时 EventBus.once 永久悬挂
- I3: open 分支补注释说明乐观回传有意不等 openLink 完成
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-27 14:10:56 +08:00 |
|
 lanterngamescnandClaude Sonnet 4.6
|
e93d0627d4
|
feat(share): ShareProvider 去SDK化三段式分享 + WeChatApi 仅留登录(分享重构 §4/§5/§7)
- WeChatApi:移除 SendMessageToWXResp/SendMessageToWXReq/WXMediaMessage/WXWebpageObject/WXImageObject/ErrCode/shareCb/sendShare;仅保留登录路径(sendAuth/handleWant/SendAuthResp)
- ShareProvider:完全去 wechat_open_sdk 分享依赖,改「剪贴板+ShareGuideDialog→系统分享」三段式架构;保留 FriendsShare 注册、PHOTO_UPLOAD 链路、captureCanvas 截图、systemShare 兜底、乐观回传 sharesuccess;新增 type3 图片链接下载路径
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-27 14:04:13 +08:00 |
|
lanterngamescn
|
15fadd7cdb
|
feat(share): 抽出 buildShareText 纯函数 title\ndescription 单换行无url(分享重构 §5.1)
|
2026-06-27 14:00:24 +08:00 |
|
lanterngamescn
|
a03c61e188
|
feat(share): querySchemes 增加 mqqapi/snssdk1128 供指引窗拉起QQ/抖音(分享重构 §7.4)
|
2026-06-27 14:00:24 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
cfd5ac3060
|
fix: 修正 app_name 资源(键写成中文导致 build 失败 + label 引用断裂)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 13:59:16 +08:00 |
|
lanterngamescn
|
cb6cf1318b
|
feat(share): common 新增 SHOW_GUIDE 事件与 ShareGuide 载荷(分享重构 §4)
|
2026-06-27 13:34:08 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
ffd0c1a338
|
docs: 分享重构实现计划(9 任务,去SDK化+剪贴板指引+系统分享兜底)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 13:14:57 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
b0277e902e
|
docs: 分享 spec 终稿——文本统一单换行、图片不降级、视频不实现、图片走系统分享兜底
三端文本统一 title\ndescription(单换行,无url);图片(type2/3)剪贴板PIXELMAP尽力
+指引窗内systemImage可靠兜底;type4视频H5未用安全空实现;systemLink/systemVideo退役。
附图片剪贴板粘贴不可保证的验证结论与真机验证项。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 13:04:12 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
669d34918d
|
docs: 分享 spec 修正——三端文本一律不含 url,systemLink 退役
微信/抖音 第二三层均不带 webpageUrl;webpageUrl 仅作 type4 本地视频路径;
系统分享统一 PLAIN_TEXT(title+description)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 12:36:53 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
124f2bf217
|
docs: 分享重构设计 spec(去SDK化+剪贴板指引+内容对齐原工程)
三端统一改为「剪贴板+指引→系统分享」,预留 QQ/抖音 SDK 接入点;
微信乐观回传 sharesuccess;文本格式逐渠道对齐原工程;支付桩边界确认。
契约/DTO 零改动(friendsSharetypeUrlToptitleDescript / sharesuccess / SharetypeBean)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 12:23:47 +08:00 |
|
lanterngamescn
|
f938e91dfd
|
修改为调试配置
|
2026-06-27 09:57:48 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
a104394076
|
修复 H5 音效完全不出声 + 子游戏音效路径错(srcIsloop)
真机诊断([SFX-DIAG])锁定两因:
1. AVPlayer.url 不接受 file:// 本地路径,报 `401 ... not fd:// or network
address`——所有本地音效播放失败,故"完全没声"。改用 fdSrc(openSync 取 fd),
远程语音(mediaTypeAudio)仍走 url(网络地址可直接用)。
2. 子游戏音效路径写死 local.gamestart(=gamehall),而 sangelaok 等子游戏音效在
各自目录(.../sangelaok/assets/wav/),找不到文件 → 子游戏更是无声。对齐 Android
webviewActivity(gamestart)/NewwebviewActivity(gamedirectory):按"本槽内容目录"
定位,经 CapabilityContext.gameContentDir 注入(大厅=gamestart、子游戏=其目录)。
并发模型重写(复刻 Android SoundPool 并发一次性 + MediaPlayer-per-src 循环):
- 原单 AVPlayer 每次 release 再建,互相打断、还杀正在循环的 BGM。
- 改为:循环 BGM 每 src 一个播放器(loopPlayers map);一次性音效各自独立瞬时
播放器(oneShots,播完自释),互不打断。isloop<0 停止该 src 循环。
- fd 生命周期:随播放器释放(release 后)关闭,防泄漏;mute(voicePlaying)作用于全部播放器。
链路改动:CapabilityContext 增 gameContentDir;WebSlot.setup 透传;
BridgeGameContainer setupLobby 传 gamestart、switchGame 记录子游戏目录供 setupSubgame 传入。
真机验证:大厅(dir=gamehall)与子游戏(dir=sangelaok)音效均 exists=true、无 401,
循环 BGM 与一次性音效正常播放。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 09:55:43 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
d335a589b6
|
修正 app_data.js 三处字段与 Android 不一致(H5 零改动)
§4.2 配置项接口逻辑审计发现 app_data.js 注入有三处偏离原 Android
inith5data(weclomeactivity1/NewwebviewActivity 两处实测一致):
1. app_version:Android 硬编码 `var app_version=1;`(数字常量,"初始化框架
加载方式"标志,非资源版本);原实现误用 res.localVersion()(如 "261" 且成
字符串)。改为固定数字字面量 1。契约文档 §6 此处亦误录为"version.xml 的
version",一并纠正。
2. app_gamename:Android 取 getAllFilename("gamestart")(即 'gamehall');原
实现误用 version.xml 的 <game name>(如"友乐游戏")。改为 config.gamestart。
3. app_getwifisignalLevel:Android 硬编码 `=1`(数字);原实现为字符串 '0'。
改为固定数字字面量 1。
buildValues 签名随之简化为 (config, launchtype),去掉不再需要的 version/
gameName 入参;大厅(StartupOrchestrator '0')、子游戏(BridgeGameContainer '1')
两调用点同步更新。buildJs 对 app_version/app_getwifisignalLevel 输出数字字面量
(无引号),其余字符串字段保持引号,逐字对齐 Android。
其余审计结论一致:11 个本地配置键读取一致(servertype/gameserver 契约标
"无代码读取"已正确省略);桥 handler getmarketname→market、getOther→other、
getothername→按名取配置(lookupConfig 全键 + 未知返回'')均与 Android getAllFilename
对齐。真机回归:大厅 V1.261 正常加载渲染。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 09:31:22 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
600378f723
|
修复子游戏/大厅每次启动都重复下载:version.xml 改用正则解析
现象:子游戏 zip 已下载解压、version.xml 落盘正常,但再次进入仍重新下载;
远程版本与本地一致本应跳过下载。真机诊断([VERXML-DIAG]/[SUBGAME-DIAG]):
installed=true、version.xml 原文完整(<version value="155"/>)、gameId 正确解析为
a52y...,唯独 localVer 恒为 0 → 155<=0 判否 → 每次都判需更新而重下。大厅同理
(localVersion 恒 0,启动期每次重下整包)。
根因:VersionXml.parse 用 @kit.ArkTS xml.XmlPullParser,其
attributeValueCallbackFunction 对本文件 <version> 的 value 属性不稳定触发(同文件
<game> 的 id 却能取到),逻辑自相矛盾——value 无条件捕获却落空,说明该属性回调
未按预期触发。
修法:弃用 XmlPullParser,改确定性正则直接从原文抽 version/gameId/gameName,语义
等价 Android pullxml1,规避解析器回调时序/属性触发的不确定性。根 <game> 无属性
(紧跟 '>'),\s+ 自然跳过,只命中带属性的子 game。
验证:真机覆盖安装后再次进入三个老K,localVer=155、不再下载,直接进 H5。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 09:18:48 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
db206068c0
|
修复大厅启动页→H5"白闪+二次显示 splash":启动图覆盖层上移到根层
现象:大厅资源下载完成、splash 进度满后,进入 H5 前先闪一下白屏、又重新
显示一次 splash 背景图,才进 H5(真机 nova 14 复现)。
根因:原启动图视觉随 SplashPage 渲染,replacePathByName 切到
BridgeGameContainer 时,旧页销毁与新页 Web 首帧之间存在导航空隙(白闪);
而 BridgeGameContainer 自带的大厅 cover 又在切换后重新挂载,看起来像"第二次
splash"。两者皆因视觉绑定在会被切换/重建的页面上、与时序耦合。
修法(H5 零改动,纯原生):
- 启动图 + 金色进度条整体上移到 Index 根层 Stack 覆盖层,由 AppStorage
KEY_SPLASH_VISIBLE 控制,从 app 启动持续显示到大厅首帧上屏(onPageEnd)才撤。
- SplashPage 退化为纯启动逻辑载体(透明 NavDestination),仅把进度/文案/
阻断写入 AppStorage 供根层覆盖层呈现。
- BridgeGameContainer 移除自带大厅 cover,onPageEnd 置 splashVisible=false。
SplashPage→BridgeGameContainer 的页面切换由此发生在常驻覆盖层之下,时序无关,
彻底消除导航空隙白闪与二次 splash,大厅就绪即直接显示 H5。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 08:57:30 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
0425123465
|
消除 splash→大厅的白屏/黑屏闪烁
大厅 Web 首帧前用启动图(launch_image)盖住,保留到 onPageEnd(页面加载完、已稳定
上屏)再撤——不在 onFirstContentfulPaint 撤,避免首帧绘制到合成上屏间一帧黑屏。
另给容器 Stack 垫白底,使页面切换/Web 初始化的残留缝隙显白色(与启动页白底无缝),
而非刺眼黑屏。
真机验证:splash→覆盖层(品牌图)→大厅 全程白底基调,无黑屏/白屏突兀闪烁。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 02:40:10 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
de5b950d9b
|
实现子游戏按需下载,修复点子游戏白屏(§11.1 路径A)
根因:整包 gamehall.zip 顶层只含 gamehall,子游戏需按需单独下载;原 switchGame
直接 loadUrl 不存在的目录 → ArkWeb invalidFileUrl → 白屏。
对齐 Android NewwebviewActivity 的 updategamezip:
- ConfigManager.resolveGame(remote, gameid):以 gamedownloadurl 为 gameid 经
agent→game→channel→market 分层解析子游戏 game_zip/game_version(复用 VersionResolver)。
- ResourceManager.updateSubgame:下载→暂存解压→校验 <dir>/index.html→原子换入 urlpath/<dir>。
另加 subgameInstalled/subgameLocalVersion/subgameLocalGameId。
- BridgeGameContainer.switchGame 改 async + prepareSubgame:目录缺失先下载、已装比对远程
版本更高才更新;下载期复用启动页同款金色进度条;远程配置 10 分钟缓存(对齐 gameconfigtime)。
- SwitchGamePayload 增 gameId(gamedownloadurl)。
真机验证:点三个老K → 下载 sangelaok.zip(9.4M) → 解压加载,子游戏正常渲染
(V1.155 与配置 game_version=155 一致);日志不再 invalidFileUrl。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 02:33:55 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
e75f567948
|
修复 SwitchOverGameData 解析失败致无法跳转子游戏
H5 对 SwitchOverGameData 的 data 字段直接传 JSON 对象(如 {webtype:3,...})。
Android org.json getString 会把嵌套对象强制转为 JSON 字符串再交 handler JSON.parse;
而 ArkTS JSON.parse 保留为对象,handler 再 JSON.parse(对象) 得到 "[object Object]"
→ Invalid Token、解析失败、不发 SWITCH_GAME、不跳转。
- MessageCodec.toArray:新增 coerceToString,对 data/responseData 复刻 org.json
getString 语义(对象/数组→紧凑 JSON 串,数字/布尔→字符串)。
- NavProvider:webtype 统一 String() 化,避免下游 `webtype !== '2'` 对数字恒真
把竖屏子游戏错误强制横屏。
对应契约 §11.1 路径A、§2.4 Message。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 01:55:40 +08:00 |
|
lanterngamescn
|
5f3161ee49
|
忽略screenshot
|
2026-06-27 01:48:08 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
a2758333cc
|
全屏沉浸:同时隐藏顶部状态栏与底部手势条
横屏游戏外壳下顶部状态栏与底部导航条都会遮挡/拦截 H5 内容点击。
setWindowSystemBarEnable 入参由 ['status'] 改为 [],两个系统栏均隐藏,
内容延伸至屏幕上下边缘。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 01:46:58 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
53fdd6d358
|
启动后隐藏底部系统手势条,避免遮挡/拦截 H5 底部点击
横屏游戏外壳下底部导航条(手势指示条)会压在 H5 内容上并拦截点击。
在 onWindowStageCreate 调用 setWindowSystemBarEnable(['status']):
保留顶部状态栏、隐藏底部导航条,隐藏后避让区更新,H5 内容自动延伸到屏幕底部。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 01:43:01 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
5cfb68209c
|
修复启动页横屏下进度条/提示文字与 logo 重叠
auto_rotation_landscape 横屏时屏幕高为短边,原 padding bottom 56vp 约占 17%,
配合 FlexAlign.End 把进度块顶进居中 logo 的英文行。改为底边距 24vp,
使进度条+提示文字以底部为基准、落在 logo 下方空白带(系统手势条由安全区避让)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 01:39:49 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
f84988869c
|
新增真机 ArkWeb DevTools 一键脚本 + 文档补多设备/fport 坑
- scripts/arkweb-devtools.sh:自动找 hdc、选真机(排除模拟器)、取 pid(没运行则拉起)、
清掉端口上所有旧转发并重建 tcp:9222、curl 自验。幂等可反复跑;应用重启后重跑即可重连。
(修正:hdc `fport rm` 需 local/remote 两参数分开传,否则删不掉;会累积多条旧转发需逐条清。)
- 文档加「一键脚本」快速开始、「多设备必须带 -t」提示、fport rm 两参数/累积排查。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 01:03:35 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
344fe8d613
|
文档:真机 ArkWeb DevTools 调试说明(hdc fport + chrome network target)
新增 docs/开发调试/真机ArkWeb-DevTools调试.md:HarmonyOS 不走 chrome USB discovery,
需 hdc fport 转发 webview_devtools_remote_<pid> → localhost:9222,再加 network target;
含自动取 pid 一条命令、pid 随重启变化需重连、ARKWEB-CONSOLE 看日志、canvas 不可见元素、
以及"DevTools 鼠标点击≠真机触摸"的调试陷阱。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 00:52:30 +08:00 |
|
 lanterngamescnandClaude Opus 4.8
|
4b291396bc
|
清理排查过程的非必需改动:移除 onActive 保活与 H5 console 调试转发
定位 touch→mouse 时序为真因后,清理排查途中加入但最终非必需的代码:
- 移除 onActive/notifyShown(基于"ArkWeb 未激活态暂停动画"的误判;实测页面本就 active/visible,无需)。
含 WebSlot.notifyShown + setup 调用 + BridgeGameContainer NavDestination.onShown。
- 移除 onConsole H5 console→hilog 调试转发(三容器 + webConsoleOn 字段 + logWebConsole + 多余 AppEnv 引入)。
保留:touch→mouse shim(真正修复)、expandSafeArea(白边修复)、debug 版 setWebDebuggingAccess。
(合成保活、SYNC_RENDER 已于 0caf385 移除。)devecocli build 通过、真机正常启动。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 00:48:50 +08:00 |
|