Skip to content

Commit 2c95265

Browse files
committed
Remove coordinator, fix minor issues
1 parent baf527e commit 2c95265

File tree

7 files changed

+41
-61
lines changed

7 files changed

+41
-61
lines changed

vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ import im.vector.app.features.crypto.verification.VerificationBottomSheet
129129
import im.vector.app.features.home.AvatarRenderer
130130
import im.vector.app.features.home.room.detail.arguments.TimelineArgs
131131
import im.vector.app.features.home.room.detail.composer.CanSendStatus
132-
import im.vector.app.features.home.room.detail.composer.MessageComposer
133132
import im.vector.app.features.home.room.detail.composer.MessageComposerAction
134133
import im.vector.app.features.home.room.detail.composer.MessageComposerFragment
135134
import im.vector.app.features.home.room.detail.composer.MessageComposerViewModel
@@ -289,8 +288,6 @@ class TimelineFragment :
289288

290289
private val lazyLoadedViews = RoomDetailLazyLoadedViews()
291290

292-
private lateinit var composer: MessageComposer
293-
294291
override fun onCreate(savedInstanceState: Bundle?) {
295292
super.onCreate(savedInstanceState)
296293
analyticsScreenName = MobileScreen.ScreenName.Room
@@ -301,15 +298,13 @@ class TimelineFragment :
301298
}
302299
}
303300

304-
val composer = childFragmentManager.findFragmentById(R.id.composerContainer) as? MessageComposerFragment ?: run {
305-
val fragment = MessageComposerFragment()
306-
fragment.arguments = timelineArgs.toMvRxBundle()
301+
childFragmentManager.findFragmentById(R.id.composerContainer) as? MessageComposerFragment ?: run {
307302
childFragmentManager.commitTransaction {
303+
val fragment = MessageComposerFragment()
304+
fragment.arguments = timelineArgs.toMvRxBundle()
308305
replace(R.id.composerContainer, fragment)
309306
}
310-
fragment
311307
}
312-
this.composer = composer
313308

314309
childFragmentManager.findFragmentById(R.id.voiceMessageRecorderContainer) as? VoiceRecorderFragment ?: run {
315310
childFragmentManager.commitTransaction {
@@ -970,7 +965,7 @@ class TimelineFragment :
970965
is RoomDetailPendingAction.JumpToReadReceipt ->
971966
timelineViewModel.handle(RoomDetailAction.JumpToReadReceipt(roomDetailPendingAction.userId))
972967
is RoomDetailPendingAction.MentionUser ->
973-
insertUserDisplayNameInTextEditor(roomDetailPendingAction.userId)
968+
messageComposerViewModel.handle(MessageComposerAction.InsertUserDisplayName(roomDetailPendingAction.userId))
974969
is RoomDetailPendingAction.OpenRoom ->
975970
handleOpenRoom(RoomDetailViewEvents.OpenRoom(roomDetailPendingAction.roomId, roomDetailPendingAction.closeCurrentRoom))
976971
}
@@ -1051,7 +1046,7 @@ class TimelineFragment :
10511046
override fun performQuickReplyOnHolder(model: EpoxyModel<*>) {
10521047
(model as? AbsMessageItem)?.attributes?.informationData?.let {
10531048
val eventId = it.eventId
1054-
messageComposerViewModel.handle(MessageComposerAction.EnterReplyMode(eventId, composer.getCurrentText().toString()))
1049+
messageComposerViewModel.handle(MessageComposerAction.EnterReplyMode(eventId))
10551050
}
10561051
}
10571052

@@ -1573,7 +1568,7 @@ class TimelineFragment :
15731568
}
15741569

15751570
override fun onMemberNameClicked(informationData: MessageInformationData) {
1576-
insertUserDisplayNameInTextEditor(informationData.senderId)
1571+
messageComposerViewModel.handle(MessageComposerAction.InsertUserDisplayName(informationData.senderId))
15771572
}
15781573

15791574
override fun onClickOnReactionPill(informationData: MessageInformationData, reaction: String, on: Boolean) {
@@ -1776,11 +1771,11 @@ class TimelineFragment :
17761771
}
17771772
}
17781773
is EventSharedAction.Quote -> {
1779-
messageComposerViewModel.handle(MessageComposerAction.EnterQuoteMode(action.eventId, composer.getCurrentText().toString()))
1774+
messageComposerViewModel.handle(MessageComposerAction.EnterQuoteMode(action.eventId))
17801775
}
17811776
is EventSharedAction.Reply -> {
17821777
if (withState(messageComposerViewModel) { it.isVoiceMessageIdle }) {
1783-
messageComposerViewModel.handle(MessageComposerAction.EnterReplyMode(action.eventId, composer.getCurrentText().toString()))
1778+
messageComposerViewModel.handle(MessageComposerAction.EnterReplyMode(action.eventId))
17841779
} else {
17851780
requireActivity().toast(R.string.error_voice_message_cannot_reply_or_edit)
17861781
}
@@ -1881,16 +1876,6 @@ class TimelineFragment :
18811876
.show()
18821877
}
18831878

