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