mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-06 05:53:33 +01:00
Ability to share text
This commit is contained in:
parent
5fa281dd3a
commit
b00fa69585
@ -40,13 +40,13 @@ import androidx.fragment.app.Fragment
|
|||||||
import im.vector.app.BuildConfig
|
import im.vector.app.BuildConfig
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.features.notifications.NotificationUtils
|
import im.vector.app.features.notifications.NotificationUtils
|
||||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import okio.buffer
|
import okio.buffer
|
||||||
import okio.sink
|
import okio.sink
|
||||||
import okio.source
|
import okio.source
|
||||||
|
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileInputStream
|
import java.io.FileInputStream
|
||||||
@ -300,11 +300,24 @@ fun shareMedia(context: Context, file: File, mediaMimeType: String?) {
|
|||||||
sendIntent.type = mediaMimeType
|
sendIntent.type = mediaMimeType
|
||||||
sendIntent.putExtra(Intent.EXTRA_STREAM, mediaUri)
|
sendIntent.putExtra(Intent.EXTRA_STREAM, mediaUri)
|
||||||
|
|
||||||
try {
|
sendShareIntent(context, sendIntent)
|
||||||
context.startActivity(sendIntent)
|
}
|
||||||
} catch (activityNotFoundException: ActivityNotFoundException) {
|
}
|
||||||
context.toast(R.string.error_no_external_application_found)
|
|
||||||
}
|
fun shareText(context: Context, text: String) {
|
||||||
|
val sendIntent = Intent()
|
||||||
|
sendIntent.action = Intent.ACTION_SEND
|
||||||
|
sendIntent.type = "text/plain"
|
||||||
|
sendIntent.putExtra(Intent.EXTRA_TEXT, text)
|
||||||
|
|
||||||
|
sendShareIntent(context, sendIntent)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun sendShareIntent(context: Context, intent: Intent) {
|
||||||
|
try {
|
||||||
|
context.startActivity(Intent.createChooser(intent, context.getString(R.string.share)))
|
||||||
|
} catch (activityNotFoundException: ActivityNotFoundException) {
|
||||||
|
context.toast(R.string.error_no_external_application_found)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,6 +106,7 @@ import im.vector.app.core.utils.onPermissionResultVideoIpCall
|
|||||||
import im.vector.app.core.utils.openUrlInExternalBrowser
|
import im.vector.app.core.utils.openUrlInExternalBrowser
|
||||||
import im.vector.app.core.utils.saveMedia
|
import im.vector.app.core.utils.saveMedia
|
||||||
import im.vector.app.core.utils.shareMedia
|
import im.vector.app.core.utils.shareMedia
|
||||||
|
import im.vector.app.core.utils.shareText
|
||||||
import im.vector.app.core.utils.toast
|
import im.vector.app.core.utils.toast
|
||||||
import im.vector.app.features.attachments.AttachmentTypeSelectorView
|
import im.vector.app.features.attachments.AttachmentTypeSelectorView
|
||||||
import im.vector.app.features.attachments.AttachmentsHelper
|
import im.vector.app.features.attachments.AttachmentsHelper
|
||||||
@ -1556,21 +1557,25 @@ class RoomDetailFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun onShareActionClicked(action: EventSharedAction.Share) {
|
private fun onShareActionClicked(action: EventSharedAction.Share) {
|
||||||
session.fileService().downloadFile(
|
if (action.messageContent is MessageTextContent) {
|
||||||
downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE,
|
shareText(requireContext(), action.messageContent.body)
|
||||||
id = action.eventId,
|
} else if (action.messageContent is MessageWithAttachmentContent) {
|
||||||
fileName = action.messageContent.body,
|
session.fileService().downloadFile(
|
||||||
mimeType = action.messageContent.mimeType,
|
downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE,
|
||||||
url = action.messageContent.getFileUrl(),
|
id = action.eventId,
|
||||||
elementToDecrypt = action.messageContent.encryptedFileInfo?.toElementToDecrypt(),
|
fileName = action.messageContent.body,
|
||||||
callback = object : MatrixCallback<File> {
|
mimeType = action.messageContent.mimeType,
|
||||||
override fun onSuccess(data: File) {
|
url = action.messageContent.getFileUrl(),
|
||||||
if (isAdded) {
|
elementToDecrypt = action.messageContent.encryptedFileInfo?.toElementToDecrypt(),
|
||||||
shareMedia(requireContext(), data, getMimeTypeFromUri(requireContext(), data.toUri()))
|
callback = object : MatrixCallback<File> {
|
||||||
|
override fun onSuccess(data: File) {
|
||||||
|
if (isAdded) {
|
||||||
|
shareMedia(requireContext(), data, getMimeTypeFromUri(requireContext(), data.toUri()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
)
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onSaveActionClicked(action: EventSharedAction.Save) {
|
private fun onSaveActionClicked(action: EventSharedAction.Save) {
|
||||||
|
@ -21,6 +21,7 @@ import androidx.annotation.StringRes
|
|||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.platform.VectorSharedAction
|
import im.vector.app.core.platform.VectorSharedAction
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData
|
import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageWithAttachmentContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageWithAttachmentContent
|
||||||
|
|
||||||
sealed class EventSharedAction(@StringRes val titleRes: Int,
|
sealed class EventSharedAction(@StringRes val titleRes: Int,
|
||||||
@ -47,7 +48,7 @@ sealed class EventSharedAction(@StringRes val titleRes: Int,
|
|||||||
data class Reply(val eventId: String) :
|
data class Reply(val eventId: String) :
|
||||||
EventSharedAction(R.string.reply, R.drawable.ic_reply)
|
EventSharedAction(R.string.reply, R.drawable.ic_reply)
|
||||||
|
|
||||||
data class Share(val eventId: String, val messageContent: MessageWithAttachmentContent) :
|
data class Share(val eventId: String, val messageContent: MessageContent) :
|
||||||
EventSharedAction(R.string.share, R.drawable.ic_share)
|
EventSharedAction(R.string.share, R.drawable.ic_share)
|
||||||
|
|
||||||
data class Save(val eventId: String, val messageContent: MessageWithAttachmentContent) :
|
data class Save(val eventId: String, val messageContent: MessageWithAttachmentContent) :
|
||||||
|
@ -275,8 +275,8 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted
|
|||||||
add(EventSharedAction.ViewEditHistory(informationData))
|
add(EventSharedAction.ViewEditHistory(informationData))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canShare(msgType) && messageContent is MessageWithAttachmentContent) {
|
if (canShare(msgType)) {
|
||||||
add(EventSharedAction.Share(timelineEvent.eventId, messageContent))
|
add(EventSharedAction.Share(timelineEvent.eventId, messageContent!!))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canSave(msgType) && messageContent is MessageWithAttachmentContent) {
|
if (canSave(msgType) && messageContent is MessageWithAttachmentContent) {
|
||||||
@ -409,6 +409,10 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted
|
|||||||
|
|
||||||
private fun canShare(msgType: String?): Boolean {
|
private fun canShare(msgType: String?): Boolean {
|
||||||
return when (msgType) {
|
return when (msgType) {
|
||||||
|
MessageType.MSGTYPE_TEXT,
|
||||||
|
MessageType.MSGTYPE_NOTICE,
|
||||||
|
MessageType.MSGTYPE_EMOTE,
|
||||||
|
MessageType.MSGTYPE_LOCATION,
|
||||||
MessageType.MSGTYPE_IMAGE,
|
MessageType.MSGTYPE_IMAGE,
|
||||||
MessageType.MSGTYPE_AUDIO,
|
MessageType.MSGTYPE_AUDIO,
|
||||||
MessageType.MSGTYPE_VIDEO,
|
MessageType.MSGTYPE_VIDEO,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user