1
0
Fork 0

No issue: Sets BrowserFragment sessionId only in custom tabs

master
Sawyer Blatz 2019-04-29 08:30:32 -07:00 committed by Emily Kager
parent 5b7e297adf
commit d6879e2501
3 changed files with 43 additions and 51 deletions

View File

@ -135,45 +135,42 @@ open class HomeActivity : AppCompatActivity() {
}
private fun handleOpenedFromExternalSourceIfNecessary(intent: Intent?) {
if (intent?.extras?.getBoolean(OPEN_TO_BROWSER) == true) {
handleOpenedFromExternalSource()
}
}
this.intent.putExtra(OPEN_TO_BROWSER, false)
var customTabSessionId: String? = null
private fun handleOpenedFromExternalSource() {
intent?.putExtra(OPEN_TO_BROWSER, false)
openToBrowser(
BrowserDirection.FromGlobal,
SafeIntent(intent).getStringExtra(IntentProcessor.ACTIVE_SESSION_ID)
?: components.core.sessionManager.selectedSession?.id
)
intent?.let {
if (isCustomTab) {
customTabSessionId = SafeIntent(intent).getStringExtra(IntentProcessor.ACTIVE_SESSION_ID)
}
openToBrowser(BrowserDirection.FromGlobal, customTabSessionId)
}
}
fun openToBrowserAndLoad(
searchTermOrURL: String,
externalSessionId: String? = null,
customTabSessionId: String? = null,
engine: SearchEngine? = null,
from: BrowserDirection
) {
openToBrowser(from, externalSessionId)
load(searchTermOrURL, externalSessionId, engine)
openToBrowser(from, customTabSessionId)
load(searchTermOrURL, customTabSessionId, engine)
}
fun openToBrowser(from: BrowserDirection, externalSessionId: String? = null) {
fun openToBrowser(from: BrowserDirection, customTabSessionId: String? = null) {
val directions = when (from) {
BrowserDirection.FromGlobal -> NavGraphDirections.actionGlobalBrowser(externalSessionId)
BrowserDirection.FromHome -> HomeFragmentDirections.actionHomeFragmentToBrowserFragment(externalSessionId)
BrowserDirection.FromGlobal -> NavGraphDirections.actionGlobalBrowser(customTabSessionId)
BrowserDirection.FromHome -> HomeFragmentDirections.actionHomeFragmentToBrowserFragment(customTabSessionId)
BrowserDirection.FromSearch ->
SearchFragmentDirections.actionSearchFragmentToBrowserFragment(externalSessionId)
SearchFragmentDirections.actionSearchFragmentToBrowserFragment(customTabSessionId)
BrowserDirection.FromSettings ->
SettingsFragmentDirections.actionSettingsFragmentToBrowserFragment(externalSessionId)
SettingsFragmentDirections.actionSettingsFragmentToBrowserFragment(customTabSessionId)
BrowserDirection.FromBookmarks ->
BookmarkFragmentDirections.actionBookmarkFragmentToBrowserFragment(externalSessionId)
BookmarkFragmentDirections.actionBookmarkFragmentToBrowserFragment(customTabSessionId)
BrowserDirection.FromBookmarksFolderSelect ->
SelectBookmarkFolderFragmentDirections
.actionBookmarkSelectFolderFragmentToBrowserFragment(externalSessionId)
.actionBookmarkSelectFolderFragmentToBrowserFragment(customTabSessionId)
BrowserDirection.FromHistory ->
HistoryFragmentDirections.actionHistoryFragmentToBrowserFragment(externalSessionId)
HistoryFragmentDirections.actionHistoryFragmentToBrowserFragment(customTabSessionId)
}
if (sessionObserver == null)
sessionObserver = subscribeToSessions()

View File

@ -97,8 +97,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
private val customTabsIntegration = ViewBoundFeatureWrapper<CustomTabsIntegration>()
private lateinit var job: Job
// Session id for custom tab or opened from external intent
var externalSessionId: String? = null
var customTabSessionId: String? = null
override val coroutineContext: CoroutineContext get() = Dispatchers.IO + job
@ -113,13 +112,13 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
savedInstanceState: Bundle?
): View? {
require(arguments != null)
externalSessionId = BrowserFragmentArgs.fromBundle(arguments!!).externalSessionId
customTabSessionId = BrowserFragmentArgs.fromBundle(arguments!!).customTabSessionId
val view = inflater.inflate(R.layout.fragment_browser, container, false)
toolbarComponent = ToolbarComponent(
view.browserLayout,
ActionBusFactory.get(this), externalSessionId,
ActionBusFactory.get(this), customTabSessionId,
(activity as HomeActivity).browsingModeManager.isPrivate,
SearchState("", getSessionById()?.searchTerms ?: "", isEditing = false),
search_engine_icon
@ -150,7 +149,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
}
private fun getAppropriateLayoutGravity(): Int {
if (getSessionById()?.isCustomTabSession() == true) {
if (customTabSessionId != null) {
return Gravity.TOP
}
@ -206,7 +205,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
sessionManager,
SessionUseCases(sessionManager),
view.engineView,
externalSessionId
customTabSessionId
),
owner = this,
view = view
@ -241,7 +240,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
feature = FullScreenFeature(
sessionManager,
SessionUseCases(sessionManager),
externalSessionId
customTabSessionId
) {
if (it) {
FenixSnackbar.make(view.rootView, Snackbar.LENGTH_LONG)
@ -279,20 +278,18 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
val actionEmitter = ActionBusFactory.get(this).getManagedEmitter(SearchAction::class.java)
if (getSessionById()?.isCustomTabSession() == true) {
externalSessionId?.let {
customTabsIntegration.set(
feature = CustomTabsIntegration(
requireContext(),
requireComponents.core.sessionManager,
toolbar,
it,
activity,
onItemTapped = { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) }
),
owner = this,
view = view)
}
customTabSessionId?.let {
customTabsIntegration.set(
feature = CustomTabsIntegration(
requireContext(),
requireComponents.core.sessionManager,
toolbar,
it,
activity,
onItemTapped = { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) }
),
owner = this,
view = view)
}
toolbarComponent.getView().setOnSiteSecurityClickedListener {
@ -508,8 +505,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
val directions = BrowserFragmentDirections
.actionBrowserFragmentToSearchFragment(null)
Navigation.findNavController(view!!).navigate(directions)
(activity as HomeActivity).browsingModeManager.mode =
BrowsingModeManager.Mode.Private
(activity as HomeActivity).browsingModeManager.mode = BrowsingModeManager.Mode.Private
}
ToolbarMenu.Item.FindInPage -> {
FindInPageIntegration.launch?.invoke()
@ -529,8 +525,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
val directions = BrowserFragmentDirections
.actionBrowserFragmentToSearchFragment(null)
Navigation.findNavController(view!!).navigate(directions)
(activity as HomeActivity).browsingModeManager.mode =
BrowsingModeManager.Mode.Normal
(activity as HomeActivity).browsingModeManager.mode = BrowsingModeManager.Mode.Normal
}
ToolbarMenu.Item.OpenInFenix -> {
val intent = Intent(context, IntentReceiverActivity::class.java)
@ -576,10 +571,10 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
}
private fun getSessionById(): Session? {
return if (externalSessionId != null) {
return if (customTabSessionId != null) {
requireNotNull(
requireContext().components.core.sessionManager.findSessionById(
externalSessionId!!
customTabSessionId!!
)
)
} else {
@ -628,7 +623,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
}
private fun setToolbarBehavior(loading: Boolean) {
if (getSessionById()?.isCustomTabSession() == true) {
if (customTabSessionId != null) {
return
}

View File

@ -104,7 +104,7 @@
android:id="@+id/action_browserFragment_to_searchFragment"
app:destination="@id/searchFragment" />
<argument
android:name="external_session_id"
android:name="custom_tab_session_id"
app:argType="string"
app:nullable="true" />
<action