@@ -36,8 +36,10 @@ import android.webkit.WebChromeClient
3636import android.webkit.WebChromeClient.FileChooserParams
3737import android.webkit.WebSettings
3838import android.webkit.WebView
39+ import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
3940import androidx.annotation.AnyThread
4041import androidx.appcompat.widget.Toolbar
42+ import androidx.core.app.ActivityOptionsCompat
4143import androidx.core.content.ContextCompat
4244import androidx.fragment.app.activityViewModels
4345import androidx.lifecycle.Lifecycle
@@ -66,6 +68,11 @@ import com.duckduckgo.downloads.api.DownloadStateListener
6668import com.duckduckgo.downloads.api.DownloadsFileActions
6769import com.duckduckgo.downloads.api.FileDownloader
6870import com.duckduckgo.downloads.api.FileDownloader.PendingFileDownload
71+ import com.duckduckgo.duckchat.api.inputscreen.BrowserAndInputScreenTransitionProvider
72+ import com.duckduckgo.duckchat.api.inputscreen.InputScreenActivityParams
73+ import com.duckduckgo.duckchat.api.inputscreen.InputScreenActivityResultCodes
74+ import com.duckduckgo.duckchat.api.inputscreen.InputScreenActivityResultParams
75+ import com.duckduckgo.duckchat.api.inputscreen.InputScreenBrowserButtonsConfig
6976import com.duckduckgo.duckchat.api.viewmodel.DuckChatSharedViewModel
7077import com.duckduckgo.duckchat.impl.DuckChatInternal
7178import com.duckduckgo.duckchat.impl.R
@@ -85,6 +92,7 @@ import com.duckduckgo.duckchat.impl.ui.filechooser.capture.launcher.UploadFromEx
8592import com.duckduckgo.js.messaging.api.JsMessageCallback
8693import com.duckduckgo.js.messaging.api.JsMessaging
8794import com.duckduckgo.js.messaging.api.SubscriptionEventData
95+ import com.duckduckgo.navigation.api.GlobalActivityStarter
8896import com.duckduckgo.subscriptions.api.SUBSCRIPTIONS_FEATURE_NAME
8997import com.google.android.material.snackbar.BaseTransientBottomBar
9098import com.google.android.material.snackbar.Snackbar
@@ -162,6 +170,12 @@ open class DuckChatWebViewFragment : DuckDuckGoFragment(R.layout.activity_duck_c
162170 @Inject
163171 lateinit var externalCameraLauncher: UploadFromExternalMediaAppLauncher
164172
173+ @Inject
174+ lateinit var globalActivityStarter: GlobalActivityStarter
175+
176+ @Inject
177+ lateinit var browserAndInputScreenTransitionProvider: BrowserAndInputScreenTransitionProvider
178+
165179 private var pendingFileDownload: PendingFileDownload ? = null
166180 private val downloadMessagesJob = ConflatedJob ()
167181
@@ -386,10 +400,68 @@ open class DuckChatWebViewFragment : DuckDuckGoFragment(R.layout.activity_duck_c
386400 override fun onHistoryMenuPressed () {
387401 Snackbar .make(root, " History" , Snackbar .LENGTH_SHORT ).show()
388402 }
403+
404+ override fun onInputFieldPressed () {
405+ launchInputScreen()
406+ }
389407 },
390408 )
391409 }
392410
411+ private fun launchInputScreen () {
412+ // val isTopOmnibar = omnibar.omnibarType != OmnibarType.SINGLE_BOTTOM
413+ // TODO: Support Bottom / Split omnibar
414+ val isTopOmnibar = true
415+ val tabs = arguments?.getInt(KEY_DUCK_AI_TABS ) ? : 0
416+ val intent =
417+ globalActivityStarter.startIntent(
418+ requireContext(),
419+ InputScreenActivityParams (
420+ query = " " ,
421+ isTopOmnibar = true ,
422+ browserButtonsConfig = InputScreenBrowserButtonsConfig .Enabled (tabs = tabs),
423+ ),
424+ )
425+ val enterTransition = browserAndInputScreenTransitionProvider.getInputScreenEnterAnimation(true )
426+ val exitTransition = browserAndInputScreenTransitionProvider.getBrowserExitAnimation(isTopOmnibar)
427+ val options =
428+ ActivityOptionsCompat .makeCustomAnimation(
429+ requireActivity(),
430+ enterTransition,
431+ exitTransition,
432+ )
433+ inputScreenLauncher.launch(intent, options)
434+ }
435+
436+ private val inputScreenLauncher =
437+ registerForActivityResult(StartActivityForResult ()) { result ->
438+ val data = result.data
439+ when (result.resultCode) {
440+ InputScreenActivityResultCodes .NEW_SEARCH_REQUESTED -> {
441+ data?.getStringExtra(InputScreenActivityResultParams .SEARCH_QUERY_PARAM )?.let { query ->
442+ sharedViewModel.onSearchRequested(query)
443+ }
444+ }
445+
446+ InputScreenActivityResultCodes .SWITCH_TO_TAB_REQUESTED -> {
447+ data?.getStringExtra(InputScreenActivityResultParams .TAB_ID_PARAM )?.let { tabId ->
448+ sharedViewModel.openExistingTab(tabId)
449+ }
450+ }
451+
452+ InputScreenActivityResultCodes .MENU_REQUESTED -> {
453+ }
454+
455+ InputScreenActivityResultCodes .TAB_SWITCHER_REQUESTED -> {
456+ sharedViewModel.onTabSwitcherCLicked()
457+ }
458+
459+ InputScreenActivityResultCodes .FIRE_BUTTON_REQUESTED -> {
460+ sharedViewModel.onFireButtonClicked()
461+ }
462+ }
463+ }
464+
393465 data class FileChooserRequestedParams (
394466 val filePickingMode : Int ,
395467 val acceptMimeTypes : List <String >,
0 commit comments