package com.vgmlr.kiln
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asAndroidBitmap
import androidx.core.content.FileProvider
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File
object KilnShare {
private const val MIME = "image/png"
private const val DIR = "shares"
private const val NAME = "kiln.png"
private const val AUTHORITY = ".share"
suspend fun send(context: Context, image: ImageBitmap) {
val uri = withContext(Dispatchers.IO) { write(context, image.asAndroidBitmap()) } ?: return
context.startActivity(
Intent.createChooser(
Intent(Intent.ACTION_SEND).apply {
type = MIME
putExtra(Intent.EXTRA_STREAM, uri)
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
},
null
)
)
}
private fun write(context: Context, bitmap: Bitmap): Uri? = runCatching {
val out = bitmap.copy(Bitmap.Config.ARGB_8888, false) ?: bitmap
val file = File(File(context.cacheDir, DIR).apply { mkdirs() }, NAME)
file.outputStream().use { out.compress(Bitmap.CompressFormat.PNG, 100, it) }
FileProvider.getUriForFile(context, context.packageName + AUTHORITY, file)
}.getOrNull()
}