BearND has uploaded a new change for review.
https://gerrit.wikimedia.org/r/167991
Change subject: Recent searches
......................................................................
Recent searches
Store recent search strings in a DB table and display them,
most recently used appearing first.
Change-Id: Ic2a0d16898848346693bd7c366053424fc578639
---
M wikipedia/AndroidManifest.xml
M wikipedia/res/layout/fragment_search.xml
A wikipedia/res/layout/fragment_search_recent.xml
M wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
M wikipedia/src/main/java/org/wikipedia/data/DBOpenHelper.java
A wikipedia/src/main/java/org/wikipedia/events/ShowTitleSearchEvent.java
M wikipedia/src/main/java/org/wikipedia/history/HistoryFragment.java
A wikipedia/src/main/java/org/wikipedia/search/RecentSearch.java
A wikipedia/src/main/java/org/wikipedia/search/RecentSearchContentProvider.java
A
wikipedia/src/main/java/org/wikipedia/search/RecentSearchPersistanceHelper.java
A wikipedia/src/main/java/org/wikipedia/search/RecentSearchPersister.java
A wikipedia/src/main/java/org/wikipedia/search/RecentSearchesFragment.java
M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
13 files changed, 453 insertions(+), 56 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/91/167991/1
diff --git a/wikipedia/AndroidManifest.xml b/wikipedia/AndroidManifest.xml
index 488eb9f..a454ac6 100644
--- a/wikipedia/AndroidManifest.xml
+++ b/wikipedia/AndroidManifest.xml
@@ -117,6 +117,11 @@
/>
<provider
+ android:authorities="${applicationId}.recentsearches"
+ android:name=".search.RecentSearchContentProvider"
+ />
+
+ <provider
android:authorities="${applicationId}.savedpages"
android:name=".savedpages.SavedPageContentProvider"
/>
diff --git a/wikipedia/res/layout/fragment_search.xml
b/wikipedia/res/layout/fragment_search.xml
index df71bcb..1191f0b 100644
--- a/wikipedia/res/layout/fragment_search.xml
+++ b/wikipedia/res/layout/fragment_search.xml
@@ -59,20 +59,9 @@
</LinearLayout>
- <LinearLayout
+ <fragment android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/search_panel_recent"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:padding="16dp"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/search_recent_header" />
-
- <!-- recent search list will go here -->
-
- </LinearLayout>
+ android:name="org.wikipedia.search.RecentSearchesFragment"
+ tools:layout="@layout/fragment_search_recent"/>
</FrameLayout>
\ No newline at end of file
diff --git a/wikipedia/res/layout/fragment_search_recent.xml
b/wikipedia/res/layout/fragment_search_recent.xml
new file mode 100644
index 0000000..c705934
--- /dev/null
+++ b/wikipedia/res/layout/fragment_search_recent.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/recent_searches_container">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="8dp"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:text="@string/search_recent_header" />
+
+ <ListView
+ android:id="@+id/recent_searches_list"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:dividerHeight="0dp"
+ />
+</LinearLayout>
diff --git a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
index 7afb693..e39e483 100644
--- a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
+++ b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
@@ -1,23 +1,5 @@
package org.wikipedia;
-import android.app.Application;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.graphics.PorterDuff;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.preference.PreferenceManager;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.Window;
-import android.webkit.WebView;
-import com.squareup.otto.Bus;
-import org.acra.ACRA;
-import org.acra.ReportingInteractionMode;
-import org.acra.annotation.ReportsCrashes;
-import org.mediawiki.api.json.Api;
import org.wikipedia.analytics.FunnelManager;
import org.wikipedia.analytics.SessionFunnel;
import org.wikipedia.bridge.StyleLoader;
@@ -37,8 +19,28 @@
import org.wikipedia.pageimages.PageImagePersister;
import org.wikipedia.savedpages.SavedPage;
import org.wikipedia.savedpages.SavedPagePersister;
+import org.wikipedia.search.RecentSearch;
+import org.wikipedia.search.RecentSearchPersister;
import org.wikipedia.settings.PrefKeys;
import org.wikipedia.zero.WikipediaZeroHandler;
+import org.mediawiki.api.json.Api;
+import com.squareup.otto.Bus;
+import org.acra.ACRA;
+import org.acra.ReportingInteractionMode;
+import org.acra.annotation.ReportsCrashes;
+import android.app.Application;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.graphics.Color;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.preference.PreferenceManager;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.Window;
+import android.webkit.WebView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -353,6 +355,8 @@
persister = new HistoryEntryPersister(this);
} else if (cls.equals(PageImage.class)) {
persister = new PageImagePersister(this);
+ } else if (cls.equals(RecentSearch.class)) {
+ persister = new RecentSearchPersister(this);
} else if (cls.equals(SavedPage.class)) {
persister = new SavedPagePersister(this);
} else if (cls.equals(EditSummary.class)) {
diff --git a/wikipedia/src/main/java/org/wikipedia/data/DBOpenHelper.java
b/wikipedia/src/main/java/org/wikipedia/data/DBOpenHelper.java
index 9808d3d..558f231 100644
--- a/wikipedia/src/main/java/org/wikipedia/data/DBOpenHelper.java
+++ b/wikipedia/src/main/java/org/wikipedia/data/DBOpenHelper.java
@@ -1,12 +1,13 @@
package org.wikipedia.data;
-import android.content.Context;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import org.wikipedia.savedpages.SavedPage;
import org.wikipedia.editing.summaries.EditSummary;
import org.wikipedia.history.HistoryEntry;
import org.wikipedia.pageimages.PageImage;
+import org.wikipedia.savedpages.SavedPage;
+import org.wikipedia.search.RecentSearch;
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
public class DBOpenHelper extends SQLiteOpenHelper{
@@ -20,6 +21,7 @@
private PersistanceHelper[] persistanceHelpers = {
HistoryEntry.PERSISTANCE_HELPER,
PageImage.PERSISTANCE_HELPER,
+ RecentSearch.PERSISTANCE_HELPER,
SavedPage.PERSISTANCE_HELPER,
EditSummary.PERSISTANCE_HELPER
};
diff --git
a/wikipedia/src/main/java/org/wikipedia/events/ShowTitleSearchEvent.java
b/wikipedia/src/main/java/org/wikipedia/events/ShowTitleSearchEvent.java
new file mode 100644
index 0000000..40a9925
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/events/ShowTitleSearchEvent.java
@@ -0,0 +1,13 @@
+package org.wikipedia.events;
+
+public class ShowTitleSearchEvent {
+ private String text;
+
+ public ShowTitleSearchEvent(String text) {
+ this.text = text;
+ }
+
+ public String getText() {
+ return text;
+ }
+}
\ No newline at end of file
diff --git a/wikipedia/src/main/java/org/wikipedia/history/HistoryFragment.java
b/wikipedia/src/main/java/org/wikipedia/history/HistoryFragment.java
index 723dd7d..dbbb8a1 100644
--- a/wikipedia/src/main/java/org/wikipedia/history/HistoryFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/history/HistoryFragment.java
@@ -1,5 +1,10 @@
package org.wikipedia.history;
+import org.wikipedia.R;
+import org.wikipedia.WikipediaApp;
+import org.wikipedia.events.NewWikiPageNavigationEvent;
+import org.wikipedia.pageimages.PageImage;
+import com.squareup.picasso.Picasso;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -13,18 +18,17 @@
import android.support.v4.widget.CursorAdapter;
import android.text.Editable;
import android.text.TextWatcher;
-import android.view.*;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
-import com.squareup.picasso.Picasso;
-import org.wikipedia.R;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.events.NewWikiPageNavigationEvent;
-import org.wikipedia.pageimages.PageImage;
-
import java.text.DateFormat;
import java.util.Date;
@@ -91,14 +95,14 @@
}
});
- historyEntryList.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
- HistoryEntry oldEntry = (HistoryEntry) view.getTag();
- HistoryEntry newEntry = new
HistoryEntry(oldEntry.getTitle(), HistoryEntry.SOURCE_HISTORY);
- app.getBus().post(new
NewWikiPageNavigationEvent(oldEntry.getTitle(), newEntry));
- }
- });
+ historyEntryList.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
+ HistoryEntry oldEntry = (HistoryEntry) view.getTag();
+ HistoryEntry newEntry = new HistoryEntry(oldEntry.getTitle(),
HistoryEntry.SOURCE_HISTORY);
+ app.getBus().post(new
NewWikiPageNavigationEvent(oldEntry.getTitle(), newEntry));
+ }
+ });
getActivity().getSupportLoaderManager().initLoader(0, null, this);
getActivity().getSupportLoaderManager().restartLoader(0, null, this);
diff --git a/wikipedia/src/main/java/org/wikipedia/search/RecentSearch.java
b/wikipedia/src/main/java/org/wikipedia/search/RecentSearch.java
new file mode 100644
index 0000000..ea907d2
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/search/RecentSearch.java
@@ -0,0 +1,78 @@
+package org.wikipedia.search;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import java.util.Date;
+
+public class RecentSearch implements Parcelable {
+ public static final RecentSearchPersistanceHelper PERSISTANCE_HELPER = new
RecentSearchPersistanceHelper();
+
+ private final String text;
+ private final Date timestamp;
+
+ public RecentSearch(String text) {
+ this(text, new Date());
+ }
+
+ public RecentSearch(String text, Date timestamp) {
+ this.text = text;
+ this.timestamp = timestamp;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public Date getTimestamp() {
+ return timestamp;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof RecentSearch)) {
+ return false;
+ }
+ RecentSearch other = (RecentSearch) o;
+ return text.equals(other.text);
+ }
+
+ @Override
+ public int hashCode() {
+ return text.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return "RecentSearch{"
+ + "text=" + text
+ + ", timestamp=" + timestamp.getTime()
+ + '}';
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(getText());
+ dest.writeLong(getTimestamp().getTime());
+ }
+
+ private RecentSearch(Parcel in) {
+ this.text = in.readString();
+ this.timestamp = new Date(in.readLong());
+ }
+
+ public static final Creator<RecentSearch> CREATOR
+ = new Creator<RecentSearch>() {
+ public RecentSearch createFromParcel(Parcel in) {
+ return new RecentSearch(in);
+ }
+
+ public RecentSearch[] newArray(int size) {
+ return new RecentSearch[size];
+ }
+ };
+}
diff --git
a/wikipedia/src/main/java/org/wikipedia/search/RecentSearchContentProvider.java
b/wikipedia/src/main/java/org/wikipedia/search/RecentSearchContentProvider.java
new file mode 100644
index 0000000..0b5bdb2
--- /dev/null
+++
b/wikipedia/src/main/java/org/wikipedia/search/RecentSearchContentProvider.java
@@ -0,0 +1,16 @@
+package org.wikipedia.search;
+
+import org.wikipedia.WikipediaApp;
+import org.wikipedia.data.DBOpenHelper;
+import org.wikipedia.data.SQLiteContentProvider;
+
+public class RecentSearchContentProvider extends
SQLiteContentProvider<RecentSearch> {
+ public RecentSearchContentProvider() {
+ super(RecentSearch.PERSISTANCE_HELPER);
+ }
+
+ @Override
+ protected DBOpenHelper getDbOpenHelper() {
+ return
((WikipediaApp)getContext().getApplicationContext()).getDbOpenHelper();
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikipedia/search/RecentSearchPersistanceHelper.java
b/wikipedia/src/main/java/org/wikipedia/search/RecentSearchPersistanceHelper.java
new file mode 100644
index 0000000..bfd36d9
--- /dev/null
+++
b/wikipedia/src/main/java/org/wikipedia/search/RecentSearchPersistanceHelper.java
@@ -0,0 +1,64 @@
+package org.wikipedia.search;
+
+import org.wikipedia.data.PersistanceHelper;
+import android.content.ContentValues;
+import android.database.Cursor;
+import java.util.Date;
+
+public class RecentSearchPersistanceHelper extends
PersistanceHelper<RecentSearch> {
+
+ private static final int COL_INDEX_TEXT = 1;
+ private static final int COL_INDEX_TIMESTAMP = 2;
+
+ @Override
+ public RecentSearch fromCursor(Cursor c) {
+ // Carefully, get them back by using position only
+ String title = c.getString(COL_INDEX_TEXT);
+ Date timestamp = new Date(c.getLong(COL_INDEX_TIMESTAMP));
+ return new RecentSearch(title, timestamp);
+ }
+
+ @Override
+ protected ContentValues toContentValues(RecentSearch obj) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put("text", obj.getText());
+ contentValues.put("timestamp", obj.getTimestamp().getTime());
+ return contentValues;
+ }
+
+ @Override
+ public String getTableName() {
+ return "recentsearches";
+ }
+
+ @Override
+ protected int getDBVersionIntroducedAt() {
+ return 4;
+ }
+
+ @Override
+ public Column[] getColumnsAdded(int version) {
+ switch (version) {
+ case 4:
+ return new Column[] {
+ new Column("_id", "integer primary key"),
+ new Column("text", "string"),
+ new Column("timestamp", "integer"),
+ };
+ default:
+ return new Column[0];
+ }
+ }
+
+ @Override
+ protected String getPrimaryKeySelection() {
+ return "text = ?";
+ }
+
+ @Override
+ protected String[] getPrimaryKeySelectionArgs(RecentSearch obj) {
+ return new String[] {
+ obj.getText(),
+ };
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikipedia/search/RecentSearchPersister.java
b/wikipedia/src/main/java/org/wikipedia/search/RecentSearchPersister.java
new file mode 100644
index 0000000..a162d86
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/search/RecentSearchPersister.java
@@ -0,0 +1,19 @@
+package org.wikipedia.search;
+
+import org.wikipedia.data.ContentPersister;
+import org.wikipedia.data.SQLiteContentProvider;
+import android.content.Context;
+
+public class RecentSearchPersister extends ContentPersister<RecentSearch> {
+ public RecentSearchPersister(Context context) {
+ // lolJava
+ super(
+ context.getContentResolver().acquireContentProviderClient(
+ SQLiteContentProvider.getAuthorityForTable(
+ RecentSearch.PERSISTANCE_HELPER.getTableName()
+ )
+ ),
+ RecentSearch.PERSISTANCE_HELPER
+ );
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikipedia/search/RecentSearchesFragment.java
b/wikipedia/src/main/java/org/wikipedia/search/RecentSearchesFragment.java
new file mode 100644
index 0000000..4877378
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/search/RecentSearchesFragment.java
@@ -0,0 +1,134 @@
+package org.wikipedia.search;
+
+import org.wikipedia.R;
+import org.wikipedia.WikipediaApp;
+import org.wikipedia.events.ShowTitleSearchEvent;
+import android.content.Context;
+import android.database.Cursor;
+import android.os.Bundle;
+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.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ListView;
+import android.widget.TextView;
+
+/** Displays a list of recent searches */
+public class RecentSearchesFragment extends Fragment implements
LoaderManager.LoaderCallbacks<Cursor> {
+
+ private View container;
+ private ListView recentSearchesList;
+ private RecentSearchesAdapter adapter;
+
+ private WikipediaApp app;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
+ View rootView = inflater.inflate(R.layout.fragment_search_recent,
container, false);
+ this.container = rootView.findViewById(R.id.recent_searches_container);
+ recentSearchesList = (ListView)
rootView.findViewById(R.id.recent_searches_list);
+ return rootView;
+ }
+
+ public void show() {
+ container.setVisibility(View.VISIBLE);
+ }
+
+ public void hide() {
+ container.setVisibility(View.GONE);
+ }
+
+ public boolean isShowing() {
+ return container.getVisibility() == View.VISIBLE;
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ app = (WikipediaApp)getActivity().getApplicationContext();
+ adapter = new RecentSearchesAdapter(getActivity(), null, true);
+ recentSearchesList.setAdapter(adapter);
+
+ recentSearchesList.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
+ RecentSearch entry = (RecentSearch) view.getTag();
+ app.getBus().post(new ShowTitleSearchEvent(entry.getText()));
+ }
+ });
+
+ getActivity().getSupportLoaderManager().initLoader(0, null, this);
+ getActivity().getSupportLoaderManager().restartLoader(0, null, this);
+ }
+
+ @Override
+ public void onDestroyView() {
+ getActivity().getSupportLoaderManager().destroyLoader(0);
+ super.onDestroyView();
+ }
+
+ @Override
+ public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
+ if (!isAdded()) {
+ return null;
+ }
+ return new CursorLoader(
+ getActivity(),
+ RecentSearch.PERSISTANCE_HELPER.getBaseContentURI(),
+ null,
+ null,
+ null,
+ "timestamp DESC");
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> cursorLoaderLoader, Cursor
cursorLoader) {
+ if (!isAdded()) {
+ return;
+ }
+ adapter.swapCursor(cursorLoader);
+ getActivity().supportInvalidateOptionsMenu();
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> cursorLoaderLoader) {
+ adapter.changeCursor(null);
+ }
+
+ public void updateList() {
+ adapter.notifyDataSetChanged();
+ }
+
+ private class RecentSearchesAdapter extends CursorAdapter {
+ public RecentSearchesAdapter(Context context, Cursor c, boolean
autoRequery) {
+ super(context, c, autoRequery);
+ }
+
+ @Override
+ public View newView(Context context, Cursor cursor, ViewGroup
viewGroup) {
+ return
getActivity().getLayoutInflater().inflate(android.R.layout.simple_list_item_1,
viewGroup, false);
+ }
+
+ @Override
+ public void bindView(View view, Context context, Cursor cursor) {
+ TextView textView = (TextView)
view.findViewById(android.R.id.text1);
+ RecentSearch entry = getEntry(cursor);
+ textView.setText(entry.getText());
+ view.setTag(entry);
+ }
+
+ @Override
+ public CharSequence convertToString(Cursor cursor) {
+ return getEntry(cursor).getText();
+ }
+
+ public RecentSearch getEntry(Cursor cursor) {
+ return RecentSearch.PERSISTANCE_HELPER.fromCursor(cursor);
+ }
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
index 3d5998b..3c069f1 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
@@ -4,18 +4,20 @@
import org.wikipedia.R;
import org.wikipedia.Utils;
import org.wikipedia.WikipediaApp;
+import org.wikipedia.concurrency.SaneAsyncTask;
import org.wikipedia.events.NewWikiPageNavigationEvent;
+import org.wikipedia.events.ShowTitleSearchEvent;
import org.wikipedia.events.WikipediaZeroStateChangeEvent;
import org.wikipedia.history.HistoryEntry;
import org.wikipedia.page.PageActivity;
import com.squareup.otto.Subscribe;
-
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.text.TextUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -40,9 +42,9 @@
private boolean lastSearchForced = false;
private View searchContainerView;
- private View recentSearchContainer;
private View searchTypesContainer;
+ private RecentSearchesFragment recentSearchesFragment;
private TitleSearchFragment titleSearchFragment;
private FullSearchFragment fullSearchFragment;
@@ -73,7 +75,7 @@
}
});
- recentSearchContainer =
parentLayout.findViewById(R.id.search_panel_recent);
+ recentSearchesFragment =
(RecentSearchesFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.search_panel_recent);
searchTypesContainer =
parentLayout.findViewById(R.id.search_panel_types);
buttonTitleSearch =
parentLayout.findViewById(R.id.button_search_title);
@@ -138,15 +140,29 @@
outState.putString(ARG_LAST_SEARCHED_TEXT, lastSearchedText);
}
+ @Subscribe
+ public void onShowTitleSearchEvent(ShowTitleSearchEvent event) {
+ switchToTitleSearch(event.getText());
+ }
+
+ private void switchToTitleSearch(String queryText) {
+ if (getActivePanel() == PANEL_TITLE_SEARCH) {
+ return;
+ }
+ showPanel(PANEL_TITLE_SEARCH);
+ startSearch(queryText, true);
+ searchView.setQuery(queryText, false);
+ }
+
private void showPanel(int panel) {
- recentSearchContainer.setVisibility(View.GONE);
searchTypesContainer.setVisibility(View.GONE);
+ recentSearchesFragment.hide();
titleSearchFragment.hide();
fullSearchFragment.hide();
switch (panel) {
case PANEL_RECENT_SEARCHES:
- recentSearchContainer.setVisibility(View.VISIBLE);
+ recentSearchesFragment.show();
break;
case PANEL_TITLE_SEARCH:
searchTypesContainer.setVisibility(View.VISIBLE);
@@ -313,5 +329,37 @@
Utils.hideSoftKeyboard(getActivity());
closeSearch();
app.getBus().post(new NewWikiPageNavigationEvent(title, historyEntry));
+
+ addRecentSearch(lastSearchedText);
+ }
+
+ private void addRecentSearch(String title) {
+ RecentSearch recentSearchEntry = new RecentSearch(title);
+ new SaveRecentSearchTask(recentSearchEntry).execute();
+ }
+
+ private final class SaveRecentSearchTask extends SaneAsyncTask<Void> {
+ private final RecentSearch entry;
+ public SaveRecentSearchTask(RecentSearch entry) {
+ super(SINGLE_THREAD);
+ this.entry = entry;
+ }
+
+ @Override
+ public Void performTask() throws Throwable {
+ app.getPersister(RecentSearch.class).upsert(entry);
+ return null;
+ }
+
+ @Override
+ public void onFinish(Void result) {
+ super.onFinish(result);
+ recentSearchesFragment.updateList();
+ }
+
+ @Override
+ public void onCatch(Throwable caught) {
+ Log.w("SaveRecentSearchTask", "Caught " + caught.getMessage(),
caught);
+ }
}
}
--
To view, visit https://gerrit.wikimedia.org/r/167991
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic2a0d16898848346693bd7c366053424fc578639
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: BearND <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits