Niedzielski has uploaded a new change for review.

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

Change subject: Hygiene: refactor SearchFragment
......................................................................

Hygiene: refactor SearchFragment

• Move SearchFragment.InvokeSource to separate file, SearchInvokeSource.
  This enum was at home in SearchFragment but is large and independent.

• Move SearchFragment variables to the top of the class.

• Group public SearchFragment methods at the top of the class.

• Make showLangPreferenceDialog() private because it can be.

No functional changes intended.

Change-Id: Ice0531d005db762aee6e49d49a8e638a2839cb4e
---
M app/src/main/java/org/wikipedia/MainFragment.java
M app/src/main/java/org/wikipedia/analytics/SearchFunnel.java
M app/src/main/java/org/wikipedia/page/PageActivity.java
M app/src/main/java/org/wikipedia/search/SearchFragment.java
A app/src/main/java/org/wikipedia/search/SearchInvokeSource.java
5 files changed, 133 insertions(+), 130 deletions(-)


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

diff --git a/app/src/main/java/org/wikipedia/MainFragment.java 
b/app/src/main/java/org/wikipedia/MainFragment.java
index 93fe21e..3830523 100644
--- a/app/src/main/java/org/wikipedia/MainFragment.java
+++ b/app/src/main/java/org/wikipedia/MainFragment.java
@@ -47,6 +47,7 @@
 import org.wikipedia.readinglist.AddToReadingListDialog;
 import org.wikipedia.readinglist.ReadingListsFragment;
 import org.wikipedia.search.SearchFragment;
+import org.wikipedia.search.SearchInvokeSource;
 import org.wikipedia.search.SearchResultsFragment;
 import org.wikipedia.settings.Prefs;
 import org.wikipedia.settings.SettingsActivity;
@@ -136,7 +137,7 @@
                 && resultCode == Activity.RESULT_OK && data != null
                 && 
data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS) != null) {
             String searchQuery = 
data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS).get(0);
-            openSearchFromIntent(searchQuery, 
SearchFragment.InvokeSource.VOICE);
+            openSearchFromIntent(searchQuery, SearchInvokeSource.VOICE);
         } else if (requestCode == Constants.ACTIVITY_REQUEST_GALLERY
                 && resultCode == 
GalleryActivity.ACTIVITY_RESULT_FILEPAGE_SELECT) {
             startActivity(data);
@@ -213,16 +214,16 @@
                 && Constants.PLAIN_TEXT_MIME_TYPE.equals(intent.getType())) {
             funnel.logShareIntent();
             openSearchFromIntent(intent.getStringExtra(Intent.EXTRA_TEXT),
-                    SearchFragment.InvokeSource.INTENT_SHARE);
+                    SearchInvokeSource.INTENT_SHARE);
         } else if (Intent.ACTION_PROCESS_TEXT.equals(intent.getAction())
                 && Constants.PLAIN_TEXT_MIME_TYPE.equals(intent.getType())
                 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             funnel.logProcessTextIntent();
             
openSearchFromIntent(intent.getStringExtra(Intent.EXTRA_PROCESS_TEXT),
-                    SearchFragment.InvokeSource.INTENT_PROCESS_TEXT);
+                    SearchInvokeSource.INTENT_PROCESS_TEXT);
         } else if (intent.hasExtra(Constants.INTENT_SEARCH_FROM_WIDGET)) {
             funnel.logSearchWidgetTap();
-            openSearchFromIntent(null, SearchFragment.InvokeSource.WIDGET);
+            openSearchFromIntent(null, SearchInvokeSource.WIDGET);
         } else if (lastPageViewedWithin(1)) {
             startActivity(PageActivity.newIntent(getContext()));
         }
@@ -251,7 +252,7 @@
     }
 
     @Override public void onFeedSearchRequested() {
-        searchFragment.setInvokeSource(SearchFragment.InvokeSource.FEED_BAR);
+        searchFragment.setInvokeSource(SearchInvokeSource.FEED_BAR);
         searchFragment.openSearch();
     }
 
