AlbumBrowserActivitypublic class AlbumBrowserActivity extends android.app.ListActivity implements View.OnCreateContextMenuListener, MusicUtils.Defs
Fields Summary |
---|
private String | mCurrentAlbumId | private String | mCurrentAlbumName | private String | mCurrentArtistNameForAlbum | private AlbumListAdapter | mAdapter | private boolean | mAdapterSent | private static final int | SEARCH | private android.content.BroadcastReceiver | mTrackListListener | private android.content.BroadcastReceiver | mScanListener | private android.os.Handler | mReScanHandler | private android.database.Cursor | mAlbumCursor | private String | mArtistId |
Constructors Summary |
---|
public AlbumBrowserActivity()
|
Methods Summary |
---|
void | doSearch()
CharSequence title = null;
String query = null;
Intent i = new Intent();
i.setAction(MediaStore.INTENT_ACTION_MEDIA_SEARCH);
title = mCurrentAlbumName;
query = mCurrentArtistNameForAlbum + " " + mCurrentAlbumName;
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);
title = getString(R.string.mediasearch, title);
i.putExtra(SearchManager.QUERY, query);
startActivity(Intent.createChooser(i, title));
| private android.database.Cursor | getAlbumCursor(android.content.AsyncQueryHandler async, java.lang.String filter)
StringBuilder where = new StringBuilder();
where.append(MediaStore.Audio.Albums.ALBUM + " != ''");
// Add in the filtering constraints
String [] keywords = null;
if (filter != null) {
String [] searchWords = filter.split(" ");
keywords = new String[searchWords.length];
Collator col = Collator.getInstance();
col.setStrength(Collator.PRIMARY);
for (int i = 0; i < searchWords.length; i++) {
keywords[i] = '%" + MediaStore.Audio.keyFor(searchWords[i]) + '%";
}
for (int i = 0; i < searchWords.length; i++) {
where.append(" AND ");
where.append(MediaStore.Audio.Media.ARTIST_KEY + "||");
where.append(MediaStore.Audio.Media.ALBUM_KEY + " LIKE ?");
}
}
String whereclause = where.toString();
String[] cols = new String[] {
MediaStore.Audio.Albums._ID,
MediaStore.Audio.Albums.ALBUM,
MediaStore.Audio.Albums.ALBUM_KEY,
MediaStore.Audio.Albums.ARTIST,
MediaStore.Audio.Albums.NUMBER_OF_SONGS,
MediaStore.Audio.Albums.ALBUM_ART
};
Cursor ret = null;
if (mArtistId != null) {
if (async != null) {
async.startQuery(0, null,
MediaStore.Audio.Artists.Albums.getContentUri("external",
Long.valueOf(mArtistId)),
cols, whereclause, keywords, MediaStore.Audio.Albums.DEFAULT_SORT_ORDER);
} else {
ret = MusicUtils.query(this,
MediaStore.Audio.Artists.Albums.getContentUri("external",
Long.valueOf(mArtistId)),
cols, whereclause, keywords, MediaStore.Audio.Albums.DEFAULT_SORT_ORDER);
}
} else {
if (async != null) {
async.startQuery(0, null,
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
cols, whereclause, keywords, MediaStore.Audio.Albums.DEFAULT_SORT_ORDER);
} else {
ret = MusicUtils.query(this, MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
cols, whereclause, keywords, MediaStore.Audio.Albums.DEFAULT_SORT_ORDER);
}
}
return ret;
| public void | init(android.database.Cursor c)
mAdapter.changeCursor(c); // also sets mAlbumCursor
if (mAlbumCursor == null) {
MusicUtils.displayDatabaseError(this);
closeContextMenu();
mReScanHandler.sendEmptyMessageDelayed(0, 1000);
return;
}
MusicUtils.hideDatabaseError(this);
setTitle();
| protected void | onActivityResult(int requestCode, int resultCode, android.content.Intent intent)
switch (requestCode) {
case SCAN_DONE:
if (resultCode == RESULT_CANCELED) {
finish();
} else {
getAlbumCursor(mAdapter.getQueryHandler(), null);
}
break;
case NEW_PLAYLIST:
if (resultCode == RESULT_OK) {
Uri uri = intent.getData();
if (uri != null) {
int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
MusicUtils.addToPlaylist(this, list, Integer.parseInt(uri.getLastPathSegment()));
}
}
break;
}
| public boolean | onContextItemSelected(android.view.MenuItem item)
switch (item.getItemId()) {
case PLAY_SELECTION: {
// play the selected album
int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
MusicUtils.playAll(this, list, 0);
return true;
}
case QUEUE: {
int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
MusicUtils.addToCurrentPlaylist(this, list);
return true;
}
case NEW_PLAYLIST: {
Intent intent = new Intent();
intent.setClass(this, CreatePlaylist.class);
startActivityForResult(intent, NEW_PLAYLIST);
return true;
}
case PLAYLIST_SELECTED: {
int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
int playlist = item.getIntent().getIntExtra("playlist", 0);
MusicUtils.addToPlaylist(this, list, playlist);
return true;
}
case DELETE_ITEM: {
int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
String f = getString(R.string.delete_album_desc);
String desc = String.format(f, mCurrentAlbumName);
Bundle b = new Bundle();
b.putString("description", desc);
b.putIntArray("items", list);
Intent intent = new Intent();
intent.setClass(this, DeleteItems.class);
intent.putExtras(b);
startActivityForResult(intent, -1);
return true;
}
case SEARCH:
doSearch();
return true;
}
return super.onContextItemSelected(item);
| public void | onCreate(android.os.Bundle icicle)Called when the activity is first created.
if (icicle != null) {
mCurrentAlbumId = icicle.getString("selectedalbum");
mArtistId = icicle.getString("artist");
} else {
mArtistId = getIntent().getStringExtra("artist");
}
super.onCreate(icicle);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
MusicUtils.bindToService(this);
IntentFilter f = new IntentFilter();
f.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
f.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
f.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
f.addDataScheme("file");
registerReceiver(mScanListener, f);
setContentView(R.layout.media_picker_activity);
ListView lv = getListView();
lv.setFastScrollEnabled(true);
lv.setOnCreateContextMenuListener(this);
lv.setTextFilterEnabled(true);
mAdapter = (AlbumListAdapter) getLastNonConfigurationInstance();
if (mAdapter == null) {
//Log.i("@@@", "starting query");
mAdapter = new AlbumListAdapter(
getApplication(),
this,
R.layout.track_list_item,
mAlbumCursor,
new String[] {},
new int[] {});
setListAdapter(mAdapter);
setTitle(R.string.working_albums);
getAlbumCursor(mAdapter.getQueryHandler(), null);
} else {
mAdapter.setActivity(this);
setListAdapter(mAdapter);
mAlbumCursor = mAdapter.getCursor();
if (mAlbumCursor != null) {
init(mAlbumCursor);
} else {
getAlbumCursor(mAdapter.getQueryHandler(), null);
}
}
| public void | onCreateContextMenu(android.view.ContextMenu menu, android.view.View view, android.view.ContextMenu.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);
mCurrentAlbumId = mAlbumCursor.getString(mAlbumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums._ID));
mCurrentAlbumName = mAlbumCursor.getString(mAlbumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM));
mCurrentArtistNameForAlbum = mAlbumCursor.getString(
mAlbumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ARTIST));
menu.setHeaderTitle(mCurrentAlbumName);
| public boolean | onCreateOptionsMenu(android.view.Menu menu)
super.onCreateOptionsMenu(menu);
menu.add(0, GOTO_START, 0, R.string.goto_start).setIcon(R.drawable.ic_menu_music_library);
menu.add(0, GOTO_PLAYBACK, 0, R.string.goto_playback).setIcon(R.drawable.ic_menu_playback);
menu.add(0, SHUFFLE_ALL, 0, R.string.shuffle_all).setIcon(R.drawable.ic_menu_shuffle);
return true;
| public void | onDestroy()
MusicUtils.unbindFromService(this);
if (!mAdapterSent) {
Cursor c = mAdapter.getCursor();
if (c != null) {
c.close();
}
}
unregisterReceiver(mScanListener);
super.onDestroy();
| protected void | onListItemClick(android.widget.ListView l, android.view.View v, int position, long id)
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/track");
intent.putExtra("album", Long.valueOf(id).toString());
intent.putExtra("artist", mArtistId);
startActivity(intent);
| public boolean | onOptionsItemSelected(android.view.MenuItem item)
Intent intent;
Cursor cursor;
switch (item.getItemId()) {
case GOTO_START:
intent = new Intent();
intent.setClass(this, MusicBrowserActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
case GOTO_PLAYBACK:
intent = new Intent("com.android.music.PLAYBACK_VIEWER");
startActivity(intent);
return true;
case SHUFFLE_ALL:
cursor = MusicUtils.query(this, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String [] { MediaStore.Audio.Media._ID},
MediaStore.Audio.Media.IS_MUSIC + "=1", null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
if (cursor != null) {
MusicUtils.shuffleAll(this, cursor);
cursor.close();
}
return true;
}
return super.onOptionsItemSelected(item);
| public void | onPause()
unregisterReceiver(mTrackListListener);
mReScanHandler.removeCallbacksAndMessages(null);
super.onPause();
| public boolean | onPrepareOptionsMenu(android.view.Menu menu)
menu.findItem(GOTO_PLAYBACK).setVisible(MusicUtils.isMusicLoaded());
return super.onPrepareOptionsMenu(menu);
| public void | onResume()
super.onResume();
IntentFilter f = new IntentFilter();
f.addAction(MediaPlaybackService.META_CHANGED);
f.addAction(MediaPlaybackService.QUEUE_CHANGED);
registerReceiver(mTrackListListener, f);
mTrackListListener.onReceive(null, null);
MusicUtils.setSpinnerState(this);
| public java.lang.Object | onRetainNonConfigurationInstance()
mAdapterSent = true;
return mAdapter;
| public void | onSaveInstanceState(android.os.Bundle outcicle)
// need to store the selected item so we don't lose it in case
// of an orientation switch. Otherwise we could lose it while
// in the middle of specifying a playlist to add the item to.
outcicle.putString("selectedalbum", mCurrentAlbumId);
outcicle.putString("artist", mArtistId);
super.onSaveInstanceState(outcicle);
| private void | setTitle()
CharSequence fancyName = "";
if (mAlbumCursor != null && mAlbumCursor.getCount() > 0) {
mAlbumCursor.moveToFirst();
fancyName = mAlbumCursor.getString(3);
if (fancyName == null || fancyName.equals(MediaFile.UNKNOWN_STRING))
fancyName = getText(R.string.unknown_artist_name);
}
if (mArtistId != null && fancyName != null)
setTitle(fancyName);
else
setTitle(R.string.albums_title);
|
|