Merge pull request #2257 from ginnyTheCat/share

Ability to share text
This commit is contained in:
Benoit Marty 2020-10-15 18:12:27 +02:00 committed by GitHub
commit 6c335c7df1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 21 deletions

View file

@ -10,6 +10,7 @@ Improvements 🙌:
- PIN code: request PIN code if phone has been locked - PIN code: request PIN code if phone has been locked
- Small optimisation of scrolling experience in timeline (#2114) - Small optimisation of scrolling experience in timeline (#2114)
- Allow user to reset cross signing if he has no way to recover (#2052) - 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) - Create home shortcut for any room (#1525)
- Can't confirm email due to killing by Android (#2021) - 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) - Add a menu item to open the setting in room list and in room (#2171)

View file

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

@ -103,6 +103,7 @@ import im.vector.app.core.utils.openUrlInExternalBrowser
import im.vector.app.core.utils.registerForPermissionsResult import im.vector.app.core.utils.registerForPermissionsResult
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
@ -1587,6 +1588,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,
@ -1603,6 +1607,7 @@ class RoomDetailFragment @Inject constructor(
} }
) )
} }
}
private val saveActionActivityResultLauncher = registerForPermissionsResult { allGranted -> private val saveActionActivityResultLauncher = registerForPermissionsResult { allGranted ->
if (allGranted) { if (allGranted) {

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,