From 7c8a99763b5fefe49f7776cb84a58df9519930a4 Mon Sep 17 00:00:00 2001 From: Manuel Martin Date: Thu, 4 Jun 2020 18:52:21 +0200 Subject: [PATCH] Fix url bar bidirectional selection (#3458) --- .../vrbrowser/ui/views/NavigationURLBar.java | 14 +++++--------- .../org/mozilla/vrbrowser/utils/ViewUtils.java | 4 +--- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/NavigationURLBar.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/NavigationURLBar.java index faf3f3296..f5a51f263 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/NavigationURLBar.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/NavigationURLBar.java @@ -201,7 +201,7 @@ private void initialize(Context aContext) { mBinding.urlEditText.setOnSelectionChangedCallback((start, end) -> { if (mSelectionMenu != null) { boolean hasCopy = mSelectionMenu.hasAction(GeckoSession.SelectionActionDelegate.ACTION_COPY); - boolean showCopy = end > start; + boolean showCopy = end != start; if (hasCopy != showCopy) { showSelectionMenu(); @@ -212,12 +212,6 @@ private void initialize(Context aContext) { } }); - mBinding.urlEditText.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> { - if (mLongPressed) { - hideSelectionMenu(); - } - }); - // Set a filter to provide domain autocomplete results mBinding.urlEditText.setOnFilterListener(this::domainAutocompleteFilter); @@ -502,7 +496,7 @@ public boolean onDoubleTapEvent(MotionEvent motionEvent) { private void showSelectionMenu() { Collection actions = new HashSet<>(); - if (mBinding.urlEditText.getSelectionEnd() > mBinding.urlEditText.getSelectionStart()) { + if (mBinding.urlEditText.getSelectionEnd() != mBinding.urlEditText.getSelectionStart()) { actions.add(GeckoSession.SelectionActionDelegate.ACTION_CUT); actions.add(GeckoSession.SelectionActionDelegate.ACTION_COPY); } @@ -586,11 +580,13 @@ private float getSelectionCenterX() { start = ViewUtils.GetLetterPositionX(mBinding.urlEditText, mBinding.urlEditText.getSelectionStart(), true); } float end = start; - if (mBinding.urlEditText.getSelectionEnd() > mBinding.urlEditText.getSelectionStart()) { + if (mBinding.urlEditText.getSelectionEnd() >= 0) { end = ViewUtils.GetLetterPositionX(mBinding.urlEditText, mBinding.urlEditText.getSelectionEnd(), true); } if (end < start) { + float tmp = end; end = start; + start = tmp; } return start + (end - start) * 0.5f; } diff --git a/app/src/common/shared/org/mozilla/vrbrowser/utils/ViewUtils.java b/app/src/common/shared/org/mozilla/vrbrowser/utils/ViewUtils.java index edf8368d5..16fd91f2f 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/utils/ViewUtils.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/utils/ViewUtils.java @@ -176,9 +176,7 @@ public static void placeSelection(@NonNull EditText aView, int offset1, int offs return; } - int start = Math.min(offset1, offset2); - int end = Math.max(offset1, offset2); - aView.setSelection(start, end); + aView.setSelection(offset1, offset2); } static class StickyClickListener implements View.OnTouchListener {