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

Reply via email to