mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-15 01:35:07 +08:00
commit
6c335c7df1
@ -10,6 +10,7 @@ Improvements 🙌:
|
||||
- PIN code: request PIN code if phone has been locked
|
||||
- Small optimisation of scrolling experience in timeline (#2114)
|
||||
- Allow user to reset cross signing if he has no way to recover (#2052)
|
||||
- Ability to share text
|
||||
- Create home shortcut for any room (#1525)
|
||||
- Can't confirm email due to killing by Android (#2021)
|
||||
- Add a menu item to open the setting in room list and in room (#2171)
|
||||
|
@ -300,11 +300,24 @@ fun shareMedia(context: Context, file: File, mediaMimeType: String?) {
|
||||
sendIntent.type = mediaMimeType
|
||||
sendIntent.putExtra(Intent.EXTRA_STREAM, mediaUri)
|
||||
|
||||
try {
|
||||
context.startActivity(sendIntent)
|
||||
} catch (activityNotFoundException: ActivityNotFoundException) {
|
||||
context.toast(R.string.error_no_external_application_found)
|
||||
}
|
||||
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 {
|
||||
context.startActivity(Intent.createChooser(intent, context.getString(R.string.share)))
|
||||
} catch (activityNotFoundException: ActivityNotFoundException) {
|
||||
context.toast(R.string.error_no_external_application_found)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -103,6 +103,7 @@ import im.vector.app.core.utils.openUrlInExternalBrowser
|
||||
import im.vector.app.core.utils.registerForPermissionsResult
|
||||
import im.vector.app.core.utils.saveMedia
|
||||
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.features.attachments.AttachmentTypeSelectorView
|
||||
import im.vector.app.features.attachments.AttachmentsHelper
|
||||
@ -1587,21 +1588,25 @@ class RoomDetailFragment @Inject constructor(
|
||||
}
|
||||
|
||||
private fun onShareActionClicked(action: EventSharedAction.Share) {
|
||||
session.fileService().downloadFile(
|
||||
downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE,
|
||||
id = action.eventId,
|
||||
fileName = action.messageContent.body,
|
||||
mimeType = action.messageContent.mimeType,
|
||||
url = action.messageContent.getFileUrl(),
|
||||
elementToDecrypt = action.messageContent.encryptedFileInfo?.toElementToDecrypt(),
|
||||
callback = object : MatrixCallback<File> {
|
||||
override fun onSuccess(data: File) {
|
||||
if (isAdded) {
|
||||
shareMedia(requireContext(), data, getMimeTypeFromUri(requireContext(), data.toUri()))
|
||||
if (action.messageContent is MessageTextContent) {
|
||||
shareText(requireContext(), action.messageContent.body)
|
||||
} else if (action.messageContent is MessageWithAttachmentContent) {
|
||||
session.fileService().downloadFile(
|
||||
downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE,
|
||||
id = action.eventId,
|
||||
fileName = action.messageContent.body,
|
||||
mimeType = action.messageContent.mimeType,
|
||||
url = action.messageContent.getFileUrl(),
|
||||
elementToDecrypt = action.messageContent.encryptedFileInfo?.toElementToDecrypt(),
|
||||
callback = object : MatrixCallback<File> {
|
||||
override fun onSuccess(data: File) {
|
||||
if (isAdded) {
|
||||
shareMedia(requireContext(), data, getMimeTypeFromUri(requireContext(), data.toUri()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private val saveActionActivityResultLauncher = registerForPermissionsResult { allGranted ->
|
||||
|
@ -21,6 +21,7 @@ import androidx.annotation.StringRes
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.platform.VectorSharedAction
|
||||
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
|
||||
|
||||
sealed class EventSharedAction(@StringRes val titleRes: Int,
|
||||
@ -47,7 +48,7 @@ sealed class EventSharedAction(@StringRes val titleRes: Int,
|
||||
data class Reply(val eventId: String) :
|
||||
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)
|
||||
|
||||
data class Save(val eventId: String, val messageContent: MessageWithAttachmentContent) :
|
||||
|
@ -275,8 +275,8 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted
|
||||
add(EventSharedAction.ViewEditHistory(informationData))
|
||||
}
|
||||
|
||||
if (canShare(msgType) && messageContent is MessageWithAttachmentContent) {
|
||||
add(EventSharedAction.Share(timelineEvent.eventId, messageContent))
|
||||
if (canShare(msgType)) {
|
||||
add(EventSharedAction.Share(timelineEvent.eventId, messageContent!!))
|
||||
}
|
||||
|
||||
if (canSave(msgType) && messageContent is MessageWithAttachmentContent) {
|
||||
@ -409,6 +409,10 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted
|
||||
|
||||
private fun canShare(msgType: String?): Boolean {
|
||||
return when (msgType) {
|
||||
MessageType.MSGTYPE_TEXT,
|
||||
MessageType.MSGTYPE_NOTICE,
|
||||
MessageType.MSGTYPE_EMOTE,
|
||||
MessageType.MSGTYPE_LOCATION,
|
||||
MessageType.MSGTYPE_IMAGE,
|
||||
MessageType.MSGTYPE_AUDIO,
|
||||
MessageType.MSGTYPE_VIDEO,
|
||||
|
Loading…
Reference in New Issue
Block a user