Ability to share text

This commit is contained in:
Constantin Wartenburger 2020-10-11 20:09:35 +02:00
parent 5fa281dd3a
commit b00fa69585
No known key found for this signature in database
GPG Key ID: 7439D96D8E1DB894
4 changed files with 45 additions and 22 deletions

View File

@ -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,13 +300,26 @@ 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)
sendShareIntent(context, sendIntent)
}
}
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 { try {
context.startActivity(sendIntent) context.startActivity(Intent.createChooser(intent, context.getString(R.string.share)))
} catch (activityNotFoundException: ActivityNotFoundException) { } catch (activityNotFoundException: ActivityNotFoundException) {
context.toast(R.string.error_no_external_application_found) context.toast(R.string.error_no_external_application_found)
} }
} }
}
private fun appendTimeToFilename(name: String): String { private fun appendTimeToFilename(name: String): String {
val dateExtension = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).format(Date()) val dateExtension = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).format(Date())

View File

@ -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,6 +1557,9 @@ class RoomDetailFragment @Inject constructor(
} }
private fun onShareActionClicked(action: EventSharedAction.Share) { private fun onShareActionClicked(action: EventSharedAction.Share) {
if (action.messageContent is MessageTextContent) {
shareText(requireContext(), action.messageContent.body)
} else if (action.messageContent is MessageWithAttachmentContent) {
session.fileService().downloadFile( session.fileService().downloadFile(
downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE, downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE,
id = action.eventId, id = action.eventId,
@ -1572,6 +1576,7 @@ class RoomDetailFragment @Inject constructor(
} }
) )
} }
}
private fun onSaveActionClicked(action: EventSharedAction.Save) { private fun onSaveActionClicked(action: EventSharedAction.Save) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q

View File

@ -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) :

View File

@ -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,