diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle index 4ecc652..d15b1b4 100644 --- a/android/app/capacitor.build.gradle +++ b/android/app/capacitor.build.gradle @@ -9,6 +9,7 @@ android { apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" dependencies { + implementation project(':capacitor-app') implementation project(':capacitor-clipboard') implementation project(':capacitor-filesystem') implementation project(':capacitor-toast') diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle index 3962b18..ce6a69a 100644 --- a/android/capacitor.settings.gradle +++ b/android/capacitor.settings.gradle @@ -2,6 +2,9 @@ include ':capacitor-android' project(':capacitor-android').projectDir = new File('../node_modules/.pnpm/@capacitor+android@5.2.2_@capacitor+core@5.2.2/node_modules/@capacitor/android/capacitor') +include ':capacitor-app' +project(':capacitor-app').projectDir = new File('../node_modules/.pnpm/@capacitor+app@5.0.6_@capacitor+core@5.2.2/node_modules/@capacitor/app/android') + include ':capacitor-clipboard' project(':capacitor-clipboard').projectDir = new File('../node_modules/.pnpm/@capacitor+clipboard@5.0.6_@capacitor+core@5.2.2/node_modules/@capacitor/clipboard/android') diff --git a/package.json b/package.json index 9dd2cf2..1afb458 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ }, "dependencies": { "@capacitor/android": "^5.2.2", + "@capacitor/app": "^5.0.6", "@capacitor/clipboard": "^5.0.6", "@capacitor/core": "^5.2.2", "@capacitor/filesystem": "^5.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cdf2fa9..a943965 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,9 @@ importers: '@capacitor/android': specifier: ^5.2.2 version: 5.2.2(@capacitor/core@5.2.2) + '@capacitor/app': + specifier: ^5.0.6 + version: 5.0.6(@capacitor/core@5.2.2) '@capacitor/clipboard': specifier: ^5.0.6 version: 5.0.6(@capacitor/core@5.2.2) @@ -1479,6 +1482,14 @@ packages: '@capacitor/core': 5.2.2 dev: false + /@capacitor/app@5.0.6(@capacitor/core@5.2.2): + resolution: {integrity: sha512-6ZXVdnNmaYILasC/RjQw+yfTmq2ZO7Q3v5lFcDVfq3PFGnybyYQh+RstBrYri+376OmXOXxBD7E6UxBhrMzXGA==} + peerDependencies: + '@capacitor/core': ^5.0.0 + dependencies: + '@capacitor/core': 5.2.2 + dev: false + /@capacitor/assets@2.0.4(@types/node@18.17.1)(typescript@5.1.6): resolution: {integrity: sha512-1zYuwJujihsCLavojpZQQEjQjxG8BgD2/QWaX1Je2TQgN8UVbmnQG7gO+6gaHqP+hgZu7SOcJ+BlMG+tarBXLA==} engines: {node: '>=10.3.0'} diff --git a/src/components/App.tsx b/src/components/App.tsx index 87b947b..540a1a2 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -1,4 +1,6 @@ -import { Match, Show, Suspense, Switch } from "solid-js"; +import { App as CapacitorApp } from "@capacitor/app"; +import { Capacitor } from "@capacitor/core"; +import { Match, onCleanup, Show, Suspense, Switch } from "solid-js"; import { A } from "solid-start"; import settings from "~/assets/icons/settings.svg"; @@ -28,6 +30,25 @@ export function App() { const i18n = useI18n(); const [state, _actions] = useMegaStore(); + // Check if the platform is Android to handle back + if (Capacitor.getPlatform() === "android") { + const { remove } = CapacitorApp.addListener( + "backButton", + ({ canGoBack }) => { + if (!canGoBack) { + CapacitorApp.exitApp(); + } else { + window.history.back(); + } + } + ); + + // Ensure the listener is cleaned up when the component is destroyed + onCleanup(() => { + remove(); + }); + } + return ( diff --git a/vite.config.ts b/vite.config.ts index 7e96481..761fc17 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -65,7 +65,8 @@ export default defineConfig({ "@capacitor/core", "@capacitor/filesystem", "@capacitor/toast", - "@mutinywallet/barcode-scanner" + "@mutinywallet/barcode-scanner", + "@capacitor/app" ], // This is necessary because otherwise `vite dev` can't find the wasm exclude: ["@mutinywallet/mutiny-wasm", "@mutinywallet/waila-wasm"]