Repository navigation
Conversation
Pickers like the one of HyperOS ("Private access") also return the file
path (_data). On Android 11+ a file of the shared storage is readable but
not writable by its path, so the database opened read-only and asked to be
copied, while the content URI itself grants writing.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📝 Description
On Xiaomi HyperOS the system picker is replaced by HyperOS's own "Private access" picker, and providers such as MIUI File Manager and Downloads also return the file path (
_data).Util.IntentToFilenameprefers that path when the file exists, so the database is opened as a local file. On Android 11+ a file of the shared storage is readable by its path but not writable, so KP2A shows "The file you selected is read-only for Keepass2Android due to restrictions on Android 4.4+..." and asks to copy it. The content URI granted by the picker does allow writing (mode=0x3indumpsys activity permissions).The fix uses the path only if it is writable (
File.CanWrite()), otherwise it keeps the content URI. All callers already fall back todata.DataStringwhenIntentToFilenamereturns null, except one inFileSelectActivity(RequestCodeEditIoc), which now does the same.🔗 Related Issue
None found.
🛠️ Type of Change
✅ Checklist