feat(android): bundle.android config + frontend isAndroid/isMobile helpers
Two small Phase 1 follow-ups for the Android target: 1. tauri.conf.json: add `bundle.android.minSdkVersion: 24`. Android 7.0 is the floor — gives us Vulkan availability (for the eventual GPU feature flag), AAudio for cpal, and is what Pixel-class hardware tests against. Keeps the global `identifier` on `uk.co.corbel.kon` for now; the Corbie rebrand sweep will land `corbel.technology.corbie` as a single coherent commit. 2. src/lib/utils/runtime.ts: add `isAndroid()` and `isMobile()` helpers alongside the existing `hasTauriRuntime()`. Both use UA sniffing — sufficient for feature-gating UI, never for security decisions. These are how the Svelte side will hide: - hotkey config (no global hotkey API on Android) - paste-mode picker (auto-paste maps to a copy-only flow) - meeting auto-capture toggle (process list unavailable) - multi-window buttons (open-viewer, open-float, etc.) - system-tray-related affordances Tauri 2 doesn't expose a synchronous platform-detection helper that works during initial render, so UA sniffing is the pragmatic choice. https://claude.ai/code/session_0189xUb6ie6t9qHkzatGZ9Rb
This commit is contained in:
@@ -35,6 +35,9 @@
|
||||
"icons/128x128@2x.png",
|
||||
"icons/icon.icns",
|
||||
"icons/icon.ico"
|
||||
]
|
||||
],
|
||||
"android": {
|
||||
"minSdkVersion": 24
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,3 +16,30 @@ export function hasTauriRuntime() {
|
||||
if (window.isTauri === true) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Coarse-grained mobile / Android detection. Used by the Svelte UI to
|
||||
// hide features that depend on desktop-only Tauri commands (multi-window,
|
||||
// global hotkeys, auto-paste, meeting auto-capture, system tray) so an
|
||||
// Android build's frontend renders only the surfaces that actually work.
|
||||
//
|
||||
// `isMobile()` is the broader check (covers iOS and Android) and falls
|
||||
// back on the user-agent for non-Tauri previews. `isAndroid()` is the
|
||||
// targeted check used where the platform genuinely matters (e.g.
|
||||
// foreground-notification record button vs global hotkey).
|
||||
//
|
||||
// Tauri 2 doesn't expose a synchronous platform-detection helper that
|
||||
// works during the initial Svelte render, so we rely on user-agent
|
||||
// sniffing — fine for feature-gating UI, never for security decisions.
|
||||
|
||||
const ANDROID_UA_RE = /android/i;
|
||||
const MOBILE_UA_RE = /android|iphone|ipad|ipod|mobile/i;
|
||||
|
||||
export function isAndroid(): boolean {
|
||||
if (typeof navigator === "undefined") return false;
|
||||
return ANDROID_UA_RE.test(navigator.userAgent);
|
||||
}
|
||||
|
||||
export function isMobile(): boolean {
|
||||
if (typeof navigator === "undefined") return false;
|
||||
return MOBILE_UA_RE.test(navigator.userAgent);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user