Skip to content
Snippets Groups Projects
Commit bb9e0880 authored by Taras's avatar Taras
Browse files

Convers poll post to bitmap and share as image

parent f5be069c
No related branches found
No related tags found
No related merge requests found
package org.futo.circles.core.feature.timeline.post
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.PorterDuff
import android.view.View
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.futo.circles.core.extensions.createResult
import org.futo.circles.core.extensions.getPostContentType
import org.futo.circles.core.extensions.getUri
import org.futo.circles.core.extensions.onBG
import org.futo.circles.core.mapping.toMediaContent
import org.futo.circles.core.model.MediaContent
import org.futo.circles.core.model.MediaFileData
import org.futo.circles.core.model.MediaShareable
import org.futo.circles.core.model.MediaType
import org.futo.circles.core.model.PollContent
import org.futo.circles.core.model.PostContent
import org.futo.circles.core.model.PostContentType.IMAGE_CONTENT
import org.futo.circles.core.model.PostContentType.VIDEO_CONTENT
......@@ -17,13 +26,17 @@ import org.futo.circles.core.model.ShareableContent
import org.futo.circles.core.model.TextContent
import org.futo.circles.core.model.TextShareable
import org.futo.circles.core.provider.MatrixSessionProvider
import org.futo.circles.core.utils.FileUtils.createImageFile
import org.futo.circles.core.utils.FileUtils.downloadEncryptedFileToContentUri
import org.futo.circles.core.utils.FileUtils.saveMediaFileToDevice
import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.session.getRoom
import org.matrix.android.sdk.api.session.room.getTimelineEvent
import org.matrix.android.sdk.api.util.MimeTypes
import java.io.FileOutputStream
import javax.inject.Inject
class PostOptionsDataSource @Inject constructor(
@ApplicationContext private val context: Context
) {
......@@ -55,13 +68,15 @@ class PostOptionsDataSource @Inject constructor(
}
suspend fun getShareableContent(content: PostContent): ShareableContent? = onBG {
when (content) {
is MediaContent -> getShareableMediaContent(content.mediaFileData)
is TextContent -> TextShareable(content.messageSpanned.toString())
else -> throw IllegalArgumentException("Not shareable post content")
suspend fun getShareableContent(content: PostContent, view: View? = null): ShareableContent? =
onBG {
when (content) {
is MediaContent -> getShareableMediaContent(content.mediaFileData)
is TextContent -> TextShareable(content.messageSpanned.toString())
is PollContent -> view?.let { getShareableMediaView(it) }
else -> throw IllegalArgumentException("Not shareable post content")
}
}
}
suspend fun saveMediaToDevice(content: PostContent) {
val mediaContent = content as? MediaContent ?: return
......@@ -75,6 +90,28 @@ class PostOptionsDataSource @Inject constructor(
MediaShareable(it, mediaFileData.mimeType)
}
private suspend fun getShareableMediaView(v: View): MediaShareable? =
withContext(Dispatchers.IO) {
tryOrNull {
val bitmap = Bitmap.createBitmap(
v.width,
v.height,
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
v.draw(canvas)
canvas.drawColor(Color.WHITE, PorterDuff.Mode.DST_ATOP)
val file = createImageFile(context)
val stream = FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream)
stream.close()
bitmap.recycle()
MediaShareable(file.getUri(context), MimeTypes.Images)
}
}
fun pollVote(roomId: String, eventId: String, pollOptionId: String) {
val roomForMessage = session?.getRoom(roomId)
roomForMessage?.sendService()?.voteToPoll(eventId, pollOptionId)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment