Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
246 commits
Select commit Hold shift + click to select a range
3d19f99
temp: add keystore export workflow
zyl6932 May 27, 2026
9184f53
docs: 加入 miuix 适配工作手册
zyl6932 May 27, 2026
199a5e3
build: 升级 Kotlin 2.3.21 / KSP 2.3.8 / minSdk 32,适配 miuix 0.9.1
zyl6932 May 27, 2026
403a457
build: miuix 0.9.1 双主题脚手架 (AGP 9.2.1, compileSdk 37, minSdk 32)
zyl6932 May 27, 2026
a47080e
feat: port BlocklistSettingsScreen 到 miuix 风格
zyl6932 May 27, 2026
698cf08
feat: M3 外观页加 miuix 切换开关,双向可达
zyl6932 May 27, 2026
d381bc3
refactor: 重写 MiuixBlocklistSettingsScreen,消除嵌套 LazyColumn,用 endAction…
zyl6932 May 27, 2026
ff2e468
refactor: MiuixAppearanceSettingsScreen 对齐 InstallerX 视觉规范 (ScrollBeh…
zyl6932 May 27, 2026
983ef32
refactor: miuix 页面返回箭头改用 MiuixIcons.Back
zyl6932 May 27, 2026
a01803c
feat: 补全 MiuixAppearanceSettingsScreen 到跟 M3 版功能对等
zyl6932 May 27, 2026
e926190
feat: port FollowScreen 到 miuix 风格
zyl6932 May 27, 2026
f3ed159
feat: 添加 AppTokens 抽象层 (colors + text)
zyl6932 May 27, 2026
10e2619
build: 启用 miuix-blur 依赖, minSdk 32 → 33
zyl6932 May 27, 2026
f8845f0
fix: miuix-blur 改用 KMP artifact 确保拉入公共模块
zyl6932 May 27, 2026
a8dfa21
feat: 顶栏毛玻璃效果(半透明背景 + 设置开关), CLAUDE.md 声明规则
zyl6932 May 27, 2026
deb6ea5
feat: 窗口级毛玻璃 (FLAG_BLUR_BEHIND),适配 InstallerX 实现
zyl6932 May 27, 2026
3a9ff92
feat: port ColorPickerDialog 到 miuix (HSV + ColorPalette)
zyl6932 May 27, 2026
933bec7
fix: ColorPickerDialog 用 Card 替代 Surface 圆角背景
zyl6932 May 27, 2026
a40fd56
refactor: ColorPickerDialog 改用 OverlayBottomSheet 底部弹出样式
zyl6932 May 27, 2026
8438f7c
fix: OverlayBottomSheet 用 show state + LaunchedEffect 延迟显示
zyl6932 May 27, 2026
3c6c88f
refactor: 模糊改用 InstallerX 四段式管线 (textureBlur + layerBackdrop)
zyl6932 May 27, 2026
73ec75d
fix: TopAppBar 补 color=Transparent 完成模糊四段式
zyl6932 May 27, 2026
a3f3777
fix: ColorPickerDialog 重写为 WindowBottomSheet 模式, 修复 show state bug
zyl6932 May 27, 2026
9258ba7
chore: 删除旧 MiuixColorPickerDialog (已被 Sheet 替代)
zyl6932 May 27, 2026
21f93fb
feat: 创建 MiuixFeedCard (miuix Card + AppTokens)
zyl6932 May 27, 2026
ae262fc
docs: More 菜单暂不实现,记录到 CLAUDE.md
zyl6932 May 27, 2026
c57e589
feat: AccountSettingScreen 改 BottomSheet (WindowBottomSheet + 子页关闭后跳转)
zyl6932 May 27, 2026
ad2d79f
fix: Account Sheet 加底层 Box 背景避免空白
zyl6932 May 27, 2026
1af1250
fix: 头像入口用 BottomSheet, 底栏 Tab 保持全页面
zyl6932 May 27, 2026
3629e71
fix: Account Sheet 三个分组用 Card 包裹, padding 收进 Card
zyl6932 May 27, 2026
485e668
fix: Account Sheet Card 用 surfaceContainerHigh 增亮区分
zyl6932 May 27, 2026
96232e7
fix: miuix 标准模式不传 keyColor,避免蓝色种子偏移暗色调色板
zyl6932 May 27, 2026
c080afb
fix: 照着 miuix 官方 BottomSheet 重写 Account Sheet + 去掉 isDark 修正暗色调色板
zyl6932 May 27, 2026
d5adaa4
fix: Card 补回 secondaryContainer 颜色, 跟 miuix 官方示例一致
zyl6932 May 27, 2026
a5c6399
fix: 补全四个 Card 的 secondaryContainer 颜色
zyl6932 May 27, 2026
4f1ae42
fix: 去掉所有 Card 自定义颜色, 用 miuix 默认 Card 色
zyl6932 May 27, 2026
b441860
refactor: AccountSettingScreen 去 BottomSheet 改普通页面, 修复返回手势
zyl6932 May 28, 2026
d10d582
feat: 底部栏选择改用 MiuixMultiSelectExpandable 展开式多选
zyl6932 May 28, 2026
efa843c
fix: MiuixMultiSelectExpandable 改用 Checkbox(onCheckedChange=null) 模式 …
zyl6932 May 28, 2026
1e32add
fix: 去 M3 组件, 补全 Account Sheet 四个 Card 颜色
zyl6932 May 28, 2026
ed9c7ac
docs: SettingsKeys 统一 key + CLAUDE.md 设置项映射表和 port 规则
zyl6932 May 28, 2026
ced49bc
feat: 新建 About 二级页面 (miuix + M3), 重构账号设置页关于入口
zyl6932 May 28, 2026
dda3a88
fix: AboutScreen 用 Scaffold+TopAppBar 替代 Box 层叠,修复白屏
zyl6932 May 28, 2026
e3805cf
fix: AboutScreen 背景改用硬编码颜色, 去掉 MiuixTheme.colorScheme 在 modifier 中的引用
zyl6932 May 28, 2026
828a588
fix: 去掉 WindowBottomSheet 修复 OnBackPressedCallback 泄漏
zyl6932 May 28, 2026
f823df9
feat: port NotificationSettingsScreen 到 miuix
zyl6932 May 28, 2026
f28827b
fix: NotificationSettings + About 补四段式 TopAppBar 模糊
zyl6932 May 28, 2026
0cdae93
fix: layerBackdrop 移到 overScrollVertical 之前, 修 notification blur
zyl6932 May 28, 2026
d27b53b
fix: BlocklistSettings 加 TopAppBar 模糊 + 统一 padding 对齐
zyl6932 May 28, 2026
c9647bb
fix: BlocklistSettings 顶部固定, 仅内容区滚动, padding 统一 12dp
zyl6932 May 28, 2026
1a4451d
fix: AboutScreen 去模糊三件套, 修复 layerBackdrop 吸走内容导致白屏
zyl6932 May 28, 2026
2603862
refactor: MiuixAboutScreen 照抄 miuix 官方源码 (SmallTopAppBar + scrollProg…
zyl6932 May 28, 2026
902833a
fix: AboutScreen 去掉浮动 logo 循环依赖, 直接放 LazyColumn 避免无限重组
zyl6932 May 28, 2026
401fc98
feat: MiuixAccountSheet (头像入口) + MiuixAccountSettingScreen (底栏入口) 分离
zyl6932 May 28, 2026
9bb0924
fix: MainTabPage.AccountPage 补 miuix 分流
zyl6932 May 28, 2026
5c49cb1
fix: About 三组 Card 加 SmallTitle 标题; Account 用户卡片去副标题加右箭头
zyl6932 May 28, 2026
1080a6e
fix: 用户名对齐 preference 字体大小粗细
zyl6932 May 28, 2026
c5cde5a
fix: Account Card 去掉自定义颜色, 用 miuix 默认
zyl6932 May 28, 2026
b2bc48e
fix: 用户卡箭头改 Material Icon + 设置/关于 Card 去 secondaryContainer
zyl6932 May 28, 2026
8748c38
refactor: 用户信息卡改用 ArrowPreference, 登录/未登录统一
zyl6932 May 28, 2026
60c2d07
fix: LazyColumn 补 overScrollVertical 修复未登录时无法滚动
zyl6932 May 28, 2026
aeb3863
feat: LoginActivity 三段免责声明 miuix 化 (TopAppBar返回+长条形确认按钮)
zyl6932 May 28, 2026
29472fa
fix: LoginNotice miuix edge-to-edge + 按钮用 buttonColorsPrimary 蓝色
zyl6932 May 28, 2026
99072f0
feat: LoginModeScreen miuix 化 (TabRow + Scaffold+TopAppBar)
zyl6932 May 28, 2026
6b828b4
fix: TabRow 统一 horizontal=12dp padding (Login + Follow)
zyl6932 May 28, 2026
5ae9afe
fix: LoginMode 内容区 padding=12dp + 顶部留白 8dp
zyl6932 May 28, 2026
9667954
feat: Account 设置页加 TopAppBar + 四段式模糊 + 返回按钮
zyl6932 May 28, 2026
baa8366
fix: 去掉 Account TopAppBar 返回按钮
zyl6932 May 28, 2026
81e4922
refactor: miuix 文件按 M3 结构重组 (subscreens/components)
zyl6932 May 28, 2026
d9f5e07
feat: port CollectionScreen 到 miuix
zyl6932 May 28, 2026
30c51ac
feat: FollowScreen 加 TopAppBar + 四段式模糊
zyl6932 May 28, 2026
65a109d
fix: FollowTopLevelPage 加 Scaffold+TopAppBar, 底部 Tab 入口可用
zyl6932 May 28, 2026
a280111
fix: AboutScreen icon 换 AsyncImage 修复 adaptive-icon 崩溃; leftAction→st…
zyl6932 May 28, 2026
debc626
fix: AboutScreen 图标改用 PackageManager.getApplicationIcon, 稳定兼容 adaptiv…
zyl6932 May 28, 2026
6f9ead4
refactor: AboutScreen 重设计: 去TopAppBar, linearGradient背景, 110dp图标, 36sp标题
zyl6932 May 28, 2026
2c2750e
fix: AboutScreen 渐变加浓 + Card 半透明白底让渐变透出
zyl6932 May 28, 2026
4b9a120
fix: AboutScreen LazyColumn 可滚动, 背景用 val 预计算避免类型推断
zyl6932 May 28, 2026
bf79d24
fix: 去掉系统与更新左侧图标, 跟其他 Card 左边距一致
zyl6932 May 28, 2026
3a97cb1
fix: Card 用 Color.Transparent 让渐变透出; 深浅模式分 Box 分支
zyl6932 May 28, 2026
54d9f3b
fix: 用 drawBehind{drawRect(gradient)} 替代 background(gradient), 越过主题背景层
zyl6932 May 28, 2026
cbcade5
wip: AboutScreen gradient debug —去内层 Box, Magenta 测试
zyl6932 May 28, 2026
290bd7b
feat: miuix 主题大面积适配 — 关注/热榜/日报/历史/用户/设置/关于/开源许可
zyl6932 May 29, 2026
8c1bc3c
fix: 关注页 miuix 路径 FeedCard -> MiuixFeedCard 修复文字反色
zyl6932 May 29, 2026
a16d7fe
feat: 屏蔽记录页 miuix 适配 — TopAppBar 模糊 + Card 列表
zyl6932 May 29, 2026
7b08a78
fix: 屏蔽记录页 onDelete 引用修复
zyl6932 May 29, 2026
9c7443e
fix: 过滤统计弹窗 M3 Button -> miuix Card + clickable
zyl6932 May 29, 2026
d757dee
fix: 补充 sp import
zyl6932 May 29, 2026
20f58d0
refactor: 过滤统计 AlertDialog -> WindowBottomSheet
zyl6932 May 29, 2026
9651c43
fix: WindowBottomSheet show 参数类型 + TextButton import
zyl6932 May 29, 2026
a0c7696
refactor: 过滤统计底部按钮改用 miuix Button 标准样式
zyl6932 May 29, 2026
c3145c8
fix: 过滤统计 bottom sheet 文字样式和按钮 padding
zyl6932 May 29, 2026
5ab4c37
fix: 深色模式 overscroll 背景改用纯黑 Color.Black
zyl6932 May 29, 2026
7c0eb1f
refactor: 历史记录更多菜单 M3 DropdownMenu -> miuix WindowDropdownMenu
zyl6932 May 29, 2026
05303ba
fix: 回退到 M3 DropdownMenu 容器 + miuix Text 内容(WindowDropdownMenu 是表单选择器…
zyl6932 May 29, 2026
9af2aa3
fix: 历史记录弹出菜单改用 miuix WindowListPopup + Card + ArrowPreference
zyl6932 May 29, 2026
4fa2d3e
fix: 历史记录弹出菜单照抄官方 WindowListPopup + ListPopupColumn + DropdownImpl(震动…
zyl6932 May 29, 2026
4913850
fix: 弹出菜单对齐 TopEnd + minWidth 200.dp
zyl6932 May 29, 2026
d3c6419
fix: 弹出菜单 popupModifier 加水平 padding 12dp
zyl6932 May 29, 2026
5789410
fix: BottomEnd 对齐 + 手动 haptic + Box end padding 4dp
zyl6932 May 29, 2026
d320384
fix: DropdownImpl -> Text+clickable 去掉右侧勾选预留空间
zyl6932 May 30, 2026
9972a5c
fix: MiuixIcons.Search/SearchCleanup -> Material Icons.Default; max -…
zyl6932 May 30, 2026
d2b61d7
feat: MiuixHomeScreen 路由分流
zyl6932 May 30, 2026
0b17b17
fix: WindowBottomSheet show.value + onDismiss 参数名
zyl6932 May 30, 2026
da051b9
fix: 搜索框 top padding 加状态栏高度避免重叠
zyl6932 May 30, 2026
b6f32d4
fix: SearchPager 展开动画 padding 也加状态栏高度
zyl6932 May 30, 2026
2a730ca
feat: 首页 TopAppBar + 四步模糊 + layerBackdrop
zyl6932 May 30, 2026
c353bef
fix: Column import 换成标准 Compose 布局
zyl6932 May 30, 2026
214379e
feat: 主页 TopAppBar 标题渐隐 + 模糊
zyl6932 May 30, 2026
1fabb22
fix: 搜索展开时隐藏假搜索框
zyl6932 May 30, 2026
2549770
fix: 整个 topBar Column 随搜索渐隐
zyl6932 May 30, 2026
b24639d
fix: 弹出菜单 BottomEnd 对齐 + haptic 提至外层作用域
zyl6932 May 30, 2026
57e9443
fix: MiuixSearchBar 重新修 Search/SearchCleanup/Text/max
zyl6932 May 30, 2026
b86ec47
feat: 替换 MiuixHomeScreen + MiuixSearchBar(来自 h11.zip)
zyl6932 May 30, 2026
19b366c
fix: 修复 zip 版 SearchBar 的 MiuixIcons/Text/max 问题
zyl6932 May 30, 2026
433c67c
fix: 图标改回 miuix extended Search/Close
zyl6932 May 30, 2026
aa804d7
fix: miuix 图标 MiuixIcons.Search/Close(extension property)
zyl6932 May 30, 2026
79d7cbd
feat: 替换新版 h11.zip
zyl6932 May 30, 2026
d33ff20
fix: 修复 SearchBar 图标和 max
zyl6932 May 30, 2026
10822da
fix: offsetY 减去 statusBar 转为内容区相对坐标
zyl6932 May 30, 2026
13e36c8
fix: SearchBarFake 收起时也可见(shouldCollapsed 含 COLLAPSING)消除弹跳
zyl6932 May 30, 2026
c6ad6dd
tweak: 收起终点 offsetY-4dp, 展开顶 systemBars+0dp 微调对齐
zyl6932 May 30, 2026
d9516c4
tweak: searchBarTopPadding 12dp -> 6dp 整体上移
zyl6932 May 30, 2026
2c856bb
fix: 取消按钮 AnimatedVisibility 加显式 tween 300/200 动画
zyl6932 May 30, 2026
684f0a1
feat: 替换 SearchBar_3.kt + 修复编译问题
zyl6932 May 30, 2026
b36fcd0
feat: 替换 new1.zip + 修复编译问题
zyl6932 May 30, 2026
f72b2cb
feat: 替换 MiuixHomeScreen_1.kt
zyl6932 May 30, 2026
97ddefc
feat: MiuixFeedCard 字体大小跟随 contentFontSize 设置
zyl6932 May 30, 2026
b7e9995
fix: MiuixFeedCard 垂直 padding 8dp->6dp 对齐历史记录
zyl6932 May 30, 2026
e2390ec
fix: 去掉 MiuixFeedCard 外层多余 horizontal padding
zyl6932 May 30, 2026
bf9e6b4
feat: 替换 MiuixFollowScreen.kt(来自下载)
zyl6932 May 30, 2026
f93c5fe
fix: FollowScreen backdrop 始终非 null 保证 scrollBehavior 不断 + blurEnable…
zyl6932 May 30, 2026
d141529
fix: 回退 backdrop 强制创建,关模糊时走 M3 路径
zyl6932 May 30, 2026
e03ef9c
fix: M3 路径 PaginatedList 加 nestedScroll 连接 scrollBehavior
zyl6932 May 30, 2026
4bc8437
fix: backdrop 始终创建,关/开模糊统一走 miuix 路径
zyl6932 May 30, 2026
707b08d
fix: 关模糊时 TopAppBar 用 surface 底色
zyl6932 May 30, 2026
2463dc7
fix: topBar Column 加 bottom padding 包住 TabRow
zyl6932 May 30, 2026
a18042c
feat: 替换 search.zip + 修复编译问题
zyl6932 May 30, 2026
5ae8b95
feat: 替换 MiuixFollowScreen_1.kt
zyl6932 May 30, 2026
bf0b41c
feat: 替换 FollowScreen.kt(来自下载)
zyl6932 May 30, 2026
2b75e0e
feat: 替换 MiuixFollowScreen_2.kt
zyl6932 May 30, 2026
00c0449
fix: TabRow 加回 bottom=8dp + Column 模糊顺序修复
zyl6932 May 30, 2026
86d1bcc
feat: NotificationScreen miuix 化
zyl6932 May 30, 2026
1386393
feat: P0/P1/P2 miuix 化 — Notification/Collection/SystemAndUpdate/Deve…
zyl6932 May 30, 2026
2228439
feat: 替换 MiuixOnlineHistoryScreen.kt(来自下载)
zyl6932 May 31, 2026
78dbb96
feat: 替换 pop.zip(MenuPositionProvider + 历史记录弹出菜单优化)
zyl6932 May 31, 2026
227ee14
feat: 替换 MiuixPeopleScreen.kt(来自下载)
zyl6932 May 31, 2026
679d27a
fix: 收藏内容页弹出菜单加 MenuPositionProvider + TopEnd 对齐
zyl6932 May 31, 2026
98c5ada
refactor: MiuixAboutScreen → subscreens/; MiuixAccountSheet → compone…
zyl6932 May 31, 2026
4ed9204
fix: 通知页 PullToRefresh 加 contentPadding 修复下拉指示器位置
zyl6932 May 31, 2026
641ed52
fix: 用户页头像右侧加回用户名
zyl6932 May 31, 2026
9080d58
fix: 用户卡片移出 topBar 到内容区,随滚动消失
zyl6932 May 31, 2026
11714e7
fix: TopAppBar 底部加 6dp padding,不和 TabRow 紧贴
zyl6932 May 31, 2026
82ccea6
fix: 通知卡片点击涟漪 clip 圆角裁剪
zyl6932 May 31, 2026
35eec9a
fix: 账号设置用户信息 Card 加 clip 裁剪涟漪
zyl6932 May 31, 2026
8825666
fix: 屏蔽设置导入导出按钮改为 Card 样式,TabRow 加 padding 对齐
zyl6932 May 31, 2026
5ab4185
refactor: 内嵌三个 miuix 图标替代 miuix-icons-android 依赖 (~1.8MB)
zyl6932 May 31, 2026
eb31ba4
feat: miuix 想法页重做 + 问题页修复,及多项 miuix 适配
zyl6932 Jun 1, 2026
252f2b3
feat: 自动隐藏顶栏 + miuix 搜索热搜历史 + OnlineHistory 分流
zyl6932 Jun 1, 2026
06c8e03
feat: 自动隐藏顶栏改为与底栏完全同步
zyl6932 Jun 2, 2026
da921d6
feat: QRCodeScanActivity miuix 化 + miuix 账号入口恢复扫码
zyl6932 Jun 2, 2026
43b0a2e
Merge upstream/master: 合并 KMP 架构重构 (#334) 及上游修复
zyl6932 Jun 2, 2026
c1ff3b8
refactor: miuix 页面去安卓化迁移到 commonMain (KMP)
zyl6932 Jun 2, 2026
945611e
Merge remote-tracking branch 'upstream/master' into merge/kmp
zyl6932 Jun 2, 2026
e3d448e
fix: 对齐上游工具链 + 补合并遗留
zyl6932 Jun 2, 2026
f7b103a
perf: 压缩 dex 打包,release APK 体积减半(7.6MB→3.8MB)
zyl6932 Jun 3, 2026
57d9c7c
style: ktlint 格式化全仓库源码
zyl6932 Jun 3, 2026
8c2862c
chore: CLAUDE.md/.claude 恢复上游版本
zyl6932 Jun 3, 2026
fdaddd0
chore: 移除 fork 专属工具配置(不进上游 PR)
zyl6932 Jun 3, 2026
ff31975
fix: MiuixContentFilterSettingsScreen 用 commonMain 安全的小数格式化
zyl6932 Jun 3, 2026
af911b0
fix: 修复插桩测试——M3 关注页/账号页恢复上游实现
zyl6932 Jun 3, 2026
30c7bc7
fix: AccountSettingScreen 插桩测试关闭首页 auto-login 干扰
zyl6932 Jun 3, 2026
1201098
fix: 处理 Copilot 审核意见 + 支持 minSdk 27 低版本设备
zyl6932 Jun 3, 2026
575a1e0
fix: 一批 miuix UI/功能 bug 修复
zyl6932 Jun 4, 2026
18ab8af
fix: miuix 主题补 MaterialTheme 配色,消除粉色露底与 markdown 反色
zyl6932 Jun 4, 2026
322ac12
feat: 回答页 miuix 化(MiuixArticleScreen)
zyl6932 Jun 4, 2026
842a918
fix: compileSdk 对齐上游 36,关闭 AAR metadata check
zyl6932 Jun 8, 2026
a23ea00
Merge upstream/master: 同步上游最新代码(收藏夹入口、视频应用内播放、搜索筛选、底栏顺序等)
zyl6932 Jun 8, 2026
486fc49
fix: 对齐上游 compileSdk 37,修复 MyCollectionsPage miuix 调用,添加 suppressUnsu…
zyl6932 Jun 8, 2026
c3cac0b
feat: 通知点击进入文章页添加 fadeIn/fadeOut 内容加载动画,减少白屏突兀感
zyl6932 Jun 8, 2026
ed2d58b
feat: 通知页加载中添加 miuix 转圈动画(AnimatedContent + CircularProgressIndicator)
zyl6932 Jun 8, 2026
2a73de2
fix: 文章页 AnimatedContent 提升到 Scaffold content 顶层,消除加载白屏
zyl6932 Jun 8, 2026
740e81d
fix: 一批 miuix bug/设置修复 (P0+P1+P2 共 17 项)
zyl6932 Jun 9, 2026
b7b06bd
fix: 修复用户主页头像/资料加载失败,完善 miuix 回答/问题页标题与加载体验
zyl6932 Jun 10, 2026
5fd6fa3
feat: vendor miuix-nav 自包含导航 runtime 并接入 NavKey 路由模型
zyl6932 Jun 11, 2026
91ea6d6
feat: miuix 搜索结果页与一批 miuix 页面完善
zyl6932 Jun 11, 2026
d8f0339
fix: 修复登录后个人主页/推荐加载失败 (10003 / d_c0 签名)
zyl6932 Jun 11, 2026
e469c29
feat: 导航迁移到 vendored miuix-nav + 回答切换/预测性返回完善
zyl6932 Jun 12, 2026
adfbbbc
Merge remote-tracking branch 'origin/merge/kmp' into merge/kmp-v2
zyl6932 Jun 12, 2026
d7335ee
Merge remote-tracking branch 'upstream/master' into merge/kmp
zyl6932 Jun 12, 2026
cdd3ad9
fix: 修复 miuix 回答页顶栏无法折叠
zyl6932 Jun 12, 2026
1182860
fix: 修复 ktlint commonMain 检查失败
zyl6932 Jun 12, 2026
47be8ed
fix: NavSwipeDismiss 注释移入 composed 体,让 KDoc 紧贴函数
zyl6932 Jun 12, 2026
8f48927
fix: 插桩测试宿主同步 activity.navController + 加下拉诊断
zyl6932 Jun 12, 2026
0b238bf
test: 下拉诊断改为带语义树报错(进入 gradle 输出,定位后删)
zyl6932 Jun 12, 2026
edc1f73
test: 下拉诊断改为紧凑 dump 所有 testTag(定位后删)
zyl6932 Jun 12, 2026
e6d47b4
test: 移除外观设置插桩测试诊断代码
zyl6932 Jun 12, 2026
096f198
test: 稳定启动页下拉插桩测试
zyl6932 Jun 12, 2026
0c0798b
test: 稳定启动页下拉可见性
zyl6932 Jun 12, 2026
c624469
test: 增强外观设置插桩等待诊断
zyl6932 Jun 12, 2026
342f376
fix: onExit & refactor keys to map in MiuixAppearanceSettingsScreen
zly2006 Jun 12, 2026
5f0e03c
test: 稳定启动页下拉选项选择
zyl6932 Jun 13, 2026
62f57ab
test: 强化启动页下拉打开等待
zyl6932 Jun 13, 2026
e470427
test: 通过启动页设置行打开下拉
zyl6932 Jun 13, 2026
c6f2f01
test: 通过启动页下拉锚点打开菜单
zyl6932 Jun 13, 2026
c93430d
test: 避免启动页下拉父级点击拦截
zyl6932 Jun 13, 2026
591decb
test: 为启动页下拉提供稳定锚点
zyl6932 Jun 13, 2026
7083234
test: 避免启动页测试依赖菜单弹窗节点
zyl6932 Jun 13, 2026
a8404d7
Merge origin/master into merge/kmp
zly2006 Jun 13, 2026
e54ca4e
Merge remote-tracking branch 'origin/master' into codex/pr-398-merge-…
zly2006 Jun 13, 2026
1d58954
fix: 阶段性同步 miuix 路径的 master 功能
zly2006 Jun 13, 2026
c7d286a
test: 稳定外观设置启动页选择测试
zyl6932 Jun 13, 2026
5007544
fix: 稳定导航目标身份
zyl6932 Jun 13, 2026
d62efa0
feat: 同步 miuix 设置页功能
zyl6932 Jun 13, 2026
976c7db
fix: 让设置变更即时生效
zyl6932 Jun 13, 2026
218c7e0
chore: 调整工程配置
zyl6932 Jun 13, 2026
eb4293c
fix: 撤回 miuix 官方图标替换
zyl6932 Jun 13, 2026
85fafde
fix: 修复关闭模糊后的双行标题栏背景
zyl6932 Jun 13, 2026
7e3f422
fix: 调整关注页 miuix 标签栏间距
zyl6932 Jun 13, 2026
fafcc0c
fix: 统一 miuix 底部弹层操作项背景
zyl6932 Jun 13, 2026
2adbe89
fix: 优化 miuix 收藏内容卡片文本排版
zyl6932 Jun 13, 2026
c721f4c
fix: 让自动隐藏顶栏跟随滚动
zyl6932 Jun 14, 2026
e234bf2
fix: 为 miuix 回答底栏按钮添加按压动画
zyl6932 Jun 14, 2026
00b1d4c
fix: 裁切 miuix 弹层操作项按压反馈
zyl6932 Jun 14, 2026
ed2e06c
fix: 裁切关注页 miuix 标签栏圆角
zyl6932 Jun 14, 2026
9e66eab
fix: 清理 miuix 更新设置页无效 Elvis
zyl6932 Jun 14, 2026
4e4e1e5
fix: 统一开发者设置 Cookie 解析
zyl6932 Jun 14, 2026
672b939
build: compileSdk 对齐上游 36,跳过 miuix 的 ≥37 校验
zyl6932 Jun 14, 2026
83166e5
feat: 评论区 miuix 化(MiuixCommentScreen/Sheet)
zyl6932 Jun 14, 2026
9cf38a8
fix: miuix 批量修复 + 回答页接入 miuix 评论/导出
zyl6932 Jun 14, 2026
5ca4e48
fix: 自动隐藏顶栏按可见高度上报 inset,与底栏同步
zyl6932 Jun 14, 2026
bb2a146
merge: 合并上游 master (#437 话题屏蔽想法 / #433 清理低调用包装 / #441 AIGC投票)
zyl6932 Jun 14, 2026
17612fa
feat: AIGC 标记 miuix 化(回答页菜单+弹层 + 系统设置开关)
zyl6932 Jun 14, 2026
29b18fb
fix: 修复 M3 评论区键盘弹出时输入框被顶高露出回答页
zyl6932 Jun 14, 2026
ed476a7
fix: miuix 评论弹层去掉默认 24dp 横向 insideMargin
zyl6932 Jun 14, 2026
47ad39b
feat: 弹窗/弹层 miuix 化(分享/赞同者/收藏夹导出/确认框/开发者对话框)
zyl6932 Jun 15, 2026
0904738
fix: 修正 miuix 评论作者跳转 Person 参数顺序(name/urlToken 写反)
zyl6932 Jun 15, 2026
577ea32
fix: 登录流程使用专用单 UA 客户端避免 d_c0 签名失效(10003)
zyl6932 Jun 20, 2026
497e503
Merge upstream zly2006/master (368df632) into merge/kmp
zyl6932 Jun 20, 2026
3f8a2c4
build: 升级工具链到 Kotlin 2.4.0 / AGP 9.3.1,miuix 升 0.9.3
zyl6932 Aug 14, 2026
bafbab3
style: ktlint 格式化历史欠债
zyl6932 Aug 14, 2026
48c853e
Merge upstream zly2006/master (356fdf7a) into merge/kmp
zyl6932 Aug 14, 2026
45f08b2
fix: 修正 miuix 按钮禁用态白字与缺失的滚动回弹
zyl6932 Aug 14, 2026
3387a5b
fix: 修复插桩测试源码编译失败
zyl6932 Aug 14, 2026
f1f5687
ci: 把 shared 的单元测试与插桩测试编译纳入 Build Check
zyl6932 Aug 18, 2026
799716f
feat: 补齐 miuix 版缺失的创作与设置入口
zyl6932 Aug 18, 2026
000c770
Merge upstream zly2006/master (22f6313c) into merge/kmp
zyl6932 Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .github/workflows/other-branches-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@ jobs:
- name: Set repository name as env variable
run: echo "repository_name=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')" >> $GITHUB_ENV

# 先装 21 再装 17:JAVA_HOME 最终指向 17(项目工具链),21 留给 :shared:jvmTest 用。
# latex-* 依赖发布的是 class file 65 的字节码,17 的运行时加载不了。
- name: Set Up JDK 21 for jvmTest
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '21'
- name: Set Up JDK
uses: actions/setup-java@v4
with:
Expand Down Expand Up @@ -57,8 +64,14 @@ jobs:
# Run Tests Build
- name: Run KtLint
run: ./gradlew ktlintCheck
# `test` 是 JVM 插件的生命周期任务,不含 KMP 的 jvmTest,shared 的单元测试一直没在 CI 跑过。
# 插桩测试源码同理没有任何编译覆盖,这里只编译不执行(执行需要模拟器)。
- name: Run gradle tests
run: ./gradlew test
run: |
./gradlew test
./gradlew :shared:jvmTest -Porg.gradle.java.installations.fromEnv=JAVA_HOME_21_X64
- name: Compile instrumented test sources
run: ./gradlew compileLiteDebugAndroidTestKotlin compileFullDebugAndroidTestKotlin
- name: Build App
# Build .apk
run: |
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ __pycache__/
app/lite
app/full

# IDE / build output
bin/

# Local replay corpus contains complete third-party Zhihu responses.
shared/src/jvmTest/resources/zhihu-formula-corpus/raw/
tools/zhihu-formula-corpus/
Expand Down
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"java.configuration.updateBuildConfiguration": "interactive"
}
13 changes: 13 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,11 @@ android {
// "META-INF/*.kotlin_module",
)
}
dex {
// minSdk ≥ 28 时 AGP 默认不压缩 dex(设备上可 mmap,但 APK 体积翻倍)。
// 本应用走 Telegram 侧载分发,下载体积优先 → 强制压缩 dex(APK 减半,仅首次安装略慢)。
useLegacyPackaging = true
}
}

androidComponents {
Expand Down Expand Up @@ -266,4 +271,12 @@ dependencies {
androidTestImplementation("androidx.test.ext:junit:1.3.0")
androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0")
androidTestImplementation("io.ktor:ktor-client-mock:$ktor")

// ===== miuix 0.9.3 =====
val miuixVersion = "0.9.3"
implementation("top.yukonga.miuix.kmp:miuix-core-android:$miuixVersion")
implementation("top.yukonga.miuix.kmp:miuix-ui-android:$miuixVersion")
implementation("top.yukonga.miuix.kmp:miuix-preference-android:$miuixVersion")
implementation("top.yukonga.miuix.kmp:miuix-icons-android:$miuixVersion")
implementation("top.yukonga.miuix.kmp:miuix-blur:$miuixVersion")
}
15 changes: 13 additions & 2 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@
# debugging stack traces.
-keepattributes SourceFile,LineNumberTable

##
## 共享模块通过反射按方法名调用 MainActivity 的这些方法(shared 不能直接依赖 app 模块)。
## release 下 R8 会重命名方法,导致反射 method.name=="navigateMainTab" / getMethod("navigate")
## 失效(表现:账号页"浏览历史"点击无反应、部分页内跳转失效)。保留这些方法名。
## 见 AndroidUiRuntimes.navigateMainTab、WebviewComp.navigateInMainActivity。
##
-keepclassmembers class com.github.zly2006.zhihu.MainActivity {
public void navigateMainTab(...);
public void navigate(...);
}

##
## Kotlin Serialization
##
Expand Down Expand Up @@ -62,8 +73,8 @@
}

-keepnames class ** implements com.github.zly2006.zhihu.data.Feed$Target
# Keep all enums
-keep enum ** {
# Keep app's own enums (used via kotlinx.serialization / reflection)
-keep enum com.github.zly2006.** {
<fields>;
public static **[] values();
public static ** valueOf(java.lang.String);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTouchInput
import androidx.compose.ui.test.swipe
import androidx.core.content.edit
import androidx.navigation.NavHostController
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.github.zly2006.zhihu.navigation.Account
import com.github.zly2006.zhihu.navigation.Article
import com.github.zly2006.zhihu.navigation.ArticleType
import com.github.zly2006.zhihu.navigation.Home
import com.github.zly2006.zhihu.navigation.NavDestination
import com.github.zly2006.zhihu.navigation.Search
import com.github.zly2006.zhihu.reading.AndroidReadingPlayerBridge
import com.github.zly2006.zhihu.reading.ContentReadingService
Expand Down Expand Up @@ -66,6 +66,7 @@ import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import top.yukonga.miuix.kmp.nav.core.NavController

@RunWith(AndroidJUnit4::class)
class ReadingPlayerUiInstrumentedTest {
Expand Down Expand Up @@ -150,16 +151,16 @@ class ReadingPlayerUiInstrumentedTest {
*/
@Test
fun leavingDetailCompactsTheExpandedPlayer() {
lateinit var navController: NavHostController
lateinit var navController: NavController<NavDestination>
composeRule.setZhihuMainContent { navController = it }
composeRule.runOnIdle {
navController.navigate(Article(type = ArticleType.Answer, id = 987654L))
navController.push(Article(type = ArticleType.Answer, id = 987654L))
}

composeRule.waitForTag(READING_PLAYER_BAR_TAG)
composeRule.onNodeWithTag(READING_PLAYER_COMPACT_TAG).assertDoesNotExist()

composeRule.runOnIdle { assertTrue(navController.popBackStack()) }
composeRule.runOnIdle { assertTrue(navController.pop()) }

composeRule.waitForTag(READING_PLAYER_COMPACT_TAG)
composeRule.onNodeWithTag(READING_PLAYER_BAR_TAG).assertDoesNotExist()
Expand All @@ -171,10 +172,10 @@ class ReadingPlayerUiInstrumentedTest {
*/
@Test
fun changingThePlayingItemReplacesTheVisibleReadingDetail() {
lateinit var navController: NavHostController
lateinit var navController: NavController<NavDestination>
composeRule.setZhihuMainContent { navController = it }
composeRule.runOnIdle {
navController.navigate(Article(type = ArticleType.Answer, id = PLAYER_STATE.queue.first().id))
navController.push(Article(type = ArticleType.Answer, id = PLAYER_STATE.queue.first().id))
}
composeRule.waitForTag(READING_PLAYER_BAR_TAG)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,17 @@ import androidx.compose.ui.test.swipeLeft
import androidx.compose.ui.test.swipeRight
import androidx.compose.ui.test.swipeUp
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import androidx.test.ext.junit.rules.ActivityScenarioRule
import com.github.zly2006.zhihu.MainActivity
import com.github.zly2006.zhihu.navigation.LocalNavigator
import com.github.zly2006.zhihu.navigation.MainTabs
import com.github.zly2006.zhihu.navigation.NavDestination
import com.github.zly2006.zhihu.navigation.Navigator
import com.github.zly2006.zhihu.navigation.TopLevelDestination
import com.github.zly2006.zhihu.theme.ZhihuTheme
import com.github.zly2006.zhihu.ui.AndroidZhihuMain
import top.yukonga.miuix.kmp.nav.core.NavController
import top.yukonga.miuix.kmp.nav.core.rememberNavController
import java.util.concurrent.CopyOnWriteArrayList
import java.util.concurrent.atomic.AtomicInteger

Expand Down Expand Up @@ -98,15 +99,17 @@ fun MainActivityComposeRule.setScreenContent(
}

fun MainActivityComposeRule.setZhihuMainContent(
onNavControllerReady: (NavHostController) -> Unit = {},
onNavControllerReady: (NavController<NavDestination>) -> Unit = {},
) {
activity.setContent { }
waitForIdle()
activity.setContent {
ZhihuTheme {
val navController = rememberNavController()
// 与生产一致:activity.navController 必须是 AndroidZhihuMain 实际渲染的同一实例,
// 否则 activity.navigate() 操作的是 onCreate 旧栈,openFrom 等基于 backStack 的判定会出错。
val navController = rememberNavController<NavDestination>(MainTabs)
activity.navController = navController
LaunchedEffect(navController) {
activity.navController = navController
onNavControllerReady(navController)
}
AndroidZhihuMain(navController = navController)
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<!-- miuix-blur 声明 minSdk 33,但其 33+ API(RuntimeShader)已在运行时由
rememberMiuixBlurBackdrop 的 isRuntimeShaderSupported() 守卫,低版本自动无模糊,
故放行该库以支持 minSdk 27 设备安装。 -->
<uses-sdk tools:overrideLibrary="top.yukonga.miuix.kmp.blur"/>

<uses-feature
android:name="android.hardware.camera"
android:required="false"/>
Expand Down
57 changes: 16 additions & 41 deletions app/src/main/java/com/github/zly2006/zhihu/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTagsAsResourceId
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import androidx.navigation.toRoute
import coil3.ImageLoader
import coil3.SingletonImageLoader
import coil3.disk.DiskCache
Expand Down Expand Up @@ -92,6 +89,8 @@ import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import top.yukonga.miuix.kmp.nav.core.NavController
import top.yukonga.miuix.kmp.nav.core.rememberNavController
import java.util.concurrent.TimeUnit

class MainActivity : ComponentActivity() {
Expand All @@ -102,7 +101,7 @@ class MainActivity : ComponentActivity() {
.client
.httpClient()

lateinit var navController: NavHostController
lateinit var navController: NavController<NavDestination>
private lateinit var continuousUsageReminderManager: ContinuousUsageReminderManager
private var currentMainTabOpenFrom: String? = null
var mainTabNavigationTarget by mutableStateOf<TopLevelDestination?>(null)
Expand Down Expand Up @@ -197,7 +196,7 @@ class MainActivity : ComponentActivity() {
}

setContent {
navController = rememberNavController()
navController = rememberNavController<NavDestination>(MainTabs)
ZhihuTheme {
Box(Modifier.semantics { testTagsAsResourceId = true }) {
AndroidZhihuMain(navController = navController)
Expand Down Expand Up @@ -342,11 +341,8 @@ class MainActivity : ComponentActivity() {
preparePendingContentOpen(route)
history.add(route)
if (route is Video) {
val current = runCatching {
navController.currentBackStackEntry?.toRoute<Article>()
}.getOrNull() ?: runCatching {
navController.currentBackStackEntry?.toRoute<Question>()
}.getOrNull()
val top = navController.backStack.lastOrNull()
val current = top as? Article ?: top as? Question
if (current == null) {
androidUserMessageSink(this).showShortMessage("无法打开视频:未知的内容类型")
return
Expand Down Expand Up @@ -383,20 +379,16 @@ class MainActivity : ComponentActivity() {
navigateToMainTabs()
return
}
navController.navigate(route) {
if (popup) {
launchSingleTop = true
popUpTo(MainTabs) {
// clear the back stack and viewModels
saveState = true
}
}
if (popup) {
// deeplink/剪贴板跳转:清栈回到 MainTabs 根再 push(MainTabs 是 startDestination,pager 状态随根 entry 保留)。
navController.popUntil { it is MainTabs }
}
navController.push(route)
}

private fun preparePendingContentOpen(target: NavDestination) {
val openFrom = if (
runCatching { navController.currentBackStackEntry?.toRoute<MainTabs>() }.getOrNull() != null
navController.backStack.lastOrNull() is MainTabs
) {
currentMainTabOpenFrom
} else {
Expand All @@ -407,13 +399,8 @@ class MainActivity : ComponentActivity() {
}

private fun navigateToMainTabs() {
navController.navigate(MainTabs) {
launchSingleTop = true
restoreState = true
popUpTo(MainTabs) {
saveState = true
}
}
// 清栈回到 MainTabs 根(pager 状态保存在根 entry 内,随之保留)。
navController.popUntil { it is MainTabs }
}

fun setCurrentMainTabOpenFrom(openFrom: String?) {
Expand All @@ -426,21 +413,9 @@ class MainActivity : ComponentActivity() {
}
}

private fun currentContentOpenSource(): NavDestination? {
val currentEntry = navController.currentBackStackEntry
return runCatching {
currentEntry?.toRoute<Article>()
}.getOrNull() ?: runCatching {
currentEntry?.toRoute<Question>()
}.getOrNull() ?: runCatching {
currentEntry?.toRoute<Pin>()
}.getOrNull() ?: runCatching {
currentEntry?.toRoute<CollectionContent>()
}.getOrNull() ?: runCatching {
currentEntry?.toRoute<History>()
}.getOrNull() ?: runCatching {
currentEntry?.toRoute<Notification>()
}.getOrNull()
private fun currentContentOpenSource(): NavDestination? = when (val top = navController.backStack.lastOrNull()) {
is Article, is Question, is Pin, is CollectionContent, is History, is Notification -> top
else -> null
}

override fun onDestroy() {
Expand Down
30 changes: 18 additions & 12 deletions app/src/main/java/com/github/zly2006/zhihu/QRCodeScanActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,10 @@ import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import com.github.zly2006.zhihu.QRCodeScanActivity.Companion.LOGIN_PREFIX
import com.github.zly2006.zhihu.platform.rememberUserMessageSink
import com.github.zly2006.zhihu.theme.ThemeManager
import com.github.zly2006.zhihu.theme.ThemeStyle
import com.github.zly2006.zhihu.theme.ZhihuTheme
import com.github.zly2006.zhihu.ui.miuix.MiuixQRCodeScanScreen
import com.github.zly2006.zhihu.util.clipboardManager
import com.github.zly2006.zhihu.util.enableEdgeToEdgeCompat
import com.journeyapps.barcodescanner.ScanContract
Expand All @@ -77,19 +80,22 @@ class QRCodeScanActivity : ComponentActivity() {

setContent {
ZhihuTheme {
QRCodeScanScreen(
onBack = { finish() },
onScanResult = { result ->
// 仅当是知乎登陆URL,返回扫描结果
if (result.startsWith(LOGIN_PREFIX)) {
val resultIntent = Intent().apply {
putExtra(EXTRA_SCAN_RESULT, result)
}
setResult(RESULT_OK, resultIntent)
val onBack = { finish() }
val onScanResult = { result: String ->
// 仅当是知乎登陆URL,返回扫描结果
if (result.startsWith(LOGIN_PREFIX)) {
val resultIntent = Intent().apply {
putExtra(EXTRA_SCAN_RESULT, result)
}
finish()
},
)
setResult(RESULT_OK, resultIntent)
}
finish()
}
if (ThemeManager.getThemeStyle() == ThemeStyle.Miuix) {
MiuixQRCodeScanScreen(onBack = onBack, onScanResult = onScanResult)
} else {
QRCodeScanScreen(onBack = onBack, onScanResult = onScanResult)
}
}
}
}
Expand Down
Loading