getExternalFilesDir() as your base directory. Or, use
getFilesDir(), if the user does not need independent access to this content.
That is only practical as a relative path from some root.
It is the user’s device. It is the user’s Internet connection. It is the user’s data. One would imagine that the user should get a vote where the user’s data, downloaded via the user’s Internet connection, gets stored on the user’s device.
I have no idea what “changes the location” means. You are certainly welcome to offer a way in your app for the user to choose some other location to place the content. Or, use something like
getExternalFilesDir(), which is already tied to your app.
You would store the content in the location identified by the user. You would store that location in something like
getExternalFilesDir(). Or, use
ACTION_OPEN_DOCUMENT_TREE to have the user choose a base location, into which you create your own document tree for the content that you are managing.
The technique that you describe — putting an app directory directly in the external storage root — has long been embarrassing. It’s the Android equivalent of dumping your stuff in the root of
C: in Windows. We got away from that pattern in Windows a couple of decades ago, after countless user complaints. I have been advising developers to not do this for years, anticipating that we would need to stop doing that at some point. That “some point” is now.