Mholloway has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/306638

Change subject: Hide/show article action toolbar depending on page scroll 
actions
......................................................................

Hide/show article action toolbar depending on page scroll actions

Bug: T143766
Change-Id: I12e2e79c09e548aaaab9f24ad87ddb309a05e461
---
M app/src/main/java/org/wikipedia/page/PageFragment.java
M app/src/main/java/org/wikipedia/page/ToCHandler.java
R app/src/main/java/org/wikipedia/page/action/PageActionTab.java
A app/src/main/java/org/wikipedia/page/action/PageActionToolbarHideHandler.java
4 files changed, 86 insertions(+), 1 deletion(-)


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

diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.java 
b/app/src/main/java/org/wikipedia/page/PageFragment.java
index ef9ff18..a9f40a1 100755
--- a/app/src/main/java/org/wikipedia/page/PageFragment.java
+++ b/app/src/main/java/org/wikipedia/page/PageFragment.java
@@ -50,6 +50,8 @@
 import org.wikipedia.editing.EditHandler;
 import org.wikipedia.history.HistoryEntry;
 import org.wikipedia.interlanguage.LangLinksActivity;
+import org.wikipedia.page.action.PageActionTab;
+import org.wikipedia.page.action.PageActionToolbarHideHandler;
 import org.wikipedia.page.gallery.GalleryActivity;
 import org.wikipedia.page.leadimages.ArticleHeaderView;
 import org.wikipedia.page.leadimages.LeadImagesHandler;
@@ -150,6 +152,7 @@
     private ArticleHeaderView articleHeaderView;
     private LeadImagesHandler leadImagesHandler;
     private SearchBarHideHandler searchBarHideHandler;
+    private PageActionToolbarHideHandler pageActionToolbarHideHandler;
     private ObservableWebView webView;
     private SwipeRefreshLayoutWithScroll refreshView;
     private WikiErrorView errorView;
@@ -285,6 +288,9 @@
         tabLayout = (TabLayout) 
rootView.findViewById(R.id.page_actions_tab_layout);
         tabLayout.addOnTabSelectedListener(pageActionTabListener);
 
+        pageActionToolbarHideHandler = new 
PageActionToolbarHideHandler(tabLayout);
+        pageActionToolbarHideHandler.setScrollView(webView);
+
         errorView = (WikiErrorView)rootView.findViewById(R.id.page_error);
 
         return rootView;
diff --git a/app/src/main/java/org/wikipedia/page/ToCHandler.java 
b/app/src/main/java/org/wikipedia/page/ToCHandler.java
index 3a6ee2e..36e2ce3 100755
--- a/app/src/main/java/org/wikipedia/page/ToCHandler.java
+++ b/app/src/main/java/org/wikipedia/page/ToCHandler.java
@@ -5,6 +5,7 @@
 import org.wikipedia.WikipediaApp;
 import org.wikipedia.analytics.ToCInteractionFunnel;
 import org.wikipedia.bridge.CommunicationBridge;
+import org.wikipedia.page.action.PageActionTab;
 import org.wikipedia.tooltip.ToolTipUtil;
 import org.wikipedia.util.DimenUtil;
 import org.wikipedia.util.log.L;
diff --git a/app/src/main/java/org/wikipedia/page/PageActionTab.java 
b/app/src/main/java/org/wikipedia/page/action/PageActionTab.java
similarity index 97%
rename from app/src/main/java/org/wikipedia/page/PageActionTab.java
rename to app/src/main/java/org/wikipedia/page/action/PageActionTab.java
index 6f27d0a..836a4bf 100644
--- a/app/src/main/java/org/wikipedia/page/PageActionTab.java
+++ b/app/src/main/java/org/wikipedia/page/action/PageActionTab.java
@@ -1,4 +1,4 @@
-package org.wikipedia.page;
+package org.wikipedia.page.action;
 
 import android.support.annotation.NonNull;
 
diff --git 
a/app/src/main/java/org/wikipedia/page/action/PageActionToolbarHideHandler.java 
b/app/src/main/java/org/wikipedia/page/action/PageActionToolbarHideHandler.java
new file mode 100644
index 0000000..4725070
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/page/action/PageActionToolbarHideHandler.java
@@ -0,0 +1,78 @@
+package org.wikipedia.page.action;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.design.widget.TabLayout;
+
+import org.wikipedia.ViewAnimations;
+import org.wikipedia.views.ObservableWebView;
+
+public class PageActionToolbarHideHandler implements 
ObservableWebView.OnScrollChangeListener,
+        ObservableWebView.OnUpOrCancelMotionEventListener,
+        ObservableWebView.OnDownMotionEventListener {
+    @NonNull private TabLayout pageActions;
+    @Nullable private ObservableWebView webview;
+
+    public PageActionToolbarHideHandler(@NonNull TabLayout pageActions) {
+        this.pageActions = pageActions;
+    }
+
+    public void setScrollView(@Nullable ObservableWebView webView) {
+        webview = webView;
+        if (webview != null) {
+            webview.addOnScrollChangeListener(this);
+            webview.addOnDownMotionEventListener(this);
+            webview.addOnUpOrCancelMotionEventListener(this);
+        }
+    }
+
+    @Override
+    public void onScrollChanged(int oldScrollY, int scrollY, boolean 
isHumanScroll) {
+        if (webview == null) {
+            return;
+        }
+
+        if (scrollY <= webview.getHeight()) {
+            // For the first screenful, ensure it always exists.
+            ViewAnimations.ensureTranslationY(pageActions, 0);
+            return;
+        }
+
+        int animMargin;
+
+        if (oldScrollY > scrollY) {
+            // Scroll the page action toolbar up
+            int minMargin = 0;
+            int scrollDelta = oldScrollY - scrollY;
+            int newMargin = (int) pageActions.getTranslationY() - scrollDelta;
+            animMargin = Math.max(minMargin, newMargin);
+        } else {
+            // Scroll the page action toolbar down
+            int scrollDelta = scrollY - oldScrollY;
+            int minMargin = pageActions.getHeight();
+            int newMargin = (int) pageActions.getTranslationY() + scrollDelta;
+            animMargin = Math.min(minMargin, newMargin);
+        }
+        pageActions.setTranslationY(animMargin);
+    }
+
+    @Override
+    public void onUpOrCancelMotionEvent() {
+        int transY = (int) pageActions.getTranslationY();
+        int height = pageActions.getHeight();
+        if (transY != 0 && transY < height) {
+            if (transY > height / 2) {
+                // Fully hide the page action toolbar
+                ViewAnimations.ensureTranslationY(pageActions, height);
+            } else {
+                // Fully display the page action toolbar
+                ViewAnimations.ensureTranslationY(pageActions, 0);
+            }
+        }
+    }
+
+    @Override
+    public void onDownMotionEvent() {
+        // Don't do anything for now
+    }
+}

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

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

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

Reply via email to