From 31edbc924c9d63e8fa09e88afea77a187a8a4e9d Mon Sep 17 00:00:00 2001 From: Tiger Oakes Date: Wed, 10 Jun 2020 10:25:53 -0700 Subject: [PATCH] Fixes #9056 - Start Fenix activity on search in external app (#10932) --- .../java/org/mozilla/fenix/HomeActivity.kt | 14 +++++++---- .../customtabs/ExternalAppBrowserActivity.kt | 23 +++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index e7a84aa56..66db3ef23 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -32,10 +32,13 @@ import mozilla.components.browser.search.SearchEngine import mozilla.components.browser.session.Session import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.state.WebExtensionState +import mozilla.components.browser.state.store.BrowserStore import mozilla.components.browser.tabstray.BrowserTabsTray import mozilla.components.concept.engine.EngineView import mozilla.components.concept.tabstray.TabsTray -import mozilla.components.feature.contextmenu.ext.DefaultSelectionActionDelegate +import mozilla.components.feature.contextmenu.DefaultSelectionActionDelegate +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 @@ -63,6 +66,7 @@ import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.home.intent.CrashReporterIntentProcessor import org.mozilla.fenix.home.intent.DeepLinkIntentProcessor import org.mozilla.fenix.home.intent.OpenBrowserIntentProcessor +import org.mozilla.fenix.home.intent.OpenSpecificTabIntentProcessor import org.mozilla.fenix.home.intent.SpeechProcessingIntentProcessor import org.mozilla.fenix.home.intent.StartSearchIntentProcessor import org.mozilla.fenix.library.bookmarks.BookmarkFragmentDirections @@ -83,7 +87,6 @@ import org.mozilla.fenix.theme.DefaultThemeManager import org.mozilla.fenix.theme.ThemeManager import org.mozilla.fenix.utils.BrowsersCache import org.mozilla.fenix.utils.RunWhenReadyQueue -import org.mozilla.fenix.home.intent.OpenSpecificTabIntentProcessor /** * The main activity of the application. The application is primarily a single Activity (this one) @@ -226,8 +229,8 @@ open class HomeActivity : LocaleAwareAppCompatActivity() { ): View? = when (name) { EngineView::class.java.name -> components.core.engine.createView(context, attrs).apply { selectionActionDelegate = DefaultSelectionActionDelegate( - store = components.core.store, - context = context, + getSearchAdapter(components.core.store), + resources = context.resources, appName = getString(R.string.app_name) ) { share(it) @@ -269,6 +272,9 @@ open class HomeActivity : LocaleAwareAppCompatActivity() { 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/customtabs/ExternalAppBrowserActivity.kt b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt index f0b09fed7..7e1e20c6c 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt @@ -4,15 +4,19 @@ 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 @@ -24,6 +28,12 @@ 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" @@ -57,6 +67,19 @@ 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()