diff --git a/android/app/src/main/java/games/wenzi/ogame/MainActivity.java b/android/app/src/main/java/games/wenzi/ogame/MainActivity.java index 1db8bd9..8eeb0c5 100644 --- a/android/app/src/main/java/games/wenzi/ogame/MainActivity.java +++ b/android/app/src/main/java/games/wenzi/ogame/MainActivity.java @@ -1,5 +1,18 @@ package games.wenzi.ogame; +import android.os.Bundle; +import android.view.Window; +import androidx.core.content.ContextCompat; import com.getcapacitor.BridgeActivity; -public class MainActivity extends BridgeActivity {} +public class MainActivity extends BridgeActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // 设置状态栏颜色,防止 Capacitor 强制透明 + Window window = getWindow(); + window.setStatusBarColor(ContextCompat.getColor(this, R.color.status_bar_color)); + window.setNavigationBarColor(ContextCompat.getColor(this, R.color.status_bar_color)); + } +} diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..30d2a3c --- /dev/null +++ b/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #1a1a2e + diff --git a/package.json b/package.json index 75dc586..5007d7d 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,8 @@ "@capacitor/app": "^8.0.0", "@capacitor/cli": "^8.0.0", "@capacitor/core": "^8.0.0", + "@capacitor/filesystem": "^8.0.0", + "@capacitor/share": "^8.0.0", "@tailwindcss/vite": "^4.1.17", "@tanstack/vue-table": "^8.21.3", "@vueuse/core": "^14.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8237289..c8493af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,12 @@ importers: '@capacitor/core': specifier: ^8.0.0 version: 8.0.0 + '@capacitor/filesystem': + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) + '@capacitor/share': + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@tailwindcss/vite': specifier: ^4.1.17 version: 4.1.17(rolldown-vite@7.2.5(@types/node@24.10.2)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.44.1)) @@ -666,6 +672,19 @@ packages: '@capacitor/core@8.0.0': resolution: {integrity: sha512-250HTVd/W/KdMygoqaedisvNbHbpbQTN2Hy/8ZYGm1nAqE0Fx7sGss4l0nDg33STxEdDhtVRoL2fIaaiukKseA==} + '@capacitor/filesystem@8.0.0': + resolution: {integrity: sha512-RRGNLW9xEqvVVHGyGlfS4Oy0R3Na+bEefwZElKbex22S9eZr5cg8wc750BPPVwbcv5lf5fJymkY8x8y6UwKPyg==} + peerDependencies: + '@capacitor/core': '>=8.0.0' + + '@capacitor/share@8.0.0': + resolution: {integrity: sha512-VU+xT4LFwr4keIC0UKDqGQVAiNlAHwoTMQg8wVVSxtn/k32VOvvtqFfu63qnXr40WKytZWrxJfVESvRjd761yg==} + peerDependencies: + '@capacitor/core': '>=8.0.0' + + '@capacitor/synapse@1.0.4': + resolution: {integrity: sha512-/C1FUo8/OkKuAT4nCIu/34ny9siNHr9qtFezu4kxm6GY1wNFxrCFWjfYx5C1tUhVGz3fxBABegupkpjXvjCHrw==} + '@csstools/cascade-layer-name-parser@2.0.5': resolution: {integrity: sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==} engines: {node: '>=18'} @@ -5115,6 +5134,17 @@ snapshots: dependencies: tslib: 2.8.1 + '@capacitor/filesystem@8.0.0(@capacitor/core@8.0.0)': + dependencies: + '@capacitor/core': 8.0.0 + '@capacitor/synapse': 1.0.4 + + '@capacitor/share@8.0.0(@capacitor/core@8.0.0)': + dependencies: + '@capacitor/core': 8.0.0 + + '@capacitor/synapse@1.0.4': {} + '@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) diff --git a/src/views/SettingsView.vue b/src/views/SettingsView.vue index ef279bf..ff1a18b 100644 --- a/src/views/SettingsView.vue +++ b/src/views/SettingsView.vue @@ -333,6 +333,9 @@ } from 'lucide-vue-next' import { saveAs } from 'file-saver' import { toast } from 'vue-sonner' + import { Capacitor } from '@capacitor/core' + import { Filesystem, Directory } from '@capacitor/filesystem' + import { Share } from '@capacitor/share' import pkg from '../../package.json' import { checkLatestVersion, canCheckVersion } from '@/utils/versionCheck' import type { VersionInfo } from '@/utils/versionCheck' @@ -523,7 +526,25 @@ const fileName = `${pkg.name}-${new Date().toISOString().slice(0, 10)}-${Date.now()}.json` const jsonString = JSON.stringify(exportData, null, 2) - saveAs(new Blob([jsonString], { type: 'application/json' }), fileName) + + // Android 使用 Capacitor Filesystem + Share + if (Capacitor.isNativePlatform()) { + // 写入文件到缓存目录 + const result = await Filesystem.writeFile({ + path: fileName, + data: jsonString, + directory: Directory.Cache + }) + // 分享文件让用户选择保存位置 + await Share.share({ + title: t('settings.exportData'), + url: result.uri, + dialogTitle: t('settings.exportData') + }) + } else { + // Web 使用 file-saver + saveAs(new Blob([jsonString], { type: 'application/json' }), fileName) + } toast.success(t('settings.exportSuccess')) } catch (error) { console.error('Export failed:', error)