From 584e4960e911a20bb7ddf874fdd2de777e15421f Mon Sep 17 00:00:00 2001 From: Doji Date: Sat, 8 Aug 2026 20:16:10 +0800 Subject: [PATCH] feat(stage-pocket): improve permission management (#2184) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: LemonNeko <17664845+LemonNekoGH@users.noreply.github.com> --- .../java/ai/moeru/airi_pocket/MainActivity.kt | 1 + .../airi_pocket/MicrophonePermissionPlugin.kt | 22 + .../onboarding/step-permissions.vue | 51 +- .../permissions/permission-card.vue | 65 +++ .../permissions/permissions-panel.vue | 147 ++++++ .../src/modules/microphone-permission.ts | 12 + .../src/pages/settings/system/index.vue | 6 + .../src/pages/settings/system/permissions.vue | 22 + packages/i18n/src/locales/en/settings.yaml | 17 +- packages/i18n/src/locales/es/settings.yaml | 17 +- packages/i18n/src/locales/fr/settings.yaml | 17 +- packages/i18n/src/locales/ja/settings.yaml | 17 +- packages/i18n/src/locales/ko/settings.yaml | 19 +- packages/i18n/src/locales/ru/settings.yaml | 17 +- packages/i18n/src/locales/vi/settings.yaml | 19 +- .../i18n/src/locales/zh-Hans/settings.yaml | 17 +- .../i18n/src/locales/zh-Hant/settings.yaml | 25 +- .../src/pages/settings/modules/hearing.vue | 12 +- .../transcription/browser-web-speech-api.vue | 15 +- .../hearing-config.browser.test.ts | 5 +- .../dialogs/audio-input/hearing-config.vue | 4 +- .../providers/transcription-playground.vue | 7 +- .../src/composables/audio/audio-device.ts | 87 ++-- .../src/stores/settings/audio-device.ts | 2 + pnpm-lock.yaml | 461 +++++++++--------- pnpm-workspace.yaml | 11 +- 26 files changed, 680 insertions(+), 415 deletions(-) create mode 100644 apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MicrophonePermissionPlugin.kt create mode 100644 apps/stage-pocket/src/components/permissions/permission-card.vue create mode 100644 apps/stage-pocket/src/components/permissions/permissions-panel.vue create mode 100644 apps/stage-pocket/src/modules/microphone-permission.ts create mode 100644 apps/stage-pocket/src/pages/settings/system/permissions.vue diff --git a/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MainActivity.kt b/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MainActivity.kt index bebb2c7bc..cd1367059 100644 --- a/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MainActivity.kt +++ b/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MainActivity.kt @@ -27,6 +27,7 @@ class MainActivity : BridgeActivity() { private var webSocketBridge: HostWebSocketBridge? = null override fun load() { + registerPlugin(MicrophonePermissionPlugin::class.java) super.load() val bridge = bridge ?: return diff --git a/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MicrophonePermissionPlugin.kt b/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MicrophonePermissionPlugin.kt new file mode 100644 index 000000000..bc93359bc --- /dev/null +++ b/apps/stage-pocket/android/app/src/main/java/ai/moeru/airi_pocket/MicrophonePermissionPlugin.kt @@ -0,0 +1,22 @@ +package ai.moeru.airi_pocket + +import android.Manifest +import android.content.pm.PackageManager +import com.getcapacitor.JSObject +import com.getcapacitor.Plugin +import com.getcapacitor.PluginCall +import com.getcapacitor.PluginMethod +import com.getcapacitor.annotation.CapacitorPlugin + +@CapacitorPlugin(name = "MicrophonePermission") +class MicrophonePermissionPlugin : Plugin() { + /** Reports native permission state without opening Android's permission dialog. */ + @PluginMethod + fun checkPermission(call: PluginCall) { + val permission = Manifest.permission.RECORD_AUDIO + val result = JSObject().apply { + put("granted", context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED) + } + call.resolve(result) + } +} diff --git a/apps/stage-pocket/src/components/onboarding/step-permissions.vue b/apps/stage-pocket/src/components/onboarding/step-permissions.vue index b31e43467..93e68a605 100644 --- a/apps/stage-pocket/src/components/onboarding/step-permissions.vue +++ b/apps/stage-pocket/src/components/onboarding/step-permissions.vue @@ -1,12 +1,8 @@