Fix(mobile): share contents between apps (#12086)

* fix(mobile): share asset file for the db graph

* enhance(android): update manifest and intent handling for asset embedding
This commit is contained in:
Charlie
2025-09-04 16:39:50 +08:00
committed by GitHub
parent f93f889f8a
commit 56b54d5f40
2 changed files with 37 additions and 27 deletions

View File

@@ -11,21 +11,21 @@
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<application <application
android:networkSecurityConfig="@xml/network_security_config"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:requestLegacyExternalStorage="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity <activity
android:exported="true"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode|navigation"
android:name="com.logseq.app.MainActivity" android:name="com.logseq.app.MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode|navigation"
android:exported="true"
android:label="@string/title_activity_main" android:label="@string/title_activity_main"
android:theme="@style/AppTheme.NoActionBarLaunch" android:launchMode="singleTask"
android:launchMode="singleTask"> android:theme="@style/AppTheme.NoActionBarLaunch">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
@@ -34,6 +34,7 @@
<intent-filter> <intent-filter>
<action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" /> <data android:mimeType="text/plain" />
<data android:mimeType="image/*" /> <data android:mimeType="image/*" />
<data android:mimeType="application/*" /> <data android:mimeType="application/*" />
@@ -42,8 +43,10 @@
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="logseq" /> <data android:scheme="logseq" />
</intent-filter> </intent-filter>
</activity> </activity>
@@ -53,7 +56,9 @@
android:authorities="${applicationId}.fileprovider" android:authorities="${applicationId}.fileprovider"
android:exported="false" android:exported="false"
android:grantUriPermissions="true"> android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> <meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider> </provider>
</application> </application>
</manifest> </manifest>

View File

@@ -83,18 +83,20 @@
(let [args (transform-args args)] (let [args (transform-args args)]
(state/pub-event! [:editor/quick-capture args]))) (state/pub-event! [:editor/quick-capture args])))
(defn- embed-asset-file [url format] (defn- embed-asset-file [url _format]
(p/let [basename (node-path/basename url) (p/let [basename (node-path/basename url)
label (-> basename util/node-path.name) _label (-> basename util/node-path.name)
_path (assets-handler/get-asset-path basename)
time (date/get-current-time) time (date/get-current-time)
date-ref-name (date/today) date-ref-name (date/today)
path (assets-handler/get-asset-path basename) file (.readFile Filesystem #js {:path url})
_file (p/catch file-base64-str (some-> file (.-data))
(.copy Filesystem (clj->js {:from url :to path})) file (some-> file-base64-str (util/base64string-to-unit8array)
(fn [error] (vector) (clj->js) (js/File. basename #js {}))
(log/error :copy-file-error {:error error}))) asset-entity (editor-handler/db-based-save-assets!
url (util/format "../assets/%s" basename) (state/get-current-repo) [file] {})
url (assets-handler/get-asset-file-link format url label true) asset-entity (some-> asset-entity (first))
url (util/format "[[%s]]" (:block/uuid asset-entity))
template (get-in (state/get-config) template (get-in (state/get-config)
[:quick-capture-templates :media] [:quick-capture-templates :media]
"**{time}** [[quick capture]]: {url}")] "**{time}** [[quick capture]]: {url}")]
@@ -182,17 +184,20 @@
(common-util/safe-decode-uri-component v) (common-util/safe-decode-uri-component v)
v))]))) v))])))
(defn- handle-asset-file [url format] (defn- handle-asset-file [url _format]
(p/let [basename (node-path/basename url) (-> (p/let [basename (node-path/basename url)
label (-> basename util/node-path.name) _label (-> basename util/node-path.name)
path (assets-handler/get-asset-path basename) _path (assets-handler/get-asset-path basename)
_file (p/catch file (.readFile Filesystem #js {:path url})
(.copy Filesystem (clj->js {:from url :to path})) file-base64-str (some-> file (.-data))
(fn [error] file (some-> file-base64-str (util/base64string-to-unit8array)
(log/error :copy-file-error {:error error}))) (vector) (clj->js) (js/File. basename #js {}))
url (util/format "../assets/%s" basename) asset-entity (editor-handler/db-based-save-assets!
url-link (assets-handler/get-asset-file-link format url label true)] (state/get-current-repo) [file] {})
url-link)) asset-entity (some-> asset-entity (first))
url-link (util/format "[[%s]]" (:block/uuid asset-entity))]
url-link)
(p/catch #(js/console.error "Error(handle asset file):" %))))
(defn- handle-payload-resource (defn- handle-payload-resource
[{:keys [type name ext url] :as resource} format] [{:keys [type name ext url] :as resource} format]