1884-
/**
1885-
* Insert a user displayName in the message editor.
1886-
*
1887-
* @param userId the userId.
1888-
*/
1889-
@SuppressLint("SetTextI18n")
1890-
private fun insertUserDisplayNameInTextEditor(userId: String) {
1891-
composer.insertUserDisplayNameInTextEditor(userId)
1892-
}
1893-
18941879
private fun showSnackWithMessage(message: String) {
18951880
view?.showOptimizedSnackbar(message)
18961881
}

vector/src/main/java/im/vector/app/features/home/room/detail/composer/MessageComposerAction.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@ import org.matrix.android.sdk.api.session.room.model.message.MessageAudioContent
2525
sealed class MessageComposerAction : VectorViewModelAction {
2626
data class SendMessage(val text: CharSequence, val autoMarkdown: Boolean) : MessageComposerAction()
2727
data class EnterEditMode(val eventId: String) : MessageComposerAction()
28-
data class EnterQuoteMode(val eventId: String, val text: String) : MessageComposerAction()
29-
data class EnterReplyMode(val eventId: String, val text: String) : MessageComposerAction()
30-
data class EnterRegularMode(val text: String, val fromSharing: Boolean) : MessageComposerAction()
28+
data class EnterQuoteMode(val eventId: String) : MessageComposerAction()
29+
data class EnterReplyMode(val eventId: String) : MessageComposerAction()
30+
data class EnterRegularMode(val fromSharing: Boolean) : MessageComposerAction()
3131
data class UserIsTyping(val isTyping: Boolean) : MessageComposerAction()
3232
data class OnTextChanged(val text: CharSequence) : MessageComposerAction()
3333
data class OnEntersBackground(val composerText: String) : MessageComposerAction()
3434
data class SlashCommandConfirmed(val parsedCommand: ParsedCommand) : MessageComposerAction()
35+
data class InsertUserDisplayName(val userId: String) : MessageComposerAction()
3536

3637
// Voice Message
3738
data class InitializeVoiceRecorder(val attachmentData: ContentAttachmentData) : MessageComposerAction()

vector/src/main/java/im/vector/app/features/home/room/detail/composer/MessageComposerFragment.kt

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import android.content.res.Configuration
2222
import android.net.Uri
2323
import android.os.Build
2424
import android.os.Bundle
25-
import android.text.Editable
2625
import android.text.Spannable
2726
import android.text.format.DateUtils
2827
import android.view.KeyEvent
@@ -112,13 +111,8 @@ import reactivecircus.flowbinding.android.widget.textChanges
112111
import timber.log.Timber
113112
import javax.inject.Inject
114113

115-
interface MessageComposer {
116-
fun getCurrentText(): Editable?
117-
fun insertUserDisplayNameInTextEditor(userId: String)
118-
}
119-
120114
@AndroidEntryPoint
121-
class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), MessageComposer, AttachmentsHelper.Callback, AttachmentTypeSelectorView.Callback {
115+
class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), AttachmentsHelper.Callback, AttachmentTypeSelectorView.Callback {
122116

123117
companion object {
124118
private const val ircPattern = " (IRC)"
@@ -196,6 +190,7 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), M
196190
}
197191
showErrorInSnackbar(it.throwable)
198192
}
193+
is MessageComposerViewEvents.InsertUserDisplayName -> insertUserDisplayNameInTextEditor(it.userId)
199194
}
200195
}
201196

@@ -204,10 +199,10 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), M
204199
return@onEach
205200
}
206201
when (mode) {
207-
is SendMode.Regular -> renderRegularMode(mode.text)
208-
is SendMode.Edit -> renderSpecialMode(mode.timelineEvent, R.drawable.ic_edit, R.string.edit, mode.text)
209-
is SendMode.Quote -> renderSpecialMode(mode.timelineEvent, R.drawable.ic_quote, R.string.action_quote, mode.text)
210-
is SendMode.Reply -> renderSpecialMode(mode.timelineEvent, R.drawable.ic_reply, R.string.reply, mode.text)
202+
is SendMode.Regular -> renderRegularMode(mode.text.toString())
203+
is SendMode.Edit -> renderSpecialMode(mode.timelineEvent, R.drawable.ic_edit, R.string.edit, mode.text.toString())
204+
is SendMode.Quote -> renderSpecialMode(mode.timelineEvent, R.drawable.ic_quote, R.string.action_quote, mode.text.toString())
205+
is SendMode.Reply -> renderSpecialMode(mode.timelineEvent, R.drawable.ic_reply, R.string.reply, mode.text.toString())
211206
is SendMode.Voice -> renderVoiceMessageMode(mode.text)
212207
}
213208
}
@@ -304,7 +299,7 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), M
304299
}
305300

