Albert221 has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/394365 )

Change subject: Add long press action for find buttons
......................................................................

Add long press action for find buttons

Bug: T103952
Change-Id: I2a120a16b871a0b8cb2609981ef9322ddc8a29c3
---
M app/src/main/java/org/wikipedia/page/FindInPageActionProvider.java
1 file changed, 68 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/65/394365/1

diff --git a/app/src/main/java/org/wikipedia/page/FindInPageActionProvider.java 
b/app/src/main/java/org/wikipedia/page/FindInPageActionProvider.java
index 015e429..b714c89 100644
--- a/app/src/main/java/org/wikipedia/page/FindInPageActionProvider.java
+++ b/app/src/main/java/org/wikipedia/page/FindInPageActionProvider.java
@@ -4,10 +4,13 @@
 import android.support.annotation.NonNull;
 import android.support.v7.widget.SearchView;
 import android.view.ActionProvider;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.inputmethod.EditorInfo;
 import android.webkit.WebView.FindListener;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import org.wikipedia.R;
 import org.wikipedia.analytics.FindInPageFunnel;
@@ -20,6 +23,11 @@
     private View findInPageNext;
     private View findInPagePrev;
     private TextView findInPageMatch;
+
+    private int currentMatch;
+    private int numberOfMatches;
+    private boolean isFirstOccurence = false;
+    private boolean isLastOccurence = false;
 
     public FindInPageActionProvider(@NonNull PageFragment fragment,
                                     @NonNull FindInPageFunnel funnel) {
@@ -48,6 +56,32 @@
                 fragment.getWebView().findNext(true);
             }
         });
+        findInPageNext.setOnLongClickListener(new View.OnLongClickListener() {
+            @Override
+            public boolean onLongClick(View view) {
+                if (isLastOccurence) {
+                    Toast.makeText(
+                            fragment.getContext(),
+                            "This is the last occurence",
+                            Toast.LENGTH_SHORT
+                    ).show();
+                } else {
+                    fragment.hideSoftKeyboard();
+                    if (!pageFragmentValid()) {
+                        return true;
+                    }
+
+                    // Find next that many times how many matches is left.
+                    int howManyForward = numberOfMatches - currentMatch;
+                    while (howManyForward-- > 0) {
+                        funnel.addFindNext();
+                        fragment.getWebView().findNext(true);
+                    }
+                }
+
+                return true;
+            }
+        });
 
         findInPagePrev = view.findViewById(R.id.find_in_page_prev);
         findInPagePrev.setOnClickListener(new View.OnClickListener() {
@@ -59,6 +93,32 @@
                 }
                 funnel.addFindPrev();
                 fragment.getWebView().findNext(false);
+            }
+        });
+        findInPagePrev.setOnLongClickListener(new View.OnLongClickListener() {
+            @Override
+            public boolean onLongClick(View view) {
+                if (isFirstOccurence) {
+                    Toast.makeText(
+                            fragment.getContext(),
+                            "This is the first occurence",
+                            Toast.LENGTH_SHORT
+                    ).show();
+                } else {
+                    fragment.hideSoftKeyboard();
+                    if (!pageFragmentValid()) {
+                        return true;
+                    }
+
+                    // Find next that many times how many matches is left.
+                    int howManyBackward = currentMatch - 1;
+                    while (howManyBackward-- > 0) {
+                        funnel.addFindPrev();
+                        fragment.getWebView().findNext(false);
+                    }
+                }
+
+                return true;
             }
         });
 
@@ -129,10 +189,18 @@
                             activeMatchOrdinal + 1, numberOfMatches));
                     findInPageNext.setEnabled(true);
                     findInPagePrev.setEnabled(true);
+
+                    currentMatch = activeMatchOrdinal + 1;
+                    FindInPageActionProvider.this.numberOfMatches = 
numberOfMatches;
+                    isFirstOccurence = activeMatchOrdinal == 0;
+                    isLastOccurence = activeMatchOrdinal + 1 == 
numberOfMatches;
                 } else {
                     findInPageMatch.setText("0/0");
                     findInPageNext.setEnabled(false);
                     findInPagePrev.setEnabled(false);
+
+                    currentMatch = 
FindInPageActionProvider.this.numberOfMatches = 0;
+                    isFirstOccurence = isLastOccurence = false;
                 }
                 findInPageMatch.setVisibility(View.VISIBLE);
             }

-- 
To view, visit https://gerrit.wikimedia.org/r/394365
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2a120a16b871a0b8cb2609981ef9322ddc8a29c3
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Albert221 <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to