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