From 0b333fe48a0b51f772a554dc8e52c2c10fbaf711 Mon Sep 17 00:00:00 2001 From: Tiger Oakes Date: Tue, 18 Aug 2020 11:25:56 -0700 Subject: [PATCH] For #9056: Search from custom tab --- .../java/org/mozilla/fenix/HomeActivity.kt | 10 +++--- .../fenix/browser/BaseBrowserFragment.kt | 32 ++++++++++++++++--- .../mozilla/fenix/browser/BrowserFragment.kt | 19 ----------- .../customtabs/ExternalAppBrowserActivity.kt | 23 ------------- 4 files changed, 32 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index fcff23ee2..3aea224cf 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -40,13 +40,11 @@ import mozilla.components.browser.search.SearchEngine import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.state.SessionState import mozilla.components.browser.state.state.WebExtensionState -import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.engine.EngineView import mozilla.components.feature.contextmenu.DefaultSelectionActionDelegate import mozilla.components.feature.privatemode.notification.PrivateNotificationFeature import mozilla.components.feature.search.BrowserStoreSearchAdapter -import mozilla.components.feature.search.SearchAdapter import mozilla.components.service.fxa.sync.SyncReason import mozilla.components.support.base.feature.UserInteractionHandler import mozilla.components.support.ktx.android.arch.lifecycle.addObservers @@ -414,7 +412,10 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { ): View? = when (name) { EngineView::class.java.name -> components.core.engine.createView(context, attrs).apply { selectionActionDelegate = DefaultSelectionActionDelegate( - getSearchAdapter(components.core.store), + BrowserStoreSearchAdapter( + components.core.store, + tabId = getIntentSessionId(intent.toSafeIntent()) + ), resources = context.resources, shareTextClicked = { share(it) }, emailTextClicked = { email(it) }, @@ -507,9 +508,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { super.onUserLeaveHint() } - protected open fun getSearchAdapter(store: BrowserStore): SearchAdapter = - BrowserStoreSearchAdapter(store) - protected open fun getBreadcrumbMessage(destination: NavDestination): String { val fragmentName = resources.getResourceEntryName(destination.id) return "Changing to fragment $fragmentName, isCustomTab: false" diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index 8a922ecd1..f3a8bf75e 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -57,6 +57,7 @@ import mozilla.components.feature.privatemode.feature.SecureWindowFeature import mozilla.components.feature.prompts.PromptFeature import mozilla.components.feature.prompts.share.ShareDelegate import mozilla.components.feature.readerview.ReaderViewFeature +import mozilla.components.feature.search.SearchFeature import mozilla.components.feature.session.FullScreenFeature import mozilla.components.feature.session.PictureInPictureFeature import mozilla.components.feature.session.SessionFeature @@ -152,6 +153,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session private val secureWindowFeature = ViewBoundFeatureWrapper() private var fullScreenMediaFeature = ViewBoundFeatureWrapper() + private val searchFeature = ViewBoundFeatureWrapper() private var pipFeature: PictureInPictureFeature? = null var customTabSessionId: String? = null @@ -219,6 +221,11 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session } return getSessionById()?.also { session -> + val openInFenixIntent = Intent(context, IntentReceiverActivity::class.java).apply { + action = Intent.ACTION_VIEW + putExtra(HomeActivity.OPEN_TO_BROWSER, true) + } + val browserToolbarController = DefaultBrowserToolbarController( activity = requireActivity() as HomeActivity, navController = findNavController(), @@ -234,10 +241,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session swipeRefresh = swipeRefresh, browserAnimator = browserAnimator, customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) }, - openInFenixIntent = Intent(context, IntentReceiverActivity::class.java).apply { - action = Intent.ACTION_VIEW - putExtra(HomeActivity.OPEN_TO_BROWSER, true) - }, + openInFenixIntent = openInFenixIntent, bookmarkTapped = { viewLifecycleOwner.lifecycleScope.launch { bookmarkTapped(it) } }, scope = viewLifecycleOwner.lifecycleScope, tabCollectionStorage = requireComponents.core.tabCollectionStorage, @@ -501,6 +505,26 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session view = view ) + searchFeature.set( + feature = SearchFeature(store, customTabSessionId) { request, tabId -> + val parentSession = sessionManager.findSessionById(tabId) + val useCase = if (request.isPrivate) { + requireComponents.useCases.searchUseCases.newPrivateTabSearch + } else { + requireComponents.useCases.searchUseCases.newTabSearch + } + + if (parentSession?.isCustomTabSession() == true) { + useCase.invoke(request.query) + requireActivity().startActivity(openInFenixIntent) + } else { + useCase.invoke(request.query, parentSession = parentSession) + } + }, + owner = this, + view = view + ) + val accentHighContrastColor = ThemeManager.resolveAttribute(R.attr.accentHighContrast, context) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 251cec203..913abac35 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -25,7 +25,6 @@ import mozilla.components.browser.toolbar.BrowserToolbar import mozilla.components.feature.app.links.AppLinksUseCases import mozilla.components.feature.contextmenu.ContextMenuCandidate import mozilla.components.feature.readerview.ReaderViewFeature -import mozilla.components.feature.search.SearchFeature import mozilla.components.feature.sitepermissions.SitePermissions import mozilla.components.feature.tab.collections.TabCollection import mozilla.components.feature.tabs.WindowFeature @@ -53,7 +52,6 @@ import org.mozilla.fenix.trackingprotection.TrackingProtectionOverlay class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { private val windowFeature = ViewBoundFeatureWrapper() - private val searchFeature = ViewBoundFeatureWrapper() private var readerModeAvailable = false @@ -141,23 +139,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { owner = this, view = view ) - searchFeature.set( - feature = SearchFeature(components.core.store) { - if (it.isPrivate) { - components.useCases.searchUseCases.newPrivateTabSearch.invoke( - it.query, - parentSession = getSessionById() - ) - } else { - components.useCases.searchUseCases.newTabSearch.invoke( - it.query, - parentSession = getSessionById() - ) - } - }, - owner = this, - view = view - ) } } diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt index 0e079b512..2d99f8bcd 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt @@ -4,19 +4,15 @@ package org.mozilla.fenix.customtabs -import android.content.Intent import androidx.navigation.NavDestination import androidx.navigation.NavDirections import mozilla.components.browser.session.runWithSession -import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.engine.manifest.WebAppManifestParser import mozilla.components.feature.intent.ext.getSessionId import mozilla.components.feature.pwa.ext.getWebAppManifest -import mozilla.components.feature.search.SearchAdapter import mozilla.components.support.utils.SafeIntent import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity -import org.mozilla.fenix.IntentReceiverActivity import org.mozilla.fenix.NavGraphDirections import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components @@ -28,12 +24,6 @@ import java.security.InvalidParameterException */ open class ExternalAppBrowserActivity : HomeActivity() { - private val openInFenixIntent by lazy { - Intent(this, IntentReceiverActivity::class.java).apply { - action = Intent.ACTION_VIEW - } - } - final override fun getBreadcrumbMessage(destination: NavDestination): String { val fragmentName = resources.getResourceEntryName(destination.id) return "Changing to fragment $fragmentName, isCustomTab: true" @@ -73,19 +63,6 @@ open class ExternalAppBrowserActivity : HomeActivity() { } } - override fun getSearchAdapter(store: BrowserStore): SearchAdapter { - val baseAdapter = super.getSearchAdapter(store) - return object : SearchAdapter { - - override fun sendSearch(isPrivate: Boolean, text: String) { - baseAdapter.sendSearch(isPrivate, text) - startActivity(openInFenixIntent) - } - - override fun isPrivateSession() = baseAdapter.isPrivateSession() - } - } - override fun onDestroy() { super.onDestroy()