Dbrant has uploaded a new change for review.

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

Change subject: Integrate Search fragment into overhaul.
......................................................................

Integrate Search fragment into overhaul.

Remaining things to do:
- Fill in all the callback functions to have the proper effect.
- Implement correct Back behavior.

Change-Id: I37aef4b3274d6b6ae019ac73d12d4db76ed9dd4a
---
M app/src/main/java/org/wikipedia/overhaul/OverhaulFragment.java
M app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java
M app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
M app/src/main/java/org/wikipedia/search/SearchResultsFragment.java
M app/src/main/java/org/wikipedia/views/ViewUtil.java
M app/src/main/res/layout/fragment_overhaul.xml
6 files changed, 170 insertions(+), 61 deletions(-)


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

diff --git a/app/src/main/java/org/wikipedia/overhaul/OverhaulFragment.java 
b/app/src/main/java/org/wikipedia/overhaul/OverhaulFragment.java
index f91c822..6edbb1c 100644
--- a/app/src/main/java/org/wikipedia/overhaul/OverhaulFragment.java
+++ b/app/src/main/java/org/wikipedia/overhaul/OverhaulFragment.java
@@ -2,6 +2,7 @@
 
 import android.location.Location;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.design.widget.TabLayout;
 import android.support.v4.app.Fragment;
@@ -20,17 +21,22 @@
 import org.wikipedia.nearby.NearbyFragment;
 import org.wikipedia.overhaul.navtab.NavTabViewPagerAdapter;
 import org.wikipedia.page.PageTitle;
+import org.wikipedia.readinglist.AddToReadingListDialog;
 import org.wikipedia.readinglist.ReadingListsFragment;
+import org.wikipedia.search.OverhaulSearchFragment;
+import org.wikipedia.search.SearchResultsFragment;
 
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.Unbinder;
 
 public class OverhaulFragment extends Fragment implements 
