13 KiB
[PROJECT:lumaplayer] AndroidLiquidGlass 液态玻璃菜单与底栏 结论: 语言菜单和底栏主体/搜索入口已接入 AndroidLiquidGlass-kmp 对应的 Backdrop 2.0.1 实现,展开、关闭、外部点击、语言选择和 Debug 构建均通过。 文件变更: app/build.gradle.kts、MainApp.kt、screens/SettingsScreen.kt、ui/AppBottomBar.kt、ui/liquidglass/LiquidBottomTabs.kt,以及此前待推送的播放器、首页、搜索、收藏和数据文件。 教训: 参考仓库没有现成菜单组件,需复用其 drawBackdrop 组件模式;来源层与玻璃消费层必须分离,外部手势层需放在菜单内容下方。 标签: #lumaplayer #android-liquid-glass #backdrop #language-menu #bottom-bar
[PROJECT:lumaplayer] 重做语言菜单浮层几何 结论: 删除语言菜单与列表视觉耦合,保留原语言切换逻辑,使用右侧 Chevron 实际坐标作为锚点,独立 Overlay 从 44dp 玻璃圆向左下 Morph 为紧凑菜单。 文件变更: screens/SettingsScreen.kt。 教训: Overlay 即使不参与测量,若最终几何直接贴在整行顶部也会产生“Row 横向展开”的视觉错觉;应锚定入口图标并固定展开方向与尺寸。 标签: #lumaplayer #language-menu #overlay #morph #backdrop
[PROJECT:lumaplayer] 统一菜单型弹出层 结论: 资源库操作菜单改为独立 Root Overlay,播放器字幕/剧集菜单项复用 AndroidLiquidGlass 的 backdrop、blur、lens、vibrancy;新增菜单不参与卡片或列表布局。 文件变更: MainApp.kt、screens/LibraryScreen.kt、screens/VideoPlayerScreen.kt、ui/LiquidGlass.kt。 教训: 资源库 Overlay 必须使用页面内部专属 source,不能直接消费包住整个页面的外层 source,否则会触发 RenderThread SIGSEGV。 标签: #lumaplayer #popup #overlay #backdrop #android-liquid-glass
[PROJECT:lumaplayer] 添加服务器弹窗液态玻璃化 结论: AddServerDialog 显式复用资源库专属 Backdrop,GlassDialog 与 GlassInputField 增加真实背板模糊、vibrancy、lens、高光和阴影,字段、按钮及提交逻辑保持不变。 文件变更: screens/LibraryScreen.kt、ui/LiquidGlass.kt。 教训: 表单弹窗也必须让 glass consumer 与底层 Backdrop source 分离,避免弹窗自身被捕获造成循环渲染。 标签: #lumaplayer #add-server #dialog #backdrop
[PROJECT:lumaplayer] 添加服务器改为独立页面 结论: 点击资源库添加入口直接进入普通全屏表单页,删除添加流程的液态玻璃弹窗与字段样式,原认证、校验、保存和取消逻辑保持不变。 文件变更: MainApp.kt、screens/LibraryScreen.kt。 教训: 添加页面与编辑弹窗共用表单逻辑时,通过展示模式切换输入控件,避免复制业务代码。 标签: #lumaplayer #add-server #page #plain-form
[PROJECT:lumaplayer] 添加服务器协议开关 结论: 添加/编辑服务器表单增加 HTTPS 开关,协议写入 Room 并由 EmbyServer.fullUrl 统一决定请求使用 HTTP 或 HTTPS。 文件变更: screens/LibraryScreen.kt、data/EmbyServer.kt、data/ServerRepository.kt、data/ServerEntity.java、data/AppDatabase.java。 教训: Room Java 实体新增字段时,迁移列的可空性必须匹配生成的 Schema 校验。 标签: #lumaplayer #http #https #room-migration
[PROJECT:lumaplayer] 页面导航架构重构 结论: 使用 Navigation Compose 建立根 Tab、详情、播放器、图标库管理、缓存、关于和添加服务器路由;页面由 NavController/BackStack 决定,统一 Push/Pop/Tab 横向转场并移除旧页面 Boolean。 文件变更: app/build.gradle.kts、MainApp.kt、navigation/AppRoute.kt、navigation/AppNavHost.kt、navigation/NavigationTransitions.kt、screens/SearchScreen.kt、screens/MediaDetailScreen.kt、screens/LibraryScreen.kt、screens/SettingsScreen.kt、screens/SettingsChildScreens.kt、screens/library/IconLibraryManagerScreen.kt。 教训: 根 Tab 使用 popUpTo + launchSingleTop + saveState/restoreState,详情只在路由传 serverId/itemId;Backdrop 外层来源与页面玻璃消费层保持分离。 标签: #lumaplayer #navigation #backstack #push-pop #compose
[PROJECT:lumaplayer] 修复新页面自动回主页 结论: NavController 改为 MainApp 稳定生命周期创建,并为页面导航增加当前 destination 去重,避免新页面打开后因控制器重建回到 Home。 文件变更: MainApp.kt、navigation/AppNavHost.kt。 教训: NavController 放在启动条件分支内部会在页面/配置重建时丢失 BackStack;必须在稳定的 Compose remember 范围内创建。 标签: #lumaplayer #navigation #backstack #bugfix
[PROJECT:lumaplayer] 修复底栏误触发 Home 结论: 子页面过渡期间不再将底栏选中态重置为 0,且隐藏动画中的底栏回调被屏蔽,避免液态 Tab 组件误导航到 Home。 文件变更: MainApp.kt。 教训: 底栏隐藏动画仍处于组合期间,必须保持最后根路由选中态并禁止回调,否则内部指示器同步会被当作用户点击。 标签: #lumaplayer #bottom-bar #navigation #bugfix
[PROJECT:lumaplayer] 推送状态确认
结论: 本地与远端 master 均为 fa645b0,推送已是最新;参考视频、图片、压缩包和本地参考仓库等未跟踪素材保持不变。
文件变更: memory/MEMORY.md、memory/projects.md、memory/2026-08-27.md。
教训: 无。
标签: #lumaplayer #git #sync
[PROJECT:lumaplayer] 完成全局 UI 设计系统与玻璃弹层统一 结论: 新增统一颜色/间距/圆角/动效/图标/加载空状态组件,主要页面与弹窗接入 Kyant0 Backdrop,APK 构建成功。 文件变更: app/src/main/kotlin/com/example/myapplication/ui/design/*、主要 screens、LiquidGlass.kt、MainApp.kt、NavigationTransitions.kt、Aurora drawable 子集、licenses/Aurora-Symbols-NOTICE.md 教训: Backdrop source 与 consumer 必须保持同级分离;当前环境没有 adb,未进行实机逐帧比对。 标签: #ui #liquid-glass #aurora #build
[PROJECT:lumaplayer] 最终构建与静态核验
结论: 旧页面导航状态、Haze/旧模糊依赖和普通下拉菜单无残留,:app:assembleDebug 最终成功。
文件变更: ui/design/、navigation/、主要 screens、LiquidGlass.kt、资源字符串与 Aurora 图标资源。
教训: 无新增;当前环境无 adb,未做实机录屏和参考帧逐帧比对。
标签: #lumaplayer #build #navigation #verification
[PROJECT:lumaplayer] UI 国际化与玻璃管线收尾 结论: 详情类型/时长、资源库状态及入口无障碍文案完成中英文资源化,图标库卡片统一接入 Luma glass;Debug 构建和静态检查通过。 文件变更: screens/HomeScreen.kt、screens/LibraryScreen.kt、screens/MediaDetailScreen.kt、res/values/strings.xml、res/values-en/strings.xml。 教训: Compose 普通回调不能直接调用 stringResource,需在 Composable 作用域先取得文案。 标签: #lumaplayer #i18n #accessibility #liquid-glass #build
[PROJECT:lumaplayer] 修复 RenderThread 原生崩溃风险 结论: 基于本地 AndroidLiquidGlass-kmp 源码移除应用内 AGSL lens/RuntimeShader 折射链,保留 Backdrop、blur、vibrancy、Plain highlight、阴影和 Compose 径向按压高光;Debug 构建成功。 文件变更: ui/design/LumaDesignSystem.kt、ui/LiquidGlass.kt、ui/AppBottomBar.kt、ui/liquidglass/LiquidBottomTabs.kt、ui/liquidglass/InteractiveHighlight.kt、screens/SettingsScreen.kt。 教训: RenderThread SIGSEGV 无法由 Kotlin try/catch 恢复;高风险 RuntimeShader 必须在源码层移除或降级,当前环境无 adb 不能做设备复现确认。 标签: #lumaplayer #renderthread #sigsegv #backdrop #stability
[PROJECT:lumaplayer] 收敛 Backdrop 捕获层并完成玻璃 Sheet 结论: 主 Tab 才启用根 Backdrop,子页和播放器移除循环采样;图标选择改为底部 GlassSheet,About 使用真实应用图标;Debug 构建成功,未能 adb 实机验证。 文件变更: MainApp.kt、screens/SettingsScreen.kt、screens/LibraryScreen.kt、screens/MediaDetailScreen.kt、screens/SettingsChildScreens.kt、screens/VideoPlayerScreen.kt、ui/LiquidGlass.kt、memory/*。 教训: 原生播放器 View 不应进入根玻璃捕获层;没有 adb 时只能以静态层级检查和构建结果确认风险已收敛。 标签: #lumaplayer #renderthread #backdrop #glass-sheet #build
[PROJECT:lumaplayer] RenderThread 崩溃安全降级 结论: 识别常见 Android Emulator GPU 后跳过 Kyant RenderEffect/GraphicsLayer 采样,保留安全的玻璃 tint、边框、圆角与交互视觉;真机仍保留 Backdrop,播放器不捕获 AndroidView。 文件变更: ui/design/LumaDesignSystem.kt、ui/LiquidGlass.kt、ui/AppBottomBar.kt、ui/liquidglass/LiquidBottomTabs.kt、MainApp.kt、主要 screens。 教训: RenderThread SIGSEGV 不可由 Kotlin try/catch 恢复;必须在进入原生采样路径前阻断,且不能依赖没有 adb 的静态环境声称已实机复现。 标签: #lumaplayer #renderthread #sigsegv #emulator #backdrop #stability
[PROJECT:lumaplayer] RenderThread 防护前移与构建复核 结论: 模拟器安全判断已前移到 LayerBackdrop 创建之前,播放器移除额外透明离屏合成,图片统一提供安全占位和错误降级;assemble、lint、unit test 均成功。 文件变更: ui/design/LumaDesignSystem.kt、MainApp.kt、VideoPlayerScreen.kt、AppBottomBar.kt、LiquidBottomTabs.kt、各主要 Screen。 教训: 当前环境无 adb,不能将构建成功表述为设备启动已验证;设备仍需复测崩溃场景。 标签: #lumaplayer #renderthread #backdrop #player #build
[PROJECT:lumaplayer] 加强 RenderThread 模拟器防护并修复详情页收尾编译问题 结论: Backdrop 安全门新增 ABI、板级标识和设备名判定;详情返回按钮统一为 Luma glass,操作目标补足 48dp;Debug 构建、Lint 和单元测试任务成功。 文件变更: ui/design/LumaDesignSystem.kt、screens/MediaDetailScreen.kt。 教训: 原生 RenderThread 崩溃必须在 LayerBackdrop 创建前阻断;Compose 绘制回调不能直接读取 CompositionLocal 状态。 标签: #lumaplayer #renderthread #accessibility #build
[PROJECT:lumaplayer] 播放上报、主页缓存与自适应玻璃收尾 结论: 完成 Emby 串行播放回报和 10 秒节流、主页返回缓存、帧率门控液态玻璃及安全降级底栏;模拟器启动无 RenderThread 崩溃,Debug/Lint 成功。 文件变更: data/EmbyApiModels.kt、data/EmbyRepository.kt、navigation/AppNavHost.kt、screens/VideoPlayerScreen.kt、screens/HomeScreen.kt、ui/design/LumaDesignSystem.kt、ui/AppBottomBar.kt、ui/liquidglass/LiquidBottomTabs.kt、ui/liquidglass/LiquidBottomTab.kt、memory/*。 教训: 模拟器不能安全采样 Kyant Backdrop,降级态需用连续胶囊渐变和局部高光保持玻璃层次;提交时排除本地参考仓库和媒体素材。 标签: #lumaplayer #emby #playback #cache #liquid-glass #renderthread
[PROJECT:lumaplayer] 底栏图标与安全降级玻璃收尾 结论: 底栏图标放大约 10%,降级玻璃固定最终 Capsule 裁剪并采用白色透光、弱蓝色选中层;原生 AndroidLiquidGlass-kmp 路径空闲态保留轻微 Lens,详情/播放器请求失败不再卡加载;Debug/Lint/Unit 均成功,API 35 模拟器启动和导航点击无崩溃。 文件变更: ui/AppBottomBar.kt、ui/design/LumaDesignSystem.kt、ui/liquidglass/LiquidBottomTabs.kt、navigation/AppNavHost.kt、Aurora 图标资源、memory/*。 教训: 模拟器仍不能安全启用 Kyant RenderEffect 采样,降级路径必须在最终尺寸上裁剪,原生路径只能在通过设备与帧率门控后启用。 标签: #lumaplayer #bottom-bar #aurora #liquid-glass #renderthread #build
[PROJECT:lumaplayer] 公共玻璃降级与深色系统栏收尾 结论: 分段控件、按钮、输入框、资源库菜单、主题菜单和语言菜单统一复用渐变毛玻璃降级,深色主题系统栏图标同步;Debug/Lint/Unit 构建及 API35 模拟器回归通过。 文件变更: MainApp.kt、screens/LibraryScreen.kt、screens/SettingsScreen.kt、ui/LiquidGlass.kt、ui/design/LumaComponents.kt、ui/design/LumaDesignSystem.kt、memory/*。 教训: 模拟器继续禁用 Kyant RenderEffect 采样,截图中的玻璃为安全降级态;真实 Backdrop 仅在设备安全门和帧率门控同时通过时启用。 标签: #lumaplayer #glass #fallback #dark-mode #verification
[PROJECT:lumaplayer] 播放器进度与媒体加载态 结论: 用自绘可访问进度条替代 Material Slider,并为 Home、Vision 收藏、Search 增加统一脉冲骨架;完整 Debug/Lint/Unit 构建通过,参考素材未跟踪。 文件变更: app/build.gradle.kts、screens/HomeScreen.kt、screens/RecordsScreen.kt、screens/SearchScreen.kt、screens/VideoPlayerScreen.kt、ui/design/LumaComponents.kt、memory/*。 教训: 启动截图需等待启动流程完成后再判断加载态;当前 API35 模拟器仍只验证安全降级玻璃,不能代替真机 Backdrop 逐帧比对。 标签: #lumaplayer #loading #skeleton #player #accessibility #build
[PROJECT:lumaplayer] 底栏图标与资源库细节复核 结论: 底栏普通图标调整为 36dp、搜索图标 41dp,资源库空图标改为服务器图标;搜索清除和图标库返回保留原视觉并补足 48dp 触控范围;API35 模拟器启动、设置页和语言悬浮菜单无异常。 文件变更: screens/LibraryScreen.kt、ui/AppBottomBar.kt、ui/LiquidGlass.kt、ui/design/LumaDesignSystem.kt。 教训: 降级玻璃必须保持独立胶囊几何,不能让菜单或选中态参与页面列表测量;本地参考素材继续排除提交。 标签: #lumaplayer #bottom-bar #accessibility #fallback-glass #emulator #build