jenkins-bot has submitted this change and it was merged.
Change subject: Swipe to refresh!
......................................................................
Swipe to refresh!
- Swipe down at the top of a page to reload it.
- Swipe down at the top of the Nearby list to reload nearby pages.
Change-Id: Ib6f893d0a599eecf20fd75a65c16f190fa82dcec
---
M wikipedia/res/layout/fragment_nearby.xml
M wikipedia/res/layout/fragment_page.xml
M wikipedia/src/main/java/org/wikipedia/nearby/NearbyFragment.java
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
M wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
A wikipedia/src/main/java/org/wikipedia/views/SwipeRefreshLayoutWithScroll.java
6 files changed, 103 insertions(+), 12 deletions(-)
Approvals:
BearND: Looks good to me, approved
jenkins-bot: Verified
diff --git a/wikipedia/res/layout/fragment_nearby.xml
b/wikipedia/res/layout/fragment_nearby.xml
index c6c78f8..499924f 100644
--- a/wikipedia/res/layout/fragment_nearby.xml
+++ b/wikipedia/res/layout/fragment_nearby.xml
@@ -48,10 +48,15 @@
/>
</LinearLayout>
- <ListView
- android:id="@+id/nearby_list"
+ <android.support.v4.widget.SwipeRefreshLayout
+ android:id="@+id/nearby_refresh_container"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- />
+ android:layout_height="match_parent">
+ <ListView
+ android:id="@+id/nearby_list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ />
+ </android.support.v4.widget.SwipeRefreshLayout>
</FrameLayout>
diff --git a/wikipedia/res/layout/fragment_page.xml
b/wikipedia/res/layout/fragment_page.xml
index a3538dc..c46811d 100644
--- a/wikipedia/res/layout/fragment_page.xml
+++ b/wikipedia/res/layout/fragment_page.xml
@@ -11,11 +11,16 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
>
+
+ <org.wikipedia.views.SwipeRefreshLayoutWithScroll
+ android:id="@+id/page_refresh_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
<FrameLayout
android:id="@+id/page_contents_container"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- >
+ android:layout_height="match_parent">
<org.wikipedia.views.ObservableWebView
android:id="@+id/page_web_view"
@@ -28,8 +33,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:paddingTop="?attr/actionBarSize"
- >
+ android:paddingTop="?attr/actionBarSize">
<org.wikipedia.page.leadimages.ImageViewWithFace
android:id="@+id/page_image_1"
android:layout_width="match_parent"
@@ -68,8 +72,10 @@
android:paddingLeft="16dp"/>
</FrameLayout>
</FrameLayout>
-
</FrameLayout>
+
+ </org.wikipedia.views.SwipeRefreshLayoutWithScroll>
+
<FrameLayout
android:layout_width="288dp"
android:layout_height="match_parent"
diff --git a/wikipedia/src/main/java/org/wikipedia/nearby/NearbyFragment.java
b/wikipedia/src/main/java/org/wikipedia/nearby/NearbyFragment.java
index 8be5418..7a488f5 100644
--- a/wikipedia/src/main/java/org/wikipedia/nearby/NearbyFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/nearby/NearbyFragment.java
@@ -32,6 +32,7 @@
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.support.v4.app.Fragment;
+import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -73,6 +74,7 @@
private ListView nearbyList;
private View nearbyEmptyContainer;
private NearbyAdapter adapter;
+ private SwipeRefreshLayout refreshView;
private WikipediaApp app;
private Site site;
@@ -122,8 +124,19 @@
nearbyContainer = (ViewGroup)
rootView.findViewById(R.id.nearby_container);
nearbyList = (ListView) rootView.findViewById(R.id.nearby_list);
nearbyEmptyContainer =
rootView.findViewById(R.id.nearby_empty_container);
-
nearbyEmptyContainer.setVisibility(View.GONE);
+ refreshView = (SwipeRefreshLayout)
rootView.findViewById(R.id.nearby_refresh_container);
+ refreshView.setSize(SwipeRefreshLayout.LARGE);
+ // if we want to give it a custom color:
+ //refreshView.setProgressBackgroundColor(R.color.swipe_refresh_circle);
+ refreshView.setOnRefreshListener(new
SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ setRefreshingState(true);
+ requestLocationUpdates();
+ refreshView.setRefreshing(false);
+ }
+ });
return rootView;
}
@@ -509,7 +522,6 @@
if (!isAdded() || ((PageActivity)getActivity()).isSearching()) {
return;
}
- menu.findItem(R.id.menu_refresh_nearby).setEnabled(!refreshing);
menu.findItem(R.id.menu_metric_imperial).setTitle(showImperial
? getString(R.string.nearby_set_metric)
: getString(R.string.nearby_set_imperial));
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
index 5a46a96..2f5a2ce 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
@@ -32,12 +32,15 @@
import org.mediawiki.api.json.RequestBuilder;
import org.json.JSONException;
import org.json.JSONObject;
+import org.wikipedia.views.SwipeRefreshLayoutWithScroll;
+
import android.app.AlertDialog;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
+import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.view.ActionMode;
import android.text.Html;
import android.util.Log;
@@ -109,6 +112,7 @@
private ViewGroup imagesContainer;
private LeadImagesHandler leadImagesHandler;
private ObservableWebView webView;
+ private SwipeRefreshLayoutWithScroll refreshView;
private View networkError;
private View retryButton;
private View pageDoesNotExistError;
@@ -224,6 +228,7 @@
webView.setVisibility(View.VISIBLE);
}
+ refreshView.setRefreshing(false);
getActivity().updateProgressBar(true, true, 0);
}
@@ -261,6 +266,31 @@
retryButton = rootView.findViewById(R.id.page_error_retry);
pageDoesNotExistError =
rootView.findViewById(R.id.page_does_not_exist);
tocDrawer = (DisableableDrawerLayout)
rootView.findViewById(R.id.page_toc_drawer);
+
+ refreshView = (SwipeRefreshLayoutWithScroll)
rootView.findViewById(R.id.page_refresh_container);
+ int swipeOffset = Utils.getActionBarSize(getActivity());
+ refreshView.setProgressViewOffset(true, -swipeOffset, swipeOffset);
+ refreshView.setSize(SwipeRefreshLayout.LARGE);
+ // if we want to give it a custom color:
+ //refreshView.setProgressBackgroundColor(R.color.swipe_refresh_circle);
+ refreshView.setScrollableChild(webView);
+ refreshView.setOnRefreshListener(new
SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ // don't refresh if it's still loading...
+ if (state != STATE_COMPLETE_FETCH) {
+ refreshView.setRefreshing(false);
+ return;
+ }
+ if (curEntry.getSource() == HistoryEntry.SOURCE_SAVED_PAGE) {
+ // if it's a saved page, then refresh it and re-save!
+ refreshPage(true);
+ } else {
+ // otherwise, refresh the page normally
+ refreshPage(false);
+ }
+ }
+ });
return rootView;
}
@@ -806,6 +836,7 @@
// in any case, make sure the TOC drawer is closed and disabled
tocDrawer.setSlidingEnabled(false);
getActivity().updateProgressBar(false, true, 0);
+ refreshView.setRefreshing(false);
if (caught instanceof SectionsFetchException) {
if (((SectionsFetchException)
caught).getCode().equals("missingtitle")
@@ -951,6 +982,10 @@
if (saveOnComplete) {
Toast.makeText(getActivity(), R.string.toast_refresh_saved_page,
Toast.LENGTH_LONG).show();
}
+ // immediately hide the webview
+ webView.setVisibility(View.GONE);
+ // and the lead image
+ leadImagesHandler.hide();
curEntry = new HistoryEntry(title, HistoryEntry.SOURCE_HISTORY);
setState(STATE_NO_FETCH);
performActionForState(state);
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
b/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
index 0be3c57..145d621 100644
---
a/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
+++
b/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
@@ -261,6 +261,8 @@
// give the title to the measurer...
pageTitleText.setText(parentFragment.getFragment().getPage().getTitle().getDisplayText());
+ // hide the description text...
+ pageDescriptionText.setVisibility(View.INVISIBLE);
// kick off the (asynchronous) laying out of the page title text
layoutPageTitle(TITLE_DEFAULT_TEXT_SIZE_SP, listener);
@@ -378,7 +380,8 @@
// set the color of the title
pageTitleText.setTextColor(parentFragment.getResources().getColor(R.color.lead_text_color));
- titleBottomPadding = pageTitleText.getPaddingBottom();
+ final int bottomPaddingNominal = 16;
+ titleBottomPadding = (int)(bottomPaddingNominal * displayDensity);
// and give it a nice drop shadow!
pageTitleText.setShadowLayer(2, 1, 1,
parentFragment.getResources().getColor(R.color.lead_text_shadow));
// do the same for the description...
diff --git
a/wikipedia/src/main/java/org/wikipedia/views/SwipeRefreshLayoutWithScroll.java
b/wikipedia/src/main/java/org/wikipedia/views/SwipeRefreshLayoutWithScroll.java
new file mode 100644
index 0000000..c3d363b
--- /dev/null
+++
b/wikipedia/src/main/java/org/wikipedia/views/SwipeRefreshLayoutWithScroll.java
@@ -0,0 +1,30 @@
+package org.wikipedia.views;
+
+import android.content.Context;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.util.AttributeSet;
+import android.view.View;
+
+public class SwipeRefreshLayoutWithScroll extends SwipeRefreshLayout {
+
+ public SwipeRefreshLayoutWithScroll(Context context) {
+ super(context);
+ }
+
+ public SwipeRefreshLayoutWithScroll(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ private View scrollableView;
+ public void setScrollableChild(View scrollableView) {
+ this.scrollableView = scrollableView;
+ }
+
+ @Override
+ public boolean canChildScrollUp() {
+ if (scrollableView == null) {
+ return false;
+ }
+ return scrollableView.getScrollY() > 0;
+ }
+}
--
To view, visit https://gerrit.wikimedia.org/r/173926
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ib6f893d0a599eecf20fd75a65c16f190fa82dcec
Gerrit-PatchSet: 5
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits