From eaa07430273d54ef95dcd8f0956c75e4b754813c Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 5 Apr 2024 15:01:21 +0200 Subject: [PATCH 1/3] fix to always show polls dialog. Sometimes the polls dialog seemed to not load the content. This was caused by the showLoadingScreen logic using binding.root.post which overwrote the content depending on if the showResultsScreen or showVoteScreen already set the content. So it was a race conditions that sometimes it worked and sometimes not. Additionally, calculating the height failed in showLoadingScreen, so in the end there was only the headline visible and even not loading spinner. This is now replaced by a fixed height. Signed-off-by: Marcel Hibbe --- .../talk/polls/ui/PollLoadingFragment.kt | 19 ++++--------------- .../talk/polls/ui/PollMainDialogFragment.kt | 18 ++++++++---------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollLoadingFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollLoadingFragment.kt index ee3012201..f7a351a0d 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollLoadingFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollLoadingFragment.kt @@ -10,7 +10,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.os.bundleOf import androidx.fragment.app.Fragment import autodagger.AutoInjector import com.nextcloud.android.common.ui.theme.utils.ColorRole @@ -27,34 +26,24 @@ class PollLoadingFragment : Fragment() { @Inject lateinit var viewThemeUtils: ViewThemeUtils - var fragmentHeight = 0 - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) - fragmentHeight = arguments?.getInt(KEY_FRAGMENT_HEIGHT)!! } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { binding = DialogPollLoadingBinding.inflate(inflater, container, false) - binding.root.layoutParams.height = fragmentHeight + binding.root.layoutParams.height = HEIGHT viewThemeUtils.platform.colorCircularProgressBar(binding.pollLoadingProgressbar, ColorRole.PRIMARY) return binding.root } companion object { - private val TAG = PollLoadingFragment::class.java.simpleName - private const val KEY_FRAGMENT_HEIGHT = "keyFragmentHeight" + private const val HEIGHT = 300 @JvmStatic - fun newInstance(fragmentHeight: Int): PollLoadingFragment { - val args = bundleOf( - KEY_FRAGMENT_HEIGHT to fragmentHeight - ) - - val fragment = PollLoadingFragment() - fragment.arguments = args - return fragment + fun newInstance(): PollLoadingFragment { + return PollLoadingFragment() } } } diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt index 6361ad2a4..5b7726ef4 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt @@ -90,32 +90,30 @@ class PollMainDialogFragment : DialogFragment() { initVotersAmount(state.showVotersAmount, state.poll.numVoters, false) showVoteScreen() } + is PollMainViewModel.PollResultState -> { initVotersAmount(state.showVotersAmount, state.poll.numVoters, true) showResultsScreen() } + is PollMainViewModel.LoadingState -> { showLoadingScreen() } + is PollMainViewModel.DismissDialogState -> { dismiss() } + else -> {} } } } private fun showLoadingScreen() { - binding.root.post { - run { - val fragmentHeight = binding.messagePollContentFragment.measuredHeight - - val contentFragment = PollLoadingFragment.newInstance(fragmentHeight) - val transaction = childFragmentManager.beginTransaction() - transaction.replace(binding.messagePollContentFragment.id, contentFragment) - transaction.commit() - } - } + val contentFragment = PollLoadingFragment.newInstance() + val transaction = childFragmentManager.beginTransaction() + transaction.replace(binding.messagePollContentFragment.id, contentFragment) + transaction.commit() } private fun showVoteScreen() { From 89d004b32df1566abbf004a19b8d1a9553d3ce30 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 5 Apr 2024 15:26:32 +0200 Subject: [PATCH 2/3] fix margins for poll checkboxes checkbox was cut off to the left. probably some material design update changed this. Now there is no need to modify the margin anymore. Signed-off-by: Marcel Hibbe --- .../java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt index c83ebcc2f..b30961a67 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt @@ -15,7 +15,6 @@ import android.view.View import android.view.ViewGroup import android.widget.CheckBox import android.widget.CompoundButton -import android.widget.LinearLayout import android.widget.RadioButton import androidx.appcompat.app.AlertDialog import androidx.fragment.app.Fragment @@ -139,16 +138,9 @@ class PollVoteFragment : Fragment() { } else { binding.voteOptionsCheckboxesWrapper.removeAllViews() - val layoutParams = LinearLayout.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - layoutParams.marginStart = CHECKBOX_MARGIN_LEFT - poll.options?.map { option -> CheckBox(context).apply { text = option - setLayoutParams(layoutParams) } }?.forEachIndexed { index, checkBox -> viewThemeUtils.platform.themeCheckbox(checkBox) @@ -216,7 +208,6 @@ class PollVoteFragment : Fragment() { companion object { private val TAG = PollVoteFragment::class.java.simpleName private const val UNLIMITED_VOTES = 0 - private const val CHECKBOX_MARGIN_LEFT = -18 @JvmStatic fun newInstance(): PollVoteFragment { From 3cfc4188f0a3f43d97b0d77c4e3fef7e3534a37e Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 5 Apr 2024 15:48:13 +0200 Subject: [PATCH 3/3] fix to load fallback poll avatar for other actorTypes (deleted users...) Signed-off-by: Marcel Hibbe --- .../talk/polls/adapters/PollResultVoterViewHolder.kt | 8 +++----- .../polls/adapters/PollResultVotersOverviewViewHolder.kt | 8 +++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt index 841a02a88..f0174eefe 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt @@ -49,10 +49,6 @@ class PollResultVoterViewHolder( avatar.loadGuestAvatar(user, displayName!!, false) } - Participant.ActorType.USERS -> { - avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false) - } - Participant.ActorType.FEDERATED -> { val darkTheme = if (DisplayUtils.isDarkModeOn(binding.root.context)) 1 else 0 avatar.loadFederatedUserAvatar( @@ -66,7 +62,9 @@ class PollResultVoterViewHolder( ) } - else -> {} + else -> { + avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false) + } } } } diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt index 5b3184e49..b23753cfc 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt @@ -79,10 +79,6 @@ class PollResultVotersOverviewViewHolder( avatar.loadGuestAvatar(user, displayName!!, false) } - Participant.ActorType.USERS -> { - avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false) - } - Participant.ActorType.FEDERATED -> { val darkTheme = if (DisplayUtils.isDarkModeOn(binding.root.context)) 1 else 0 avatar.loadFederatedUserAvatar( @@ -96,7 +92,9 @@ class PollResultVotersOverviewViewHolder( ) } - else -> {} + else -> { + avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false) + } } }