⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trackbrowseractivity.java

📁 Android平台上的media player, iPhone风格
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                    mTrackCursor.moveToPosition(to);                    int toidx = mTrackCursor.getInt(colidx);                    mTrackCursor.moveToPosition(from);//                    mTrackCursor.updateInt(colidx, toidx);                    for (int i = from - 1; i >= to; i--) {                        mTrackCursor.moveToPosition(i);//                        mTrackCursor.updateInt(colidx, i + 1);                    }//                    mTrackCursor.commitUpdates();                }            }        }    };        private TouchInterceptor.RemoveListener mRemoveListener =        new TouchInterceptor.RemoveListener() {        public void remove(int which) {            removePlaylistItem(which);        }    };    private void removePlaylistItem(int which) {        View v = mTrackList.getChildAt(which - mTrackList.getFirstVisiblePosition());        try {            if (MusicUtils.sService != null                    && which != MusicUtils.sService.getQueuePosition()) {                mDeletedOneRow = true;            }        } catch (RemoteException e) {            // Service died, so nothing playing.            mDeletedOneRow = true;        }        v.setVisibility(View.GONE);        mTrackList.invalidateViews();        mTrackCursor.moveToPosition(which);//        mTrackCursor.deleteRow();//        mTrackCursor.commitUpdates();        v.setVisibility(View.VISIBLE);        mTrackList.invalidateViews();    }        private BroadcastReceiver mTrackListListener = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            getListView().invalidateViews();        }    };    private BroadcastReceiver mNowPlayingListener = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            if (intent.getAction().equals(MediaPlaybackService.META_CHANGED)) {                getListView().invalidateViews();            } else if (intent.getAction().equals(MediaPlaybackService.QUEUE_CHANGED)) {                if (mDeletedOneRow) {                    // This is the notification for a single row that was                    // deleted previously, which is already reflected in                    // the UI.                    mDeletedOneRow = false;                    return;                }                mTrackCursor.close();                mTrackCursor = new NowPlayingCursor(MusicUtils.sService, mCursorCols);                if (mTrackCursor.getCount() == 0) {                    finish();                    return;                }                ((TrackListAdapter)getListAdapter()).changeCursor(mTrackCursor);                getListView().invalidateViews();            }        }    };        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);        if (mEditMode) {            menu.add(0, REMOVE, 0, R.string.remove_from_playlist);        }        menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);        menu.add(0, DELETE_ITEM, 0, R.string.delete_item);        AdapterContextMenuInfo mi = (AdapterContextMenuInfo) menuInfoIn;        mSelectedPosition =  mi.position;        mTrackCursor.moveToPosition(mSelectedPosition);        int id_idx = mTrackCursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID);        if (id_idx < 0 ) {            mSelectedId = mi.id;        } else {            mSelectedId = mTrackCursor.getInt(id_idx);        }        mCurrentTrackName = mTrackCursor.getString(mTrackCursor.getColumnIndex(MediaStore.Audio.Media.TITLE));        menu.setHeaderTitle(mCurrentTrackName);    }    @Override    public boolean onContextItemSelected(MenuItem item) {        switch (item.getItemId()) {            case PLAY_SELECTION: {                // play the track                int position = mSelectedPosition;                MusicUtils.playAll(this, mTrackCursor, position);                return true;            }            case QUEUE: {                int [] list = new int[] { (int) mSelectedId };                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 = new int[] { (int) mSelectedId };                int playlist = item.getIntent().getIntExtra("playlist", 0);                MusicUtils.addToPlaylist(this, list, playlist);                return true;            }            case USE_AS_RINGTONE:                // Set the system setting to make this the current ringtone                MusicUtils.setRingtone(this, mSelectedId);                return true;            case DELETE_ITEM: {                int [] list = new int[1];                list[0] = (int) mSelectedId;                Bundle b = new Bundle();                b.putString("description", mCurrentTrackName);                b.putIntArray("items", list);                Intent intent = new Intent();                intent.setClass(this, DeleteItems.class);                intent.putExtras(b);                startActivityForResult(intent, -1);                return true;            }                        case REMOVE:                removePlaylistItem(mSelectedPosition);                return true;        }        return super.onContextItemSelected(item);    }    // In order to use alt-up/down as a shortcut for moving the selected item    // in the list, we need to override dispatchKeyEvent, not onKeyDown.    // (onKeyDown never sees these events, since they are handled by the list)    @Override    public boolean dispatchKeyEvent(KeyEvent event) {        if (mPlaylist != null && event.getMetaState() != 0 /* && event.isDown() */) {            switch (event.getKeyCode()) {                case KeyEvent.KEYCODE_DPAD_UP:                    moveItem(true);                    return true;                case KeyEvent.KEYCODE_DPAD_DOWN:                    moveItem(false);                    return true;                case KeyEvent.KEYCODE_DEL:                    removeItem();                    return true;            }        }        return super.dispatchKeyEvent(event);    }    private void removeItem() {        int curcount = mTrackCursor.getCount();        int curpos = mTrackList.getSelectedItemPosition();        if (curcount == 0 || curpos < 0) {            return;        }                if ("nowplaying".equals(mPlaylist)) {            // remove track from queue            // Work around bug 902971. To get quick visual feedback            // of the deletion of the item, hide the selected view.            try {                if (curpos != MusicUtils.sService.getQueuePosition()) {                    mDeletedOneRow = true;                }            } catch (RemoteException ex) {            }            View v = mTrackList.getSelectedView();            v.setVisibility(View.GONE);            mTrackList.invalidateViews();            mTrackCursor.moveToPosition(curpos);//            mTrackCursor.deleteRow();//            mTrackCursor.commitUpdates();            v.setVisibility(View.VISIBLE);            mTrackList.invalidateViews();        } else {            // remove track from playlist            mTrackCursor.moveToPosition(curpos);//            mTrackCursor.deleteRow();//            mTrackCursor.commitUpdates();            curcount--;            if (curcount == 0) {                finish();            } else {                mTrackList.setSelection(curpos < curcount ? curpos : curcount);            }        }    }        private void moveItem(boolean up) {        int curcount = mTrackCursor.getCount();         int curpos = mTrackList.getSelectedItemPosition();        if ( (up && curpos < 1) || (!up  && curpos >= curcount - 1)) {            return;        }        if (mTrackCursor instanceof NowPlayingCursor) {            NowPlayingCursor c = (NowPlayingCursor) mTrackCursor;            c.moveItem(curpos, up ? curpos - 1 : curpos + 1);            ((TrackListAdapter)getListAdapter()).notifyDataSetChanged();            getListView().invalidateViews();            mDeletedOneRow = true;            if (up) {                mTrackList.setSelection(curpos - 1);            } else {                mTrackList.setSelection(curpos + 1);            }        } else {            int colidx = mTrackCursor.getColumnIndex(MediaStore.Audio.Playlists.Members.PLAY_ORDER);            mTrackCursor.moveToPosition(curpos);            int currentplayidx = mTrackCursor.getInt(colidx);            if (up) {//                    mTrackCursor.updateInt(colidx, currentplayidx - 1);                    mTrackCursor.moveToPrevious();            } else {//                    mTrackCursor.updateInt(colidx, currentplayidx + 1);                    mTrackCursor.moveToNext();            }//            mTrackCursor.updateInt(colidx, currentplayidx);//            mTrackCursor.commitUpdates();        }    }        @Override    protected void onListItemClick(ListView l, View v, int position, long id)    {        if (mTrackCursor.getCount() == 0) {            return;        }        MusicUtils.playAll(this, mTrackCursor, position);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        /* This activity is used for a number of different browsing modes, and the menu can         * be different for each of them:         * - all tracks, optionally restricted to an album, artist or playlist         * - the list of currently playing songs         */        super.onCreateOptionsMenu(menu);        if (mPlaylist == null) {            menu.add(0, PLAY_ALL, 0, R.string.play_all).setIcon(R.drawable.ic_menu_play_clip);        }        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)                .setVisible(MusicUtils.isMusicLoaded());        menu.add(0, SHUFFLE_ALL, 0, R.string.shuffle_all).setIcon(R.drawable.ic_menu_shuffle);        if (mPlaylist != null) {            menu.add(0, SAVE_AS_PLAYLIST, 0, R.string.save_as_playlist).setIcon(R.drawable.ic_menu_save);            if (mPlaylist.equals("nowplaying")) {                menu.add(0, CLEAR_PLAYLIST, 0, R.string.clear_playlist).setIcon(R.drawable.ic_menu_clear_playlist);            }        }        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        Intent intent;        Cursor cursor;        switch (item.getItemId()) {            case PLAY_ALL: {                MusicUtils.playAll(this, mTrackCursor);                return true;            }            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");                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                startActivity(intent);                return true;                            case SHUFFLE_ALL:                // Should 'shuffle all' shuffle ALL, or only the tracks shown?                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;                            case SAVE_AS_PLAYLIST:                intent = new Intent();                intent.setClass(this, CreatePlaylist.class);                startActivityForResult(intent, SAVE_AS_PLAYLIST);                return true;                            case CLEAR_PLAYLIST:                // We only clear the current playlist                MusicUtils.clearQueue();                return true;        }        return super.onOptionsItemSelected(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 = new int[] { (int) mSelectedId };                        MusicUtils.addToPlaylist(this, list, Integer.valueOf(uri.getLastPathSegment()));                    }                }                break;            case SAVE_AS_PLAYLIST:                if (resultCode == RESULT_OK) {                    Uri uri = Uri.parse(intent.getAction());                    if (uri != null) {                        int [] list = MusicUtils.getSongListForCursor(mTrackCursor);                        int plid = Integer.parseInt(uri.getLastPathSegment());                        MusicUtils.addToPlaylist(this, list, plid);                    }                }                break;        }    }    private Cursor getTrackCursor(String filterstring) {        Cursor ret = null;        mSortOrder = MediaStore.Audio.Media.TITLE_KEY;        StringBuilder where = new StringBuilder();        where.append(MediaStore.Audio.Media.TITLE + " != ''");                // 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 + "||");                where.append(MediaStore.Audio.Media.TITLE_KEY + " LIKE ?");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -