Skip to content

Feat/sync upstream 2.1.2.3 - #173

Merged
wm-develop merged 41 commits into
dev4harmony:ohosfrom
wm-develop:feat/sync-upstream-2.1.2.3
Aug 31, 2026
Merged

wm-develop merged 41 commits into
dev4harmony:ohosfrom
wm-develop:feat/sync-upstream-2.1.2.3

Conversation

@wm-develop

Copy link
Copy Markdown
Member

Feat/sync upstream 2.1.2.3(44680b8a4)

一、逐提交处置

提交 标题 处置
61c65a65c feat: 日志页「复制相关信息」 (bggRGjQaUbCoE#2688) ✅ 鸿蒙侧此前已自行同步过,本轮只补 06b88943c 的 $1→$2 修正
62bdcafa1 fix cdn test(downloaded += count → =) ✅ 全跟
d2b2f5c9d fix clear vote card ✅ 全跟
299905f47 opt: 设置项弹窗改为 PopupMenu (bggRGjQaUbCoE#2683) ✅ 全跟(style_settings.dart 里鸿蒙的 ThemeUtils.syncColorModeToNative() 已挪进新的 _setThemeType)
6413631c0 update reply sort type(label/label2/text → desc/descShort/label) ✅ 全跟
6c6b8dd7e fix bggRGjQaUbCoE#2638(webview url http2https) ✅ 全跟(随 ddd46dfd4 一起落地)
b819ad898 发布面板转场时长桌面端 400ms ✅ 全跟,但保留鸿蒙的 getter 写法,见第二节
3e8a79446 feat: android doc provider 🟡 Dart 侧全跟;bindings.g.dart 鸿蒙存根补一个空的 updateDocProvider(bool),安卓原生文件原样合入
66c9c339d fix: search apiType (bggRGjQaUbCoE#2697) ✅ 全跟
9b9791cf3 opt: unused activity context (bggRGjQaUbCoE#2698) ✅ 全跟(存根签名按此提交后的 (bool))
226bd3bb7 refa 举报弹窗内容校验 ✅ 鸿蒙侧此前已自行同步;clearError() 保持鸿蒙的 validate()——3.41 的 FormFieldState 没有 clearError
b71474d09 / 2c3cc3b88 流损坏自动恢复 及其 Revert ⛔ 两者抵消,净变化为零
f40cab0a5 allow bcc subtitle ext ✅ 全跟
35e5454a4 ed78bee1f d7552cad8 32a39e466 upgrade deps ×4 ⛔ 不跟,pubspec.lock 与 HEAD 逐字节一致
49356bf73 unify settings text style ✅ 全跟
ddd46dfd4 opt: webview (bggRGjQaUbCoE#2713) ✅ 全跟,鸿蒙的 4 处适配重新套上,见第二节
198261f51 保存封面弹窗桌面端显示「复制链接」 ✅ 全跟(鸿蒙自己的 image_save.dart 结构上手工加入 else 分支)
dde09d91a 分P 面板显示序号 ✅ 全跟
d529e0a2d style: directives_ordering (bggRGjQaUbCoE#2734) 🟡 78 个文件的 import 重排;与鸿蒙侧 import 集合不同的文件按「并集 + 去重」解决,见第三节
ea67b9313 fix bggRGjQaUbCoE#2731(Windows 窗口透明度) ⛔ 不适用:Platform.isWindows 专用,且鸿蒙 main/view.dart 没有 _hide/_show 这套结构
44354d7fa flutter 3.47.2 ⛔ 不跟,.fvmrc / environment 不动
76feace34 opt init theme style 🟡 取 SnackBar / Tooltip 主题补 fontFamily/fontWeight、tooltip 背景改 const Color(0xE6616161);字重跟随系统、无自定义字体时回落 HarmonyOS Sans 的鸿蒙逻辑整段保留
797f15453 37ae9cf2d 9058ac144 6ee11d392 1f43c60d8 db77169b4 4667f5f53 932b95ccb 自定义字体导入系列 ✅ 跟进最终形态(db77169b4 + 后续三个修正);font_setting.dart 与上游逐字节一致,font_utils.dart 只做文件选择器适配,见第二节
85803c196 fix selectable region patch ⛔ SDK 补丁,lib/scripts/ 保持鸿蒙版
4da811080 移动端「复制缓存路径」 ✅ 全跟
9624c3725 tweaks (bggRGjQaUbCoE#2767) 🟡 主体全跟(骨架屏改 SliverSingleChildDelegate、logout 返回 LoadingState、搜索历史去重、SliverFixedWrap 重构…);未取的部分见第二节
06b88943c fix: report info (bggRGjQaUbCoE#2771) ✅ 全跟
adb659938 fix show reply bottom sheet ✅ 全跟
44680b8a4 fix parse dyn uri ✅ 全跟

逐 hunk 落地核验(把每个提交的新增行去空白后在最终工作区里找):除上表标 ⛔/🟡 的以外全部 100%;标 🟡 的逐条看过,未落地的行都是下列三类之一——刻意保留的鸿蒙版、被上游后续提交又改掉的中间态(如 label2、replyReply(item, id))、安卓 JNI 绑定。


二、取舍说明

自定义字体导入(797f15453 起 8 个提交)——跟进,鸿蒙只适配文件选择器

上游把字体页从「系统字体下拉框」改成「列表 + 导入本地 ttf/ttc/otf」:选中的字体文件存为 <appSupportDir>/customFont.otf,启动时 FontUtils.init() 用 dart:ui loadFontFromList注册,字体族名形如 <时间戳>/<文件名>(含 / 即视为自定义),Pref.appFont 挪进 FontUtils.appFont。这套实现与平台无关,鸿蒙上可用,处置:

文件 处置
pages/setting/pages/font_setting.dart 与上游 2.1.2.3 逐字节一致(含 4667f5f53 保存逻辑修正、932b95ccb 默认字重预览、37ae9cf2d 已无下拉框)
utils/font_utils.dart 以上游最终版为基底,仍摘除 Android(JNI) / Windows(win32) 枚举分支(原因同上一轮);唯一适配:上游用 file_picker 12 的静态 FilePicker.pickFiles() + PlatformFile.readAsBytes(),鸿蒙 fork file_picker_ohos 10.3.8 只有 FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions:…, allowMultiple: true) 返回 FilePickerResult,改为 result.files + file.xFile.readAsBytes()(字幕导入已在用同一条路径)。getFont() 保留鸿蒙的「只在 Linux 枚举失败时提示」
utils/theme_utils.dart FontUtils.fontFamily ?? (useBuiltInFont ? "HarmonyOS_Sans" : "HarmonyOS Sans")——未导入字体时行为与改动前一致;字重跟随系统的逻辑不动
utils/storage_pref.dart 随上游删掉 Pref.appFont(全仓已无引用)
main.dart Future.wait([...]) 里加 ?FontUtils.init();appSupportDirPath 在此之前由 _initAppPath() 初始化,与上游顺序相同

鸿蒙上 getFont() 仍返回空集合,所以字体页的列表只有「默认」+ 已导入的自定义字体,系统字体那一段不会出现。

下一轮注意:上游 828de30e9 opt: appFontWeight (#2787)(已在 2.1.2.3 之后)会碰 theme_utils.dart 的字重逻辑,到时以鸿蒙版为基底、沿本节的对应关系合并。

ddd46dfd4 opt: webview —— 全跟,但鸿蒙 4 处适配重新套上

上游把 _WebviewPageState 重写(RouteAware、_isPop 时卸掉 WebView、去掉 userAgent 构造参数、_title/_progress 私有化),git 在这个文件上报了 4 个冲突且其中一个是「上游整段挪位、鸿蒙侧原文」的假冲突。处置是整份取上游版,再把鸿蒙的私货逐条加回:

鸿蒙适配 说明
ScaledWidgetsFlutterBinding.scaleFactor 进页置 1.0、退页还原 CPF Flutter 在缩放比例非 1.0 时 platformview 触摸漂移
SafeArea(top: false) 平板异常带顶部安全区
onDownloadStartRequest: Platform.isAndroid || OS.isHarmony 鸿蒙也走下载确认弹窗
useHybridComposition: false(上游本轮改成了 true) 鸿蒙 flutter_inappwebview_ohos 的 FlutterWebView.ets 会读取这个值(第 158/165/172 行三处 !customSettings.useHybridComposition 分支),改 true 会改变鸿蒙侧行为。geetest_webview_dialog.dart 里同一处也一并保持 false,两处都加了注释

全仓没有调用方给 WebviewPage 传 userAgent:(grep 确认),去掉该参数无影响。
上游给 WebviewPage 加的 RouteAware 订阅只在 Platform.isAndroid 下生效,鸿蒙无副作用。

9624c3725 tweaks —— 未取的部分

位置 未取的内容 原因
sliver_wrap.dart required this._mainAxisExtent / this._spacing 构造写法 Dart 3.12 私有具名参数,3.11 不支持;保留鸿蒙的 spacing/runSpacing 转存写法,其余重构(去掉 SliverWrapElement、updateRenderObject 里 markRowsDirty()、_Row 精简)全部落地
dynamics/view.dart ThemeData theme → ColorScheme colorScheme 改名,PreferredSize + Row 顶栏 纯外观改名;鸿蒙这个文件用真 AppBar(primary: true) 避让安全区、actions 是 List、发布按钮多包一层 Center,整份保持鸿蒙版
msg_feed_top/{at_me,like_detail,like_me,reply_me,sys_msg} 表达式式 switch 改语句式 与鸿蒙未跟进的 opt ui 耦合(sys_msg 的 SliverSafeArea(top:false,bottom:false) 也来自 6cb8a8e06 opt ui);只把骨架屏那一小段改成 SliverPrototypeExtentList + SliverSingleChildDelegate,其余保持鸿蒙版
search/view.dart ViewInsetsSafeArea 包一层 同样来自 6cb8a8e06 opt ui,鸿蒙未跟;只取 trending != null || rcmd != null 那一处条件
pl_player/controller.dart if (videoPlayerController case NativePlayer(:final state)) 鸿蒙的 enterPip 签名(Future<PiPStatus> enterPip({bool isAuto}) + 横屏小窗拦截)与上游完全不同,保持鸿蒙版
publish_route.dart final 字段覆写 保留鸿蒙的私有字段 + getter 写法,只把 transitionDuration 改成可空并按 PlatformUtils.isDesktop 取 400/500ms
common_dyn_page.dart / match_info/view.dart replyReply(item, id) 被上游后一个提交 adb659938 改回 (context, item, id),最终态已落地

299905f47 / 226bd3bb7 里的两处小替换

  • report.dart:上游先用 static ReasonCheck x = (...) 闭包,tweaks 又改成静态函数,最终态(静态函数)已落地;updateReasonType 里的 key.currentState?.clearError() 保持鸿蒙侧此前的 validate()(3.41 无 clearError)。
  • storage_key.dart:鸿蒙自己的 fullScreenModeMigrated 与上游新增的 enableDocProvider 取并集。

三、冲突处置与「无冲突 ≠ 无问题」

git merge 报 55 个文件冲突,绝大多数是 d529e0a2d 的 import 重排撞上鸿蒙侧多出的 import(os_type、harmony_adapt、scale_app…)。处理方式:

  1. 脚本自动解决 21 个文件:冲突块两侧都是纯 import 行时取并集,再全文件去重(上游把某行挪到冲突块之外时会产生重复 import);
  2. 按块取舍其余文件;.fvmrc、selectable_region.patch、bindings.g.dart、pubspec.lock 固定取鸿蒙侧(font_utils.dart 先取鸿蒙侧,再按第二节重写);
  3. 自动合并出错的 9 个文件整份回退鸿蒙版再手工套改动:三个 vendored 的 text_field/*.dart(上游把 material_ui import 挪出冲突块,导致 AdaptiveTextSelectionToolbar 二义、HardwareKeyboard 等未定义)、 dynamics/view.dart(上游在冲突块外把 theme 改名 colorScheme)、五个 msg_feed_top 页面(冲突块只覆盖 switch 头部,头尾风格错配);
  4. live_room/view.dart、extra_settings.dart、video/view.dart 各多出一条重复 import (material_ui 裸 import 与 hide PageView 版并存等),已清掉。

语义丢失行扫描(鸿蒙 HEAD 有、合并结果整份文件找不到的行):62 个文件 395 行,用鸿蒙关键字(isHarmony / HarmonyChannel / 鸿蒙 / ohos / Hds / ScaledWidgetsFlutterBinding / ExtendedVisibilityDetector / finishAutofillContext / syncColorModeToNative)扫描命中 0;逐文件看过,全是上游本轮的重构替换(sliver_wrap 33 行、save_panel 29 行、webview 29 行、setting/view.dart 28 行…)。

不变量校验(check_invariants.py,本轮重建,14 项全绿):

  • material_ui / cupertino_ui shim
  • 无 TargetPlatform.ohos
  • 无 package:file_picker/
  • 无 jni / jnigen /
  • desktop_webview_window
  • 改动文件里无 Dart 3.12 私有具名参数
  • .fvmrc 与 pubspec
  • environment 未被带跑
  • 12 个 vendored 副本仍在
  • ExtendedVisibilityDetector 6/6
  • flutter/page/page_view 4/4
  • flutter/page/tabs 4/4
  • 11 个鸿蒙关键适配点仍在(含本轮新增的 useHybridComposition: false ×2、updateDocProvider 存根、FontUtils.fontFamily ?? 回落、FilePicker.platform.pickFiles、?FontUtils.init())
  • 无冲突标记
  • 未新引入 BOM。

四、真机重点

  1. 网页 / 内嵌 WebView(登录验证码、举报网页、笔记、直播间 h5):ddd46dfd4 重写了页面骨架——确认缩放比例非 1.0 时触摸不漂移、平板顶部无多余留白、下载确认弹窗还在、返回后 WebView 正常销毁不黑屏。
  2. 设置页各弹窗改成的 PopupMenu(主题模式、默认启动页、顶/底栏收起类型、动态 UP 主位置、动态/消息未读标记、评论/楼中楼/动态展示、SC 类型、底部进度条):确认能选、选后立即生效或提示重启;主题模式切换后状态栏/导航栏颜色跟着变(syncColorModeToNative 挪位后的验证点)。
  3. 举报:评论举报选「其他」/「虚假不实信息」时才要求填理由,右上角有「网页举报」入口;弹幕 / 直播弹幕 / 私信举报不再弹理由框。
  4. 列表骨架屏(消息中心五个页面、私信、评论、直播、搜索结果、空间…)加载态显示正常。
  5. 账号管理多选登出:成功/部分失败的提示文案变了(所选账号均退出登录失败 / 账号 x,y 退出登录失败)。
  6. 分P 面板与简介分P 列表右下角显示序号。
  7. 视频页保存封面弹窗(手机端仍是「分享」,桌面端多「复制链接」);下载管理长按多「复制缓存路径」。
  8. 搜索:搜索历史重复搜同一词不再把它挪到最前时重复写入;横屏布局条件变了。
  9. SliverFixedWrap(用到的地方:标签/热搜之类的 Wrap 列表)滚动、resize 后不错位。
  10. 字体设置页(本轮新功能):设置 → 外观 → App字体设置。列表应只有「默认」;点右上「+」能拉起系统文件选择器并按 ttf/ttc/otf 过滤(多选);导入后预览区立刻换字体,点确定后全局换字体、<appSupportDir>/customFont.otf 生成;杀掉重开字体仍在(走 FontUtils.init());再选「默认」确定后文件被删、回到 HarmonyOS Sans;导入非法/损坏的字体文件不应崩(_loadFont 吞异常,只是不生效);横屏时页面是左右分栏。字重/字号仍可调,字重「默认」仍跟随系统。

五、下一轮注意

  • 上游 main 已在 2.1.2.3 之后多了 828de30e9 opt: appFontWeight (#2787),会碰 theme_utils.dart 字重逻辑,以鸿蒙版为基底。font_setting.dart 现在与上游一致,以后可以直接取上游;font_utils.dart 上游每动一次都要重做第二节那一处 FilePicker.platform 适配。
  • useHybridComposition 现在是鸿蒙有意与上游不一致的点(两处),已加注释;不变量脚本会盯着它。
  • msg_feed_top/*、search/view.dart、dynamics/view.dart 仍是「上游 opt ui 未跟」的长期分歧点,每轮都会在这些文件上冲突,固定思路:以鸿蒙版为基底,只挑与骨架无关的小改动套上。
  • lib/utils/android/bindings.g.dart 存根本轮又多了一个方法(updateDocProvider),上游每加一个 JNI 绑定就要在存根里补一个空实现,仍固定取 --ours 后手工补。
  • 本地仓库已 --unshallow,以后别对 upstream-bgg 用 --depth。

My-Responsitories and others added 30 commits August 24, 2026 15:03
Signed-off-by: dom <githubaccount56556@proton.me>
Closes bggRGjQaUbCoE#2692

Signed-off-by: dom <githubaccount56556@proton.me>
Closes bggRGjQaUbCoE#2671

Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
ref BiliRoamingX

Signed-off-by: dom <githubaccount56556@proton.me>
add web report btn

Closes bggRGjQaUbCoE#2647

Signed-off-by: dom <githubaccount56556@proton.me>
- Add stream-lavf-o=reconnect=1 to enable HTTP stream reconnection
  on connection drops
- Auto-refresh player on NAL corruption errors (Invalid NAL unit size,
  Error splitting NAL, Stream ends prematurely) with 5s throttle,
  preventing permanent playback stall

Co-authored-by: Alin Jiang <zonglinj@amazon.com>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Closes bggRGjQaUbCoE#2716

Signed-off-by: dom <githubaccount56556@proton.me>
* opt: webview

* fix: android webview anim

* fix patch

Signed-off-by: dom <githubaccount56556@proton.me>

---------

Co-authored-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Closes bggRGjQaUbCoE#2717

Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
bggRGjQaUbCoE and others added 11 commits August 29, 2026 11:24
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
* refa: font setting

* update

Signed-off-by: dom <githubaccount56556@proton.me>

* fix remove font [skip ci]

Signed-off-by: dom <githubaccount56556@proton.me>

* tweaks [skip ci]

Signed-off-by: dom <githubaccount56556@proton.me>

---------

Co-authored-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
* opt: anonymity doc

* twk

* fix: debug route

* opt: logout

* twk

* opt: avoid closure

* opt: sliver wrap

* twk

* twk

* opt: onCheckReply

* opt: SliverPrototypeExtentList

* opt: SliverSingleChildDelegate

* twk
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
Signed-off-by: dom <githubaccount56556@proton.me>
@wm-develop
wm-develop merged commit 6ad8aa5 into dev4harmony:ohos Aug 31, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

4 participants