FeedFragment.Callback,
-        NearbyFragment.Callback, HistoryFragment.Callback, 
ReadingListsFragment.Callback {
+        NearbyFragment.Callback, HistoryFragment.Callback, 
ReadingListsFragment.Callback,
+        OverhaulSearchFragment.Callback, SearchResultsFragment.Callback {
     @BindView(R.id.fragment_overhaul_view_pager) ViewPager viewPager;
     @BindView(R.id.view_nav_view_pager_tab_layout) TabLayout tabLayout;
     private Unbinder unbinder;
+    private OverhaulSearchFragment searchFragment;
 
     public static OverhaulFragment newInstance() {
         OverhaulFragment fragment = new OverhaulFragment();
@@ -44,8 +50,10 @@
         super.onCreateView(inflater, container, savedInstanceState);
         View view = inflater.inflate(R.layout.fragment_overhaul, container, 
false);
         unbinder = ButterKnife.bind(this, view);
-        viewPager.setAdapter(new NavTabViewPagerAdapter(getFragmentManager()));
+        viewPager.setAdapter(new 
NavTabViewPagerAdapter(getChildFragmentManager()));
         tabLayout.setupWithViewPager(viewPager);
+
+        searchFragment = (OverhaulSearchFragment) 
getChildFragmentManager().findFragmentById(R.id.search_fragment);
         return view;
     }
 
@@ -56,7 +64,8 @@
     }
 
     @Override public void onFeedSearchRequested() {
-        // todo: [overhaul] search.
+        
searchFragment.setInvokeSource(OverhaulSearchFragment.InvokeSource.FEED_BAR);
+        searchFragment.openSearch();
     }
 
     @Override public void onFeedVoiceSearchRequested() {
@@ -115,4 +124,39 @@
         // todo: [overhaul] logic for menu state.
         return false;
     }
+
+    @Override
+    public void onSearchResultCopyLink(@NonNull PageTitle title) {
+
+    }
+
+    @Override
+    public void onSearchResultAddToList(@NonNull PageTitle title, @NonNull 
AddToReadingListDialog.InvokeSource source) {
+
+    }
+
+    @Override
+    public void onSearchResultShareLink(@NonNull PageTitle title) {
+
+    }
+
+    @Override
+    public void onSearchProgressBar(boolean enabled) {
+
+    }
+
+    @Override
+    public void onSearchSelectPage(@NonNull HistoryEntry entry, boolean 
inNewTab) {
+
+    }
+
+    @Override
+    public void onSearchOpen() {
+
+    }
+
+    @Override
+    public void onSearchClose() {
+
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java 
b/app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java
index 57eddc2..23c3b77 100644
--- a/app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java
+++ b/app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java
@@ -1,14 +1,17 @@
 package org.wikipedia.search;
 
 import android.content.Context;
+import android.content.DialogInterface;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.LoaderManager;
 import android.support.v4.content.CursorLoader;
 import android.support.v4.content.Loader;
 import android.support.v4.widget.CursorAdapter;
+import android.support.v7.app.AlertDialog;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -18,13 +21,19 @@
 import android.widget.TextView;
 
 import org.wikipedia.R;
+import org.wikipedia.WikipediaApp;
 import org.wikipedia.database.contract.SearchHistoryContract;
+import org.wikipedia.util.FeedbackUtil;
 
 import static org.wikipedia.Constants.RECENT_SEARCHES_FRAGMENT_LOADER_ID;
 
 /** Displays a list of recent searches */
 public class RecentSearchesFragment extends Fragment implements 
LoaderManager.LoaderCallbacks<Cursor> {
-    private SearchArticlesFragment searchFragment;
+    public interface Parent {
+        void switchToSearch(@NonNull String text);
+    }
+
+    private Parent parentFragment;
     private View container;
     private ListView recentSearchesList;
     private RecentSearchesAdapter adapter;
@@ -33,10 +42,30 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {
         View rootView = inflater.inflate(R.layout.fragment_search_recent, 
container, false);
-        searchFragment = (SearchArticlesFragment) getParentFragment();
+        parentFragment = (Parent) getParentFragment();
         this.container = rootView.findViewById(R.id.recent_searches_container);
         recentSearchesList = (ListView) 
rootView.findViewById(R.id.recent_searches_list);
+
         deleteButton = (ImageView) 
rootView.findViewById(R.id.recent_searches_delete_button);
+        deleteButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                new AlertDialog.Builder(getContext())
+                        
.setMessage(getString(R.string.clear_recent_searches_confirm))
+                        .setPositiveButton(
+                                getString(R.string.yes),
+                                new DialogInterface.OnClickListener() {
+                                    @Override
+                                    public void onClick(DialogInterface 
dialog, int id) {
+                                        new 
DeleteAllRecentSearchesTask(WikipediaApp.getInstance()).execute();
+                                    }
+                                })
+                        .setNegativeButton(getString(R.string.no), null)
+                        .create().show();
+            }
+        });
+        FeedbackUtil.setToolbarButtonLongPressToast(deleteButton);
+
         return rootView;
     }
 
@@ -58,7 +87,7 @@
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int 
position, long id) {
                 RecentSearch entry = (RecentSearch) view.getTag();
-                searchFragment.switchToSearch(entry.getText());
+                parentFragment.switchToSearch(entry.getText());
             }
         });
 
diff --git a/app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java 
b/app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
index d7711a2..398166a 100644
--- a/app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
+++ b/app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
@@ -7,7 +7,6 @@
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
-import android.support.v7.app.AlertDialog;
 import android.support.v7.widget.SearchView;
 import android.text.TextUtils;
 import android.util.Log;
@@ -41,7 +40,8 @@
 
 import static org.wikipedia.util.DimenUtil.getContentTopOffsetPx;
 
-public class SearchArticlesFragment extends Fragment implements 
BackPressedHandler {
+public class SearchArticlesFragment extends Fragment implements 
BackPressedHandler,
+        SearchResultsFragment.Parent, RecentSearchesFragment.Parent {
     public enum InvokeSource implements EnumCode {
         TOOLBAR(0),
         WIDGET(1),
@@ -143,26 +143,6 @@
             }
         });
 
-        final View deleteButton = 
parentLayout.findViewById(R.id.recent_searches_delete_button);
-        deleteButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                new AlertDialog.Builder(getContext())
-                        
.setMessage(getString(R.string.clear_recent_searches_confirm))
-                        .setPositiveButton(
-                                getString(R.string.yes),
-                                new DialogInterface.OnClickListener() {
-                                    @Override
-                                    public void onClick(DialogInterface 
dialog, int id) {
-                                        new 
DeleteAllRecentSearchesTask(app).execute();
-                                    }
-                                })
-                        .setNegativeButton(getString(R.string.no), null)
-                        .create().show();
-            }
-        });
-        FeedbackUtil.setToolbarButtonLongPressToast(deleteButton);
-
         FragmentManager childFragmentManager = getChildFragmentManager();
         recentSearchesFragment = 
(RecentSearchesFragment)childFragmentManager.findFragmentById(
                 R.id.search_panel_recent);
@@ -194,6 +174,8 @@
         outState.putInt(ARG_INVOKE_SOURCE, invokeSource.code());
     }
 
+    @Override
+    @NonNull
     public SearchFunnel getFunnel() {
         return funnel;
     }
@@ -206,7 +188,8 @@
         return invokeSource.fromIntent();
     }
 
-    public void switchToSearch(String queryText) {
+    @Override
+    public void switchToSearch(@NonNull String queryText) {
         startSearch(queryText, true);
         searchView.setQuery(queryText, false);
     }
@@ -215,7 +198,8 @@
      * Changes the search text box to contain a different string.
      * @param text The text you want to make the search box display.
      */
-    public void setSearchText(CharSequence text) {
+    @Override
+    public void setSearchText(@NonNull CharSequence text) {
         searchView.setQuery(text, false);
     }
 
@@ -333,6 +317,10 @@
             return true;
         }
         return false;
+    }
+
+    @Override
+    public void setProgressBarEnabled(boolean enabled) {
     }
 
     private void setSearchViewEnabled(boolean enabled) {
@@ -460,7 +448,8 @@
         }
     };
 
-    public void navigateToTitle(PageTitle title, boolean inNewTab, int 
position) {
+    @Override
+    public void navigateToTitle(@NonNull PageTitle title, boolean inNewTab, 
int position) {
         if (!isAdded()) {
             return;
         }
diff --git a/app/src/main/java/org/wikipedia/search/SearchResultsFragment.java 
b/app/src/main/java/org/wikipedia/search/SearchResultsFragment.java
index 743a449..b2907e6 100644
--- a/app/src/main/java/org/wikipedia/search/SearchResultsFragment.java
+++ b/app/src/main/java/org/wikipedia/search/SearchResultsFragment.java
@@ -3,6 +3,7 @@
 import org.wikipedia.LongPressHandler;
 import org.wikipedia.ParcelableLruCache;
 import org.wikipedia.activity.FragmentUtil;
+import org.wikipedia.analytics.SearchFunnel;
 import org.wikipedia.history.HistoryEntry;
 import org.wikipedia.page.PageTitle;
 import org.wikipedia.R;
@@ -44,6 +45,13 @@
         void onSearchProgressBar(boolean enabled);
     }
 
+    public interface Parent {
+        void navigateToTitle(@NonNull PageTitle item, boolean inNewTab, int 
position);
+        void setSearchText(@NonNull CharSequence text);
+        @NonNull SearchFunnel getFunnel();
+        void setProgressBarEnabled(boolean enabled);
+    }
+
     private static final int BATCH_SIZE = 20;
     private static final int DELAY_MILLIS = 300;
     private static final int MESSAGE_SEARCH = 1;
@@ -54,7 +62,7 @@
      */
     private static final int NANO_TO_MILLI = 1_000_000;
 
-    private SearchArticlesFragment searchFragment;
+    private Parent parentFragment;
     private View searchResultsDisplay;
     private View searchResultsContainer;
     private ListView searchResultsList;
@@ -81,7 +89,7 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {
         View rootView = inflater.inflate(R.layout.fragment_search_results, 
container, false);
         searchResultsDisplay = 
rootView.findViewById(R.id.search_results_display);
-        searchFragment = (SearchArticlesFragment) getParentFragment();
+        parentFragment = (Parent) getParentFragment();
 
         searchResultsContainer = 
rootView.findViewById(R.id.search_results_container);
         searchResultsList = (ListView) 
rootView.findViewById(R.id.search_results_list);
@@ -97,7 +105,7 @@
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int 
position, long id) {
                 PageTitle item = ((SearchResult) 
getAdapter().getItem(position)).getPageTitle();
-                searchFragment.navigateToTitle(item, false, position);
+                parentFragment.navigateToTitle(item, false, position);
             }
         });
 
