diff --git a/app/src/main/java/org/mozilla/fenix/searchdialog/SearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/searchdialog/SearchDialogFragment.kt
index 48838137d..a0e153a0d 100644
--- a/app/src/main/java/org/mozilla/fenix/searchdialog/SearchDialogFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/searchdialog/SearchDialogFragment.kt
@@ -28,13 +28,11 @@ import androidx.core.view.isVisible
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import kotlinx.android.synthetic.main.fragment_search_dialog.*
+import kotlinx.android.synthetic.main.fragment_search_dialog.fill_link_from_clipboard
import kotlinx.android.synthetic.main.fragment_search_dialog.pill_wrapper
import kotlinx.android.synthetic.main.fragment_search_dialog.qr_scan_button
import kotlinx.android.synthetic.main.fragment_search_dialog.toolbar
import kotlinx.android.synthetic.main.fragment_search_dialog.view.*
-import kotlinx.android.synthetic.main.fragment_search_dialog.view.search_engines_shortcut_button
-import kotlinx.android.synthetic.main.fragment_search_dialog.view.qr_scan_button
-import kotlinx.android.synthetic.main.fragment_search_dialog.view.toolbar
import kotlinx.android.synthetic.main.search_suggestions_onboarding.view.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import mozilla.components.browser.toolbar.BrowserToolbar
@@ -53,6 +51,7 @@ import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore
import org.mozilla.fenix.components.searchengine.FenixSearchEngineProvider
import org.mozilla.fenix.components.toolbar.ToolbarPosition
+import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.search.SearchFragmentAction
@@ -186,6 +185,15 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
qrFeature.get()?.scan(R.id.search_wrapper)
}
+ fill_link_from_clipboard.setOnClickListener {
+ (activity as HomeActivity)
+ .openToBrowserAndLoad(
+ searchTermOrURL = requireContext().components.clipboardHandler.url ?: "",
+ newTab = store.state.tabId == null,
+ from = BrowserDirection.FromSearchDialog
+ )
+ }
+
qrFeature.set(
createQrFeature(),
owner = this,
@@ -236,6 +244,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
awesome_bar?.visibility = if (shouldShowAwesomebar) View.VISIBLE else View.INVISIBLE
updateSearchSuggestionsHintVisibility(it)
+ updateClipboardSuggestion(it, requireContext().components.clipboardHandler.url)
toolbarView.update(it)
awesomeBarView.update(it)
firstUpdate = false
@@ -319,6 +328,9 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
connect(awesome_bar.id, TOP, PARENT_ID, TOP)
connect(pill_wrapper.id, BOTTOM, toolbar.id, TOP)
+ clear(fill_link_from_clipboard.id, TOP)
+ connect(fill_link_from_clipboard.id, BOTTOM, pill_wrapper.id, TOP)
+
applyTo(search_wrapper)
}
}
@@ -372,6 +384,19 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
}
}
+ private fun updateClipboardSuggestion(searchState: SearchFragmentState, clipboardUrl: String?) {
+ val visibility =
+ if (searchState.showClipboardSuggestions && searchState.query.isEmpty() && !clipboardUrl.isNullOrEmpty())
+ View.VISIBLE else View.GONE
+
+ fill_link_from_clipboard.visibility = visibility
+ clipboard_url.text = clipboardUrl
+
+ if (clipboardUrl != null && !((activity as HomeActivity).browsingModeManager.mode.isPrivate)) {
+ requireComponents.core.engine.speculativeConnect(clipboardUrl)
+ }
+ }
+
companion object {
private const val REQUEST_CODE_CAMERA_PERMISSIONS = 1
}
diff --git a/app/src/main/res/layout/fragment_search_dialog.xml b/app/src/main/res/layout/fragment_search_dialog.xml
index f027610ea..7e2592d03 100644
--- a/app/src/main/res/layout/fragment_search_dialog.xml
+++ b/app/src/main/res/layout/fragment_search_dialog.xml
@@ -66,6 +66,57 @@
app:layout_constraintBottom_toBottomOf="@id/search_suggestions_onboarding"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
+
+
+
+
+
+
+
+
+
+