diff --git a/android-webview-app/APP_CHANGELOG.md b/android-webview-app/APP_CHANGELOG.md index 8018b0b..73c3845 100644 --- a/android-webview-app/APP_CHANGELOG.md +++ b/android-webview-app/APP_CHANGELOG.md @@ -1,5 +1,23 @@ # App 更新说明 +# 1.0.10 +- 手机 App 左上角菜单新增“刷新页面”入口(仅 App 端显示) +- 加载界面(正在连接服务器)新增“刷新页面”按钮 +- 继续优化 App 内更新下载链路稳定性 + +# 1.0.9-test1 +- 测试版本:验证 App 内下载更新链路(DownloadManager)是否在不同浏览器环境下稳定工作 + +# 1.0.9 +- 修复 App 内点击“更新”后依赖外部浏览器下载导致部分机型失败的问题 +- 新增 Android JS Bridge 下载通道:优先使用系统 DownloadManager 直接下载 APK +- 前端下载逻辑增加桥接优先与浏览器回退,提升下载成功率 + +# 1.0.8 +- 同步最新对话压缩体验:压缩中状态提示更稳定,压缩完成后反馈更清晰 +- 优化压缩后会话切换与列表刷新表现,减少需要手动刷新的情况 +- 修复电脑端摘要行与正式输出内容的对齐问题 + # 1.0.7 - 应用图标替换为新的机器人插画 PNG 版本 diff --git a/android-webview-app/app/build.gradle.kts b/android-webview-app/app/build.gradle.kts index 79b7e86..6d95398 100644 --- a/android-webview-app/app/build.gradle.kts +++ b/android-webview-app/app/build.gradle.kts @@ -16,8 +16,8 @@ android { applicationId = "com.cyjai.agent" minSdk = 24 targetSdk = 35 - versionCode = 8 - versionName = "1.0.7" + versionCode = 12 + versionName = "1.0.10" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/android-webview-app/app/src/main/AndroidManifest.xml b/android-webview-app/app/src/main/AndroidManifest.xml index a3eb7d8..0af9c4d 100644 --- a/android-webview-app/app/src/main/AndroidManifest.xml +++ b/android-webview-app/app/src/main/AndroidManifest.xml @@ -5,10 +5,10 @@ diff --git a/android-webview-app/app/src/main/res/drawable/ic_launcher_photo_v2.png b/android-webview-app/app/src/main/res/drawable/ic_launcher_photo_v2.png new file mode 100644 index 0000000..19f1c7e Binary files /dev/null and b/android-webview-app/app/src/main/res/drawable/ic_launcher_photo_v2.png differ diff --git a/static/icons/refresh-cw.svg b/static/icons/refresh-cw.svg new file mode 100644 index 0000000..2e2fd98 --- /dev/null +++ b/static/icons/refresh-cw.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/src/App.vue b/static/src/App.vue index bbf9d98..4b77340 100644 --- a/static/src/App.vue +++ b/static/src/App.vue @@ -33,6 +33,9 @@

加载中...

正在连接服务器,请稍候

+
@@ -409,7 +412,7 @@ + @@ -535,10 +548,14 @@ import VirtualMonitorSurface from './components/chat/VirtualMonitorSurface.vue'; import VideoPicker from './components/overlay/VideoPicker.vue'; const mobilePanelIcon = new URL('../icons/align-left.svg', import.meta.url).href; +const isAppShell = + typeof window !== 'undefined' && + (new URLSearchParams(window.location.search).has('app_shell') || Boolean((window as any)?.AndroidThemeBridge)); const mobileMenuIcons = { workspace: new URL('../icons/folder.svg', import.meta.url).href, personal: new URL('../icons/user.svg', import.meta.url).href, - newChat: new URL('../icons/pencil.svg', import.meta.url).href + newChat: new URL('../icons/pencil.svg', import.meta.url).href, + refresh: new URL('../icons/refresh-cw.svg', import.meta.url).href }; defineOptions(appOptions); diff --git a/static/src/app/methods/ui.ts b/static/src/app/methods/ui.ts index 9fe78a6..f78bb4f 100644 --- a/static/src/app/methods/ui.ts +++ b/static/src/app/methods/ui.ts @@ -118,6 +118,18 @@ export const uiMethods = { this.uiSetMobileOverlayMenuOpen(false); }, + refreshCurrentPage() { + if (typeof window === 'undefined') { + return; + } + window.location.reload(); + }, + + handleMobileRefreshClick() { + this.uiSetMobileOverlayMenuOpen(false); + this.refreshCurrentPage(); + }, + closeMobileOverlay() { if (!this.activeMobileOverlay) { this.uiCloseMobileOverlay(); diff --git a/static/src/components/personalization/PersonalizationDrawer.vue b/static/src/components/personalization/PersonalizationDrawer.vue index 59a5f3d..e03c23c 100644 --- a/static/src/components/personalization/PersonalizationDrawer.vue +++ b/static/src/components/personalization/PersonalizationDrawer.vue @@ -1101,8 +1101,9 @@ if (typeof window !== 'undefined') { const bridge = (window as any)?.AndroidThemeBridge; const bridgeVcRaw = bridge && typeof bridge.getAppVersionCode === 'function' ? String(bridge.getAppVersionCode() || '') : ''; const bridgeVnRaw = bridge && typeof bridge.getAppVersionName === 'function' ? String(bridge.getAppVersionName() || '') : ''; - const finalVcRaw = vcRaw || bridgeVcRaw; - const finalVnRaw = vnRaw || bridgeVnRaw; + // App 端优先使用 Bridge 实时版本,避免 WebView 恢复旧 URL 参数导致显示过期版本号 + const finalVcRaw = bridgeVcRaw || vcRaw; + const finalVnRaw = bridgeVnRaw || vnRaw; appCurrentVersionCode.value = /^\d+$/.test(finalVcRaw) ? Number(finalVcRaw) : null; appCurrentVersionName.value = finalVnRaw || ''; } diff --git a/static/src/styles/components/overlays/_overlays.scss b/static/src/styles/components/overlays/_overlays.scss index 742b48d..60b11da 100644 --- a/static/src/styles/components/overlays/_overlays.scss +++ b/static/src/styles/components/overlays/_overlays.scss @@ -1575,7 +1575,7 @@ } /* 个人空间图标稍大一点 */ -.mobile-menu-item:nth-child(3) img.mobile-menu-icon { +.mobile-menu-item--personal img.mobile-menu-icon { width: 26px !important; height: 26px !important; } @@ -2473,6 +2473,23 @@ color: var(--claude-text-secondary); } +.loading-refresh-btn { + margin-top: 14px; + border: 1px solid var(--claude-border); + border-radius: 10px; + background: var(--claude-panel); + color: var(--claude-text); + padding: 8px 14px; + font-size: 13px; + cursor: pointer; + transition: transform 0.18s ease, box-shadow 0.18s ease; +} + +.loading-refresh-btn:hover { + transform: translateY(-1px); + box-shadow: 0 8px 20px rgba(61, 57, 41, 0.14); +} + .boxes { --size: 34px; --duration: 900ms;