@@ -110,8 +118,8 @@
             public void onClick(View view) {
                 String suggestion = (String) searchSuggestion.getTag();
                 if (suggestion != null) {
-                    searchFragment.getFunnel().searchDidYouMean();
-                    searchFragment.setSearchText(suggestion);
+                    parentFragment.getFunnel().searchDidYouMean();
+                    parentFragment.setSearchText(suggestion);
                     startSearch(suggestion, true);
                 }
             }
@@ -230,7 +238,7 @@
                 if (!resultList.isEmpty()) {
                     // Calculate total time taken to display results, in 
milliseconds
                     final int timeToDisplay = (int) ((System.nanoTime() - 
startTime) / NANO_TO_MILLI);
-                    searchFragment.getFunnel().searchResults(false, 
resultList.size(), timeToDisplay);
+                    parentFragment.getFunnel().searchResults(false, 
resultList.size(), timeToDisplay);
                 }
 
                 updateProgressBar(false);
@@ -277,7 +285,7 @@
                 }
                 // Calculate total time taken to display results, in 
milliseconds
                 final int timeToDisplay = (int) ((System.nanoTime() - 
startTime) / NANO_TO_MILLI);
-                searchFragment.getFunnel().searchError(false, timeToDisplay);
+                parentFragment.getFunnel().searchError(false, timeToDisplay);
                 updateProgressBar(false);
 
                 searchErrorView.setVisibility(View.VISIBLE);
@@ -333,7 +341,7 @@
                 if (!resultList.isEmpty()) {
                     // Calculate total time taken to display results, in 
milliseconds
                     final int timeToDisplay = (int) ((System.nanoTime() - 
startTime) / NANO_TO_MILLI);
-                    searchFragment.getFunnel().searchResults(true, 
resultList.size(), timeToDisplay);
+                    parentFragment.getFunnel().searchResults(true, 
resultList.size(), timeToDisplay);
                 }
 
                 // append results to cache...
@@ -358,7 +366,7 @@
                 }
                 // Calculate total time taken to display results, in 
milliseconds
                 final int timeToDisplay = (int) ((System.nanoTime() - 
startTime) / NANO_TO_MILLI);
-                searchFragment.getFunnel().searchError(true, timeToDisplay);
+                parentFragment.getFunnel().searchError(true, timeToDisplay);
                 updateProgressBar(false);
 
                 // since this is a follow-up search just show a message
@@ -381,8 +389,10 @@
     }
 
     private void updateProgressBar(boolean enabled) {
+        parentFragment.setProgressBarEnabled(enabled);
         Callback callback = callback();
         if (callback != null) {
+            // TODO: remove this callback item after overhaul
             callback.onSearchProgressBar(enabled);
         }
     }
@@ -446,12 +456,12 @@
 
         @Override
         public void onOpenLink(PageTitle title, HistoryEntry entry) {
-            searchFragment.navigateToTitle(title, false, 
lastPositionRequested);
+            parentFragment.navigateToTitle(title, false, 
lastPositionRequested);
         }
 
         @Override
         public void onOpenInNewTab(PageTitle title, HistoryEntry entry) {
-            searchFragment.navigateToTitle(title, true, lastPositionRequested);
+            parentFragment.navigateToTitle(title, true, lastPositionRequested);
         }
     }
 
