// https://developer.android.com/training/data-storage/shared/media

val resolver = context.contentResolver
val contentValues = ContentValues().apply {
	put(MediaStore.MediaColumns.DISPLAY_NAME, filename)
	put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg")
	put(
		MediaStore.MediaColumns.RELATIVE_PATH,
		Environment.DIRECTORY_PICTURES + File.separator + STORAGE_FOLDER_NAME
	)
	put(MediaStore.MediaColumns.IS_PENDING, 1)
}

val collection =
	MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)

// Saving works, if possible entry gets deleted beforehand
//        val delete = resolver.delete(
//            collection,
//            "${MediaStore.Images.Media.DISPLAY_NAME} = ?",
//            arrayOf(filename)
//        )

// insert crashes with SQLiteConstraintException: UNIQUE constraint failed: files._data
resolver.insert(collection, contentValues)?.run {
	resolver.openOutputStream(this)?.use {
		URL(url).openStream().copyTo(it)

		contentValues.clear()
		contentValues.put(MediaStore.Images.Media.IS_PENDING, 0)
		resolver.update(this, contentValues, null, null)
	}
} ?: (context as Activity).runOnUiThread {
	Toast.makeText(context, R.string.error_media_download, Toast.LENGTH_SHORT).show()
}