1
0
Fork 0
fenix/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt

69 lines
2.8 KiB
Kotlin
Raw Normal View History

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.customtabs
import androidx.navigation.NavDestination
import mozilla.components.browser.session.runWithSession
import mozilla.components.feature.intent.ext.getSessionId
import mozilla.components.support.utils.SafeIntent
2019-08-12 18:31:59 +02:00
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
2019-08-12 18:31:59 +02:00
import org.mozilla.fenix.NavGraphDirections
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
2019-08-12 18:31:59 +02:00
import org.mozilla.fenix.browser.browsingmode.CustomTabBrowsingModeManager
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.components
2019-08-12 18:31:59 +02:00
import org.mozilla.fenix.theme.CustomTabThemeManager
import java.security.InvalidParameterException
2019-09-19 18:12:42 +02:00
/**
* Activity that holds the [ExternalAppBrowserFragment] that is launched within an external app,
* such as custom tabs and progressive web apps.
*/
open class ExternalAppBrowserActivity : HomeActivity() {
final override fun getBreadcrumbMessage(destination: NavDestination): String {
val fragmentName = resources.getResourceEntryName(destination.id)
return "Changing to fragment $fragmentName, isCustomTab: true"
}
final override fun getIntentSource(intent: SafeIntent) = Event.OpenedApp.Source.CUSTOM_TAB
final override fun getIntentSessionId(intent: SafeIntent) = intent.getSessionId()
2019-08-12 18:31:59 +02:00
override fun getNavDirections(
from: BrowserDirection,
customTabSessionId: String?
) = when (from) {
BrowserDirection.FromGlobal ->
NavGraphDirections.actionGlobalExternalAppBrowser(customTabSessionId)
else -> throw InvalidParameterException(
"Tried to navigate to ExternalAppBrowserFragment from $from"
)
}
final override fun createBrowsingModeManager(initialMode: BrowsingMode) =
2019-08-21 17:33:59 +02:00
CustomTabBrowsingModeManager()
final override fun createThemeManager() = CustomTabThemeManager()
override fun onDestroy() {
super.onDestroy()
if (isFinishing) {
// When this activity finishes, the process is staying around and the session still
// exists then remove it now to free all its resources. Once this activity is finished
// then there's no way to get back to it other than relaunching it.
val sessionId = getIntentSessionId(SafeIntent(intent))
components.core.sessionManager.runWithSession(sessionId) { session ->
// If the custom tag config has been removed we are opening this in normal browsing
if (session.customTabConfig != null) {
remove(session)
}
true
}
}
}
}