diff --git a/app/src/main/java/org/wikipedia/views/ViewUtil.java 
b/app/src/main/java/org/wikipedia/views/ViewUtil.java
index d0e65ea..e9fa710 100644
--- a/app/src/main/java/org/wikipedia/views/ViewUtil.java
+++ b/app/src/main/java/org/wikipedia/views/ViewUtil.java
@@ -1,5 +1,7 @@
 package org.wikipedia.views;
 
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
 import android.annotation.TargetApi;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -120,5 +122,24 @@
         parent.addView(next, index);
     }
 
+    public static void fadeIn(@NonNull View view) {
+        view.setAlpha(0f);
+        view.setVisibility(View.VISIBLE);
+        view.animate().alpha(1f)
+                
.setDuration(view.getResources().getInteger(android.R.integer.config_shortAnimTime))
+                .setListener(null);
+    }
+
+    public static void fadeOut(@NonNull final View view) {
+        view.animate().alpha(0f)
+                
.setDuration(view.getResources().getInteger(android.R.integer.config_shortAnimTime))
+                .setListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                view.setVisibility(View.GONE);
+            }
+        });
+    }
+
     private ViewUtil() { }
 }
diff --git a/app/src/main/res/layout/fragment_overhaul.xml 
b/app/src/main/res/layout/fragment_overhaul.xml
index 6bba102..9ceee6a 100644
--- a/app/src/main/res/layout/fragment_overhaul.xml
+++ b/app/src/main/res/layout/fragment_overhaul.xml
@@ -1,27 +1,43 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android";
+    xmlns:tools="http://schemas.android.com/tools";
     xmlns:app="http://schemas.android.com/apk/res-auto";
     android:layout_width="match_parent"
     android:layout_height="match_parent">
-    <org.wikipedia.overhaul.navtab.NavTabLayout
-        android:id="@+id/view_nav_view_pager_tab_layout"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/view_nav_view_pager_tab_layout_height"
-        android:layout_alignParentBottom="true"
-        app:tabGravity="fill"
-        android:elevation="12dp"
-        android:background="@android:color/white"
-        app:tabIndicatorColor="@color/blue_liberal" />
 
-    <android.support.design.widget.CoordinatorLayout
-        android:id="@+id/fragment_overhaul_view_pager_container"
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+        <org.wikipedia.overhaul.navtab.NavTabLayout
+            android:id="@+id/view_nav_view_pager_tab_layout"
+            android:layout_width="match_parent"
+            
android:layout_height="@dimen/view_nav_view_pager_tab_layout_height"
+            android:layout_alignParentBottom="true"
+            app:tabGravity="fill"
+            android:elevation="12dp"
+            android:background="@android:color/white"
+            app:tabIndicatorColor="@color/blue_liberal" />
+
+        <android.support.design.widget.CoordinatorLayout
+            android:id="@+id/fragment_overhaul_view_pager_container"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_above="@id/view_nav_view_pager_tab_layout">
+            <org.wikipedia.readinglist.NoSwipeViewPager
+                android:id="@+id/fragment_overhaul_view_pager"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+        </android.support.design.widget.CoordinatorLayout>
+
+    </RelativeLayout>
+
+    <fragment
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_above="@id/view_nav_view_pager_tab_layout">
-        <org.wikipedia.readinglist.NoSwipeViewPager
-            android:id="@+id/fragment_overhaul_view_pager"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-    </android.support.design.widget.CoordinatorLayout>
-</RelativeLayout>
+        android:id="@+id/search_fragment"
+        android:name="org.wikipedia.search.OverhaulSearchFragment"
+        android:layout="@id/view_nav_view_pager_tab_layout"
+        tools:layout="@layout/fragment_search_overhaul" />
+
+</FrameLayout>

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I37aef4b3274d6b6ae019ac73d12d4db76ed9dd4a
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