Conversation

Android 10 deprecated the Storage permissions and they aren't they available with the current API level without temporarily opting into the legacy storage model. Android 4 introduced SAF to access files via case-by-case user consent and Android 5 extended it to directory access.
1
4
In Android 4, SAF became mandatory to access external drives. Apps had to support SAF to provide full functionality. Android 7 deprecated passing files via file: URI to avoid the app receiving a file from needing to depend on the legacy Storage permissions due to the other app.
1
1
In Android 9, apps within the same profile were each given their own SELinux MLS level to fully isolate them from each other, except through system APIs. This removed the ability for apps to make their internal data world writable / readable to share it via legacy file: URIs.
Replying to
Modern apps must share files via content: URIs mapping to content providers providing a thin indirect access layer with a modern access control system including revocation, etc. Unfortunately some apps targeting older API levels or opting into legacy storage still use file: URIs.
1
2
For example, Firefox and the Amaze file manager still use the obsolete Storage permissions to gain direct access to the user's home directory. They still share files to other apps via legacy file: URIs since they disabled Android 7 sharing sanity checks: hg.mozilla.org/mozilla-centra.
2
2
Firefox is incompatible with modern apps because the developers "disagree" with having a proper storage security model. Firefox has been one of the main culprits coercing other apps into unnecessarily using coarse Storage permissions. Thankfully, that won't be an option anymore.
1
3
Their users blame modern apps incompatible with their broken, legacy approach to sharing files. Firefox and Amaze users leave 1 star reviews for apps doing things properly. This coercion has been successful. Many apps use the coarse Storage permissions to work around broken apps.
1