From bf0544556122647988ef6f8a1014e33ba3282eb4 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 3 Jun 2022 15:21:18 +0200 Subject: [PATCH] open poll dialog Signed-off-by: Marcel Hibbe --- .../messages/IncomingPollMessageViewHolder.kt | 48 +++++++---- .../nextcloud/talk/polls/model/PollModel.kt | 4 + .../repositories/DialogPollRepository.kt | 12 +++ .../talk/polls/ui/PollVoteDialogFragment.kt | 83 +++++++++++++++++++ .../talk/polls/viewmodels/PollViewModel.kt | 34 ++++++++ app/src/main/res/layout/dialog_poll_vote.xml | 81 ++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 7 files changed, 249 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/polls/model/PollModel.kt create mode 100644 app/src/main/java/com/nextcloud/talk/polls/repositories/DialogPollRepository.kt create mode 100644 app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteDialogFragment.kt create mode 100644 app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollViewModel.kt create mode 100644 app/src/main/res/layout/dialog_poll_vote.xml diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt index 8ada42208..2aa1cf541 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt @@ -34,11 +34,13 @@ import autodagger.AutoInjector import coil.load import com.amulyakhare.textdrawable.TextDrawable import com.nextcloud.talk.R +import com.nextcloud.talk.activities.MainActivity import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.databinding.ItemCustomIncomingPollMessageBinding import com.nextcloud.talk.models.json.chat.ChatMessage +import com.nextcloud.talk.polls.ui.PollVoteDialogFragment import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DisplayUtils @@ -98,30 +100,48 @@ class IncomingPollMessageViewHolder(incomingView: View, payload: Any) : MessageH } private fun setPollPreview(message: ChatMessage) { - var pollId: String? - var pollName: String? = "" + var pollId: Int? = null + var pollName: String? = null if (message.messageParameters != null && message.messageParameters!!.size > 0) { for (key in message.messageParameters!!.keys) { val individualHashMap: Map = message.messageParameters!![key]!! if (individualHashMap["type"] == "talk-poll") { - pollId = individualHashMap["id"] - pollName = individualHashMap["name"] + pollId = Integer.parseInt(individualHashMap["id"]) + pollName = individualHashMap["name"].toString() } } } - binding.messagePollTitle.text = pollName + if (pollId != null && pollName != null) { + binding.messagePollTitle.text = pollName - // TODO: how to get room token here? - // val credentials = ApiUtils.getCredentials(message.activeUser?.username, message.activeUser?.token) - // ncApi!!.getPoll( - // credentials, - // ApiUtils.getUrlForPoll( - // message.activeUser?.baseUrl, - // ??????? - // ) - // ) + // TODO: how to get room token here? + val roomToken = "???????????????????????????" + + + binding.bubble.setOnClickListener { + val pollVoteDialog = PollVoteDialogFragment.newInstance( + message.activeUser!!, roomToken, pollId, + pollName + ) + pollVoteDialog.show( + (binding.messagePollIcon.context as MainActivity).supportFragmentManager, + TAG + ) + } + + // wait for https://github.com/nextcloud/spreed/pull/7306#issuecomment-1145819317 + + // val credentials = ApiUtils.getCredentials(message.activeUser?.username, message.activeUser?.token) + // ncApi!!.getPoll( + // credentials, + // ApiUtils.getUrlForPoll( + // message.activeUser?.baseUrl, + // ??????? + // ) + // ) + } } private fun setAvatarAndAuthorOnMessageItem(message: ChatMessage) { diff --git a/app/src/main/java/com/nextcloud/talk/polls/model/PollModel.kt b/app/src/main/java/com/nextcloud/talk/polls/model/PollModel.kt new file mode 100644 index 000000000..b8179c97a --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/polls/model/PollModel.kt @@ -0,0 +1,4 @@ +package com.nextcloud.talk.polls.model + +class PollModel { +} \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/polls/repositories/DialogPollRepository.kt b/app/src/main/java/com/nextcloud/talk/polls/repositories/DialogPollRepository.kt new file mode 100644 index 000000000..b9c9c9a4c --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/polls/repositories/DialogPollRepository.kt @@ -0,0 +1,12 @@ +package com.nextcloud.talk.polls.repositories + +interface DialogPollRepository { + + data class Parameters( + val userName: String, + val userToken: String, + val baseUrl: String, + val roomToken: String, + val pollId: Int + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteDialogFragment.kt new file mode 100644 index 000000000..76ee50e21 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteDialogFragment.kt @@ -0,0 +1,83 @@ +package com.nextcloud.talk.polls.ui + +import android.annotation.SuppressLint +import android.app.Dialog +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment +import autodagger.AutoInjector +import com.nextcloud.talk.application.NextcloudTalkApplication +import com.nextcloud.talk.databinding.DialogPollVoteBinding +import com.nextcloud.talk.models.database.UserEntity +import com.nextcloud.talk.polls.viewmodels.PollViewModel + +var user: UserEntity? = null +var pollId: Int? = null +var roomToken: String? = null +var pollTitle: String? = null + +@AutoInjector(NextcloudTalkApplication::class) +class PollVoteDialogFragment : DialogFragment() { + + private lateinit var binding: DialogPollVoteBinding + private lateinit var viewModel: PollViewModel + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) + } + + @SuppressLint("InflateParams") + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + binding = DialogPollVoteBinding.inflate(LayoutInflater.from(context)) + + return AlertDialog.Builder(requireContext()) + .setView(binding.root) + .create() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + return binding.root + } + + @SuppressLint("DefaultLocale") + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + binding.messagePollTitle.text = pollTitle + + + + viewModel.viewState.observe(this) { state -> + // when (state) { + // } + } + + viewModel.initialize(user!!, roomToken!!, pollId!!) + } + + /** + * Fragment creator + */ + companion object { + @JvmStatic + fun newInstance( + userEntity: UserEntity, + roomTokenParam: String, + id: Int, + name: String + ): PollVoteDialogFragment { + user = userEntity // TODO replace with "putParcelable" like in SetStatusDialogFragment??? + roomToken = roomTokenParam + pollId = id + pollTitle = name + + val dialogFragment = PollVoteDialogFragment() + return dialogFragment + } + } +} diff --git a/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollViewModel.kt b/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollViewModel.kt new file mode 100644 index 000000000..04c9cbbe2 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollViewModel.kt @@ -0,0 +1,34 @@ +package com.nextcloud.talk.polls.viewmodels + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import com.nextcloud.talk.models.database.UserEntity +import com.nextcloud.talk.polls.model.PollModel +import com.nextcloud.talk.polls.repositories.DialogPollRepository +import javax.inject.Inject + +class PollViewModel @Inject constructor(private val repository: DialogPollRepository) : ViewModel() { + + private lateinit var repositoryParameters: DialogPollRepository.Parameters + + sealed interface ViewState + object InitialState : ViewState + open class PollOpenState(val poll: PollModel) : ViewState + open class PollClosedState(val poll: PollModel) : ViewState + + private val _viewState: MutableLiveData = MutableLiveData(InitialState) + val viewState: LiveData + get() = _viewState + + fun initialize(userEntity: UserEntity, roomToken: String, pollId: Int) { + repositoryParameters = DialogPollRepository.Parameters( + userEntity.userId, + userEntity.token, + userEntity.baseUrl, + roomToken, + pollId + ) + // loadAvailableTypes() + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_poll_vote.xml b/app/src/main/res/layout/dialog_poll_vote.xml new file mode 100644 index 000000000..8ff72b000 --- /dev/null +++ b/app/src/main/res/layout/dialog_poll_vote.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5ef3f0bd7..131b6bb5f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,6 +27,7 @@ Skip Set Sorry, something went wrong! + Submit Settings