This repository has been archived by the owner on Nov 1, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 473
Cannot share images using Direct Share #12689
Closed
Mugurell opened this issue
Aug 24, 2022
· 4 comments
· Fixed by #12649 or nathanmkaya/android-components#362
Closed
Cannot share images using Direct Share #12689
Mugurell opened this issue
Aug 24, 2022
· 4 comments
· Fixed by #12649 or nathanmkaya/android-components#362
Milestone
Comments
4 tasks
Thanks for opening the correspinding issue for this :). |
My suggestion is to use |
Bubu
added a commit
to Bubu/android-components
that referenced
this issue
Aug 25, 2022
Image sharing currently only works when sharing to an app but not when using the Android Direct Share feature, where it fails with a SecurityException. "Direct Share" is what Android calls the app created shortcuts, i.e. individual chats from a messaging application. The code pretty much already does the right thing (i.e. setting the FLAG_GRANT_READ_URI_PERMISSION on the target intent as well as the Chooser action, as described in ACTION_CHOOSE Api docs[1]) but there's some platform internals that seem to go wrong here but we can work around it with this patch. https://issuetracker.google.com/issues/151386328 describes a similar Problem, especially mozilla-mobile#12 in there offers a similar workaround and an explanation: The underlying problem is that ACTION_SEND is using EXTRA_STREAM for the content URI. But the FLAG_GRANT_*_URI_PERMISSION mechanism only works with URIs in Intent.data and Intent.clipData. The framework contains some code that tries to work around this limitation. But it doesn't handle this particular case. Intent.createChooser() migrates the flags and data/clipData from the target Intent, but it does so before the framework had a chance to fix up the target Intent via Intent.migrateExtraStreamToClipData(). And indeed moving the clipData into the inner intent makes Direct Share work and preserves the image preview in the Intent. [1] file:///<SDK-DIR>/docs/reference/android/content/Intent.html#ACTION_CHOOSER If you need to grant URI permissions through a chooser, you must specify the permissions to be granted on the ACTION_CHOOSER Intent in addition to the EXTRA_INTENT inside. This means using setClipData(ClipData) to specify the URIs to be granted as well as FLAG_GRANT_READ_URI_PERMISSION and/or FLAG_GRANT_WRITE_URI_PERMISSION as appropriate.
That sounds like a good idea for future refactoring, I won't have time to do work on that in the near future, so I'd leave that to the project maintainers. |
mergify bot
pushed a commit
that referenced
this issue
Aug 26, 2022
Image sharing currently only works when sharing to an app but not when using the Android Direct Share feature, where it fails with a SecurityException. "Direct Share" is what Android calls the app created shortcuts, i.e. individual chats from a messaging application. The code pretty much already does the right thing (i.e. setting the FLAG_GRANT_READ_URI_PERMISSION on the target intent as well as the Chooser action, as described in ACTION_CHOOSE Api docs[1]) but there's some platform internals that seem to go wrong here but we can work around it with this patch. https://issuetracker.google.com/issues/151386328 describes a similar Problem, especially #12 in there offers a similar workaround and an explanation: The underlying problem is that ACTION_SEND is using EXTRA_STREAM for the content URI. But the FLAG_GRANT_*_URI_PERMISSION mechanism only works with URIs in Intent.data and Intent.clipData. The framework contains some code that tries to work around this limitation. But it doesn't handle this particular case. Intent.createChooser() migrates the flags and data/clipData from the target Intent, but it does so before the framework had a chance to fix up the target Intent via Intent.migrateExtraStreamToClipData(). And indeed moving the clipData into the inner intent makes Direct Share work and preserves the image preview in the Intent. [1] file:///<SDK-DIR>/docs/reference/android/content/Intent.html#ACTION_CHOOSER If you need to grant URI permissions through a chooser, you must specify the permissions to be granted on the ACTION_CHOOSER Intent in addition to the EXTRA_INTENT inside. This means using setClipData(ClipData) to specify the URIs to be granted as well as FLAG_GRANT_READ_URI_PERMISSION and/or FLAG_GRANT_WRITE_URI_PERMISSION as appropriate.
jonalmeida
pushed a commit
to jonalmeida/android-components
that referenced
this issue
Aug 31, 2022
Image sharing currently only works when sharing to an app but not when using the Android Direct Share feature, where it fails with a SecurityException. "Direct Share" is what Android calls the app created shortcuts, i.e. individual chats from a messaging application. The code pretty much already does the right thing (i.e. setting the FLAG_GRANT_READ_URI_PERMISSION on the target intent as well as the Chooser action, as described in ACTION_CHOOSE Api docs[1]) but there's some platform internals that seem to go wrong here but we can work around it with this patch. https://issuetracker.google.com/issues/151386328 describes a similar Problem, especially mozilla-mobile#12 in there offers a similar workaround and an explanation: The underlying problem is that ACTION_SEND is using EXTRA_STREAM for the content URI. But the FLAG_GRANT_*_URI_PERMISSION mechanism only works with URIs in Intent.data and Intent.clipData. The framework contains some code that tries to work around this limitation. But it doesn't handle this particular case. Intent.createChooser() migrates the flags and data/clipData from the target Intent, but it does so before the framework had a chance to fix up the target Intent via Intent.migrateExtraStreamToClipData(). And indeed moving the clipData into the inner intent makes Direct Share work and preserves the image preview in the Intent. [1] file:///<SDK-DIR>/docs/reference/android/content/Intent.html#ACTION_CHOOSER If you need to grant URI permissions through a chooser, you must specify the permissions to be granted on the ACTION_CHOOSER Intent in addition to the EXTRA_INTENT inside. This means using setClipData(ClipData) to specify the URIs to be granted as well as FLAG_GRANT_READ_URI_PERMISSION and/or FLAG_GRANT_WRITE_URI_PERMISSION as appropriate.
4 tasks
JohanLorenzo
pushed a commit
to mozilla-mobile/firefox-android
that referenced
this issue
Sep 7, 2022
…ing images work with Direct Share Image sharing currently only works when sharing to an app but not when using the Android Direct Share feature, where it fails with a SecurityException. "Direct Share" is what Android calls the app created shortcuts, i.e. individual chats from a messaging application. The code pretty much already does the right thing (i.e. setting the FLAG_GRANT_READ_URI_PERMISSION on the target intent as well as the Chooser action, as described in ACTION_CHOOSE Api docs[1]) but there's some platform internals that seem to go wrong here but we can work around it with this patch. https://issuetracker.google.com/issues/151386328 describes a similar Problem, especially (mozilla-mobile/android-components#12) in there offers a similar workaround and an explanation: The underlying problem is that ACTION_SEND is using EXTRA_STREAM for the content URI. But the FLAG_GRANT_*_URI_PERMISSION mechanism only works with URIs in Intent.data and Intent.clipData. The framework contains some code that tries to work around this limitation. But it doesn't handle this particular case. Intent.createChooser() migrates the flags and data/clipData from the target Intent, but it does so before the framework had a chance to fix up the target Intent via Intent.migrateExtraStreamToClipData(). And indeed moving the clipData into the inner intent makes Direct Share work and preserves the image preview in the Intent. [1] file:///<SDK-DIR>/docs/reference/android/content/Intent.html#ACTION_CHOOSER If you need to grant URI permissions through a chooser, you must specify the permissions to be granted on the ACTION_CHOOSER Intent in addition to the EXTRA_INTENT inside. This means using setClipData(ClipData) to specify the URIs to be granted as well as FLAG_GRANT_READ_URI_PERMISSION and/or FLAG_GRANT_WRITE_URI_PERMISSION as appropriate.
JohanLorenzo
pushed a commit
to mozilla-mobile/firefox-android
that referenced
this issue
Oct 31, 2022
…ing images work with Direct Share Image sharing currently only works when sharing to an app but not when using the Android Direct Share feature, where it fails with a SecurityException. "Direct Share" is what Android calls the app created shortcuts, i.e. individual chats from a messaging application. The code pretty much already does the right thing (i.e. setting the FLAG_GRANT_READ_URI_PERMISSION on the target intent as well as the Chooser action, as described in ACTION_CHOOSE Api docs[1]) but there's some platform internals that seem to go wrong here but we can work around it with this patch. https://issuetracker.google.com/issues/151386328 describes a similar Problem, especially mozilla-mobile/android-components#12 in there offers a similar workaround and an explanation: The underlying problem is that ACTION_SEND is using EXTRA_STREAM for the content URI. But the FLAG_GRANT_*_URI_PERMISSION mechanism only works with URIs in Intent.data and Intent.clipData. The framework contains some code that tries to work around this limitation. But it doesn't handle this particular case. Intent.createChooser() migrates the flags and data/clipData from the target Intent, but it does so before the framework had a chance to fix up the target Intent via Intent.migrateExtraStreamToClipData(). And indeed moving the clipData into the inner intent makes Direct Share work and preserves the image preview in the Intent. [1] file:///<SDK-DIR>/docs/reference/android/content/Intent.html#ACTION_CHOOSER If you need to grant URI permissions through a chooser, you must specify the permissions to be granted on the ACTION_CHOOSER Intent in addition to the EXTRA_INTENT inside. This means using setClipData(ClipData) to specify the URIs to be granted as well as FLAG_GRANT_READ_URI_PERMISSION and/or FLAG_GRANT_WRITE_URI_PERMISSION as appropriate.
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
When trying to share images using Android's Direct Share feature - https://developer.android.com/codelabs/android-direct-share the action fails with
with potentially leaving the app in a bad state - saw that trying to share to Google Drive will result in an errors loop from which I could only get out by force closing the app.
┆Issue is synchronized with this Jira Task
The text was updated successfully, but these errors were encountered: