📄 artistalbumbrowseractivity.java
字号:
Intent intent = new Intent(); intent.setClass(this, CreatePlaylist.class); startActivityForResult(intent, NEW_PLAYLIST); return true; } case PLAYLIST_SELECTED: { int [] list = mCurrentArtistId != null ? MusicUtils.getSongListForArtist(this, Integer.parseInt(mCurrentArtistId)) : 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; String desc; if (mCurrentArtistId != null) { list = MusicUtils.getSongListForArtist(this, Integer.parseInt(mCurrentArtistId)); String f = getString(R.string.delete_artist_desc); desc = String.format(f, mCurrentArtistName); } else { list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId)); String f = getString(R.string.delete_album_desc); 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; } } return super.onContextItemSelected(item); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { switch (requestCode) { case SCAN_DONE: if (resultCode == RESULT_CANCELED) { finish(); } else { init(); } break; case NEW_PLAYLIST: if (resultCode == RESULT_OK) { Uri uri = Uri.parse(intent.getAction()); if (uri != null) { int [] list = null; if (mCurrentArtistId != null) { list = MusicUtils.getSongListForArtist(this, Integer.parseInt(mCurrentArtistId)); } else if (mCurrentAlbumId != null) { list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId)); } MusicUtils.addToPlaylist(this, list, Integer.parseInt(uri.getLastPathSegment())); } } break; } } private Cursor getArtistCursor(String filterstring) { StringBuilder where = new StringBuilder(); where.append(MediaStore.Audio.Artists.ARTIST + " != ''"); // Add in the filtering constraints String [] keywords = null; if (filterstring != null) { String [] searchWords = filterstring.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 + " LIKE ?"); } } String whereclause = where.toString(); String[] cols = new String[] { MediaStore.Audio.Artists._ID, MediaStore.Audio.Artists.ARTIST, MediaStore.Audio.Artists.NUMBER_OF_ALBUMS, MediaStore.Audio.Artists.NUMBER_OF_TRACKS }; Cursor ret; ret = MusicUtils.query(this, MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, cols, whereclause , keywords, MediaStore.Audio.Artists.ARTIST_KEY); return ret; } class ArtistAlbumListAdapter extends SimpleCursorTreeAdapter { private final Drawable mNowPlayingOverlay; private final BitmapDrawable mDefaultAlbumIcon; private final int mGroupArtistIdIdx; private final int mGroupArtistIdx; private final int mGroupAlbumIdx; private final int mGroupSongIdx; private final Resources mResources; private final String mAlbumSongSeparator; private final String mUnknownAlbum; private final String mUnknownArtist; private final StringBuilder mBuffer = new StringBuilder(); private final Object[] mFormatArgs = new Object[1]; class ViewHolder { TextView line1; TextView line2;// ImageView play_indicator; ImageView icon; } ArtistAlbumListAdapter(Context context, Cursor cursor, int glayout, String[] gfrom, int[] gto, int clayout, String[] cfrom, int[] cto) { super(context, cursor, glayout, gfrom, gto, clayout, cfrom, cto); Resources r = getResources(); mNowPlayingOverlay = r.getDrawable(R.drawable.indicator_ic_mp_playing_list); mDefaultAlbumIcon = (BitmapDrawable) r.getDrawable(R.drawable.albumart_mp_unknown_list); // no filter or dither, it's a lot faster and we can't tell the difference mDefaultAlbumIcon.setFilterBitmap(false); mDefaultAlbumIcon.setDither(false); mGroupArtistIdIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID); mGroupArtistIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST); mGroupAlbumIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.NUMBER_OF_ALBUMS); mGroupSongIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.NUMBER_OF_TRACKS); mResources = context.getResources(); mAlbumSongSeparator = context.getString(R.string.albumsongseparator); mUnknownAlbum = context.getString(R.string.unknown_album_name); mUnknownArtist = context.getString(R.string.unknown_artist_name); } @Override public View newGroupView(Context context, Cursor cursor, boolean isExpanded, ViewGroup parent) { View v = super.newGroupView(context, cursor, isExpanded, parent); ImageView iv = (ImageView) v.findViewById(R.id.icon); ViewGroup.LayoutParams p = iv.getLayoutParams(); p.width = ViewGroup.LayoutParams.WRAP_CONTENT; p.height = ViewGroup.LayoutParams.WRAP_CONTENT; ViewHolder vh = new ViewHolder(); vh.line1 = (TextView) v.findViewById(R.id.line1); vh.line2 = (TextView) v.findViewById(R.id.line2);// vh.play_indicator = (ImageView) v.findViewById(R.id.play_indicator); vh.icon = (ImageView) v.findViewById(R.id.icon); vh.icon.setPadding(1, 1, 1, 1); v.setTag(vh); return v; } @Override public View newChildView(Context context, Cursor cursor, boolean isLastChild, ViewGroup parent) { View v = super.newChildView(context, cursor, isLastChild, parent); ViewHolder vh = new ViewHolder(); vh.line1 = (TextView) v.findViewById(R.id.line1); vh.line2 = (TextView) v.findViewById(R.id.line2);// vh.play_indicator = (ImageView) v.findViewById(R.id.play_indicator); vh.icon = (ImageView) v.findViewById(R.id.icon); vh.icon.setBackgroundDrawable(mDefaultAlbumIcon); vh.icon.setPadding(1, 1, 1, 1); v.setTag(vh); return v; } @Override public void bindGroupView(View view, Context context, Cursor cursor, boolean isexpanded) { ViewHolder vh = (ViewHolder) view.getTag(); String artist = cursor.getString(mGroupArtistIdx); String displayartist = artist; boolean unknown = MediaFile.UNKNOWN_STRING.equals(artist); if (unknown) { displayartist = mUnknownArtist; } vh.line1.setText(displayartist); int numalbums = cursor.getInt(mGroupAlbumIdx); int numsongs = cursor.getInt(mGroupSongIdx); String songs_albums = MusicUtils.makeAlbumsSongsLabel(context, numalbums, numsongs, unknown); vh.line2.setText(songs_albums); // int currentartistid = MusicUtils.getCurrentArtistId();// int artistid = cursor.getInt(mGroupArtistIdIdx);// if (currentartistid == artistid && !isexpanded) {// vh.play_indicator.setImageDrawable(mNowPlayingOverlay);// } else {// vh.play_indicator.setImageDrawable(null);// } } @Override public void bindChildView(View view, Context context, Cursor cursor, boolean islast) { ViewHolder vh = (ViewHolder) view.getTag(); String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM)); String displayname = name; if (name.equals(MediaFile.UNKNOWN_STRING)) { displayname = mUnknownAlbum; } vh.line1.setText(displayname); int numsongs = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.NUMBER_OF_SONGS)); int first = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.FIRST_YEAR)); int last = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.LAST_YEAR)); if (first == 0) { first = last; } final StringBuilder builder = mBuffer; builder.delete(0, builder.length()); if (numsongs == 1) { builder.append(context.getString(R.string.onesong)); } else { final Object[] args = mFormatArgs; args[0] = numsongs; builder.append(mResources.getQuantityString(R.plurals.Nsongs, numsongs, args)); } if (first != 0 && last != 0) { builder.append(mAlbumSongSeparator); builder.append(first); if (first != last) { builder.append('-'); builder.append(last); } else { } } vh.line2.setText(builder.toString()); // ImageView iv = vh.icon;// // We don't actually need the path to the thumbnail file,// // we just use it to see if there is album art or not// String art = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));// if (art == null || art.length() == 0) {// iv.setBackgroundDrawable(mDefaultAlbumIcon);// iv.setImageDrawable(null);// } else {// int artIndex = cursor.getInt(0);// Drawable d = MusicUtils.getCachedArtwork(context, artIndex, mDefaultAlbumIcon);// iv.setImageDrawable(d);// }//// int currentalbumid = MusicUtils.getCurrentAlbumId();// int aid = cursor.getInt(0);// iv = vh.play_indicator;// if (currentalbumid == aid) {// iv.setImageDrawable(mNowPlayingOverlay);// } else {// iv.setImageDrawable(null);// } } @Override protected Cursor getChildrenCursor(Cursor groupCursor) { int id = groupCursor.getInt(groupCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID)); String[] cols = new String[] { MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM, MediaStore.Audio.Albums.ARTIST, MediaStore.Audio.Albums.NUMBER_OF_SONGS, MediaStore.Audio.Albums.FIRST_YEAR, MediaStore.Audio.Albums.LAST_YEAR, MediaStore.Audio.Albums.ALBUM_ART }; return MusicUtils.query(ArtistAlbumBrowserActivity.this, MediaStore.Audio.Artists.Albums.getContentUri("external", id), cols, null, null, MediaStore.Audio.Albums.DEFAULT_SORT_ORDER); } @Override public void changeCursor(Cursor cursor) { super.changeCursor(cursor); mArtistCursor = cursor; } @Override public Cursor runQueryOnBackgroundThread(CharSequence constraint) { return getArtistCursor(constraint.toString()); } } private Cursor mArtistCursor;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -