7185dca1a2
* 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>
43 lines
1.3 KiB
TOML
43 lines
1.3 KiB
TOML
[default]
|
|
description = "Default permissions for the plugin"
|
|
permissions = [
|
|
"allow-auth-with-safari",
|
|
"allow-auth-with-custom-tab",
|
|
"allow-copy-uri-to-path",
|
|
"allow-save-image-to-gallery",
|
|
"allow-use-background-audio",
|
|
"allow-install-package",
|
|
"allow-set-system-ui-visibility",
|
|
"allow-get-status-bar-height",
|
|
"allow-get-sys-fonts-list",
|
|
"allow-intercept-keys",
|
|
"allow-lock-screen-orientation",
|
|
"allow-iap-is-available",
|
|
"allow-iap-initialize",
|
|
"allow-iap-fetch-products",
|
|
"allow-iap-purchase-product",
|
|
"allow-iap-restore-purchases",
|
|
"allow-get-system-color-scheme",
|
|
"allow-get-safe-area-insets",
|
|
"allow-get-screen-brightness",
|
|
"allow-set-screen-brightness",
|
|
"allow-get-external-sdcard-path",
|
|
"allow-open-external-url",
|
|
"allow-show-lookup-popover",
|
|
"allow-get-lookup-dictionary",
|
|
"allow-clear-lookup-dictionary",
|
|
"allow-select-directory",
|
|
"allow-get-storefront-region-code",
|
|
"allow-request-manage-storage-permission",
|
|
"allow-register-listener",
|
|
"allow-remove-listener",
|
|
"allow-check-permissions",
|
|
"allow-request-permissions",
|
|
"allow-checkPermissions",
|
|
"allow-requestPermissions",
|
|
"allow-set-sync-passphrase",
|
|
"allow-get-sync-passphrase",
|
|
"allow-clear-sync-passphrase",
|
|
"allow-is-sync-keychain-available",
|
|
]
|