I think we’re agreeing. Let’s make a couple of things really explicit and then I think it’ll fall in to place.
Let’s be clear on what “user data” is, at least as far as the app info screen I’ve sent screenshots of is concerned: it is persistent data specific to the app. That data can be files, blobs, preferences or databases. The Android docs have a good overview on it. The point is that it’s private to the app and persistent.
For this reason, I think your discussion on files vs. data is irrelevant to the discussion on caches vs. user data: how the data is originally stored at source doesn’t matter. The format of the data stored on the device doesn’t matter. It doesn’t matter if it is internal or external storage. All that matters is the scope (e.g. app-specific or shared) and persistence of the data.
This is one point where I agree with you: Plex and Plexamp are designed to be an all-in-one client that provides access to your Plex library and playback of it. For that reason, the data is app-specific.
An aside: If, instead, Plex were a sync mechanism that downloaded files for you to use with other Android music apps, then it would instead used shared storage. As you might expect, data in shared storage can be used by other apps. A common example would camera app – the photos you take are not part of the camera’s user data (you can confirm on its app info screen), but instead available for easy viewing, sharing and editing among many apps. Since the photos are no longer part of the app’s data, they’re also removed from the app’s lifecycle: if it is uninstalled, the photos remain. If uninstalling the camera app also deleted photos, most users would probably be quite grumpy.
Back to Plex. If the data is app-specific, we now need to decide if it is persistent or temporary. By app info screen terminology: If it is persistent, it goes in “user data”. If it is temporary, it goes in “cache”. That’s all there is to it. I believe downloaded playlists etc. are persistent, and optimistic caching is, well, temporary, hence the suggestions in the opening post.
There’s also the decision of internal vs. external storage. If I understand you correctly, the permission you talk about is only required for external storage. For data that an app wants to keep private (like with Plex), I feel this should really be a user decision. Google Play Music in my experience gives you this choice.
Sometimes there isn’t a decision to be made: the device I use only has internal storage, which means “external” storage is also on the same internal storage, just in a different place!
Finally, I’d also agree with you that storing cache data in the persistent area is a hack. It is by no means impossible. However, I only mentioned it in case the frameworks being used have limitations since it is a cross-platform app. Fingers crossed there’s no need for such a hack!
Once again, disclaimer: I’m not an experienced Android dev – I’ve done a bit as a hobby, but not really any file handling. I just use Android a lot and develop non-Android things. As such, there’s a possibility I’ve misinterpreted or misunderstood something and I’m keen for corrections – especially with links to docs!