From 9ea98e15b7ea0cf972499baaef677e52785d59e2 Mon Sep 17 00:00:00 2001 From: Jeff Boek Date: Tue, 9 Apr 2019 14:15:18 -0700 Subject: [PATCH] [fenix] For https://github.com/mozilla-mobile/fenix/issues/1068 - Adds the ability to quickly copy a URL --- CHANGELOG.md | 1 + .../mozilla/fenix/browser/BrowserFragment.kt | 18 +++++++++++++++++- .../components/toolbar/ToolbarComponent.kt | 3 ++- .../fenix/components/toolbar/ToolbarUIView.kt | 7 ++++++- app/src/main/res/values/strings.xml | 1 + 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index edf43433c8..590a9345ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - #1237 - Added the ability to delete bookmark folders - #1238 - Added the ability to edit bookmark folders - #1239 - Added the ability to move bookmark folders +- #1068 - Adds the ability to quickly copy the URL by long clicking the URLBar ### Changed - #1429 - Updated site permissions ui for MVP ### Removed \ No newline at end of file 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 2dd34f841a..fef7282501 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -4,6 +4,8 @@ package org.mozilla.fenix.browser +import android.content.ClipData +import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.net.Uri @@ -282,7 +284,7 @@ class BrowserFragment : Fragment(), BackHandler { getAutoDisposeObservable() .subscribe { when (it) { - is SearchAction.ToolbarTapped -> { + is SearchAction.ToolbarClicked -> { Navigation .findNavController(toolbarComponent.getView()) .navigate( @@ -299,6 +301,9 @@ class BrowserFragment : Fragment(), BackHandler { trackToolbarItemInteraction(it) handleToolbarItemInteraction(it) } + is SearchAction.ToolbarLongClicked -> { + getSessionByIdOrUseSelectedSession().copyUrl(requireContext()) + } } } @@ -475,6 +480,17 @@ class BrowserFragment : Fragment(), BackHandler { } } + private fun Session.copyUrl(context: Context) { + val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val uri = Uri.parse(url) + clipBoard.primaryClip = ClipData.newRawUri("Uri", uri) + + val rootView = context.asActivity()?.window?.decorView?.findViewById(android.R.id.content) as ViewGroup + FenixSnackbar.make(rootView, Snackbar.LENGTH_LONG) + .setText(context.getString(R.string.url_copied)) + .show() + } + companion object { private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1 private const val REQUEST_CODE_PROMPT_PERMISSIONS = 2 diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarComponent.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarComponent.kt index 93e96a8538..a1f94ff2c1 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarComponent.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarComponent.kt @@ -81,7 +81,8 @@ data class SearchState( sealed class SearchAction : Action { data class UrlCommitted(val url: String, val session: String?, val engine: SearchEngine? = null) : SearchAction() data class TextChanged(val query: String) : SearchAction() - object ToolbarTapped : SearchAction() + object ToolbarClicked : SearchAction() + object ToolbarLongClicked : SearchAction() data class ToolbarMenuItemTapped(val item: ToolbarMenu.Item) : SearchAction() object EditingCanceled : SearchAction() } diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarUIView.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarUIView.kt index d1ade5e647..46ab543913 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarUIView.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarUIView.kt @@ -47,7 +47,7 @@ class ToolbarUIView( false } onUrlClicked = { - actionEmitter.onNext(SearchAction.ToolbarTapped) + actionEmitter.onNext(SearchAction.ToolbarClicked) false } @@ -66,6 +66,11 @@ class ToolbarUIView( actionEmitter.onNext(SearchAction.TextChanged(text)) } }) + + setOnUrlLongClickListener { + actionEmitter.onNext(SearchAction.ToolbarLongClicked) + true + } } with(view.context) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 36d1a87765..81974a5adb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -314,4 +314,5 @@ Must have a title Invalid URL No bookmarks here + URL copied