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

Change subject: Allow loading another random article via floating action button.
......................................................................

Allow loading another random article via floating action button.

Bug: T158788
Change-Id: I63230aa16581f3f1f2cf6950ab176d126aa6dde5
---
M app/src/main/java/org/wikipedia/page/PageFragment.java
M app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java
M app/src/main/java/org/wikipedia/page/ViewHideHandler.java
M app/src/main/java/org/wikipedia/page/action/PageActionToolbarHideHandler.java
M app/src/main/res/layout/fragment_page.xml
M app/src/main/res/values-qq/strings.xml
M app/src/main/res/values/strings.xml
7 files changed, 101 insertions(+), 16 deletions(-)


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

diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.java 
b/app/src/main/java/org/wikipedia/page/PageFragment.java
index 49a2128..b06e83f 100755
--- a/app/src/main/java/org/wikipedia/page/PageFragment.java
+++ b/app/src/main/java/org/wikipedia/page/PageFragment.java
@@ -11,6 +11,8 @@
 import android.support.annotation.Nullable;
 import android.support.design.widget.BottomSheetDialog;
 import android.support.design.widget.BottomSheetDialogFragment;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
 import android.support.design.widget.TabLayout;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentActivity;
@@ -61,6 +63,7 @@
 import org.wikipedia.page.shareafact.ShareHandler;
 import org.wikipedia.page.tabs.Tab;
 import org.wikipedia.page.tabs.TabsProvider;
+import org.wikipedia.random.RandomArticleRequestHandler;
 import org.wikipedia.readinglist.AddToReadingListDialog;
 import org.wikipedia.readinglist.ReadingList;
 import org.wikipedia.readinglist.ReadingListBookmarkMenu;
@@ -159,6 +162,8 @@
     private WikiDrawerLayout tocDrawer;
     private ConfigurableTabLayout tabLayout;
     private ToCHandler tocHandler;
+    private FloatingActionButton randomButton;
+
     private CommunicationBridge bridge;
     private DarkModeSwitch darkModeSwitch;
     private LinkHandler linkHandler;
@@ -299,27 +304,36 @@
                              final Bundle savedInstanceState) {
         View rootView = inflater.inflate(R.layout.fragment_page, container, 
false);
 
-        webView = (ObservableWebView) 
rootView.findViewById(R.id.page_web_view);
+        webView = rootView.findViewById(R.id.page_web_view);
         initWebViewListeners();
 
-        tocDrawer = (WikiDrawerLayout) 
rootView.findViewById(R.id.page_toc_drawer);
+        tocDrawer = rootView.findViewById(R.id.page_toc_drawer);
         
tocDrawer.setDragEdgeWidth(getResources().getDimensionPixelSize(R.dimen.drawer_drag_margin));
 
-        refreshView = (SwipeRefreshLayoutWithScroll) rootView
-                .findViewById(R.id.page_refresh_container);
+        refreshView = rootView.findViewById(R.id.page_refresh_container);
         int swipeOffset = getContentTopOffsetPx(getActivity()) + 
REFRESH_SPINNER_ADDITIONAL_OFFSET;
         refreshView.setProgressViewOffset(false, -swipeOffset, swipeOffset);
         refreshView.setColorSchemeResources(getThemedAttributeId(getContext(), 
R.attr.colorAccent));
         refreshView.setScrollableChild(webView);
         refreshView.setOnRefreshListener(pageRefreshListener);
 
-        tabLayout = (ConfigurableTabLayout) 
rootView.findViewById(R.id.page_actions_tab_layout);
+        tabLayout = rootView.findViewById(R.id.page_actions_tab_layout);
         tabLayout.addOnTabSelectedListener(pageActionTabListener);
 
-        PageActionToolbarHideHandler pageActionToolbarHideHandler = new 
PageActionToolbarHideHandler(tabLayout);
-        pageActionToolbarHideHandler.setScrollView(webView);
+        errorView = rootView.findViewById(R.id.page_error);
 
-        errorView = (WikiPageErrorView) rootView.findViewById(R.id.page_error);
+        randomButton = rootView.findViewById(R.id.page_random_button);
+        FeedbackUtil.setToolbarButtonLongPressToast(randomButton);
+        randomButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                loadRandomPage();
+            }
+        });
+
+        PageActionToolbarHideHandler pageActionToolbarHideHandler
+                = new PageActionToolbarHideHandler(tabLayout, randomButton);
+        pageActionToolbarHideHandler.setScrollView(webView);
 
         return rootView;
     }
