Make search work in all activities in the music app, enable the
music app itself as a media search provider, and fix some issues
surrounding searching items that have unknown artist or album.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7659377..8b8bbfc 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -27,17 +27,17 @@
android:label="@string/musicbrowserlabel"
android:taskAffinity="android.task.music"
android:allowTaskReparenting="true">
+ <meta-data
+ android:name="android.app.default_searchable"
+ android:value=".QueryBrowserActivity"
+ />
<activity android:name="MusicBrowserActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
- <meta-data
- android:name="android.app.default_searchable"
- android:value=".QueryBrowserActivity"
- />
- </activity>
+ </activity>
<receiver android:name="MediaButtonIntentReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
@@ -123,6 +123,7 @@
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
+ <action android:name="android.intent.action.MEDIA_SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
diff --git a/src/com/android/music/AlbumBrowserActivity.java b/src/com/android/music/AlbumBrowserActivity.java
index 61fc495..e3ab3eb 100644
--- a/src/com/android/music/AlbumBrowserActivity.java
+++ b/src/com/android/music/AlbumBrowserActivity.java
@@ -37,6 +37,7 @@
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
+import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
@@ -64,6 +65,8 @@
private String mCurrentAlbumId;
private String mCurrentAlbumName;
private String mCurrentArtistNameForAlbum;
+ boolean mIsUnknownArtist;
+ boolean mIsUnknownAlbum;
private AlbumListAdapter mAdapter;
private boolean mAdapterSent;
private final static int SEARCH = CHILD_MENU_BASE;
@@ -231,14 +234,13 @@
else
setTitle(R.string.albums_title);
}
-
+
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfoIn) {
menu.add(0, PLAY_SELECTION, 0, R.string.play_selection);
SubMenu sub = menu.addSubMenu(0, ADD_TO_PLAYLIST, 0, R.string.add_to_playlist);
MusicUtils.makePlaylistMenu(this, sub);
menu.add(0, DELETE_ITEM, 0, R.string.delete_item);
- menu.add(0, SEARCH, 0, R.string.search_title);
AdapterContextMenuInfo mi = (AdapterContextMenuInfo) menuInfoIn;
mAlbumCursor.moveToPosition(mi.position);
@@ -246,11 +248,18 @@
mCurrentAlbumName = mAlbumCursor.getString(mAlbumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM));
mCurrentArtistNameForAlbum = mAlbumCursor.getString(
mAlbumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ARTIST));
- if (mCurrentAlbumName == null || mCurrentAlbumName.equals(MediaFile.UNKNOWN_STRING)) {
+ mIsUnknownArtist = mCurrentArtistNameForAlbum == null ||
+ mCurrentArtistNameForAlbum.equals(MediaFile.UNKNOWN_STRING);
+ mIsUnknownAlbum = mCurrentAlbumName == null ||
+ mCurrentAlbumName.equals(MediaFile.UNKNOWN_STRING);
+ if (mIsUnknownAlbum) {
menu.setHeaderTitle(getString(R.string.unknown_album_name));
} else {
menu.setHeaderTitle(mCurrentAlbumName);
}
+ if (!mIsUnknownAlbum || !mIsUnknownArtist) {
+ menu.add(0, SEARCH, 0, R.string.search_title);
+ }
}
@Override
@@ -305,16 +314,25 @@
void doSearch() {
CharSequence title = null;
- String query = null;
+ String query = "";
Intent i = new Intent();
i.setAction(MediaStore.INTENT_ACTION_MEDIA_SEARCH);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- title = mCurrentAlbumName;
- query = mCurrentArtistNameForAlbum + " " + mCurrentAlbumName;
- i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistNameForAlbum);
- i.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, mCurrentAlbumName);
+ title = "";
+ if (!mIsUnknownAlbum) {
+ query = mCurrentAlbumName;
+ i.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, mCurrentAlbumName);
+ title = mCurrentAlbumName;
+ }
+ if(!mIsUnknownArtist) {
+ query = query + " " + mCurrentArtistNameForAlbum;
+ i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistNameForAlbum);
+ title = title + " " + mCurrentArtistNameForAlbum;
+ }
+ // Since we hide the 'search' menu item when both album and artist are
+ // unknown, the query and title strings will have at least one of those.
i.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE);
title = getString(R.string.mediasearch, title);
i.putExtra(SearchManager.QUERY, query);
diff --git a/src/com/android/music/ArtistAlbumBrowserActivity.java b/src/com/android/music/ArtistAlbumBrowserActivity.java
index c906d0e..13a2387 100644
--- a/src/com/android/music/ArtistAlbumBrowserActivity.java
+++ b/src/com/android/music/ArtistAlbumBrowserActivity.java
@@ -68,6 +68,8 @@
private String mCurrentAlbumId;
private String mCurrentAlbumName;
private String mCurrentArtistNameForAlbum;
+ boolean mIsUnknownArtist;
+ boolean mIsUnknownAlbum;
private ArtistAlbumListAdapter mAdapter;
private boolean mAdapterSent;
private final static int SEARCH = CHILD_MENU_BASE;
@@ -164,6 +166,7 @@
setListAdapter(null);
mAdapter = null;
unregisterReceiver(mScanListener);
+ setListAdapter(null);
super.onDestroy();
}
@@ -301,7 +304,6 @@
SubMenu sub = menu.addSubMenu(0, ADD_TO_PLAYLIST, 0, R.string.add_to_playlist);
MusicUtils.makePlaylistMenu(this, sub);
menu.add(0, DELETE_ITEM, 0, R.string.delete_item);
- menu.add(0, SEARCH, 0, R.string.search_title);
ExpandableListContextMenuInfo mi = (ExpandableListContextMenuInfo) menuInfoIn;
@@ -319,10 +321,14 @@
mCurrentArtistId = mArtistCursor.getString(mArtistCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID));
mCurrentArtistName = mArtistCursor.getString(mArtistCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST));
mCurrentAlbumId = null;
- if (mCurrentArtistName == null || mCurrentArtistName.equals(MediaFile.UNKNOWN_STRING)) {
+ mIsUnknownArtist = mCurrentArtistName == null ||
+ mCurrentArtistName.equals(MediaFile.UNKNOWN_STRING);
+ mIsUnknownAlbum = true;
+ if (mIsUnknownArtist) {
menu.setHeaderTitle(getString(R.string.unknown_artist_name));
} else {
menu.setHeaderTitle(mCurrentArtistName);
+ menu.add(0, SEARCH, 0, R.string.search_title);
}
return;
} else if (itemtype == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
@@ -340,11 +346,18 @@
mArtistCursor.moveToPosition(gpos);
mCurrentArtistNameForAlbum = mArtistCursor.getString(
mArtistCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST));
- if (mCurrentAlbumName == null || mCurrentAlbumName.equals(MediaFile.UNKNOWN_STRING)) {
+ mIsUnknownArtist = mCurrentArtistNameForAlbum == null ||
+ mCurrentArtistNameForAlbum.equals(MediaFile.UNKNOWN_STRING);
+ mIsUnknownAlbum = mCurrentAlbumName == null ||
+ mCurrentAlbumName.equals(MediaFile.UNKNOWN_STRING);
+ if (mIsUnknownAlbum) {
menu.setHeaderTitle(getString(R.string.unknown_album_name));
} else {
menu.setHeaderTitle(mCurrentAlbumName);
}
+ if (!mIsUnknownAlbum || !mIsUnknownArtist) {
+ menu.add(0, SEARCH, 0, R.string.search_title);
+ }
}
}
@@ -431,8 +444,14 @@
i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistName);
i.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE);
} else {
- title = mCurrentAlbumName;
- query = mCurrentArtistNameForAlbum + " " + mCurrentAlbumName;
+ if (mIsUnknownAlbum) {
+ title = query = mCurrentArtistNameForAlbum;
+ } else {
+ title = query = mCurrentAlbumName;
+ if (!mIsUnknownArtist) {
+ query = query + " " + mCurrentArtistNameForAlbum;
+ }
+ }
i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistNameForAlbum);
i.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, mCurrentAlbumName);
i.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE);
diff --git a/src/com/android/music/QueryBrowserActivity.java b/src/com/android/music/QueryBrowserActivity.java
index a3af640..cf608a2 100644
--- a/src/com/android/music/QueryBrowserActivity.java
+++ b/src/com/android/music/QueryBrowserActivity.java
@@ -92,8 +92,9 @@
registerReceiver(mScanListener, f);
Intent intent = getIntent();
+ String action = intent != null ? intent.getAction() : null;
- if (intent.getAction().equals(Intent.ACTION_VIEW)) {
+ if (Intent.ACTION_VIEW.equals(action)) {
// this is something we got from the search bar
Uri uri = intent.getData();
String path = uri.toString();
@@ -122,7 +123,30 @@
return;
}
}
+
mFilterString = intent.getStringExtra(SearchManager.QUERY);
+ if (MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)) {
+ String focus = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS);
+ String artist = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST);
+ String album = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM);
+ String title = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE);
+ if (focus != null) {
+ if (focus.startsWith("audio/") && title != null) {
+ mFilterString = title;
+ } else if (focus.equals(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE)) {
+ if (album != null) {
+ mFilterString = album;
+ if (artist != null) {
+ mFilterString = mFilterString + " " + artist;
+ }
+ }
+ } else if (focus.equals(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE)) {
+ if (artist != null) {
+ mFilterString = artist;
+ }
+ }
+ }
+ }
setContentView(R.layout.query_activity);
mTrackList = getListView();
@@ -250,11 +274,13 @@
if ("artist".equals(selectedType)) {
Intent intent = new Intent(Intent.ACTION_PICK);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/album");
intent.putExtra("artist", Long.valueOf(id).toString());
startActivity(intent);
} else if ("album".equals(selectedType)) {
Intent intent = new Intent(Intent.ACTION_PICK);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/track");
intent.putExtra("album", Long.valueOf(id).toString());
startActivity(intent);
diff --git a/src/com/android/music/TrackBrowserActivity.java b/src/com/android/music/TrackBrowserActivity.java
index 2c76db4..2ff760e 100644
--- a/src/com/android/music/TrackBrowserActivity.java
+++ b/src/com/android/music/TrackBrowserActivity.java
@@ -693,10 +693,16 @@
i.setAction(MediaStore.INTENT_ACTION_MEDIA_SEARCH);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- title = mCurrentAlbumName;
- query = mCurrentArtistNameForAlbum + " " + mCurrentAlbumName;
- i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistNameForAlbum);
- i.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, mCurrentAlbumName);
+ title = mCurrentTrackName;
+ if (MediaFile.UNKNOWN_STRING.equals(mCurrentArtistNameForAlbum)) {
+ query = mCurrentTrackName;
+ } else {
+ query = mCurrentArtistNameForAlbum + " " + mCurrentTrackName;
+ i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistNameForAlbum);
+ }
+ if (MediaFile.UNKNOWN_STRING.equals(mCurrentAlbumName)) {
+ i.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, mCurrentAlbumName);
+ }
i.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, "audio/*");
title = getString(R.string.mediasearch, title);
i.putExtra(SearchManager.QUERY, query);