* feat(reader): add save/share button to image gallery toolbar Add a button to the top-right toolbar of the fullscreen image viewer that saves the currently viewed image to the device. It uses the native or web Share flow where available (iOS/Android/macOS, navigator.share) and falls back to a save dialog or browser download otherwise, reusing the existing export path via appService.saveFile. The button icon and label reflect the active flow (share vs save). Adds dataUrlToBytes/imageExtensionFromMime helpers, unit and component tests, and translations for the new strings across all locales. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(share): write shareable file to a Temp subdirectory to avoid 0-byte share On Android, Tauri's Temp dir is the app cache dir, and the sharekit plugin copies the shared file to <cacheDir>/<name> before firing the share intent. When saveFile wrote the shareable file to the Temp root, that copy became a copy onto itself whose output stream truncated the source to 0 bytes, so the shared image (and any shared export) arrived as a 0 KB file. Write the file to a Temp subdirectory instead so the plugin's copy has a distinct source. Verified on a Xiaomi device: sharing a file in the Temp root truncated it to 0 bytes, while sharing from the subdirectory produced a real, non-empty copy. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(reader): save image to system gallery on Android The Android share sheet cannot save an image to a file (no file manager registers as an ACTION_SEND target), so the Save Image button now writes the image straight into the system photo gallery via MediaStore. It lands in Pictures/Readest, visible in Gallery and the Files app, with no picker and no storage permission on Android 10+. Adds a save_image_to_gallery command to the native-bridge plugin (Rust + Kotlin MediaStore insert) and an appService.saveImageToGallery method. On Android the Save button uses it; iOS/macOS/desktop/web keep the existing share/export flow, and the button label/icon reflect the actual action. Also includes local agent memory notes that were staged alongside. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
14 KiB
Default Permission
Default permissions for the plugin
This default permission set includes the following:
allow-auth-with-safariallow-auth-with-custom-taballow-copy-uri-to-pathallow-save-image-to-galleryallow-use-background-audioallow-install-packageallow-set-system-ui-visibilityallow-get-status-bar-heightallow-get-sys-fonts-listallow-intercept-keysallow-lock-screen-orientationallow-iap-is-availableallow-iap-initializeallow-iap-fetch-productsallow-iap-purchase-productallow-iap-restore-purchasesallow-get-system-color-schemeallow-get-safe-area-insetsallow-get-screen-brightnessallow-set-screen-brightnessallow-get-external-sdcard-pathallow-open-external-urlallow-show-lookup-popoverallow-get-lookup-dictionaryallow-clear-lookup-dictionaryallow-select-directoryallow-get-storefront-region-codeallow-request-manage-storage-permissionallow-register-listenerallow-remove-listenerallow-check-permissionsallow-request-permissionsallow-checkPermissionsallow-requestPermissionsallow-set-sync-passphraseallow-get-sync-passphraseallow-clear-sync-passphraseallow-is-sync-keychain-available
Permission Table
| Identifier | Description |
|---|---|
|
|
Enables the auth_with_custom_tab command without any pre-configured scope. |
|
|
Denies the auth_with_custom_tab command without any pre-configured scope. |
|
|
Enables the auth_with_safari command without any pre-configured scope. |
|
|
Denies the auth_with_safari command without any pre-configured scope. |
|
|
Enables the check-permissions command without any pre-configured scope. |
|
|
Denies the check-permissions command without any pre-configured scope. |
|
|
Enables the checkPermissions command without any pre-configured scope. |
|
|
Denies the checkPermissions command without any pre-configured scope. |
|
|
Enables the check_permissions command without any pre-configured scope. |
|
|
Denies the check_permissions command without any pre-configured scope. |
|
|
Enables the clear_lookup_dictionary command without any pre-configured scope. |
|
|
Denies the clear_lookup_dictionary command without any pre-configured scope. |
|
|
Enables the clear_sync_passphrase command without any pre-configured scope. |
|
|
Denies the clear_sync_passphrase command without any pre-configured scope. |
|
|
Enables the clip_url command without any pre-configured scope. |
|
|
Denies the clip_url command without any pre-configured scope. |
|
|
Enables the copy_uri_to_path command without any pre-configured scope. |
|
|
Denies the copy_uri_to_path command without any pre-configured scope. |
|
|
Enables the get_external_sdcard_path command without any pre-configured scope. |
|
|
Denies the get_external_sdcard_path command without any pre-configured scope. |
|
|
Enables the get_lookup_dictionary command without any pre-configured scope. |
|
|
Denies the get_lookup_dictionary command without any pre-configured scope. |
|
|
Enables the get_safe_area_insets command without any pre-configured scope. |
|
|
Denies the get_safe_area_insets command without any pre-configured scope. |
|
|
Enables the get_screen_brightness command without any pre-configured scope. |
|
|
Denies the get_screen_brightness command without any pre-configured scope. |
|
|
Enables the get_status_bar_height command without any pre-configured scope. |
|
|
Denies the get_status_bar_height command without any pre-configured scope. |
|
|
Enables the get_storefront_region_code command without any pre-configured scope. |
|
|
Denies the get_storefront_region_code command without any pre-configured scope. |
|
|
Enables the get_sync_passphrase command without any pre-configured scope. |
|
|
Denies the get_sync_passphrase command without any pre-configured scope. |
|
|
Enables the get_sys_fonts_list command without any pre-configured scope. |
|
|
Denies the get_sys_fonts_list command without any pre-configured scope. |
|
|
Enables the get_system_color_scheme command without any pre-configured scope. |
|
|
Denies the get_system_color_scheme command without any pre-configured scope. |
|
|
Enables the iap_fetch_products command without any pre-configured scope. |
|
|
Denies the iap_fetch_products command without any pre-configured scope. |
|
|
Enables the iap_initialize command without any pre-configured scope. |
|
|
Denies the iap_initialize command without any pre-configured scope. |
|
|
Enables the iap_is_available command without any pre-configured scope. |
|
|
Denies the iap_is_available command without any pre-configured scope. |
|
|
Enables the iap_purchase_product command without any pre-configured scope. |
|
|
Denies the iap_purchase_product command without any pre-configured scope. |
|
|
Enables the iap_restore_purchases command without any pre-configured scope. |
|
|
Denies the iap_restore_purchases command without any pre-configured scope. |
|
|
Enables the install_package command without any pre-configured scope. |
|
|
Denies the install_package command without any pre-configured scope. |
|
|
Enables the intercept_keys command without any pre-configured scope. |
|
|
Denies the intercept_keys command without any pre-configured scope. |
|
|
Enables the is_sync_keychain_available command without any pre-configured scope. |
|
|
Denies the is_sync_keychain_available command without any pre-configured scope. |
|
|
Enables the lock_screen_orientation command without any pre-configured scope. |
|
|
Denies the lock_screen_orientation command without any pre-configured scope. |
|
|
Enables the open_external_url command without any pre-configured scope. |
|
|
Denies the open_external_url command without any pre-configured scope. |
|
|
Enables the register_listener command without any pre-configured scope. |
|
|
Denies the register_listener command without any pre-configured scope. |
|
|
Enables the remove_listener command without any pre-configured scope. |
|
|
Denies the remove_listener command without any pre-configured scope. |
|
|
Enables the request-permissions command without any pre-configured scope. |
|
|
Denies the request-permissions command without any pre-configured scope. |
|
|
Enables the requestPermissions command without any pre-configured scope. |
|
|
Denies the requestPermissions command without any pre-configured scope. |
|
|
Enables the request_manage_storage_permission command without any pre-configured scope. |
|
|
Denies the request_manage_storage_permission command without any pre-configured scope. |
|
|
Enables the request_permissions command without any pre-configured scope. |
|
|
Denies the request_permissions command without any pre-configured scope. |
|
|
Enables the save_image_to_gallery command without any pre-configured scope. |
|
|
Denies the save_image_to_gallery command without any pre-configured scope. |
|
|
Enables the select_directory command without any pre-configured scope. |
|
|
Denies the select_directory command without any pre-configured scope. |
|
|
Enables the set_screen_brightness command without any pre-configured scope. |
|
|
Denies the set_screen_brightness command without any pre-configured scope. |
|
|
Enables the set_sync_passphrase command without any pre-configured scope. |
|
|
Denies the set_sync_passphrase command without any pre-configured scope. |
|
|
Enables the set_system_ui_visibility command without any pre-configured scope. |
|
|
Denies the set_system_ui_visibility command without any pre-configured scope. |
|
|
Enables the show_lookup_popover command without any pre-configured scope. |
|
|
Denies the show_lookup_popover command without any pre-configured scope. |
|
|
Enables the use_background_audio command without any pre-configured scope. |
|
|
Denies the use_background_audio command without any pre-configured scope. |