
Loader converted from java to kotlin. Instead of loading libmpd when the service thread is started, the service will not start the the thread if libmpd failed to load. The loader is also accessed by the view data to let the ui adjust if failed to load, by showing the failure reason and disabling the Start MPD button.
Android
Notes and resources for MPD android maintainers.
Build
Android studio
Version control
git ignoring .idea directory completely until a good reason emerges not to
Native libraries
Permissions
Files access
The required permission depends on android SDK version:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
Manifest.permission.READ_MEDIA_AUDIO
else
Manifest.permission.READ_EXTERNAL_STORAGE
Permission request
Since Android 6.0 (API level 23):
Android will ignore permission request and will not show the request dialog
if the user's action implies "don't ask again."
This leaves the app in a crippled state and the user confused.
Google says "don't try to convince the user", so it returns false for shouldShowRequestPermissionRationale
.
To help the user proceed, we show the Request permission
button only if shouldShowRequestPermissionRationale == true
because there's a good chance the permission request dialog will not be ignored.
If shouldShowRequestPermissionRationale == false
we instead show the "rationale" message and a button to open
the app info dialog where the user can explicitly grand the permission.