From be94e0bbfaa7ff2a23e5aae75e2446855143e49d Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Mon, 25 Nov 2013 22:35:35 -0800 Subject: #191 Use Subsonic's new search provider --- res/drawable-hdpi/ic_action_album.png | Bin 0 -> 716 bytes res/drawable-hdpi/ic_action_artist.png | Bin 0 -> 685 bytes res/drawable-hdpi/ic_action_song.png | Bin 0 -> 568 bytes res/drawable-mdpi/ic_action_album.png | Bin 0 -> 474 bytes res/drawable-mdpi/ic_action_artist.png | Bin 0 -> 505 bytes res/drawable-mdpi/ic_action_song.png | Bin 0 -> 431 bytes res/drawable-xhdpi/ic_action_album.png | Bin 0 -> 1023 bytes res/drawable-xhdpi/ic_action_artist.png | Bin 0 -> 820 bytes res/drawable-xhdpi/ic_action_song.png | Bin 0 -> 705 bytes res/xml/settings.xml | 5 -- .../dsub/activity/QueryReceiverActivity.java | 4 - .../dsub/activity/SettingsActivity.java | 9 -- .../dsub/activity/VoiceQueryReceiverActivity.java | 4 - .../dsub/provider/DSubSearchProvider.java | 94 +++++++++++++++++++-- 14 files changed, 87 insertions(+), 29 deletions(-) create mode 100644 res/drawable-hdpi/ic_action_album.png create mode 100644 res/drawable-hdpi/ic_action_artist.png create mode 100644 res/drawable-hdpi/ic_action_song.png create mode 100644 res/drawable-mdpi/ic_action_album.png create mode 100644 res/drawable-mdpi/ic_action_artist.png create mode 100644 res/drawable-mdpi/ic_action_song.png create mode 100644 res/drawable-xhdpi/ic_action_album.png create mode 100644 res/drawable-xhdpi/ic_action_artist.png create mode 100644 res/drawable-xhdpi/ic_action_song.png diff --git a/res/drawable-hdpi/ic_action_album.png b/res/drawable-hdpi/ic_action_album.png new file mode 100644 index 00000000..6058c483 Binary files /dev/null and b/res/drawable-hdpi/ic_action_album.png differ diff --git a/res/drawable-hdpi/ic_action_artist.png b/res/drawable-hdpi/ic_action_artist.png new file mode 100644 index 00000000..40c9a7fb Binary files /dev/null and b/res/drawable-hdpi/ic_action_artist.png differ diff --git a/res/drawable-hdpi/ic_action_song.png b/res/drawable-hdpi/ic_action_song.png new file mode 100644 index 00000000..95342f76 Binary files /dev/null and b/res/drawable-hdpi/ic_action_song.png differ diff --git a/res/drawable-mdpi/ic_action_album.png b/res/drawable-mdpi/ic_action_album.png new file mode 100644 index 00000000..02674347 Binary files /dev/null and b/res/drawable-mdpi/ic_action_album.png differ diff --git a/res/drawable-mdpi/ic_action_artist.png b/res/drawable-mdpi/ic_action_artist.png new file mode 100644 index 00000000..c113cf78 Binary files /dev/null and b/res/drawable-mdpi/ic_action_artist.png differ diff --git a/res/drawable-mdpi/ic_action_song.png b/res/drawable-mdpi/ic_action_song.png new file mode 100644 index 00000000..fa9acbde Binary files /dev/null and b/res/drawable-mdpi/ic_action_song.png differ diff --git a/res/drawable-xhdpi/ic_action_album.png b/res/drawable-xhdpi/ic_action_album.png new file mode 100644 index 00000000..e4b12908 Binary files /dev/null and b/res/drawable-xhdpi/ic_action_album.png differ diff --git a/res/drawable-xhdpi/ic_action_artist.png b/res/drawable-xhdpi/ic_action_artist.png new file mode 100644 index 00000000..2dff43ea Binary files /dev/null and b/res/drawable-xhdpi/ic_action_artist.png differ diff --git a/res/drawable-xhdpi/ic_action_song.png b/res/drawable-xhdpi/ic_action_song.png new file mode 100644 index 00000000..29fd3a2d Binary files /dev/null and b/res/drawable-xhdpi/ic_action_song.png differ diff --git a/res/xml/settings.xml b/res/xml/settings.xml index be742f0b..99233785 100644 --- a/res/xml/settings.xml +++ b/res/xml/settings.xml @@ -185,11 +185,6 @@ android:summary="@string/settings.screen_lit_summary" android:key="screenLitOnDownload" android:defaultValue="true"/> - - diff --git a/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java b/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java index 7a19fcb5..b28d542e 100644 --- a/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java +++ b/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java @@ -44,10 +44,6 @@ public class QueryReceiverActivity extends Activity { String query = getIntent().getStringExtra(SearchManager.QUERY); if (query != null) { - SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, DSubSearchProvider.AUTHORITY, - DSubSearchProvider.MODE); - suggestions.saveRecentQuery(query, null); - Intent intent = new Intent(QueryReceiverActivity.this, SubsonicFragmentActivity.class); intent.putExtra(Constants.INTENT_EXTRA_NAME_QUERY, query); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); diff --git a/src/github/daneren2005/dsub/activity/SettingsActivity.java b/src/github/daneren2005/dsub/activity/SettingsActivity.java index 49a5f15b..c723cca5 100644 --- a/src/github/daneren2005/dsub/activity/SettingsActivity.java +++ b/src/github/daneren2005/dsub/activity/SettingsActivity.java @@ -111,15 +111,6 @@ public class SettingsActivity extends PreferenceActivity implements SharedPrefer settings = Util.getPreferences(this); serverCount = settings.getInt(Constants.PREFERENCES_KEY_SERVER_COUNT, 3); - findPreference("clearSearchHistory").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - SearchRecentSuggestions suggestions = new SearchRecentSuggestions(SettingsActivity.this, DSubSearchProvider.AUTHORITY, DSubSearchProvider.MODE); - suggestions.clearHistory(); - Util.toast(SettingsActivity.this, R.string.settings_search_history_cleared); - return false; - } - }); findPreference("clearCache").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { diff --git a/src/github/daneren2005/dsub/activity/VoiceQueryReceiverActivity.java b/src/github/daneren2005/dsub/activity/VoiceQueryReceiverActivity.java index e37696d5..f3a56920 100644 --- a/src/github/daneren2005/dsub/activity/VoiceQueryReceiverActivity.java +++ b/src/github/daneren2005/dsub/activity/VoiceQueryReceiverActivity.java @@ -46,10 +46,6 @@ public class VoiceQueryReceiverActivity extends Activity { String query = getIntent().getStringExtra(SearchManager.QUERY); if (query != null) { - SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, DSubSearchProvider.AUTHORITY, - DSubSearchProvider.MODE); - suggestions.saveRecentQuery(query, null); - Intent intent = new Intent(VoiceQueryReceiverActivity.this, SubsonicFragmentActivity.class); intent.putExtra(Constants.INTENT_EXTRA_NAME_QUERY, query); intent.putExtra(Constants.INTENT_EXTRA_NAME_AUTOPLAY, true); diff --git a/src/github/daneren2005/dsub/provider/DSubSearchProvider.java b/src/github/daneren2005/dsub/provider/DSubSearchProvider.java index 5ddec0f4..b7164cef 100644 --- a/src/github/daneren2005/dsub/provider/DSubSearchProvider.java +++ b/src/github/daneren2005/dsub/provider/DSubSearchProvider.java @@ -18,19 +18,99 @@ */ package github.daneren2005.dsub.provider; -import android.content.SearchRecentSuggestionsProvider; +import android.app.SearchManager; +import android.content.ContentProvider; +import android.content.ContentValues; +import android.database.Cursor; +import android.database.MatrixCursor; +import android.net.Uri; + +import github.daneren2005.dsub.R; +import github.daneren2005.dsub.domain.Artist; +import github.daneren2005.dsub.domain.MusicDirectory; +import github.daneren2005.dsub.domain.SearchCritera; +import github.daneren2005.dsub.domain.SearchResult; +import github.daneren2005.dsub.service.MusicService; +import github.daneren2005.dsub.service.MusicServiceFactory; /** * Provides search suggestions based on recent searches. * * @author Sindre Mehus */ -public class DSubSearchProvider extends SearchRecentSuggestionsProvider { +public class DSubSearchProvider extends ContentProvider { + private static final String RESOURCE_PREFIX = "android.resource://github.daneren2005.dsub/"; + private static final String[] COLUMNS = {"_id", + SearchManager.SUGGEST_COLUMN_TEXT_1, + SearchManager.SUGGEST_COLUMN_TEXT_2, + SearchManager.SUGGEST_COLUMN_INTENT_DATA, + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA, + SearchManager.SUGGEST_COLUMN_ICON_1}; + + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { + String query = selectionArgs[0] + "*"; + SearchResult searchResult = search(query); + return createCursor(searchResult); + } + + private SearchResult search(String query) { + MusicService musicService = MusicServiceFactory.getMusicService(getContext()); + if (musicService == null) { + return null; + } + + try { + return musicService.search(new SearchCritera(query, 5, 10, 10), getContext(), null); + } catch (Exception e) { + return null; + } + } + + private Cursor createCursor(SearchResult searchResult) { + MatrixCursor cursor = new MatrixCursor(COLUMNS); + if (searchResult == null) { + return cursor; + } + + for (Artist artist : searchResult.getArtists()) { + String icon = RESOURCE_PREFIX + R.drawable.ic_action_artist; + cursor.addRow(new Object[]{artist.getId(), artist.getName(), null, artist.getId(), artist.getName(), icon}); + } + for (MusicDirectory.Entry album : searchResult.getAlbums()) { + String icon = RESOURCE_PREFIX + R.drawable.ic_action_album; + cursor.addRow(new Object[]{album.getId(), album.getTitle(), album.getArtist(), album.getId(), album.getTitle(), icon}); + } + for (MusicDirectory.Entry song : searchResult.getSongs()) { + String icon = RESOURCE_PREFIX + R.drawable.ic_action_song; + cursor.addRow(new Object[]{song.getId(), song.getTitle(), song.getArtist(), song.getParent(), null, icon}); + } + return cursor; + } + + @Override + public boolean onCreate() { + return false; + } + + @Override + public String getType(Uri uri) { + return null; + } + + @Override + public Uri insert(Uri uri, ContentValues contentValues) { + return null; + } + + @Override + public int delete(Uri uri, String s, String[] strings) { + return 0; + } - public static final String AUTHORITY = DSubSearchProvider.class.getName(); - public static final int MODE = DATABASE_MODE_QUERIES; + @Override + public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { + return 0; + } - public DSubSearchProvider() { - setupSuggestions(AUTHORITY, MODE); - } } \ No newline at end of file -- cgit v1.2.3