306301
override fun onCloseRelatedMessage() {
307-
messageComposerViewModel.handle(MessageComposerAction.EnterRegularMode(views.composerLayout.text.toString(), false))
302+
messageComposerViewModel.handle(MessageComposerAction.EnterRegularMode(false))
308303
}
309304

310305
override fun onRichContentSelected(contentUri: Uri): Boolean {
@@ -723,7 +718,8 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), M
723718
private fun handleShareData() {
724719
when (val sharedData = timelineArgs.sharedData) {
725720
is SharedData.Text -> {
726-
messageComposerViewModel.handle(MessageComposerAction.EnterRegularMode(sharedData.text, fromSharing = true))
721+
messageComposerViewModel.handle(MessageComposerAction.OnTextChanged(sharedData.text))
722+
messageComposerViewModel.handle(MessageComposerAction.EnterRegularMode(fromSharing = true))
727723
}
728724
is SharedData.Attachments -> {
729725
// open share edition
@@ -733,17 +729,13 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), M
733729
}
734730
}
735731

736-
override fun getCurrentText(): Editable? {
737-
return views.composerLayout.text
738-
}
739-
740-
override fun insertUserDisplayNameInTextEditor(userId: String) {
732+
private fun insertUserDisplayNameInTextEditor(userId: String) {
741733
val startToCompose = views.composerLayout.text.isNullOrBlank()
742734

743735
if (startToCompose &&
744736
userId == session.myUserId) {
745737
// Empty composer, current user: start an emote
746-
views.composerLayout.views.composerEditText.setText(Command.EMOTE.command + " ")
738+
views.composerLayout.views.composerEditText.setText("${Command.EMOTE.command} ")
747739
views.composerLayout.views.composerEditText.setSelection(Command.EMOTE.command.length + 1)
748740
} else {
749741
val roomMember = timelineViewModel.getMember(userId)

vector/src/main/java/im/vector/app/features/home/room/detail/composer/MessageComposerViewEvents.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,6 @@ sealed class MessageComposerViewEvents : VectorViewEvents {
4747
data class ShowRoomUpgradeDialog(val newVersion: String, val isPublic: Boolean) : MessageComposerViewEvents()
4848

4949
data class VoicePlaybackOrRecordingFailure(val throwable: Throwable) : MessageComposerViewEvents()
50+
51+
data class InsertUserDisplayName(val userId: String) : MessageComposerViewEvents()
5052
}

vector/src/main/java/im/vector/app/features/home/room/detail/composer/MessageComposerViewModel.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ class MessageComposerViewModel @AssistedInject constructor(
113113
is MessageComposerAction.VoiceWaveformMovedTo -> handleVoiceWaveformMovedTo(action)
114114
is MessageComposerAction.AudioSeekBarMovedTo -> handleAudioSeekBarMovedTo(action)
115115
is MessageComposerAction.SlashCommandConfirmed -> handleSlashCommandConfirmed(action)
116+
is MessageComposerAction.InsertUserDisplayName -> handleInsertUserDisplayName(action)
116117
}
117118
}
118119

@@ -144,7 +145,7 @@ class MessageComposerViewModel @AssistedInject constructor(
144145
}
145146

146147
private fun handleEnterRegularMode(action: MessageComposerAction.EnterRegularMode) = setState {
147-
copy(sendMode = SendMode.Regular(action.text, action.fromSharing))
148+
copy(sendMode = SendMode.Regular(currentComposerText, action.fromSharing))
148149
}
149150

150151
private fun handleEnterEditMode(action: MessageComposerAction.EnterEditMode) {
@@ -181,13 +182,13 @@ class MessageComposerViewModel @AssistedInject constructor(
181182

182183
private fun handleEnterQuoteMode(action: MessageComposerAction.EnterQuoteMode) {
183184
room.getTimelineEvent(action.eventId)?.let { timelineEvent ->
184-
setState { copy(sendMode = SendMode.Quote(timelineEvent, action.text)) }
185+
setState { copy(sendMode = SendMode.Quote(timelineEvent, currentComposerText)) }
185186
}
186187
}
187188

188189
private fun handleEnterReplyMode(action: MessageComposerAction.EnterReplyMode) {
189190
room.getTimelineEvent(action.eventId)?.let { timelineEvent ->
190-
setState { copy(sendMode = SendMode.Reply(timelineEvent, action.text)) }
191+
setState { copy(sendMode = SendMode.Reply(timelineEvent, currentComposerText)) }
191192
}
192193
}
193194

@@ -875,7 +876,7 @@ class MessageComposerViewModel @AssistedInject constructor(
875876
}
876877
}
877878
}
878-
handleEnterRegularMode(MessageComposerAction.EnterRegularMode(text = "", fromSharing = false))
879+
handleEnterRegularMode(MessageComposerAction.EnterRegularMode(fromSharing = false))
879880
}
880881

881882
private fun handlePlayOrPauseVoicePlayback(action: MessageComposerAction.PlayOrPauseVoicePlayback) {
@@ -943,6 +944,10 @@ class MessageComposerViewModel @AssistedInject constructor(
943944
}
944945
}
945946

947+
private fun handleInsertUserDisplayName(action: MessageComposerAction.InsertUserDisplayName) {
948+
_viewEvents.post(MessageComposerViewEvents.InsertUserDisplayName(action.userId))
949+
}
950+
946951
private fun launchSlashCommandFlowSuspendable(parsedCommand: ParsedCommand, block: suspend () -> Unit) {
947952
_viewEvents.post(MessageComposerViewEvents.SlashCommandLoading)
948953
viewModelScope.launch {

vector/src/main/java/im/vector/app/features/home/room/detail/composer/MessageComposerViewState.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ import kotlin.random.Random
3333
*/
3434
sealed interface SendMode {
3535
data class Regular(
36-
val text: String,
36+
val text: CharSequence,
3737
val fromSharing: Boolean,
3838
// This is necessary for forcing refresh on selectSubscribe
3939
private val random: Int = Random.nextInt()
4040
) : SendMode
4141

42-
data class Quote(val timelineEvent: TimelineEvent, val text: String) : SendMode
43-
data class Edit(val timelineEvent: TimelineEvent, val text: String) : SendMode
44-
data class Reply(val timelineEvent: TimelineEvent, val text: String) : SendMode
42+
data class Quote(val timelineEvent: TimelineEvent, val text: CharSequence) : SendMode
43+
data class Edit(val timelineEvent: TimelineEvent, val text: CharSequence) : SendMode
44+
data class Reply(val timelineEvent: TimelineEvent, val text: CharSequence) : SendMode
4545
data class Voice(val text: String) : SendMode
4646
}
4747

@@ -66,7 +66,8 @@ data class MessageComposerViewState(
6666
val rootThreadEventId: String? = null,
6767
val startsThread: Boolean = false,
6868
val sendMode: SendMode = SendMode.Regular("", false),
69-
val voiceRecordingUiState: VoiceMessageRecorderView.RecordingUiState = VoiceMessageRecorderView.RecordingUiState.Idle
69+
val voiceRecordingUiState: VoiceMessageRecorderView.RecordingUiState = VoiceMessageRecorderView.RecordingUiState.Idle,
70+
val text: CharSequence? = null,
7071
) : MavericksState {
7172

7273
val isVoiceRecording = when (voiceRecordingUiState) {

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageItem.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,6 @@ abstract class AbsMessageItem<H : AbsMessageItem.Holder>(
6363
}
6464
}
6565

66-
private val _memberNameClickListener = object : ClickListener {
67-
override fun invoke(p1: View) {
68-
attributes.avatarCallback?.onMemberNameClicked(attributes.informationData)
69-
}
70-
}
71-
7266
private val _threadClickListener = object : ClickListener {
7367
override fun invoke(p1: View) {
7468
attributes.threadCallback?.onThreadSummaryClicked(attributes.informationData.eventId, attributes.threadDetails?.isRootThread ?: false)
@@ -95,7 +89,7 @@ abstract class AbsMessageItem<H : AbsMessageItem.Holder>(
9589
holder.memberNameView.isVisible = true
9690
holder.memberNameView.text = attributes.informationData.memberName
9791
holder.memberNameView.setTextColor(attributes.getMemberNameColor())
98-
holder.memberNameView.onClick(_memberNameClickListener)
92+
holder.memberNameView.onClick(attributes.memberClickListener)
9993
holder.memberNameView.setOnLongClickListener(attributes.itemLongClickListener)
10094
} else {
10195
holder.memberNameView.setOnClickListener(null)

0 commit comments

Comments
 (0)