Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix potential NPE #1673

Merged
merged 1 commit into from
Jan 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen

override fun onDestroyView() {
showLoadingTimer.cancel()
TransitionManager.endTransitions(binding.root)
super.onDestroyView()
_binding = null
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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?) {
Expand Down Expand Up @@ -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 ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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()

Expand All @@ -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) {
Expand All @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -221,7 +222,9 @@ class NewMessageFragment : Fragment() {
quoteWebView = null
signatureWebView?.destroyAndClearHistory()
signatureWebView = null
TransitionManager.endTransitions(binding.root)
super.onDestroyView()
_binding = null
}

private fun handleOnBackPressed() {
Expand Down
Loading