Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
circles-android
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Circles
circles-android
Commits
bb9e0880
Commit
bb9e0880
authored
10 months ago
by
Taras
Browse files
Options
Downloads
Patches
Plain Diff
Convers poll post to bitmap and share as image
parent
f5be069c
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
core/src/main/java/org/futo/circles/core/feature/timeline/post/PostOptionsDataSource.kt
+43
-6
43 additions, 6 deletions
...rcles/core/feature/timeline/post/PostOptionsDataSource.kt
with
43 additions
and
6 deletions
core/src/main/java/org/futo/circles/core/feature/timeline/post/PostOptionsDataSource.kt
+
43
−
6
View file @
bb9e0880
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
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment