diff --git a/components/feature/session/src/main/java/mozilla/components/feature/session/EngineViewPresenter.kt b/components/feature/session/src/main/java/mozilla/components/feature/session/EngineViewPresenter.kt index a74569135d1..d90836237d8 100644 --- a/components/feature/session/src/main/java/mozilla/components/feature/session/EngineViewPresenter.kt +++ b/components/feature/session/src/main/java/mozilla/components/feature/session/EngineViewPresenter.kt @@ -24,19 +24,20 @@ class EngineViewPresenter( val session = if (sessionId != null) { sessionManager.findSessionById(sessionId) } else { + sessionManager.register(this) sessionManager.selectedSession } session?.let { renderSession(it) } - - sessionManager.register(this) } /** * Stop presenter from updating view. */ fun stop() { - sessionManager.unregister(this) + if (sessionId == null) { + sessionManager.unregister(this) + } } /** diff --git a/components/feature/session/src/test/java/mozilla/components/feature/session/EngineViewPresenterTest.kt b/components/feature/session/src/test/java/mozilla/components/feature/session/EngineViewPresenterTest.kt index 2d37189ab45..e49fc6d69b1 100644 --- a/components/feature/session/src/test/java/mozilla/components/feature/session/EngineViewPresenterTest.kt +++ b/components/feature/session/src/test/java/mozilla/components/feature/session/EngineViewPresenterTest.kt @@ -10,6 +10,7 @@ import mozilla.components.concept.engine.EngineView import org.junit.Test import org.mockito.Mockito.`when` import org.mockito.Mockito.mock +import org.mockito.Mockito.never import org.mockito.Mockito.spy import org.mockito.Mockito.verify @@ -46,4 +47,17 @@ class EngineViewPresenterTest { engineViewPresenter.stop() verify(sessionManager).unregister(engineViewPresenter) } + + @Test + fun `Presenter does not register or unregister if presenting fixed session`() { + val sessionId = "just-a-test" + + val engineViewPresenter = EngineViewPresenter(sessionManager, engineView, sessionId) + + engineViewPresenter.start() + verify(sessionManager, never()).register(engineViewPresenter) + + engineViewPresenter.stop() + verify(sessionManager, never()).unregister(engineViewPresenter) + } } diff --git a/docs/changelog.md b/docs/changelog.md index 8631dad0694..38fe84196f2 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -13,6 +13,9 @@ permalink: /changelog/ * [Gecko](https://github.com/mozilla-mobile/android-components/blob/master/buildSrc/src/main/java/Gecko.kt) * [Configuration](https://github.com/mozilla-mobile/android-components/blob/master/buildSrc/src/main/java/Config.kt) +* **feature-session** + * Fixed an issue causing `EngineViewPresenter` to render a selected `Session` even though it was configured to show a fixed `Session`. This issue caused a crash (`IllegalStateException: Display already acquired`) in the [Reference Browser](https://github.com/mozilla-mobile/reference-browser) when a "Custom Tab" and the "Browser" tried to render the same `Session`. + # 0.41.0 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v0.40.0...v0.41.0) @@ -30,6 +33,7 @@ permalink: /changelog/ * **feature-browser** * Added `BrowserToolbar` attributes to color the menu. + ```xml , grantResults: IntArray) { when (requestCode) { @@ -68,12 +75,14 @@ permalink: /changelog/ } } ``` + * Fixed Downloads feature to work with Custom Tabs by passing in the session ID when applicable. * **feature-prompts** * ⚠️ **This is a breaking API change!** * These change are similar to the ones for feature-downloads above and aim to provide a consistent way of handling permission requests. * The required permissions are now passed to the `onNeedToRequestPermissions` callback. + ```kotlin promptFeature = PromptFeature( fragment = this, @@ -84,7 +93,9 @@ permalink: /changelog/ } ) ``` + * Renamed `onRequestsPermissionsResult` to `onPermissionResult` and allow applications to specify the permission request code. This method should be invoked from `onRequestPermissionsResult`: + ```kotlin override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { when (requestCode) {