diff --git a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt index 6964f2aa995f7f759baebdf3f9d5f54cc1d8a7e3..600337f35dca5d5dd388ad8b572c641f6e78b928 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt @@ -27,21 +27,16 @@ import org.futo.circles.core.extensions.showSuccess import org.futo.circles.core.extensions.withConfirmation import org.futo.circles.core.feature.share.ShareProvider import org.futo.circles.core.model.CircleRoomTypeArg -import org.futo.circles.core.model.CreatePollContent import org.futo.circles.core.model.Post import org.futo.circles.core.model.PostContent import org.futo.circles.databinding.DialogFragmentTimelineBinding import org.futo.circles.feature.timeline.list.PostOptionsListener import org.futo.circles.feature.timeline.list.TimelineAdapter -import org.futo.circles.feature.timeline.poll.CreatePollListener -import org.futo.circles.feature.timeline.post.create.CreatePostListener import org.futo.circles.feature.timeline.post.emoji.EmojiPickerListener import org.futo.circles.feature.timeline.post.menu.PostMenuListener -import org.futo.circles.model.CreatePostContent import org.futo.circles.model.EndPoll import org.futo.circles.model.IgnoreSender import org.futo.circles.model.RemovePost -import org.futo.circles.model.TextPostContent import org.futo.circles.view.CreatePostViewListener import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent @@ -50,8 +45,7 @@ import org.matrix.android.sdk.api.session.room.powerlevels.Role @ExperimentalBadgeUtils @AndroidEntryPoint class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimelineBinding::inflate), - PostOptionsListener, PostMenuListener, - CreatePostListener, CreatePollListener, EmojiPickerListener { + PostOptionsListener, PostMenuListener, EmojiPickerListener { private val args: TimelineDialogFragmentArgs by navArgs() private val viewModel by viewModels<TimelineViewModel>() @@ -268,26 +262,6 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli withConfirmation(EndPoll()) { viewModel.endPoll(roomId, eventId) } } - override fun onSendPost( - roomId: String, - postContent: CreatePostContent, - threadEventId: String? - ) { - viewModel.sendPost(roomId, postContent, threadEventId) - } - - override fun onEditPost(roomId: String, postContent: CreatePostContent, eventId: String) { - viewModel.editPost(eventId, roomId, postContent) - } - - override fun onCreatePoll(roomId: String, pollContent: CreatePollContent) { - viewModel.createPoll(roomId, pollContent) - } - - override fun onEditPoll(roomId: String, eventId: String, pollContent: CreatePollContent) { - viewModel.editPoll(roomId, eventId, pollContent) - } - override fun onEmojiSelected(roomId: String?, eventId: String?, emoji: String) { roomId ?: return eventId ?: return diff --git a/app/src/main/java/org/futo/circles/feature/timeline/TimelineViewModel.kt b/app/src/main/java/org/futo/circles/feature/timeline/TimelineViewModel.kt index 85c76ec8c1f7ebe9286428cb3906b463ddbabe87..5daeb58953725c16aafca677b1f143089501b8cf 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/TimelineViewModel.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/TimelineViewModel.kt @@ -40,7 +40,6 @@ class TimelineViewModel @Inject constructor( timelineDataSourceFactory: BaseTimelineDataSource.Factory, accessLevelDataSource: AccessLevelDataSource, knockRequestsDataSource: KnockRequestsDataSource, - private val sendMessageDataSource: SendMessageDataSource, private val postOptionsDataSource: PostOptionsDataSource, private val userOptionsDataSource: UserOptionsDataSource, private val readMessageDataSource: ReadMessageDataSource, @@ -91,44 +90,6 @@ class TimelineViewModel @Inject constructor( } } - fun sendPost(roomId: String, postContent: CreatePostContent, threadEventId: String?) { - launchBg { - when (postContent) { - is MediaPostContent -> sendMessageDataSource.sendMedia( - roomId, - postContent.uri, - postContent.caption, - threadEventId, - postContent.mediaType - ) - - is TextPostContent -> sendMessageDataSource.sendTextMessage( - roomId, postContent.text, threadEventId - ) - } - } - } - - fun editPost(eventId: String, roomId: String, postContent: CreatePostContent) { - when (postContent) { - is MediaPostContent -> postContent.caption?.let { - sendMessageDataSource.editMediaCaption(eventId, roomId, postContent.caption) - } - - is TextPostContent -> sendMessageDataSource.editTextMessage( - eventId, roomId, postContent.text - ) - } - } - - fun createPoll(roomId: String, pollContent: CreatePollContent) { - sendMessageDataSource.createPoll(roomId, pollContent) - } - - fun editPoll(roomId: String, eventId: String, pollContent: CreatePollContent) { - sendMessageDataSource.editPoll(roomId, eventId, pollContent) - } - fun sendReaction(roomId: String, eventId: String, emoji: String) { postOptionsDataSource.sendReaction(roomId, eventId, emoji) } diff --git a/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollDialogFragment.kt index 653128e2e0993ea4f0d72457bb40c7dc424e4e4a..32b118446ebea7db639849a7b02c84c5a24042ef 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollDialogFragment.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollDialogFragment.kt @@ -1,6 +1,5 @@ package org.futo.circles.feature.timeline.poll -import android.content.Context import android.os.Bundle import android.view.View import androidx.core.widget.doAfterTextChanged @@ -8,10 +7,10 @@ import androidx.fragment.app.viewModels import androidx.navigation.fragment.navArgs import dagger.hilt.android.AndroidEntryPoint import org.futo.circles.R +import org.futo.circles.core.base.fragment.BaseFullscreenDialogFragment import org.futo.circles.core.extensions.getText import org.futo.circles.core.extensions.observeData import org.futo.circles.core.extensions.onBackPressed -import org.futo.circles.core.base.fragment.BaseFullscreenDialogFragment import org.futo.circles.core.model.CreatePollContent import org.futo.circles.databinding.DialogFragmentCreatePollBinding import org.matrix.android.sdk.api.session.room.model.message.PollType @@ -28,14 +27,6 @@ class CreatePollDialogFragment : private val viewModel by viewModels<CreatePollViewModel>() - private var createPollListener: CreatePollListener? = null - - override fun onAttach(context: Context) { - super.onAttach(context) - createPollListener = - parentFragmentManager.fragments.firstOrNull { it is CreatePollListener } as? CreatePollListener - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setupViews() @@ -86,9 +77,7 @@ class CreatePollDialogFragment : binding.tilQuestion.getText(), binding.lvPostOptions.getOptionsList() ) - args.eventId?.let { - createPollListener?.onEditPoll(args.roomId, it, pollContent) - } ?: createPollListener?.onCreatePoll(args.roomId, pollContent) + viewModel.onSendPoll(pollContent) } } \ No newline at end of file diff --git a/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollListener.kt b/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollListener.kt deleted file mode 100644 index 0d781e52be31d82f638c707f2ebace806227b9d2..0000000000000000000000000000000000000000 --- a/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollListener.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.futo.circles.feature.timeline.poll - -import org.futo.circles.core.model.CreatePollContent - -interface CreatePollListener { - fun onCreatePoll(roomId: String, pollContent: CreatePollContent) - fun onEditPoll(roomId: String, eventId: String, pollContent: CreatePollContent) -} \ No newline at end of file diff --git a/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollViewModel.kt b/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollViewModel.kt index a48e10440656d30ca49bccc3ee54dbba9e16cd43..8934b4e4f5be1edde29b3bcae3accfdad1e1d861 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollViewModel.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/poll/CreatePollViewModel.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel import org.futo.circles.core.extensions.getOrThrow +import org.futo.circles.core.feature.timeline.post.SendMessageDataSource import org.futo.circles.core.mapping.toPollContent +import org.futo.circles.core.model.CreatePollContent import org.futo.circles.core.model.PollContent import org.futo.circles.core.provider.MatrixSessionProvider import org.matrix.android.sdk.api.session.getRoom @@ -13,7 +15,10 @@ import org.matrix.android.sdk.api.session.room.getTimelineEvent import javax.inject.Inject @HiltViewModel -class CreatePollViewModel @Inject constructor(savedStateHandle: SavedStateHandle) : ViewModel() { +class CreatePollViewModel @Inject constructor( + savedStateHandle: SavedStateHandle, + private val sendMessageDataSource: SendMessageDataSource +) : ViewModel() { private val roomId: String = savedStateHandle.getOrThrow("roomId") private val eventId: String? = savedStateHandle["eventId"] @@ -23,6 +28,12 @@ class CreatePollViewModel @Inject constructor(savedStateHandle: SavedStateHandle setEditPostInfo() } + fun onSendPoll(pollContent: CreatePollContent) { + eventId?.let { + sendMessageDataSource.editPoll(roomId, it, pollContent) + } ?: sendMessageDataSource.createPoll(roomId, pollContent) + } + private fun setEditPostInfo() { eventId ?: return val session = MatrixSessionProvider.currentSession diff --git a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt index 61da25b5a8bb5915db5679c72b3b064a0c2ea4c5..a5900a07195e0f8bd8ebabf0e868d111219eee96 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt @@ -39,13 +39,6 @@ class CreatePostDialogFragment : BottomSheetDialogFragment(), PreviewPostListene private val viewModel by viewModels<CreatePostViewModel>() private val mediaPickerHelper = MediaPickerHelper(this, isVideoAvailable = true) - private var createPostListener: CreatePostListener? = null - - override fun onAttach(context: Context) { - super.onAttach(context) - createPostListener = - parentFragmentManager.fragments.lastOrNull { it is CreatePostListener } as? CreatePostListener - } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -117,17 +110,6 @@ class CreatePostDialogFragment : BottomSheetDialogFragment(), PreviewPostListene binding?.vPostPreview?.setMedia(uri, type) } - private fun sendPost(content: CreatePostContent) { - if (args.isEdit) onEditPost(content) - else createPostListener?.onSendPost( - args.roomId, content, args.eventId - ) - } - - private fun onEditPost(content: CreatePostContent) { - val eventId = args.eventId ?: return - createPostListener?.onEditPost(args.roomId, content, eventId) - } override fun onUploadMediaClicked() { mediaPickerHelper.showMediaPickerDialog( @@ -150,7 +132,7 @@ class CreatePostDialogFragment : BottomSheetDialogFragment(), PreviewPostListene override fun onSendClicked(content: CreatePostContent) { if (showNoInternetConnection()) return - sendPost(content) + viewModel.onSendAction(content) dismiss() } diff --git a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostListener.kt b/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostListener.kt deleted file mode 100644 index 23b6c3ffbbf7a36cedd487441870eb2c9f20cb3d..0000000000000000000000000000000000000000 --- a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostListener.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.futo.circles.feature.timeline.post.create - -import org.futo.circles.model.CreatePostContent - -interface CreatePostListener { - fun onSendPost(roomId: String, postContent: CreatePostContent, threadEventId: String?) - fun onEditPost(roomId: String, postContent: CreatePostContent, eventId: String) -} \ No newline at end of file diff --git a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostViewModel.kt b/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostViewModel.kt index 7a426d93671f43ff925872f53965ad95bf7f62be..7b3565bee49544efc68a345da7741ed43af524c7 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostViewModel.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostViewModel.kt @@ -5,14 +5,20 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel import org.futo.circles.core.extensions.getOrThrow -import org.futo.circles.core.model.PostContent +import org.futo.circles.core.extensions.launchBg import org.futo.circles.core.feature.timeline.post.PostContentDataSource +import org.futo.circles.core.feature.timeline.post.SendMessageDataSource +import org.futo.circles.core.model.PostContent +import org.futo.circles.model.CreatePostContent +import org.futo.circles.model.MediaPostContent +import org.futo.circles.model.TextPostContent import javax.inject.Inject @HiltViewModel class CreatePostViewModel @Inject constructor( savedStateHandle: SavedStateHandle, - private val postContentDataSource: PostContentDataSource + private val postContentDataSource: PostContentDataSource, + private val sendMessageDataSource: SendMessageDataSource ) : ViewModel() { private val roomId: String = savedStateHandle.getOrThrow("roomId") @@ -25,9 +31,45 @@ class CreatePostViewModel @Inject constructor( if (isEdit) setEditPostInfo() } + fun onSendAction(content: CreatePostContent) { + if (isEdit) eventId?.let { editPost(it, roomId, content) } + else sendPost(roomId, content, eventId) + } + + private fun setEditPostInfo() { eventId ?: return val content = postContentDataSource.getPostContent(roomId, eventId) ?: return postToEditContentLiveData.value = content } + + private fun sendPost(roomId: String, postContent: CreatePostContent, threadEventId: String?) { + launchBg { + when (postContent) { + is MediaPostContent -> sendMessageDataSource.sendMedia( + roomId, + postContent.uri, + postContent.caption, + threadEventId, + postContent.mediaType + ) + + is TextPostContent -> sendMessageDataSource.sendTextMessage( + roomId, postContent.text, threadEventId + ) + } + } + } + + private fun editPost(eventId: String, roomId: String, postContent: CreatePostContent) { + when (postContent) { + is MediaPostContent -> postContent.caption?.let { + sendMessageDataSource.editMediaCaption(eventId, roomId, postContent.caption) + } + + is TextPostContent -> sendMessageDataSource.editTextMessage( + eventId, roomId, postContent.text + ) + } + } } \ No newline at end of file