@@ -693,6 +707,13 @@
         closePageScrollFunnel();
         pageFragmentLoadState.load(pushBackStack, stagedScrollY);
         updateBookmarkAndMenuOptions();
+
+        if (entry.getSource() == HistoryEntry.SOURCE_RANDOM
+                || entry.getSource() == HistoryEntry.SOURCE_FEED_RANDOM) {
+            randomButton.show();
+        } else {
+            randomButton.hide();
+        }
     }
 
     public Bitmap getLeadImageBitmap() {
@@ -1007,6 +1028,40 @@
         }
     }
 
+    private void loadRandomPage() {
+        updateProgressBar(true, true, 0);
+        randomButton.hide();
+        RandomArticleRequestHandler.getRandomPage(new 
RandomArticleRequestHandler.Callback() {
+            @Override
+            public void onSuccess(@NonNull PageTitle pageTitle) {
+                if (!isAdded()) {
+                    return;
+                }
+                updateProgressBar(false, true, 0);
+                loadPage(pageTitle, new HistoryEntry(pageTitle, 
HistoryEntry.SOURCE_RANDOM));
+            }
+
+            @Override
+            public void onError(Throwable t) {
+                if (!isAdded()) {
+                    return;
+                }
+                updateProgressBar(false, true, 0);
+                randomButton.show();
+                Snackbar snackbar = FeedbackUtil.makeSnackbar(getActivity(), 
ThrowableUtil.isOffline(t)
+                                ? 
getString(R.string.view_wiki_error_message_offline) : t.getMessage(),
+                        FeedbackUtil.LENGTH_DEFAULT);
+                snackbar.setAction(R.string.page_error_retry, new 
View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        loadRandomPage();
+                    }
+                });
+                snackbar.show();
+            }
+        });
+    }
+
     private void showContentIssues() {
         showPageInfoDialog(false);
     }
diff --git a/app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java 
b/app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java
index cd159cf..ce7ed7d 100644
--- a/app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java
+++ b/app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java
@@ -37,7 +37,7 @@
 
     public PageToolbarHideHandler(@NonNull PageFragment pageFragment, @NonNull 
View hideableView,
                                   @NonNull Toolbar toolbar, @NonNull ImageView 
tabsButton) {
-        super(hideableView, Gravity.TOP);
+        super(hideableView, null, Gravity.TOP);
         this.pageFragment = pageFragment;
         this.toolbar = toolbar;
         this.toolbarBackground = hideableView.getBackground().mutate();
diff --git a/app/src/main/java/org/wikipedia/page/ViewHideHandler.java 
b/app/src/main/java/org/wikipedia/page/ViewHideHandler.java
index 6d9af10..037966f 100644
--- a/app/src/main/java/org/wikipedia/page/ViewHideHandler.java
+++ b/app/src/main/java/org/wikipedia/page/ViewHideHandler.java
@@ -11,13 +11,15 @@
 public abstract class ViewHideHandler
         implements ObservableWebView.OnScrollChangeListener,
         ObservableWebView.OnUpOrCancelMotionEventListener,
-        ObservableWebView.OnDownMotionEventListener, 
ObservableWebView.OnClickListener{
+        ObservableWebView.OnDownMotionEventListener, 
ObservableWebView.OnClickListener {
     @NonNull private final View hideableView;
+    @Nullable private final View anchoredView;
     @Nullable private ObservableWebView webView;
     private final int gravity;
 
-    public ViewHideHandler(@NonNull View hideableView, int gravity) {
+    public ViewHideHandler(@NonNull View hideableView, @Nullable View 
anchoredView, int gravity) {
         this.hideableView = hideableView;
+        this.anchoredView = anchoredView;
         this.gravity = gravity;
     }
 
@@ -83,6 +85,9 @@
             }
         }
         hideableView.setTranslationY(animMargin);
+        if (anchoredView != null) {
+            anchoredView.setTranslationY(animMargin);
+        }
     }
 
     @Override
@@ -119,10 +124,16 @@
 
     private void ensureDisplayed() {
         ViewAnimations.ensureTranslationY(hideableView, 0);
+        if (anchoredView != null) {
+            ViewAnimations.ensureTranslationY(anchoredView, 0);
+        }
     }
 
     private void ensureHidden() {
-        ViewAnimations.ensureTranslationY(hideableView,
-                gravity == Gravity.BOTTOM ? hideableView.getHeight() : 
-hideableView.getHeight());
+        int translation = gravity == Gravity.BOTTOM ? hideableView.getHeight() 
: -hideableView.getHeight();
+        ViewAnimations.ensureTranslationY(hideableView, translation);
+        if (anchoredView != null) {
+            ViewAnimations.ensureTranslationY(anchoredView, translation);
+        }
     }
 }
diff --git 
a/app/src/main/java/org/wikipedia/page/action/PageActionToolbarHideHandler.java 
b/app/src/main/java/org/wikipedia/page/action/PageActionToolbarHideHandler.java
index b21b902..014cb60 100644
--- 
a/app/src/main/java/org/wikipedia/page/action/PageActionToolbarHideHandler.java
+++ 
b/app/src/main/java/org/wikipedia/page/action/PageActionToolbarHideHandler.java
@@ -1,14 +1,15 @@
 package org.wikipedia.page.action;
 
 import android.support.annotation.NonNull;
-import android.support.design.widget.TabLayout;
+import android.support.annotation.Nullable;
 import android.view.Gravity;
+import android.view.View;
 
 import org.wikipedia.page.ViewHideHandler;
 
 public class PageActionToolbarHideHandler extends ViewHideHandler {
-    public PageActionToolbarHideHandler(@NonNull TabLayout pageActions) {
-        super(pageActions, Gravity.BOTTOM);
+    public PageActionToolbarHideHandler(@NonNull View pageActions, @Nullable 
View anchoredView) {
+        super(pageActions, anchoredView, Gravity.BOTTOM);
     }
 
     @Override
diff --git a/app/src/main/res/layout/fragment_page.xml 
b/app/src/main/res/layout/fragment_page.xml
index b1784b9..655f34f 100644
--- a/app/src/main/res/layout/fragment_page.xml
+++ b/app/src/main/res/layout/fragment_page.xml
@@ -69,6 +69,22 @@
                     app:tabSelectedTextColor="@color/base18"
                     app:tabIndicatorColor="@color/base18" />
 
+                <android.support.design.widget.FloatingActionButton
+                    android:id="@+id/page_random_button"
+                    style="@style/FloatingActionButton"
+                    android:layout_marginBottom="64dp"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="bottom|end"
+                    
android:contentDescription="@string/view_next_random_article"
+                    app:backgroundTint="?attr/colorAccent"
+                    app:borderWidth="0dp"
+                    app:elevation="4dp"
+                    app:srcCompat="@drawable/ic_casino_accent50_24dp"
+                    android:tint="@android:color/white"
+                    android:visibility="gone"
+                    tools:visibility="visible"/>
+
             </android.support.design.widget.CoordinatorLayout>
 
         </org.wikipedia.views.SwipeRefreshLayoutWithScroll>
diff --git a/app/src/main/res/values-qq/strings.xml 
b/app/src/main/res/values-qq/strings.xml
index 06d8227..580feb3 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -369,6 +369,7 @@
   <string name="view_because_you_read_card_title">Label for card in the feed 
that gives the user reading suggestions based on an article from their browsing 
history.</string>
   <string name="view_random_card_title">Title of a card that the user can 
click to view a randomly selected Wikipedia article</string>
   <string name="view_random_card_subtitle">Message inviting the user to view a 
randomly selected Wikipedia article.</string>
+  <string name="view_next_random_article">Button hint for loading another 
random article.</string>
   <string name="view_main_page_card_title">Title of a card that the user can 
click to view the main page of the Wikipedia project for the current app 
language.</string>
   <string name="view_main_page_card_subtitle">Message indicating that the user 
will be shown the project\'s main page for the current date. The \"%s\" symbol 
is replaced with the current date.</string>
   <string name="view_featured_image_card_title">Title of a card showing the 
Picture of the Day from Wikimedia Commons.</string>
diff --git a/app/src/main/res/values/strings.xml 
b/app/src/main/res/values/strings.xml
index c2c8136..adf9c62 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -403,6 +403,7 @@
     <string name="view_because_you_read_card_title">Because you read</string>
     <string name="view_random_card_title">Randomizer</string>
     <string name="view_random_card_subtitle">Read a random article from 
Wikipedia</string>
+    <string name="view_next_random_article">Load another random 
article</string>
     <string name="view_main_page_card_title">Today on Wikipedia</string>
     <string name="view_main_page_card_subtitle">Main page on %s</string>
     <string name="view_featured_image_card_title">Picture of the day</string>

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I63230aa16581f3f1f2cf6950ab176d126aa6dde5
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <dbr...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to