Commit c4e83367 authored by ekager's avatar ekager Committed by Emily Kager
Browse files

For #6832 - Fix various fragment not attached to a context crashes

parent 6457a02a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ class AddonDetailsFragment : Fragment(R.layout.fragment_add_on_details) {
    }

    private fun showUpdaterDialog(addon: Addon) {
        lifecycleScope.launch(IO) {
        viewLifecycleOwner.lifecycleScope.launch(IO) {
            val updateAttempt = updateAttemptStorage.findUpdateAttemptBy(addon.id)
            updateAttempt?.let {
                withContext(Main) {
+11 −5
Original line number Diff line number Diff line
@@ -98,10 +98,10 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
    private fun bindRecyclerView(view: View) {
        val recyclerView = view.add_ons_list
        recyclerView.layoutManager = LinearLayoutManager(requireContext())
        lifecycleScope.launch(IO) {
        viewLifecycleOwner.lifecycleScope.launch(IO) {
            try {
                val addons = requireContext().components.addonManager.getAddons()
                lifecycleScope.launch(Dispatchers.Main) {
                viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
                    runIfFragmentIsAttached {
                        val adapter = AddonsManagerAdapter(
                            requireContext().components.addonCollectionProvider,
@@ -117,9 +117,12 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
                    }
                }
            } catch (e: AddonManagerException) {
                lifecycleScope.launch(Dispatchers.Main) {
                viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
                    runIfFragmentIsAttached {
                        showSnackBar(view, getString(R.string.mozac_feature_addons_failed_to_query_add_ons))
                        showSnackBar(
                            view,
                            getString(R.string.mozac_feature_addons_failed_to_query_add_ons)
                        )
                        isInstallationInProgress = false
                        view.add_ons_progress_bar.isVisible = false
                        view.add_ons_empty_message.isVisible = true
@@ -220,7 +223,10 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
                    val rootView = activity?.getRootView() ?: view
                    showSnackBar(
                        rootView,
                        getString(R.string.mozac_feature_addons_failed_to_install, addon.translatedName)
                        getString(
                            R.string.mozac_feature_addons_failed_to_install,
                            addon.translatedName
                        )
                    )
                    addonProgressOverlay?.visibility = View.GONE
                    isInstallationInProgress = false
+4 −13
Original line number Diff line number Diff line
@@ -89,7 +89,6 @@ import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.sessionsOfType
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.home.SharedViewModel
import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.wifi.SitePermissionsWifiIntegration
import java.lang.ref.WeakReference
@@ -186,7 +185,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session

        return getSessionById()?.also { session ->
            val browserToolbarController = DefaultBrowserToolbarController(
                store = browserFragmentStore,
                activity = requireActivity(),
                navController = findNavController(),
                readerModeController = DefaultReaderModeController(
@@ -194,24 +192,17 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
                    (activity as HomeActivity).browsingModeManager.mode.isPrivate,
                    view.readerViewControlsBar
                ),
                browsingModeManager = (activity as HomeActivity).browsingModeManager,
                sessionManager = requireComponents.core.sessionManager,
                findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
                engineView = engineView,
                swipeRefresh = swipeRefresh,
                browserAnimator = browserAnimator,
                customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) },
                getSupportUrl = {
                    SupportUtils.getSumoURLForTopic(
                        context,
                        SupportUtils.SumoTopic.HELP
                    )
                },
                openInFenixIntent = Intent(context, IntentReceiverActivity::class.java).apply {
                    action = Intent.ACTION_VIEW
                },
                bookmarkTapped = { lifecycleScope.launch { bookmarkTapped(it) } },
                scope = lifecycleScope,
                bookmarkTapped = { viewLifecycleOwner.lifecycleScope.launch { bookmarkTapped(it) } },
                scope = viewLifecycleOwner.lifecycleScope,
                tabCollectionStorage = requireComponents.core.tabCollectionStorage,
                topSiteStorage = requireComponents.core.topSiteStorage,
                sharedViewModel = sharedViewModel
@@ -226,7 +217,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
                shouldUseBottomToolbar = context.settings().shouldUseBottomToolbar,
                interactor = browserInteractor,
                customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) },
                lifecycleOwner = this.viewLifecycleOwner
                lifecycleOwner = viewLifecycleOwner
            )

            toolbarIntegration.set(
@@ -725,7 +716,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
     */
    private fun showQuickSettingsDialog() {
        val session = getSessionById() ?: return
        lifecycleScope.launch(Main) {
        viewLifecycleOwner.lifecycleScope.launch(Main) {
            val sitePermissions: SitePermissions? = withContext(IO) {
                session.url.toUri().host?.let { host ->
                    val storage = requireContext().components.core.permissionStorage
+4 −6
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import mozilla.components.browser.session.SessionManager
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.tabs.TabsUseCases
import org.mozilla.fenix.components.Analytics
import org.mozilla.fenix.components.TabCollectionStorage
import org.mozilla.fenix.components.metrics.Event
@@ -64,9 +63,8 @@ class DefaultCollectionCreationController(
    private val dismiss: () -> Unit,
    private val analytics: Analytics,
    private val tabCollectionStorage: TabCollectionStorage,
    private val tabsUseCases: TabsUseCases,
    private val sessionManager: SessionManager,
    private val lifecycleScope: CoroutineScope
    private val viewLifecycleScope: CoroutineScope
) : CollectionCreationController {

    companion object {
@@ -78,7 +76,7 @@ class DefaultCollectionCreationController(
        dismiss()

        val sessionBundle = tabs.toList().toSessionBundle(sessionManager)
        lifecycleScope.launch(Dispatchers.IO) {
        viewLifecycleScope.launch(Dispatchers.IO) {
            tabCollectionStorage.createCollection(name, sessionBundle)
        }

@@ -89,7 +87,7 @@ class DefaultCollectionCreationController(

    override fun renameCollection(collection: TabCollection, name: String) {
        dismiss()
        lifecycleScope.launch(Dispatchers.IO) {
        viewLifecycleScope.launch(Dispatchers.IO) {
            tabCollectionStorage.renameCollection(collection, name)
            analytics.metrics.track(Event.CollectionRenamed)
        }
@@ -114,7 +112,7 @@ class DefaultCollectionCreationController(
    override fun selectCollection(collection: TabCollection, tabs: List<Tab>) {
        dismiss()
        val sessionBundle = tabs.toList().toSessionBundle(sessionManager)
        lifecycleScope.launch(Dispatchers.IO) {
        viewLifecycleScope.launch(Dispatchers.IO) {
            tabCollectionStorage
                .addTabsToCollection(collection, sessionBundle)
        }
+0 −1
Original line number Diff line number Diff line
@@ -77,7 +77,6 @@ class CollectionCreationFragment : DialogFragment() {
                ::dismiss,
                requireComponents.analytics,
                requireComponents.core.tabCollectionStorage,
                requireComponents.useCases.tabsUseCases,
                requireComponents.core.sessionManager,
                viewLifecycleOwner.lifecycleScope
            )
Loading