From 020968e2418774935af16686abaaf47e39192a9f Mon Sep 17 00:00:00 2001 From: Fabian Devel Date: Tue, 23 Jan 2024 17:27:00 +0100 Subject: [PATCH] fix(NPE): Fix potential NPE --- .../mail/ui/main/folder/ThreadListFragment.kt | 1 + .../mail/ui/main/menu/MenuDrawerFragment.kt | 12 +++++++++--- .../mail/ui/newMessage/AiPropositionFragment.kt | 12 +++++++++--- .../mail/ui/newMessage/NewMessageFragment.kt | 7 +++++-- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt index 93d8f985fd..b3e0122b30 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt @@ -253,6 +253,7 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen override fun onDestroyView() { showLoadingTimer.cancel() + TransitionManager.endTransitions(binding.root) super.onDestroyView() _binding = null } diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/menu/MenuDrawerFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/main/menu/MenuDrawerFragment.kt index f212a090ae..7d1b87c523 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/menu/MenuDrawerFragment.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/menu/MenuDrawerFragment.kt @@ -40,7 +40,6 @@ import com.infomaniak.lib.bugtracker.BugTrackerActivity import com.infomaniak.lib.bugtracker.BugTrackerActivityArgs import com.infomaniak.lib.core.utils.UtilsUi.openUrl import com.infomaniak.lib.core.utils.context -import com.infomaniak.lib.core.utils.safeBinding import com.infomaniak.lib.core.utils.safeNavigate import com.infomaniak.mail.BuildConfig import com.infomaniak.mail.MatomoMail.trackCreateFolderEvent @@ -60,7 +59,8 @@ import kotlinx.coroutines.launch @AndroidEntryPoint class MenuDrawerFragment : MenuFoldersFragment(), MailboxListFragment { - private var binding: FragmentMenuDrawerBinding by safeBinding() + private var _binding: FragmentMenuDrawerBinding? = null + private val binding get() = _binding!! // This property is only valid between onCreateView and onDestroyView private val menuDrawerViewModel: MenuDrawerViewModel by viewModels() var exitDrawer: (() -> Unit)? = null @@ -74,7 +74,7 @@ class MenuDrawerFragment : MenuFoldersFragment(), MailboxListFragment { override val mailboxesAdapter get() = binding.mailboxList.adapter as MailboxesAdapter override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - return FragmentMenuDrawerBinding.inflate(inflater, container, false).also { binding = it }.root + return FragmentMenuDrawerBinding.inflate(inflater, container, false).also { _binding = it }.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -182,6 +182,12 @@ class MenuDrawerFragment : MenuFoldersFragment(), MailboxListFragment { } } + override fun onDestroyView() { + TransitionManager.endTransitions(binding.drawerContentScrollView) + super.onDestroyView() + _binding = null + } + private fun setupCreateFolderDialog() { inputDialog.setCallbacks( onPositiveButtonClicked = { folderName -> diff --git a/app/src/main/java/com/infomaniak/mail/ui/newMessage/AiPropositionFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/newMessage/AiPropositionFragment.kt index 97fde35369..6ebf5bd475 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/newMessage/AiPropositionFragment.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/newMessage/AiPropositionFragment.kt @@ -32,7 +32,6 @@ import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.infomaniak.lib.core.MatomoCore.TrackerAction -import com.infomaniak.lib.core.utils.safeBinding import com.infomaniak.mail.MatomoMail.trackAiWriterEvent import com.infomaniak.mail.R import com.infomaniak.mail.data.LocalSettings @@ -56,7 +55,8 @@ import com.infomaniak.lib.core.R as RCore @AndroidEntryPoint class AiPropositionFragment : Fragment() { - private var binding: FragmentAiPropositionBinding by safeBinding() + private var _binding: FragmentAiPropositionBinding? = null + private val binding get() = _binding!! // This property is only valid between onCreateView and onDestroyView private val newMessageViewModel: NewMessageViewModel by activityViewModels() private val aiViewModel: AiViewModel by activityViewModels() @@ -80,7 +80,7 @@ class AiPropositionFragment : Fragment() { lateinit var subjectReplacementDialog: AiDescriptionAlertDialog override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - return FragmentAiPropositionBinding.inflate(inflater, container, false).also { binding = it }.root + return FragmentAiPropositionBinding.inflate(inflater, container, false).also { _binding = it }.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding) { @@ -94,6 +94,12 @@ class AiPropositionFragment : Fragment() { observeAiProposition() } + override fun onDestroyView() { + TransitionManager.endTransitions(binding.nestedScrollView) + super.onDestroyView() + _binding = null + } + override fun onDestroy() { currentRequestJob?.cancel() super.onDestroy() diff --git a/app/src/main/java/com/infomaniak/mail/ui/newMessage/NewMessageFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/newMessage/NewMessageFragment.kt index 7bd3151d5d..577a6de681 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/newMessage/NewMessageFragment.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/newMessage/NewMessageFragment.kt @@ -75,7 +75,8 @@ import javax.inject.Inject @AndroidEntryPoint class NewMessageFragment : Fragment() { - private var binding: FragmentNewMessageBinding by safeBinding() + private var _binding: FragmentNewMessageBinding? = null + private val binding get() = _binding!! // This property is only valid between onCreateView and onDestroyView private val newMessageActivityArgs by lazy { // When opening this fragment via deeplink, it can happen that the navigation // extras aren't yet initialized, so we don't use the `navArgs` here. @@ -122,7 +123,7 @@ class NewMessageFragment : Fragment() { lateinit var descriptionDialog: DescriptionAlertDialog override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - return FragmentNewMessageBinding.inflate(inflater, container, false).also { binding = it }.root + return FragmentNewMessageBinding.inflate(inflater, container, false).also { _binding = it }.root } // This `SuppressLint` seems useless, but it's for the CI. Don't remove it. @@ -221,7 +222,9 @@ class NewMessageFragment : Fragment() { quoteWebView = null signatureWebView?.destroyAndClearHistory() signatureWebView = null + TransitionManager.endTransitions(binding.root) super.onDestroyView() + _binding = null } private fun handleOnBackPressed() {