1
0
Fork 0

No Issue: Close the web extension popup when we can't get the popup of the session.

master
Arturo Mejia 2020-02-04 17:17:46 -05:00 committed by GitHub
parent fa854f511b
commit 6191fec0d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 7 deletions

View File

@ -9,6 +9,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import kotlinx.android.synthetic.main.fragment_add_on_internal_settings.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import mozilla.components.browser.state.action.WebExtensionAction
@ -32,6 +33,12 @@ class WebExtensionActionPopupFragment : Fragment(), EngineSession.Observer {
}
private var engineSession: EngineSession? = null
private val coreComponents by lazy { requireComponents.core }
private val safeArguments get() = requireNotNull(arguments)
private var sessionConsumed
get() = safeArguments.getBoolean("isSessionConsumed", false)
set(value) {
safeArguments.putBoolean("isSessionConsumed", value)
}
override fun onCreateView(
inflater: LayoutInflater,
@ -80,13 +87,16 @@ class WebExtensionActionPopupFragment : Fragment(), EngineSession.Observer {
} else {
consumeFrom(coreComponents.store) { state ->
state.extensions[webExtensionId]?.let { extState ->
extState.popupSession?.let {
if (engineSession == null) {
addonSettingsEngineView.render(it)
it.register(this)
consumePopupSession()
engineSession = it
}
val popupSession = extState.popupSession
if (popupSession != null) {
addonSettingsEngineView.render(popupSession)
popupSession.register(this)
consumePopupSession()
engineSession = popupSession
} else if (sessionConsumed) {
// In case we can't retrieve the popup session lets close the fragment,
// this can happen when Android recreates the activity.
findNavController().popBackStack()
}
}
}
@ -97,5 +107,6 @@ class WebExtensionActionPopupFragment : Fragment(), EngineSession.Observer {
coreComponents.store.dispatch(
WebExtensionAction.UpdatePopupSessionAction(webExtensionId, popupSession = null)
)
sessionConsumed = true
}
}