diff options
author | Andrew Dolgov <[email protected]> | 2012-01-19 13:05:48 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2012-01-19 13:05:48 +0300 |
commit | 60128ffe2f02f1850c5fb03aa98f7a05b9e832f8 (patch) | |
tree | c569f0d905ee7723c62bdb328f6921d12bb5318c | |
parent | 86245837643d3f9fb2cda3f6b73f496f42774048 (diff) |
implement actionbar search for HC/ICS devices
-rw-r--r-- | res/menu/main_menu.xml | 18 | ||||
-rw-r--r-- | res/values/strings.xml | 1 | ||||
-rw-r--r-- | src/org/fox/ttrss/HeadlinesFragment.java | 16 | ||||
-rw-r--r-- | src/org/fox/ttrss/MainActivity.java | 56 |
4 files changed, 85 insertions, 6 deletions
diff --git a/res/menu/main_menu.xml b/res/menu/main_menu.xml index 85d9dac8..1e3f58b7 100644 --- a/res/menu/main_menu.xml +++ b/res/menu/main_menu.xml @@ -4,11 +4,13 @@ <group android:id="@+id/menu_group_feeds" > - <!-- <item + <!-- + <item android:id="@+id/back_to_categories" android:icon="@android:drawable/ic_menu_close_clear_cancel" android:showAsAction="" - android:title="@string/back_to_categories"/> --> + android:title="@string/back_to_categories"/> + --> <item android:id="@+id/show_feeds" @@ -39,10 +41,17 @@ <item android:id="@+id/go_offline" - android:icon="@drawable/ic_menu_cloud" + android:icon="@drawable/ic_menu_cloud" android:title="@string/go_offline"/> <item + android:id="@+id/search" + android:actionViewClass="android.widget.SearchView" + android:icon="@android:drawable/ic_menu_search" + android:showAsAction="ifRoom" + android:title="@string/search"/> + + <item android:id="@+id/headlines_mark_as_read" android:icon="@drawable/ic_menu_tick" android:showAsAction="" @@ -112,12 +121,11 @@ android:id="@+id/catchup_above" android:icon="@drawable/ic_menu_tick" android:title="@string/article_mark_read_above"/> - + <item android:id="@+id/set_labels" android:icon="@drawable/ic_menu_marked" android:title="@string/article_set_labels"/> - </group> </group> diff --git a/res/values/strings.xml b/res/values/strings.xml index 27eea636..6605b52a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -115,4 +115,5 @@ <string name="offline_image_cache_enabled_summary">Download images to sdcard. This might significantly increase time it takes to go offline.</string> <string name="notify_downloading_images">Downloading images (%1$d)...</string> <string name="article_set_labels">Set labels</string> + <string name="search">Search</string> </resources>
\ No newline at end of file diff --git a/src/org/fox/ttrss/HeadlinesFragment.java b/src/org/fox/ttrss/HeadlinesFragment.java index 6c66b3aa..1f33e746 100644 --- a/src/org/fox/ttrss/HeadlinesFragment.java +++ b/src/org/fox/ttrss/HeadlinesFragment.java @@ -58,6 +58,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, private boolean m_refreshInProgress = false;
private boolean m_canLoadMore = false;
private boolean m_combinedMode = true;
+ private String m_searchQuery = "";
private SharedPreferences m_prefs;
@@ -110,6 +111,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, m_selectedArticles = savedInstanceState.getParcelable("selectedArticles");
m_canLoadMore = savedInstanceState.getBoolean("canLoadMore");
m_combinedMode = savedInstanceState.getBoolean("combinedMode");
+ m_searchQuery = savedInstanceState.getString("searchQuery", "");
}
View view = inflater.inflate(R.layout.headlines_fragment, container, false);
@@ -201,6 +203,12 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, put("skip", String.valueOf(fskip));
if (isCat) put("is_cat", "true");
+
+ if (m_searchQuery.length() != 0) {
+ put("search", m_searchQuery);
+ put("search_mode", "");
+ put("match_on", "both");
+ }
}
};
@@ -217,6 +225,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, out.putParcelable("selectedArticles", m_selectedArticles);
out.putBoolean("canLoadMore", m_canLoadMore);
out.putBoolean("combinedMode", m_combinedMode);
+ out.putString("searchQuery", m_searchQuery);
}
public void setLoadingStatus(int status, boolean showProgress) {
@@ -562,5 +571,12 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, return m_adapter.getPosition(article);
}
+ public void setSearchQuery(String query) {
+ if (!m_searchQuery.equals(query)) {
+ m_searchQuery = query;
+ refresh(false);
+ }
+ }
+
}
diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java index 5fc579af..40c0a331 100644 --- a/src/org/fox/ttrss/MainActivity.java +++ b/src/org/fox/ttrss/MainActivity.java @@ -31,6 +31,7 @@ import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; +import android.support.v4.widget.SearchViewCompat; import android.util.Log; import android.view.ActionMode; import android.view.Display; @@ -43,6 +44,7 @@ import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.LinearLayout; +import android.widget.SearchView; import android.widget.TextView; import android.widget.Toast; @@ -1201,8 +1203,52 @@ public class MainActivity extends FragmentActivity implements OnlineServices { } else if (m_selectedArticle != null) { m_menu.setGroupVisible(R.id.menu_group_article, true); - } else if (m_activeFeed != null || m_activeCategory != null) { + } else if (m_activeFeed != null) { m_menu.setGroupVisible(R.id.menu_group_headlines, true); + + MenuItem search = m_menu.findItem(R.id.search); + + if (search != null && !m_compatMode) { + SearchView searchView = (SearchView) search.getActionView(); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + private String query = ""; + + @Override + public boolean onQueryTextSubmit(String query) { + Log.d(TAG, "Search/onQueryTextSubmit"); + + HeadlinesFragment frag = (HeadlinesFragment) getSupportFragmentManager() + .findFragmentById(R.id.headlines_fragment); + + if (frag != null) { + frag.setSearchQuery(query); + this.query = query; + } + + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + // TODO Auto-generated method stub + + Log.d(TAG, "Search/onQueryTextChange: " + newText); + + if (newText.equals("") && !newText.equals(this.query)) { + HeadlinesFragment frag = (HeadlinesFragment) getSupportFragmentManager() + .findFragmentById(R.id.headlines_fragment); + + if (frag != null) { + frag.setSearchQuery(newText); + this.query = newText; + } + } + + return false; + } + }); + } + } else { m_menu.setGroupVisible(R.id.menu_group_feeds, true); } @@ -1422,6 +1468,14 @@ public class MainActivity extends FragmentActivity implements OnlineServices { } if (!append) { + + MenuItem search = m_menu.findItem(R.id.search); + + if (search != null && !m_compatMode) { + SearchView sv = (SearchView) search.getActionView(); + sv.setQuery("", false); + } + HeadlinesFragment hf = new HeadlinesFragment(); FragmentTransaction ft = getSupportFragmentManager() |