feat: update app refresh entry and release metadata

This commit is contained in:
JOJO 2026-04-06 19:51:56 +08:00
parent b29e6a67f8
commit 81d4c17ae7
9 changed files with 75 additions and 9 deletions

View File

@ -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 版本

View File

@ -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"
}

View File

@ -5,10 +5,10 @@
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher_photo"
android:icon="@drawable/ic_launcher_photo_v2"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@drawable/ic_launcher_photo"
android:roundIcon="@drawable/ic_launcher_photo_v2"
android:supportsRtl="true"
android:theme="@style/Theme.AgentWebView"
android:usesCleartextTraffic="false">

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="opacity:1;"><path d="M3 12a9 9 0 0 1 9-9a9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5m5 4a9 9 0 0 1-9 9a9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/></svg>

After

Width:  |  Height:  |  Size: 355 B

View File

@ -33,6 +33,9 @@
<div class="loading-copy">
<h2>加载中...</h2>
<p>正在连接服务器请稍候</p>
<button type="button" class="loading-refresh-btn" @click="refreshCurrentPage">
刷新页面
</button>
</div>
</div>
@ -409,7 +412,7 @@
</button>
<button
type="button"
class="dropdown-item mobile-menu-item"
class="dropdown-item mobile-menu-item mobile-menu-item--personal"
aria-label="个人空间"
@click="handleMobilePersonalClick"
>
@ -425,6 +428,16 @@
<img class="mobile-menu-icon" :src="mobileMenuIcons.newChat" alt="" aria-hidden="true" />
<div class="item-label">新建对话</div>
</button>
<button
v-if="isAppShell"
type="button"
class="dropdown-item mobile-menu-item mobile-menu-item--refresh"
aria-label="刷新页面"
@click="handleMobileRefreshClick"
>
<img class="mobile-menu-icon" :src="mobileMenuIcons.refresh" alt="" aria-hidden="true" />
<div class="item-label">刷新页面</div>
</button>
</div>
</transition>
<transition name="header-menu">
@ -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);

View File

@ -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();

View File

@ -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 || '';
}

View File

@ -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;