📄 albumbrowseractivity.java
字号:
} 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 = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId)); MusicUtils.addToPlaylist(this, list, Integer.parseInt(uri.getLastPathSegment())); } } break; } } @Override protected void onListItemClick(ListView l, View v, int position, long id) { if (mHasHeader) { position --; } 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); } @Override public boolean onCreateOptionsMenu(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; } @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(GOTO_PLAYBACK).setVisible(MusicUtils.isMusicLoaded()); return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(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.imusic.playing"); 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); } private Cursor getAlbumCursor(String filterstring) { StringBuilder where = new StringBuilder(); where.append(MediaStore.Audio.Albums.ALBUM + " != ''"); // 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 + "||"); 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; if (mArtistId != null) { ret = MusicUtils.query(this, 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.Albums.EXTERNAL_CONTENT_URI, cols, whereclause, keywords, MediaStore.Audio.Albums.DEFAULT_SORT_ORDER); } return ret; } class AlbumListAdapter extends SimpleCursorAdapter { private final Drawable mNowPlayingOverlay; private final BitmapDrawable mDefaultAlbumIcon; private final int mAlbumIdx; private final int mArtistIdx; private final int mNumSongsIdx; private final int mAlbumArtIndex; private final Resources mResources; private final StringBuilder mStringBuilder = new StringBuilder(); private final String mUnknownAlbum; private final String mUnknownArtist; private final String mAlbumSongSeparator; private final Object[] mFormatArgs = new Object[1]; class ViewHolder { TextView line1;// TextView line2; TextView duration;// ImageView play_indicator; ImageView icon; } AlbumListAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to) { super(context, layout, cursor, from, to); mUnknownAlbum = context.getString(R.string.unknown_album_name); mUnknownArtist = context.getString(R.string.unknown_artist_name); mAlbumSongSeparator = context.getString(R.string.albumsongseparator); Resources r = getResources(); mNowPlayingOverlay = r.getDrawable(R.drawable.indicator_ic_mp_playing_list); Bitmap b = BitmapFactory.decodeResource(r, R.drawable.albumart_mp_unknown_list); mDefaultAlbumIcon = new BitmapDrawable(b); // no filter or dither, it's a lot faster and we can't tell the difference mDefaultAlbumIcon.setFilterBitmap(false); mDefaultAlbumIcon.setDither(false); mAlbumIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM); mArtistIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ARTIST); mNumSongsIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.NUMBER_OF_SONGS); mAlbumArtIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM_ART); mResources = context.getResources(); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View v = super.newView(context, cursor, parent); ViewHolder vh = new ViewHolder(); vh.line1 = (TextView) v.findViewById(R.id.line1);// vh.line2 = (TextView) v.findViewById(R.id.line2); vh.duration = (TextView) v.findViewById(R.id.duration);// 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 bindView(View view, Context context, Cursor cursor) { ViewHolder vh = (ViewHolder) view.getTag(); String name = cursor.getString(mAlbumIdx); String displayname = name; if (MediaFile.UNKNOWN_STRING.equals(name)) { displayname = mUnknownAlbum; } vh.line1.setText(displayname); // name = cursor.getString(mArtistIdx);// displayname = name;// if (MediaFile.UNKNOWN_STRING.equals(name)) {// displayname = mUnknownArtist;// }// StringBuilder builder = mStringBuilder;// builder.delete(0, builder.length());// builder.append(displayname);// builder.append(mAlbumSongSeparator);// // int numsongs = cursor.getInt(mNumSongsIdx);// 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));// }// 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(mAlbumArtIndex);// if (art == null || art.length() == 0) {// 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 public void changeCursor(Cursor cursor) { super.changeCursor(cursor); mAlbumCursor = cursor; } @Override public Cursor runQueryOnBackgroundThread(CharSequence constraint) { return getAlbumCursor(constraint.toString()); } } private Cursor mAlbumCursor; private String mArtistId; private boolean mHasHeader = false;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -