diff --git a/AndroidManifest.xml b/AndroidManifest.xml index b11491905..65a78a553 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -8,18 +8,26 @@ - + - - + + + + android:theme="@style/Theme.Sherlock.Light.ForceOverflow" > - + + + android:configChanges="keyboardHidden|orientation" + android:label="@string/add_new_feed_label" > - - - + + + + + + android:configChanges="orientation|screenSize" > + + + android:configChanges="keyboardHidden|orientation" + android:label="@string/settings_label" > - - - - + + + + + + + - + - - + + + \ No newline at end of file diff --git a/src/de/danoeh/antennapod/activity/FeedItemlistActivity.java b/src/de/danoeh/antennapod/activity/FeedItemlistActivity.java index 2f6cfe90e..50aa84fb7 100644 --- a/src/de/danoeh/antennapod/activity/FeedItemlistActivity.java +++ b/src/de/danoeh/antennapod/activity/FeedItemlistActivity.java @@ -70,6 +70,9 @@ public class FeedItemlistActivity extends SherlockFragmentActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { + menu.add(Menu.NONE, R.id.search_item, Menu.NONE, R.string.search_label) + .setIcon(R.drawable.action_search) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); return FeedMenuHandler .onCreateOptionsMenu(new MenuInflater(this), menu); } @@ -101,6 +104,9 @@ public class FeedItemlistActivity extends SherlockFragmentActivity { remover.execute(feed); } break; + case R.id.search_item: + onSearchRequested(); + break; case android.R.id.home: startActivity(new Intent(this, MainActivity.class)); break; @@ -109,4 +115,14 @@ public class FeedItemlistActivity extends SherlockFragmentActivity { return true; } + @Override + public boolean onSearchRequested() { + Bundle bundle = new Bundle(); + bundle.putLong(SearchActivity.EXTRA_FEED_ID, feed.getId()); + startSearch(null, false, bundle, false); + return true; + } + + + } diff --git a/src/de/danoeh/antennapod/activity/SearchActivity.java b/src/de/danoeh/antennapod/activity/SearchActivity.java index 8f05e533f..4f84da736 100644 --- a/src/de/danoeh/antennapod/activity/SearchActivity.java +++ b/src/de/danoeh/antennapod/activity/SearchActivity.java @@ -21,6 +21,7 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.adapter.SearchlistAdapter; import de.danoeh.antennapod.feed.Feed; import de.danoeh.antennapod.feed.FeedItem; +import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.feed.FeedSearcher; import de.danoeh.antennapod.feed.SearchResult; import de.danoeh.antennapod.fragment.FeedlistFragment; @@ -29,9 +30,14 @@ import de.danoeh.antennapod.fragment.ItemlistFragment; public class SearchActivity extends SherlockListActivity { private static final String TAG = "SearchActivity"; + public static final String EXTRA_FEED_ID = "de.danoeh.antennapod.searchactivity.extra.feedId"; + private SearchlistAdapter searchAdapter; private ArrayList content; + /** Feed that is being searched or null if the search is global. */ + private Feed selectedFeed; + private TextView txtvStatus; @Override @@ -40,10 +46,17 @@ public class SearchActivity extends SherlockListActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); setContentView(R.layout.searchlist); txtvStatus = (TextView) findViewById(android.R.id.empty); - if (Intent.ACTION_SEARCH.equals(getIntent().getAction())) { + Intent intent = getIntent(); + if (Intent.ACTION_SEARCH.equals(intent.getAction())) { + Bundle extra = intent.getBundleExtra(SearchManager.APP_DATA); + if (extra != null) { + if (AppConfig.DEBUG) Log.d(TAG, "Found bundle extra"); + long feedId = extra.getLong(EXTRA_FEED_ID); + selectedFeed = FeedManager.getInstance().getFeed(feedId); + } if (AppConfig.DEBUG) Log.d(TAG, "Starting search"); - String query = getIntent().getStringExtra(SearchManager.QUERY); + String query = intent.getStringExtra(SearchManager.QUERY); getSupportActionBar().setSubtitle( getString(R.string.search_term_label) + query); startSearch(query); @@ -101,7 +114,7 @@ public class SearchActivity extends SherlockListActivity { protected ArrayList doInBackground(String... params) { if (AppConfig.DEBUG) Log.d(TAG, "Starting background work"); - return FeedSearcher.performSearch(params[0]); + return FeedSearcher.performSearch(params[0], selectedFeed); } @Override diff --git a/src/de/danoeh/antennapod/feed/FeedSearcher.java b/src/de/danoeh/antennapod/feed/FeedSearcher.java index ff9f5a4c8..a8e92234c 100644 --- a/src/de/danoeh/antennapod/feed/FeedSearcher.java +++ b/src/de/danoeh/antennapod/feed/FeedSearcher.java @@ -12,27 +12,36 @@ import de.danoeh.antennapod.R; public class FeedSearcher { private static final String TAG = "FeedSearcher"; - public static ArrayList performSearch(final String query) { + /** Performs a search in all feeds or one specific feed. */ + public static ArrayList performSearch(final String query, + Feed selectedFeed) { String lcQuery = query.toLowerCase(); ArrayList result = new ArrayList(); - if (AppConfig.DEBUG) - Log.d(TAG, "Searching Feed titles"); - searchFeedtitles(lcQuery, result); + if (selectedFeed == null) { + if (AppConfig.DEBUG) Log.d(TAG, "Performing global search"); + if (AppConfig.DEBUG) + Log.d(TAG, "Searching Feed titles"); + searchFeedtitles(lcQuery, result); + } else if (AppConfig.DEBUG) { + Log.d(TAG, "Performing search on specific feed"); + } + if (AppConfig.DEBUG) Log.d(TAG, "Searching Feeditem titles"); - searchFeedItemTitles(lcQuery, result); + searchFeedItemTitles(lcQuery, result, selectedFeed); + if (AppConfig.DEBUG) Log.d(TAG, "Searching item-chaptertitles"); + searchFeedItemChapters(lcQuery, result, selectedFeed); - searchFeedItemChapters(lcQuery, result); if (AppConfig.DEBUG) Log.d(TAG, "Searching item descriptions"); + searchFeedItemDescription(lcQuery, result, selectedFeed); - searchFeedItemDescription(lcQuery, result); if (AppConfig.DEBUG) Log.d(TAG, "Searching item content encoded data"); + searchFeedItemContentEncoded(lcQuery, result, selectedFeed); - searchFeedItemContentEncoded(lcQuery, result); return result; } @@ -47,31 +56,49 @@ public class FeedSearcher { } private static void searchFeedItemTitles(String query, - ArrayList destination) { + ArrayList destination, Feed selectedFeed) { FeedManager manager = FeedManager.getInstance(); - for (Feed feed : manager.getFeeds()) { - for (FeedItem item : feed.getItems()) { - if (item.getTitle().toLowerCase().contains(query)) { - destination.add(new SearchResult(item, PodcastApp - .getInstance().getString(R.string.found_in_label) - + item.getFeed().getTitle())); - } + if (selectedFeed == null) { + for (Feed feed : manager.getFeeds()) { + searchFeedItemTitlesSingleFeed(query, destination, feed); + } + } else { + searchFeedItemTitlesSingleFeed(query, destination, selectedFeed); + } + } + + private static void searchFeedItemTitlesSingleFeed(String query, + ArrayList destination, Feed feed) { + for (FeedItem item : feed.getItems()) { + if (item.getTitle().toLowerCase().contains(query)) { + destination.add(new SearchResult(item, PodcastApp.getInstance() + .getString(R.string.found_in_label) + + item.getFeed().getTitle())); } } } private static void searchFeedItemChapters(String query, - ArrayList destination) { + ArrayList destination, Feed selectedFeed) { FeedManager manager = FeedManager.getInstance(); - for (Feed feed : manager.getFeeds()) { - for (FeedItem item : feed.getItems()) { - if (item.getSimpleChapters() != null) { - for (SimpleChapter sc : item.getSimpleChapters()) { - if (sc.getTitle().toLowerCase().contains(query)) { - destination.add(new SearchResult(item, PodcastApp - .getInstance().getString( - R.string.found_in_chapters_label))); - } + if (selectedFeed == null) { + for (Feed feed : manager.getFeeds()) { + searchFeedItemChaptersSingleFeed(query, destination, feed); + } + } else { + searchFeedItemChaptersSingleFeed(query, destination, selectedFeed); + } + } + + private static void searchFeedItemChaptersSingleFeed(String query, + ArrayList destination, Feed feed) { + for (FeedItem item : feed.getItems()) { + if (item.getSimpleChapters() != null) { + for (SimpleChapter sc : item.getSimpleChapters()) { + if (sc.getTitle().toLowerCase().contains(query)) { + destination.add(new SearchResult(item, PodcastApp + .getInstance().getString( + R.string.found_in_chapters_label))); } } } @@ -79,33 +106,48 @@ public class FeedSearcher { } private static void searchFeedItemDescription(String query, - ArrayList destination) { + ArrayList destination, Feed selectedFeed) { FeedManager manager = FeedManager.getInstance(); - for (Feed feed : manager.getFeeds()) { - for (FeedItem item : feed.getItems()) { - if (item.getDescription() != null - && item.getDescription().toLowerCase().contains(query)) { - destination.add(new SearchResult(item, PodcastApp - .getInstance().getString( - R.string.found_in_shownotes_label))); - } + if (selectedFeed == null) { + for (Feed feed : manager.getFeeds()) { + searchFeedItemDescriptionSingleFeed(query, destination, feed); + } + } else { + searchFeedItemDescriptionSingleFeed(query, destination, + selectedFeed); + } + } + + private static void searchFeedItemDescriptionSingleFeed(String query, + ArrayList destination, Feed feed) { + for (FeedItem item : feed.getItems()) { + if (item.getDescription() != null + && item.getDescription().toLowerCase().contains(query)) { + destination.add(new SearchResult(item, PodcastApp.getInstance() + .getString(R.string.found_in_shownotes_label))); } } } private static void searchFeedItemContentEncoded(String query, - ArrayList destination) { + ArrayList destination, Feed selectedFeed) { FeedManager manager = FeedManager.getInstance(); - for (Feed feed : manager.getFeeds()) { - for (FeedItem item : feed.getItems()) { - if (!destination.contains(item) - && item.getContentEncoded() != null - && item.getContentEncoded().toLowerCase() - .contains(query)) { - destination.add(new SearchResult(item, PodcastApp - .getInstance().getString( - R.string.found_in_shownotes_label))); - } + if (selectedFeed == null) { + for (Feed feed : manager.getFeeds()) { + searchFeedItemContentEncodedSingleFeed(query, destination, feed); + } + } else { + searchFeedItemContentEncodedSingleFeed(query, destination, selectedFeed); + } + } + + private static void searchFeedItemContentEncodedSingleFeed(String query, + ArrayList destination, Feed feed) { + for (FeedItem item : feed.getItems()) { + if (!destination.contains(item) && item.getContentEncoded() != null + && item.getContentEncoded().toLowerCase().contains(query)) { + destination.add(new SearchResult(item, PodcastApp.getInstance() + .getString(R.string.found_in_shownotes_label))); } } }