XuqmGroup
90975edc50
fix(sdk-webview): 修复中文文件名上传时变为下划线的问题
...
文件名 sanitize 正则从 [^a-zA-Z0-9_\-] 改为 [^\p{L}\p{N}_\-],
保留 Unicode 字母(含汉字)和数字,不再将中文替换为 _。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 14:18:43 +08:00
XuqmGroup
4f4f8564df
fix(webview): 恢复文件选择器使用 ACTION_GET_CONTENT 保持原有 UI
...
ACTION_OPEN_DOCUMENT 打开的是 SAF 文档选择器,缺少文档、图片、最近等
快捷入口,体验不及 ACTION_GET_CONTENT 的系统底部弹窗。
真正修复 vivo/OPPO URI 权限问题的是 copyUriToWebViewCache(),选择文件后
将内容复制到本地 file:// 路径再传给 WebView,与 Intent 类型无关。
故改回 ACTION_GET_CONTENT,恢复原有选择器界面。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 14:38:25 +08:00
XuqmGroup
3d62a6ed72
fix: docx MIME 检测 + Fingerprint 协程帧稳定性
...
sdk-webview:
选文件时 DISPLAY_NAME 在 vivo content://media/external/file/ URI
上返回 null,导致扩展名推断失效;ContentResolver.getType() 对 .docx
返回 application/msword(错误)→ allowed 检查拒绝文件。
修复:DISPLAY_NAME 为 null 时回退查 MediaStore.DATA 提取文件名;
优先使用扩展名推断的 MIME 而非 ContentResolver 的返回值,
避免厂商 ROM 返回错误 MIME 的干扰。copyUriToWebViewCache 同步修复。
sdk-bugcollect:
Fingerprint.compute 取 top3 stack 帧,Kotlin 协程 dispatcher 的
第 2、3 帧在每次调度时不固定,相同逻辑错误产生不同指纹 → 多条 issue。
修改为 top1(只取抛出点帧),保证同一位置抛出的异常总被归为一条。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 15:19:51 +08:00
XuqmGroup
ab0dc90909
debug(webview): 文件选择器全链路日志 + 修复逗号分隔 acceptTypes
...
1. resolvePickerMimeTypes 对每个 entry 先按逗号拆分,再解析;
修复部分 WebView 将 accept=".docx,.doc" 作为单个字符串传入
导致 getMimeTypeFromExtension("docx,.doc") 返回 null → 变成 */*
但实际 picker 仍以 */* 启动无过滤的问题。
2. 添加 XWV-FilePicker tag 日志,覆盖:
- onShowFileChooser: acceptTypes / resolvedMimes / 分支选择
- launchPickerWithPermission: 权限检查结果
- storageReadPermissionLauncher: 权限申请结果
- pickContentLauncher: uri / rawMime / displayName / extMime /
actualMime / allowed / onReceiveValue 最终值
- copyUriToWebViewCache: 开始/结束/字节数
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 15:09:56 +08:00
XuqmGroup
6d18af496b
fix: 移除库模块 isMinifyEnabled 修复 Duplicate class 冲突
...
Android 库模块开启 isMinifyEnabled=true 时,R8 各自独立混淆,
将内部类重命名为 a.a / a.b 等短名打进 AAR;多个 AAR 合并到 App
时产生 Duplicate class 冲突。
修复:删除全部 7 个库模块 buildTypes.release 中的 isMinifyEnabled,
混淆由 App 的 R8 统一完成。将 proguard-rules.pro 中的保留规则
(manifest 注册类、反射调用入口、dontwarn)合并进各模块的
consumer-rules.pro 随 AAR 打包。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 14:57:22 +08:00
XuqmGroup
7b66fcf333
fix(webview): 修复 Office 文件选择后无响应问题
...
ContentResolver.getType() 对 doc/docx/xls/xlsx 等 Office 文件经常
返回 "application/octet-stream" 而非精确 MIME 类型,导致 allowed
检查失败、文件被拒绝、H5 无响应。
修复:rawMime 为 null 或 application/octet-stream 时,从文件显示名
的扩展名推断精确 MIME(getMimeTypeFromExtension),使 .docx 能正确
匹配 accept 约束并进入缓存复制流程。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 14:30:18 +08:00
XuqmGroup
059347988a
fix(webview): 文件选择器权限检查 + content URI 本地缓存
...
1. 触发文件选择前检查存储读取权限:API < 33 检查
READ_EXTERNAL_STORAGE,API 33+ 按 MIME 类型检查粒度媒体权限;
权限不足时先申请,结果回调后再启动选择器。
2. 将选中文件的 content:// URI 复制到 app 私有缓存目录后再传给
WebView,解决云盘、系统相册、媒体库等 content://media/ URI
WebView 渲染进程无法读取导致 H5 上传内容为空的问题。
同时修复了 doc/docx 无响应及 PDF 返回不可用 URI 的问题。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 14:20:16 +08:00
XuqmGroup
fbe2a6b677
fix(proguard): sdk-core 保留全部类名,其余模块加 -dontwarn 避免跨模块 R8 缺类错误
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 13:44:19 +08:00
XuqmGroup
aac4bd7baa
feat(proguard): 各模块开启 R8 混淆,添加 proguard-rules.pro 保留公开 API
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 13:35:10 +08:00
XuqmGroup
265994042e
fix(sdk-webview): reject file picker result when MIME type doesn't match accepted types
...
Some devices show .doc files in the picker even when only .docx was
requested (accept=".docx"). Passing the .doc URI to the WebView renderer
could cause a native crash. Now we check the actual MIME type of the
selected file against the accepted list and cancel the upload if it does
not match, preventing the renderer from receiving an unexpected file type.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 11:27:21 +08:00
XuqmGroup
ade156456a
fix(sdk-webview): handle WebView renderer crash to prevent main process from dying
...
onRenderProcessGone was not overridden, so when the WebView sandboxed
renderer process crashed (e.g. during file upload of docx), Android
terminated the main app process as well (default return false behavior).
Now: return true to keep the host app alive, report the renderer crash
via BugCollect (reflection, no compile-time dependency), and reload the
page so the user is not stuck on a blank screen.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 11:23:03 +08:00
XuqmGroup
0ec173677d
feat(webview): 添加 onProgressChanged 回调,支持页面加载进度监听
2026-06-18 14:05:43 +08:00
XuqmGroup
aeeba4fac8
feat(webview): 添加 onPageError 回调,支持页面加载失败检测
...
- XWebViewConfig 新增 onPageError(errorCode, description, failingUrl) 回调
- WebViewClient.onReceivedError 捕获主框架加载错误并回调
- App 层可据此显示重试 UI
2026-06-18 13:43:56 +08:00
XuqmGroup
f0276bb440
feat(webview): 添加blob下载功能并完善存储权限处理
...
- 添加pendingBlobDownload状态管理blob下载请求
- 实现API 30+系统上MANAGE_EXTERNAL_STORAGE权限检查
- 添加blob数据解码和文件保存功能
- 集成下载完成事件分发机制
- 完善存储权限对话框中的状态清理逻辑
- 实现blob下载成功后的相册保存或文件打开操作
2026-06-18 11:52:02 +08:00
XuqmGroup
39f5c4ecf6
fix: sdk-log 编译修复 + sdk-core/sdk-webview 类型修正
...
- sdk-log: AGP 9.x mappingFileProvider 适配、LogQueue optNullableString
- sdk-core: 移除重复 getUserInfo() 函数
- sdk-webview: XuqmSDK.getUserInfo() → .userInfo 属性访问
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 13:46:01 +08:00
XuqmGroup
4a18d06c63
docs: 添加 CLAUDE.md + 各 module README + sdk-webview JSBridge 补全
...
Agent 7 + Agent 8:
- CLAUDE.md 项目上下文
- 各 module README (core/im/push/update/webview/log)
- XWebViewStandardHandlers.kt 补全标准 JSBridge handler
2026-06-16 12:14:54 +08:00
XuqmGroup
4fa03f461e
fix(sdk-webview): add missing FileDownloadDestination import and fix curly-quote string literal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 16:44:26 +08:00
XuqmGroup
16c6668533
feat(sdk): 扩展用户信息功能并增强文件下载权限管理
...
- 扩展 setUserInfo 方法支持用户昵称和头像参数
- 重构 XuqmUserInfo 数据类使用 id 替代 userId 字段
- 更新 UpdateSDK 中用户ID解析逻辑适配新字段名
- 为 Android 11+ 设备添加 MANAGE_EXTERNAL_STORAGE 权限检查
- 实现下载暂停和恢复机制处理存储权限请求流程
- 添加权限说明对话框指导用户完成设置授权
- 集成生命周期观察者自动续传获得权限后的下载任务
2026-06-11 16:41:07 +08:00
XuqmGroup
2bd497ead4
debug(file): 添加文件下载功能的调试日志
...
- 在 FileSDK 的 saveBlobDownload 方法中添加解码、目录创建和文件写入的日志记录
- 在 XWebViewView 的 readBlobAndPost 函数中添加 JavaScript 端的数据读取和错误处理日志
- 添加锚点拦截和消息传递过程中的日志记录
- 在 blobdownload 处理流程中添加成功和失败的状态日志
- 增加文件保存到相册操作的结果日志记录
2026-06-10 20:13:45 +08:00
XuqmGroup
ff13b54d9e
feat(file): 添加图片保存到系统相册功能
...
- 在 FileSDK 中新增 saveImageToGallery 方法用于将图片文件保存到系统照片库
- 支持 Android Q 及以上版本使用 MediaStore API 安全存储图片
- 对于旧版 Android 系统使用兼容方案将图片复制到 Pictures 目录
- 在 WebView 组件下载完成后自动将图片文件保存到相册
- 仅当图片未被保存到相册时才显示文件打开选项以避免重复操作
2026-06-10 12:39:51 +08:00
XuqmGroup
0efb1b6f0f
refactor(webview): 将 WebView 活动重构为 Compose 组件
...
- 移除传统 View 系统实现,采用 Jetpack Compose 架构
- 创建 XWebViewScreen 组件替代原有的 Activity 布局
- 集成 Material Design 3 主题支持
- 保留 WebView 的核心功能和配置选项
- 添加导航状态回调接口支持
- 简化窗口边距和系统栏适配逻辑
- 优化组件生命周期管理和资源释放
2026-06-08 11:20:17 +08:00
XuqmGroup
6514c27eaa
feat(webview): 优化文件下载和图片选择功能
...
- 下载文件时在公共下载目录下创建应用名称子目录
- 实现支持多MIME类型的文件选择器合约
- 添加相机拍照功能并在图片选择时显示选项对话框
- 为Android 13+系统添加下载通知权限请求
- 重构文件选择逻辑以支持更灵活的MIME类型处理
2026-06-05 16:15:50 +08:00
XuqmGroup
d19b0ae8fc
fix(webview): 解决文件选择器MIME类型解析和通知ID空指针问题
...
- 修复了文件下载通知中notifId为空时的崩溃问题
- 为XWebViewJsBridge添加了额外的回调参数以支持消息处理
- 重构了resolvePickerMimeType函数的文档注释并优化了MIME类型解析逻辑
- 将文件选择器的MIME类型解析逻辑统一到resolvePickerMimeType函数中
- 改进了HTML accept类型的转换机制,更好地支持混合和未知MIME类型
2026-06-05 15:53:51 +08:00
XuqmGroup
0ce2f21307
feat(sdk): 新增文件上传下载功能并完善WebView组件
...
- 在Android SDK中新增FileSDK模块,提供统一的文件上传、下载、打开接口
- 实现Android端文件下载到沙盒目录或公共Downloads目录,并支持通知栏进度显示
- 完善Android WebView组件,增加文件选择、拍照、下载拦截、H5双向通信能力
- 在iOS SDK中新增XuqmFileSDK模块,提供文件上传下载功能
- 实现iOS端WebView组件的文件下载拦截和原生文件选择器集成
- 更新文档说明Android和iOS SDK的文件操作API使用方法
- 重构iOS SDK项目结构,按功能拆分为多个独立模块便于集成
- 添加文件下载进度通知和完成后的文件打开功能
2026-06-05 15:48:08 +08:00
XuqmGroup
e958b2a42c
feat(sdk-webview): add debugEnabled flag for Chrome DevTools H5 debugging
...
Set debugEnabled = true in XWebViewConfig to enable WebView remote debugging
via chrome://inspect. Calls WebView.setWebContentsDebuggingEnabled() before
WebView instantiation in both XWebViewView and XWebViewActivity. Bump to 1.0.8.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 09:58:21 +08:00
XuqmGroup
6da62dc600
feat(sdk-webview): make JS bridge name configurable; default to XWebViewBridge
...
- Add `jsBridgeName` field to `XWebViewConfig` (default: "XWebViewBridge")
- Make `DIALOG_OVERRIDE_JS` a function parameterised by bridge name
- Use `config.jsBridgeName` in both `XWebViewView` and `XWebViewActivity`
- Bump sdk-webview to 1.0.7
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 09:50:46 +08:00
XuqmGroup
7b18d279bf
build: 各 SDK 模块独立版本,publish.gradle 改用 project.version
...
每个模块通过 SDK_<NAME>_VERSION 属性指定自己的版本,
未设置时回退到全局 PUBLISH_VERSION,保持向后兼容。
发布单个模块示例:
./gradlew :sdk-license:publish -PSDK_LICENSE_VERSION=1.0.3 -PPUBLISH_VERSION=1.0.2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 16:48:10 +08:00
XuqmGroup
dc0cd7b2b1
feat(webview): 添加外部链接处理功能
...
- 引入 Context 和 Intent 导入以支持外部链接打开
- 添加 Locale 导入用于 URL 方案小写转换
- 实现 shouldLoadInWebView 函数检查 URL 方案是否允许在 WebView 中加载
- 实现 openExternalScheme 函数用于启动外部应用处理非 HTTP 链接
- 在 shouldOverrideUrlLoading 中集成新的 URL 处理逻辑
- 添加对 http、https、about、data、blob、javascript 方案的支持判断
2026-05-18 13:55:02 +08:00
XuqmGroup
0fdfc048e7
refactor(webview): 重构WebView组件实现
...
- 将rememberSaveable导入路径修正到saveable包下
- 移除未使用的Log导入并添加ViewGroup导入
- 添加FrameLayout用于WebView容器包装
- 使用FrameLayout作为WebView的父容器以改善布局控制
- 更新AndroidView的factory和update回调中的WebView引用方式
- 通过容器视图统一管理WebView生命周期和布局参数
- 更新发布版本号从0.4.9到0.4.10
2026-05-11 18:58:51 +08:00
XuqmGroup
9e9b41fedb
feat(webview): 添加独立的WebView活动支持
...
- 引入XWebViewActivity以提供完整的WebView界面
- 在AndroidManifest.xml中注册新的WebView活动
- 更新桥接功能以支持上下文启动活动
- 将内部函数和类可见性调整为internal以便组件间访问
- 增加发布版本号从0.4.3到0.4.9
2026-05-11 18:12:59 +08:00
XuqmGroup
4fe7678e07
docs(android-sdk): 添加 Android SDK 完整文档与模块配置
...
- 新增 Android SDK 主文档,包含模块结构、集成方式、快速开始指南
- 添加 sdk-core、sdk-im、sdk-push、sdk-update、sdk-webview 各模块详细说明
- 配置各模块的 build.gradle.kts 文件,设置依赖和发布选项
- 更新 gradle.properties 版本配置和编译参数
- 重构 XWebViewView 组件,增加相机权限、文件选择、下载拦截功能
- 添加 XWebViewTypes.kt 定义配置类和控制器接口
- 集成 Flutter WebView 桥接代码,实现跨平台功能对齐
2026-05-11 15:21:54 +08:00
XuqmGroup
3b84d8e4f1
fix: respect status bar in xwebview screen
2026-05-08 10:38:58 +08:00
XuqmGroup
74d9566554
chore: sync local changes
2026-05-07 19:39:38 +08:00