@@ -438,7 +439,7 @@
     }
 
     public void openSearchFromIntent(@Nullable final String query,
-                                      final SearchFragment.InvokeSource 
source) {
+                                      final SearchInvokeSource source) {
         tabLayout.post(new Runnable() {
             @Override
             public void run() {
diff --git a/app/src/main/java/org/wikipedia/analytics/SearchFunnel.java 
b/app/src/main/java/org/wikipedia/analytics/SearchFunnel.java
index 63f2844..08a7748 100644
--- a/app/src/main/java/org/wikipedia/analytics/SearchFunnel.java
+++ b/app/src/main/java/org/wikipedia/analytics/SearchFunnel.java
@@ -4,14 +4,14 @@
 
 import org.json.JSONObject;
 import org.wikipedia.WikipediaApp;
-import org.wikipedia.search.SearchFragment;
+import org.wikipedia.search.SearchInvokeSource;
 
 public class SearchFunnel extends Funnel {
     private static final String SCHEMA_NAME = "MobileWikiAppSearch";
     private static final int REVISION = 15729321;
-    private SearchFragment.InvokeSource source;
+    private SearchInvokeSource source;
 
-    public SearchFunnel(WikipediaApp app, SearchFragment.InvokeSource source) {
+    public SearchFunnel(WikipediaApp app, SearchInvokeSource source) {
         super(app, SCHEMA_NAME, REVISION, Funnel.SAMPLE_LOG_100);
         this.source = source;
     }
diff --git a/app/src/main/java/org/wikipedia/page/PageActivity.java 
b/app/src/main/java/org/wikipedia/page/PageActivity.java
index bc9b3df..b23d321 100644
--- a/app/src/main/java/org/wikipedia/page/PageActivity.java
+++ b/app/src/main/java/org/wikipedia/page/PageActivity.java
@@ -56,14 +56,15 @@
 import org.wikipedia.page.linkpreview.LinkPreviewDialog;
 import org.wikipedia.page.snippet.CompatActionMode;
 import org.wikipedia.page.tabs.TabsProvider;
+import org.wikipedia.page.tabs.TabsProvider.TabPosition;
 import org.wikipedia.readinglist.AddToReadingListDialog;
 import org.wikipedia.recurring.RecurringTasksExecutor;
 import org.wikipedia.search.SearchFragment;
+import org.wikipedia.search.SearchInvokeSource;
 import org.wikipedia.search.SearchResultsFragment;
 import org.wikipedia.settings.Prefs;
 import org.wikipedia.settings.SettingsActivity;
 import org.wikipedia.staticdata.MainPageNameData;
-import org.wikipedia.page.tabs.TabsProvider.TabPosition;
 import org.wikipedia.theme.ThemeChooserDialog;
 import org.wikipedia.tooltip.ToolTipUtil;
 import org.wikipedia.useroption.sync.UserOptionContentResolver;
@@ -584,7 +585,7 @@
 
     @Override
     public void onPageSearchRequested() {
-        searchFragment.setInvokeSource(SearchFragment.InvokeSource.TOOLBAR);
+        searchFragment.setInvokeSource(SearchInvokeSource.TOOLBAR);
         searchFragment.openSearch();
     }
 
diff --git a/app/src/main/java/org/wikipedia/search/SearchFragment.java 
b/app/src/main/java/org/wikipedia/search/SearchFragment.java
index 4321e1d..3573c9f 100644
--- a/app/src/main/java/org/wikipedia/search/SearchFragment.java
+++ b/app/src/main/java/org/wikipedia/search/SearchFragment.java
@@ -32,8 +32,6 @@
 import org.wikipedia.database.contract.SearchHistoryContract;
 import org.wikipedia.events.WikipediaZeroStateChangeEvent;
 import org.wikipedia.history.HistoryEntry;
-import org.wikipedia.model.EnumCode;
-import org.wikipedia.model.EnumCodeMap;
 import org.wikipedia.page.PageTitle;
 import org.wikipedia.settings.LanguagePreferenceDialog;
 import org.wikipedia.util.FeedbackUtil;
@@ -45,36 +43,6 @@
 
 public class SearchFragment extends Fragment implements BackPressedHandler,
         SearchResultsFragment.Parent, RecentSearchesFragment.Parent {
-    public enum InvokeSource implements EnumCode {
-        TOOLBAR(0),
-        WIDGET(1),
-        INTENT_SHARE(2),
-        INTENT_PROCESS_TEXT(3),
-        FEED_BAR(4),
-        VOICE(5);
-
-        private static final EnumCodeMap<InvokeSource> MAP = new 
EnumCodeMap<>(InvokeSource.class);
-
-        private final int code;
-
-        public static InvokeSource of(int code) {
-            return MAP.get(code);
-        }
-
-        @Override public int code() {
-            return code;
-        }
-
-        InvokeSource(int code) {
-            this.code = code;
-        }
-
-        public boolean fromIntent() {
-            return code == WIDGET.code() || code == INTENT_SHARE.code()
-                    || code == INTENT_PROCESS_TEXT.code();
-        }
-    }
-
     public interface Callback {
         void onSearchSelectPage(@NonNull HistoryEntry entry, boolean inNewTab);
         void onSearchOpen();
@@ -100,7 +68,7 @@
     private WikipediaApp app;
     @BindView(android.support.v7.appcompat.R.id.search_src_text) EditText 
searchEditText;
     private SearchFunnel funnel;
-    private InvokeSource invokeSource = InvokeSource.TOOLBAR;
+    private SearchInvokeSource invokeSource = SearchInvokeSource.TOOLBAR;
 
     /**
      * Whether the Search fragment is currently showing.
@@ -116,11 +84,41 @@
     private RecentSearchesFragment recentSearchesFragment;
     private SearchResultsFragment searchResultsFragment;
 
+    private final SearchView.OnCloseListener searchCloseListener = new 
SearchView.OnCloseListener() {
+        @Override
+        public boolean onClose() {
+            closeSearch();
+            funnel.searchCancel();
+            return false;
+        }
+    };
+
+    private final SearchView.OnQueryTextListener searchQueryListener = new 
SearchView.OnQueryTextListener() {
+        @Override
+        public boolean onQueryTextSubmit(String queryText) {
+            PageTitle firstResult = null;
+            if (getActivePanel() == PANEL_SEARCH_RESULTS) {
+                firstResult = searchResultsFragment.getFirstResult();
+            }
+            if (firstResult != null) {
+                navigateToTitle(firstResult, false, 0);
+                closeSearch();
+            }
+            return true;
+        }
+
+        @Override
+        public boolean onQueryTextChange(String queryText) {
+            startSearch(queryText.trim(), false);
+            return true;
+        }
+    };
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         app = WikipediaApp.getInstance();
-        funnel = new SearchFunnel(WikipediaApp.getInstance(), 
InvokeSource.of(invokeSource.code()));
+        funnel = new SearchFunnel(WikipediaApp.getInstance(), 
SearchInvokeSource.of(invokeSource.code()));
     }
 
     @Override
@@ -155,7 +153,7 @@
 
         if (savedInstanceState != null) {
             lastSearchedText = 
savedInstanceState.getString(ARG_LAST_SEARCHED_TEXT);
-            invokeSource = 
InvokeSource.of(savedInstanceState.getInt(ARG_INVOKE_SOURCE));
+            invokeSource = 
SearchInvokeSource.of(savedInstanceState.getInt(ARG_INVOKE_SOURCE));
             showPanel(savedInstanceState.getInt(ARG_SEARCH_CURRENT_PANEL));
         }
 
@@ -198,7 +196,7 @@
         statusBarView.setVisibility(visible ? View.VISIBLE : View.GONE);
     }
 
-    public void setInvokeSource(InvokeSource source) {
+    public void setInvokeSource(SearchInvokeSource source) {
         invokeSource = source;
     }
 
@@ -219,42 +217,6 @@
     @Override
     public void setSearchText(@NonNull CharSequence text) {
         searchView.setQuery(text, false);
-    }
-
-    /**
-     * Show a particular panel, which can be one of:
-     * - PANEL_RECENT_SEARCHES
-     * - PANEL_SEARCH_RESULTS
-     * Automatically hides the previous panel.
-     * @param panel Which panel to show.
-     */
-    private void showPanel(int panel) {
-        switch (panel) {
-            case PANEL_RECENT_SEARCHES:
-                searchResultsFragment.hide();
-                recentSearchesFragment.show();
-                break;
-            case PANEL_SEARCH_RESULTS:
-                recentSearchesFragment.hide();
-                searchResultsFragment.show();
-                break;
-            default:
-                break;
-        }
-    }
-
-    private int getActivePanel() {
-        if (searchResultsFragment.isShowing()) {
-            return PANEL_SEARCH_RESULTS;
-        } else {
-            //otherwise, the recent searches must be showing:
-            return PANEL_RECENT_SEARCHES;
-        }
-    }
-
-    @Subscribe
-    public void onWikipediaZeroStateChangeEvent(WikipediaZeroStateChangeEvent 
event) {
-        updateZeroChrome();
     }
 
     /**
@@ -291,7 +253,7 @@
      */
     public void openSearch() {
         // create a new funnel every time Search is opened, to get a new 
session ID
-        funnel = new SearchFunnel(WikipediaApp.getInstance(), 
InvokeSource.of(invokeSource.code()));
+        funnel = new SearchFunnel(WikipediaApp.getInstance(), 
SearchInvokeSource.of(invokeSource.code()));
         funnel.searchStart();
         isSearchActive = true;
         Callback callback = callback();
@@ -352,6 +314,55 @@
         progressBar.setVisibility(enabled ? View.VISIBLE : View.GONE);
     }
 
+    @Override
+    public void navigateToTitle(@NonNull PageTitle title, boolean inNewTab, 
int position) {
+        if (!isAdded()) {
+            return;
+        }
+        funnel.searchClick(position);
+        HistoryEntry historyEntry = new HistoryEntry(title, 
HistoryEntry.SOURCE_SEARCH);
+        closeSearch();
+        Callback callback = callback();
+        if (callback != null) {
+            callback.onSearchSelectPage(historyEntry, inNewTab);
+        }
+    }
+
+    @Subscribe public void 
onWikipediaZeroStateChangeEvent(WikipediaZeroStateChangeEvent event) {
+        updateZeroChrome();
+    }
+
+    /**
+     * Show a particular panel, which can be one of:
+     * - PANEL_RECENT_SEARCHES
+     * - PANEL_SEARCH_RESULTS
+     * Automatically hides the previous panel.
+     * @param panel Which panel to show.
+     */
+    private void showPanel(int panel) {
+        switch (panel) {
+            case PANEL_RECENT_SEARCHES:
+                searchResultsFragment.hide();
+                recentSearchesFragment.show();
+                break;
+            case PANEL_SEARCH_RESULTS:
+                recentSearchesFragment.hide();
+                searchResultsFragment.show();
+                break;
+            default:
+                break;
+        }
+    }
+
+    private int getActivePanel() {
+        if (searchResultsFragment.isShowing()) {
+            return PANEL_SEARCH_RESULTS;
+        } else {
+            //otherwise, the recent searches must be showing:
+            return PANEL_RECENT_SEARCHES;
+        }
+    }
+
     private void initSearchView() {
         searchView.setOnQueryTextListener(searchQueryListener);
         searchView.setOnCloseListener(searchCloseListener);
@@ -402,50 +413,6 @@
 
     private boolean isValidQuery(String queryText) {
         return queryText != null && TextUtils.getTrimmedLength(queryText) > 0;
-    }
-
-    private final SearchView.OnQueryTextListener searchQueryListener = new 
SearchView.OnQueryTextListener() {
-        @Override
-        public boolean onQueryTextSubmit(String queryText) {
-            PageTitle firstResult = null;
-            if (getActivePanel() == PANEL_SEARCH_RESULTS) {
-                firstResult = searchResultsFragment.getFirstResult();
-            }
-            if (firstResult != null) {
-                navigateToTitle(firstResult, false, 0);
-                closeSearch();
-            }
-            return true;
-        }
-
-        @Override
-        public boolean onQueryTextChange(String queryText) {
-            startSearch(queryText.trim(), false);
-            return true;
-        }
-    };
-
-    private final SearchView.OnCloseListener searchCloseListener = new 
SearchView.OnCloseListener() {
-        @Override
-        public boolean onClose() {
-            closeSearch();
-            funnel.searchCancel();
-            return false;
-        }
-    };
-
-    @Override
-    public void navigateToTitle(@NonNull PageTitle title, boolean inNewTab, 
int position) {
-        if (!isAdded()) {
-            return;
-        }
-        funnel.searchClick(position);
-        HistoryEntry historyEntry = new HistoryEntry(title, 
HistoryEntry.SOURCE_SEARCH);
-        closeSearch();
-        Callback callback = callback();
-        if (callback != null) {
-            callback.onSearchSelectPage(historyEntry, inNewTab);
-        }
     }
 
     private void addRecentSearch(String title) {
@@ -502,7 +469,7 @@
         return FragmentUtil.getCallback(this, Callback.class);
     }
 
-    public void showLangPreferenceDialog() {
+    private void showLangPreferenceDialog() {
         LanguagePreferenceDialog langPrefDialog = new 
LanguagePreferenceDialog(getContext(), true);
         langPrefDialog.setOnDismissListener(new 
DialogInterface.OnDismissListener() {
             @Override
@@ -516,4 +483,4 @@
         });
         langPrefDialog.show();
     }
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/wikipedia/search/SearchInvokeSource.java 
b/app/src/main/java/org/wikipedia/search/SearchInvokeSource.java
new file mode 100644
index 0000000..59942c2
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/search/SearchInvokeSource.java
@@ -0,0 +1,34 @@
+package org.wikipedia.search;
+
+import org.wikipedia.model.EnumCode;
+import org.wikipedia.model.EnumCodeMap;
+
+public enum SearchInvokeSource implements EnumCode {
+    TOOLBAR(0),
+    WIDGET(1),
+    INTENT_SHARE(2),
+    INTENT_PROCESS_TEXT(3),
+    FEED_BAR(4),
+    VOICE(5);
+
+    private static final EnumCodeMap<SearchInvokeSource> MAP = new 
EnumCodeMap<>(SearchInvokeSource.class);
+
+    private final int code;
+
+    public static SearchInvokeSource of(int code) {
+        return MAP.get(code);
+    }
+
+    @Override public int code() {
+        return code;
+    }
+
+    SearchInvokeSource(int code) {
+        this.code = code;
+    }
+
+    public boolean fromIntent() {
+        return code == WIDGET.code() || code == INTENT_SHARE.code()
+                || code == INTENT_PROCESS_TEXT.code();
+    }
+}
\ No newline at end of file

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ice0531d005db762aee6e49d49a8e638a2839cb4e
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <sniedziel...@wikimedia.org>

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

Reply via email to