ArtistAlbumBrowserActivity.java revision d99bc1e9481c68514a4e5eea4c3f429843b701b4
1792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project/* 2792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * 4792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * you may not use this file except in compliance with the License. 6792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * You may obtain a copy of the License at 7792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * 8792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * 10792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * See the License for the specific language governing permissions and 14792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * limitations under the License. 15792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 16792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 17792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpackage com.android.music; 18792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 19792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.QueryBrowserActivity.QueryListAdapter.QueryHandler; 20792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 21792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.ExpandableListActivity; 22792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.SearchManager; 23792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.AsyncQueryHandler; 24792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.BroadcastReceiver; 25792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.ContentResolver; 26792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.Context; 27792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.Intent; 28792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.IntentFilter; 29792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.res.Resources; 30792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.database.Cursor; 31792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.database.CursorWrapper; 32792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.graphics.drawable.BitmapDrawable; 33792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.graphics.drawable.Drawable; 34792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.media.AudioManager; 35792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.media.MediaFile; 36792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.net.Uri; 37792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.os.Bundle; 38792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.os.Handler; 39792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.os.Message; 40792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.provider.MediaStore; 41792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.util.Log; 42792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.ContextMenu; 43792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.Menu; 44792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.MenuItem; 45792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.SubMenu; 46792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.View; 47792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.ViewGroup; 48792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.Window; 49792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.ContextMenu.ContextMenuInfo; 50792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.CursorAdapter; 51792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.CursorTreeAdapter; 52792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.ExpandableListAdapter; 53792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.ExpandableListView; 54792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.ImageView; 55792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.SectionIndexer; 56792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.SimpleCursorTreeAdapter; 57792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.TextView; 58792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.ExpandableListView.ExpandableListContextMenuInfo; 59792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 60792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport java.text.Collator; 61792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 62792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 63792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpublic class ArtistAlbumBrowserActivity extends ExpandableListActivity 64792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project implements View.OnCreateContextMenuListener, MusicUtils.Defs 65792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project{ 66792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private String mCurrentArtistId; 67792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private String mCurrentArtistName; 68792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private String mCurrentAlbumId; 69792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private String mCurrentAlbumName; 70792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private String mCurrentArtistNameForAlbum; 719882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen boolean mIsUnknownArtist; 729882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen boolean mIsUnknownAlbum; 73792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private ArtistAlbumListAdapter mAdapter; 74792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private boolean mAdapterSent; 75792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final static int SEARCH = CHILD_MENU_BASE; 76792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 77792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public ArtistAlbumBrowserActivity() 78792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project { 79792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 80792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 81792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project /** Called when the activity is first created. */ 82792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 83792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onCreate(Bundle icicle) { 84792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onCreate(icicle); 85792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 86792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setVolumeControlStream(AudioManager.STREAM_MUSIC); 87792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (icicle != null) { 88792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentAlbumId = icicle.getString("selectedalbum"); 89792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentAlbumName = icicle.getString("selectedalbumname"); 90792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistId = icicle.getString("selectedartist"); 91792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistName = icicle.getString("selectedartistname"); 92792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 93792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.bindToService(this); 94792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 95792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project IntentFilter f = new IntentFilter(); 96792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project f.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED); 97792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project f.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); 98792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project f.addAction(Intent.ACTION_MEDIA_UNMOUNTED); 99792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project f.addDataScheme("file"); 100792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project registerReceiver(mScanListener, f); 101792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 102792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setContentView(R.layout.media_picker_activity_expanding); 103792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ExpandableListView lv = getExpandableListView(); 104792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project lv.setFastScrollEnabled(true); 105792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project lv.setOnCreateContextMenuListener(this); 106792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project lv.setTextFilterEnabled(true); 107792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 108792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mAdapter = (ArtistAlbumListAdapter) getLastNonConfigurationInstance(); 109792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mAdapter == null) { 110792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project //Log.i("@@@", "starting query"); 111792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mAdapter = new ArtistAlbumListAdapter( 112792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project getApplication(), 113792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project this, 114792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project null, // cursor 115792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project R.layout.track_list_item_group, 116792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String[] {}, 117792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new int[] {}, 118792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project R.layout.track_list_item_child, 119792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String[] {}, 120792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new int[] {}); 121792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setListAdapter(mAdapter); 122792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setTitle(R.string.working_artists); 123792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project getArtistCursor(mAdapter.getQueryHandler(), null); 124792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 125792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mAdapter.setActivity(this); 126792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setListAdapter(mAdapter); 127792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mArtistCursor = mAdapter.getCursor(); 128792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mArtistCursor != null) { 129792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project init(mArtistCursor); 130792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 131792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project getArtistCursor(mAdapter.getQueryHandler(), null); 132792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 133792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 134792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 135792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 136792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 137792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public Object onRetainNonConfigurationInstance() { 138792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mAdapterSent = true; 139792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return mAdapter; 140792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 141792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 142792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 143792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onSaveInstanceState(Bundle outcicle) { 144792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // need to store the selected item so we don't lose it in case 145792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // of an orientation switch. Otherwise we could lose it while 146792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // in the middle of specifying a playlist to add the item to. 147792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project outcicle.putString("selectedalbum", mCurrentAlbumId); 148792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project outcicle.putString("selectedalbumname", mCurrentAlbumName); 149792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project outcicle.putString("selectedartist", mCurrentArtistId); 150792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project outcicle.putString("selectedartistname", mCurrentArtistName); 151792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onSaveInstanceState(outcicle); 152792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 153792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 154792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 155792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onDestroy() { 156792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.unbindFromService(this); 1570e17578179270916b49a7b7c3bc5b7b106dcd22cMarco Nelissen // If we have an adapter and didn't send it off to another activity yet, we should 1580e17578179270916b49a7b7c3bc5b7b106dcd22cMarco Nelissen // close its cursor, which we do by assigning a null cursor to it. Doing this 1590e17578179270916b49a7b7c3bc5b7b106dcd22cMarco Nelissen // instead of closing the cursor directly keeps the framework from accessing 1600e17578179270916b49a7b7c3bc5b7b106dcd22cMarco Nelissen // the closed cursor later. 1618e732ffd92d538aaa9376b560b0ff2fc5ac78c43Marco Nelissen if (!mAdapterSent && mAdapter != null) { 1620e17578179270916b49a7b7c3bc5b7b106dcd22cMarco Nelissen mAdapter.changeCursor(null); 163792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 1640164ebfdcf374bc2b65e7c86d02b597059c25e44Marco Nelissen // Because we pass the adapter to the next activity, we need to make 1650164ebfdcf374bc2b65e7c86d02b597059c25e44Marco Nelissen // sure it doesn't keep a reference to this activity. We can do this 1660164ebfdcf374bc2b65e7c86d02b597059c25e44Marco Nelissen // by clearing its DatasetObservers, which setListAdapter(null) does. 1670164ebfdcf374bc2b65e7c86d02b597059c25e44Marco Nelissen setListAdapter(null); 1680164ebfdcf374bc2b65e7c86d02b597059c25e44Marco Nelissen mAdapter = null; 169792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project unregisterReceiver(mScanListener); 1709882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen setListAdapter(null); 171792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onDestroy(); 172792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 173792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 174792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 175792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onResume() { 176792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onResume(); 177792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project IntentFilter f = new IntentFilter(); 178792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project f.addAction(MediaPlaybackService.META_CHANGED); 179792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project f.addAction(MediaPlaybackService.QUEUE_CHANGED); 180792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project registerReceiver(mTrackListListener, f); 181792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mTrackListListener.onReceive(null, null); 182792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 183792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.setSpinnerState(this); 184792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 185792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 186792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private BroadcastReceiver mTrackListListener = new BroadcastReceiver() { 187792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 188792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onReceive(Context context, Intent intent) { 189792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project getExpandableListView().invalidateViews(); 190792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 191792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 192792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private BroadcastReceiver mScanListener = new BroadcastReceiver() { 193792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 194792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onReceive(Context context, Intent intent) { 195792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.setSpinnerState(ArtistAlbumBrowserActivity.this); 196792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mReScanHandler.sendEmptyMessage(0); 197792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (intent.getAction().equals(Intent.ACTION_MEDIA_UNMOUNTED)) { 198792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.clearAlbumArtCache(); 199792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 200792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 201792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 202792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 203792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private Handler mReScanHandler = new Handler() { 204792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 205792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void handleMessage(Message msg) { 20642bcc218ce4c330cc609326d168e288f3559c64fMarco Nelissen if (mAdapter != null) { 20742bcc218ce4c330cc609326d168e288f3559c64fMarco Nelissen getArtistCursor(mAdapter.getQueryHandler(), null); 20842bcc218ce4c330cc609326d168e288f3559c64fMarco Nelissen } 209792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 210792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 211792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 212792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 213792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onPause() { 214792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project unregisterReceiver(mTrackListListener); 215792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mReScanHandler.removeCallbacksAndMessages(null); 216792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onPause(); 217792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 218792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 219792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void init(Cursor c) { 220792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 22142bcc218ce4c330cc609326d168e288f3559c64fMarco Nelissen if (mAdapter == null) { 22242bcc218ce4c330cc609326d168e288f3559c64fMarco Nelissen return; 22342bcc218ce4c330cc609326d168e288f3559c64fMarco Nelissen } 224792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mAdapter.changeCursor(c); // also sets mArtistCursor 225792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 226792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mArtistCursor == null) { 227792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.displayDatabaseError(this); 228792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project closeContextMenu(); 229792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mReScanHandler.sendEmptyMessageDelayed(0, 1000); 230792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return; 231792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 232792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 233792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.hideDatabaseError(this); 234792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setTitle(); 235792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 236792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 237792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private void setTitle() { 238792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setTitle(R.string.artists_title); 239792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 240792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 241792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 242792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 243792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 244792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentAlbumId = Long.valueOf(id).toString(); 245792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 246792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Intent intent = new Intent(Intent.ACTION_PICK); 247792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/track"); 248792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.putExtra("album", mCurrentAlbumId); 249792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor c = (Cursor) getExpandableListAdapter().getChild(groupPosition, childPosition); 250792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String album = c.getString(c.getColumnIndex(MediaStore.Audio.Albums.ALBUM)); 2516a9c41ccabded4f0d25288ad98788a1994824bb7The Android Open Source Project if (album == null || album.equals(MediaFile.UNKNOWN_STRING)) { 252792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // unknown album, so we should include the artist ID to limit the songs to songs only by that artist 253792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mArtistCursor.moveToPosition(groupPosition); 254792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistId = mArtistCursor.getString(mArtistCursor.getColumnIndex(MediaStore.Audio.Artists._ID)); 255792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.putExtra("artist", mCurrentArtistId); 256792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 257792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project startActivity(intent); 258792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 259792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 260792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 261792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 262792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public boolean onCreateOptionsMenu(Menu menu) { 263792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onCreateOptionsMenu(menu); 264792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project menu.add(0, GOTO_START, 0, R.string.goto_start).setIcon(R.drawable.ic_menu_music_library); 265792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project menu.add(0, GOTO_PLAYBACK, 0, R.string.goto_playback).setIcon(R.drawable.ic_menu_playback); 266792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project menu.add(0, SHUFFLE_ALL, 0, R.string.shuffle_all).setIcon(R.drawable.ic_menu_shuffle); 267792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 268792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 269792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 270792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 271792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public boolean onPrepareOptionsMenu(Menu menu) { 272792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project menu.findItem(GOTO_PLAYBACK).setVisible(MusicUtils.isMusicLoaded()); 273792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return super.onPrepareOptionsMenu(menu); 274792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 275792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 276792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 277792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 278792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Intent intent; 279792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor cursor; 280792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project switch (item.getItemId()) { 281792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case GOTO_START: 282792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent = new Intent(); 283792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.setClass(this, MusicBrowserActivity.class); 284792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 285792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project startActivity(intent); 286792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 287792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 288792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case GOTO_PLAYBACK: 289792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent = new Intent("com.android.music.PLAYBACK_VIEWER"); 290792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project startActivity(intent); 291792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 292792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 293792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case SHUFFLE_ALL: 294792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project cursor = MusicUtils.query(this, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 295792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String [] { MediaStore.Audio.Media._ID}, 296792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Media.IS_MUSIC + "=1", null, 297792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 298792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (cursor != null) { 299792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.shuffleAll(this, cursor); 300792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project cursor.close(); 301792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 302792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 303792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 304792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return super.onOptionsItemSelected(item); 305792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 306792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 307792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 308792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfoIn) { 309792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project menu.add(0, PLAY_SELECTION, 0, R.string.play_selection); 310792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project SubMenu sub = menu.addSubMenu(0, ADD_TO_PLAYLIST, 0, R.string.add_to_playlist); 311792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.makePlaylistMenu(this, sub); 312792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project menu.add(0, DELETE_ITEM, 0, R.string.delete_item); 313792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 314792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ExpandableListContextMenuInfo mi = (ExpandableListContextMenuInfo) menuInfoIn; 315792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 316792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int itemtype = ExpandableListView.getPackedPositionType(mi.packedPosition); 317792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int gpos = ExpandableListView.getPackedPositionGroup(mi.packedPosition); 318792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int cpos = ExpandableListView.getPackedPositionChild(mi.packedPosition); 319792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (itemtype == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { 320792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (gpos == -1) { 321792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // this shouldn't happen 322792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Log.d("Artist/Album", "no group"); 323792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return; 324792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 325792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project gpos = gpos - getExpandableListView().getHeaderViewsCount(); 326792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mArtistCursor.moveToPosition(gpos); 327792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistId = mArtistCursor.getString(mArtistCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID)); 328792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistName = mArtistCursor.getString(mArtistCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST)); 329792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentAlbumId = null; 3309882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen mIsUnknownArtist = mCurrentArtistName == null || 3319882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen mCurrentArtistName.equals(MediaFile.UNKNOWN_STRING); 3329882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen mIsUnknownAlbum = true; 3339882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen if (mIsUnknownArtist) { 334c8aa837a48287ad94ee0dcacb525b420a908a06dEric Fischer menu.setHeaderTitle(getString(R.string.unknown_artist_name)); 335c8aa837a48287ad94ee0dcacb525b420a908a06dEric Fischer } else { 336c8aa837a48287ad94ee0dcacb525b420a908a06dEric Fischer menu.setHeaderTitle(mCurrentArtistName); 3379882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen menu.add(0, SEARCH, 0, R.string.search_title); 338c8aa837a48287ad94ee0dcacb525b420a908a06dEric Fischer } 339792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return; 340792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else if (itemtype == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 341792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (cpos == -1) { 342792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // this shouldn't happen 343792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Log.d("Artist/Album", "no child"); 344792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return; 345792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 346792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor c = (Cursor) getExpandableListAdapter().getChild(gpos, cpos); 347792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project c.moveToPosition(cpos); 348792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistId = null; 349792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentAlbumId = Long.valueOf(mi.id).toString(); 350792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentAlbumName = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM)); 351792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project gpos = gpos - getExpandableListView().getHeaderViewsCount(); 352792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mArtistCursor.moveToPosition(gpos); 353792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistNameForAlbum = mArtistCursor.getString( 354792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mArtistCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST)); 3559882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen mIsUnknownArtist = mCurrentArtistNameForAlbum == null || 3569882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen mCurrentArtistNameForAlbum.equals(MediaFile.UNKNOWN_STRING); 3579882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen mIsUnknownAlbum = mCurrentAlbumName == null || 3589882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen mCurrentAlbumName.equals(MediaFile.UNKNOWN_STRING); 3599882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen if (mIsUnknownAlbum) { 360c8aa837a48287ad94ee0dcacb525b420a908a06dEric Fischer menu.setHeaderTitle(getString(R.string.unknown_album_name)); 361c8aa837a48287ad94ee0dcacb525b420a908a06dEric Fischer } else { 362c8aa837a48287ad94ee0dcacb525b420a908a06dEric Fischer menu.setHeaderTitle(mCurrentAlbumName); 363c8aa837a48287ad94ee0dcacb525b420a908a06dEric Fischer } 3649882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen if (!mIsUnknownAlbum || !mIsUnknownArtist) { 3659882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen menu.add(0, SEARCH, 0, R.string.search_title); 3669882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen } 367792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 368792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 369792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 370792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 371792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public boolean onContextItemSelected(MenuItem item) { 372792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project switch (item.getItemId()) { 373792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case PLAY_SELECTION: { 374792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // play everything by the selected artist 375bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long [] list = 376792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistId != null ? 377bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId)) 378bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen : MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId)); 379792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 380792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.playAll(this, list, 0); 381792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 382792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 383792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 384792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case QUEUE: { 385bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long [] list = 386792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistId != null ? 387bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId)) 388bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen : MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId)); 389792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.addToCurrentPlaylist(this, list); 390792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 391792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 392792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 393792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case NEW_PLAYLIST: { 394792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Intent intent = new Intent(); 395792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.setClass(this, CreatePlaylist.class); 396792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project startActivityForResult(intent, NEW_PLAYLIST); 397792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 398792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 399792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 400792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case PLAYLIST_SELECTED: { 401bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long [] list = 402792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCurrentArtistId != null ? 403bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId)) 404bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen : MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId)); 405bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long playlist = item.getIntent().getLongExtra("playlist", 0); 406792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.addToPlaylist(this, list, playlist); 407792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 408792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 409792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 410792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case DELETE_ITEM: { 411bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long [] list; 412792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String desc; 413792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mCurrentArtistId != null) { 414bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen list = MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId)); 415792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String f = getString(R.string.delete_artist_desc); 416792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project desc = String.format(f, mCurrentArtistName); 417792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 418bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen list = MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId)); 419792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String f = getString(R.string.delete_album_desc); 420792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project desc = String.format(f, mCurrentAlbumName); 421792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 422792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Bundle b = new Bundle(); 423792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project b.putString("description", desc); 424bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen b.putLongArray("items", list); 425792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Intent intent = new Intent(); 426792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.setClass(this, DeleteItems.class); 427792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.putExtras(b); 428792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project startActivityForResult(intent, -1); 429792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 430792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 431792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 432792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case SEARCH: 433792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project doSearch(); 434792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return true; 435792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 436792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return super.onContextItemSelected(item); 437792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 438792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 439792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project void doSearch() { 440792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project CharSequence title = null; 441792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String query = null; 442792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 443792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Intent i = new Intent(); 444792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project i.setAction(MediaStore.INTENT_ACTION_MEDIA_SEARCH); 4454341b5006cffbbd016688d4533f6de68d9d4c49bMarco Nelissen i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 446792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 447792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mCurrentArtistId != null) { 448792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project title = mCurrentArtistName; 449792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project query = mCurrentArtistName; 450792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistName); 451792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project i.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE); 452792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 4539882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen if (mIsUnknownAlbum) { 4549882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen title = query = mCurrentArtistNameForAlbum; 4559882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen } else { 4569882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen title = query = mCurrentAlbumName; 4579882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen if (!mIsUnknownArtist) { 4589882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen query = query + " " + mCurrentArtistNameForAlbum; 4599882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen } 4609882f540844f6a613eeb5edf5f076d1dcc72bf9fMarco Nelissen } 461792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistNameForAlbum); 462792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project i.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, mCurrentAlbumName); 463792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project i.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE); 464792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 465792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project title = getString(R.string.mediasearch, title); 466792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project i.putExtra(SearchManager.QUERY, query); 467792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 468792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project startActivity(Intent.createChooser(i, title)); 469792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 470792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 471792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 472792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 473792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project switch (requestCode) { 474792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case SCAN_DONE: 475792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (resultCode == RESULT_CANCELED) { 476792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project finish(); 477792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 478792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project getArtistCursor(mAdapter.getQueryHandler(), null); 479792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 480792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project break; 481792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 482792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project case NEW_PLAYLIST: 483792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (resultCode == RESULT_OK) { 484792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Uri uri = intent.getData(); 485792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (uri != null) { 486bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long [] list = null; 487792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mCurrentArtistId != null) { 488bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen list = MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId)); 489792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else if (mCurrentAlbumId != null) { 490bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen list = MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId)); 491792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 492bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen MusicUtils.addToPlaylist(this, list, Long.parseLong(uri.getLastPathSegment())); 493792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 494792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 495792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project break; 496792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 497792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 498792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 499792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private Cursor getArtistCursor(AsyncQueryHandler async, String filter) { 500792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 501792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project StringBuilder where = new StringBuilder(); 502792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project where.append(MediaStore.Audio.Artists.ARTIST + " != ''"); 503792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 504792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // Add in the filtering constraints 505792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String [] keywords = null; 506792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (filter != null) { 507792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String [] searchWords = filter.split(" "); 508792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project keywords = new String[searchWords.length]; 509792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Collator col = Collator.getInstance(); 510792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project col.setStrength(Collator.PRIMARY); 511792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project for (int i = 0; i < searchWords.length; i++) { 512792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project keywords[i] = '%' + MediaStore.Audio.keyFor(searchWords[i]) + '%'; 513792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 514792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project for (int i = 0; i < searchWords.length; i++) { 515792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project where.append(" AND "); 516792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project where.append(MediaStore.Audio.Media.ARTIST_KEY + " LIKE ?"); 517792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 518792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 519792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 520792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String whereclause = where.toString(); 521792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String[] cols = new String[] { 522792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Artists._ID, 523792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Artists.ARTIST, 524792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Artists.NUMBER_OF_ALBUMS, 525792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Artists.NUMBER_OF_TRACKS 526792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 527792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor ret = null; 528792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (async != null) { 529792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project async.startQuery(0, null, MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, 530792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project cols, whereclause , keywords, MediaStore.Audio.Artists.ARTIST_KEY); 531792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 532792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ret = MusicUtils.query(this, MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, 533792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project cols, whereclause , keywords, MediaStore.Audio.Artists.ARTIST_KEY); 534792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 535792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return ret; 536792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 537792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 538792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project static class ArtistAlbumListAdapter extends SimpleCursorTreeAdapter implements SectionIndexer { 539792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 540792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final Drawable mNowPlayingOverlay; 541792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final BitmapDrawable mDefaultAlbumIcon; 542792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private int mGroupArtistIdIdx; 543792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private int mGroupArtistIdx; 544792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private int mGroupAlbumIdx; 545792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private int mGroupSongIdx; 546792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final Context mContext; 547792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final Resources mResources; 548792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final String mAlbumSongSeparator; 549792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final String mUnknownAlbum; 550792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final String mUnknownArtist; 551792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final StringBuilder mBuffer = new StringBuilder(); 552792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final Object[] mFormatArgs = new Object[1]; 553792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private final Object[] mFormatArgs3 = new Object[3]; 554792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private MusicAlphabetIndexer mIndexer; 555792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private ArtistAlbumBrowserActivity mActivity; 556792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private AsyncQueryHandler mQueryHandler; 557792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private String mConstraint = null; 558792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private boolean mConstraintIsValid = false; 559792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 560756c3f57f11a7bb3bf1cf1333ee8ffbc51039748Marco Nelissen static class ViewHolder { 561792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project TextView line1; 562792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project TextView line2; 563792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ImageView play_indicator; 564792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ImageView icon; 565792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 566792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 567792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project class QueryHandler extends AsyncQueryHandler { 568792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project QueryHandler(ContentResolver res) { 569792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super(res); 570792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 571792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 572792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 573792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project protected void onQueryComplete(int token, Object cookie, Cursor cursor) { 574792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project //Log.i("@@@", "query complete"); 575792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mActivity.init(cursor); 576792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 577792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 578792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 579792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ArtistAlbumListAdapter(Context context, ArtistAlbumBrowserActivity currentactivity, 580792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor cursor, int glayout, String[] gfrom, int[] gto, 581792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int clayout, String[] cfrom, int[] cto) { 582792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super(context, cursor, glayout, gfrom, gto, clayout, cfrom, cto); 583792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mActivity = currentactivity; 584792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mQueryHandler = new QueryHandler(context.getContentResolver()); 585792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 586792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Resources r = context.getResources(); 587792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mNowPlayingOverlay = r.getDrawable(R.drawable.indicator_ic_mp_playing_list); 588792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mDefaultAlbumIcon = (BitmapDrawable) r.getDrawable(R.drawable.albumart_mp_unknown_list); 589792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // no filter or dither, it's a lot faster and we can't tell the difference 590792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mDefaultAlbumIcon.setFilterBitmap(false); 591792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mDefaultAlbumIcon.setDither(false); 592792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 593792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mContext = context; 594792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project getColumnIndices(cursor); 595792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mResources = context.getResources(); 596792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mAlbumSongSeparator = context.getString(R.string.albumsongseparator); 597792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mUnknownAlbum = context.getString(R.string.unknown_album_name); 598792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mUnknownArtist = context.getString(R.string.unknown_artist_name); 599792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 600792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 601792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private void getColumnIndices(Cursor cursor) { 602792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (cursor != null) { 603792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mGroupArtistIdIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID); 604792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mGroupArtistIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST); 605792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mGroupAlbumIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.NUMBER_OF_ALBUMS); 606792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mGroupSongIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.NUMBER_OF_TRACKS); 607792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mIndexer != null) { 608792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mIndexer.setCursor(cursor); 609792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 610792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mIndexer = new MusicAlphabetIndexer(cursor, mGroupArtistIdx, 611792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mResources.getString(com.android.internal.R.string.fast_scroll_alphabet)); 612792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 613792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 614792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 615792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 616792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void setActivity(ArtistAlbumBrowserActivity newactivity) { 617792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mActivity = newactivity; 618792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 619792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 620792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public AsyncQueryHandler getQueryHandler() { 621792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return mQueryHandler; 622792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 623792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 624792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 625792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public View newGroupView(Context context, Cursor cursor, boolean isExpanded, ViewGroup parent) { 626792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project View v = super.newGroupView(context, cursor, isExpanded, parent); 627792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ImageView iv = (ImageView) v.findViewById(R.id.icon); 628792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ViewGroup.LayoutParams p = iv.getLayoutParams(); 629792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project p.width = ViewGroup.LayoutParams.WRAP_CONTENT; 630792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project p.height = ViewGroup.LayoutParams.WRAP_CONTENT; 631792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ViewHolder vh = new ViewHolder(); 632792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.line1 = (TextView) v.findViewById(R.id.line1); 633792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.line2 = (TextView) v.findViewById(R.id.line2); 634792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.play_indicator = (ImageView) v.findViewById(R.id.play_indicator); 635792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.icon = (ImageView) v.findViewById(R.id.icon); 636792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.icon.setPadding(0, 0, 1, 0); 637792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project v.setTag(vh); 638792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return v; 639792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 640792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 641792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 642792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public View newChildView(Context context, Cursor cursor, boolean isLastChild, 643792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ViewGroup parent) { 644792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project View v = super.newChildView(context, cursor, isLastChild, parent); 645792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ViewHolder vh = new ViewHolder(); 646792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.line1 = (TextView) v.findViewById(R.id.line1); 647792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.line2 = (TextView) v.findViewById(R.id.line2); 648792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.play_indicator = (ImageView) v.findViewById(R.id.play_indicator); 649792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.icon = (ImageView) v.findViewById(R.id.icon); 650792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.icon.setBackgroundDrawable(mDefaultAlbumIcon); 651792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.icon.setPadding(0, 0, 1, 0); 652792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project v.setTag(vh); 653792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return v; 654792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 655792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 656792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 657792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void bindGroupView(View view, Context context, Cursor cursor, boolean isexpanded) { 658792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 659792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ViewHolder vh = (ViewHolder) view.getTag(); 660792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 661792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String artist = cursor.getString(mGroupArtistIdx); 662792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String displayartist = artist; 6636a9c41ccabded4f0d25288ad98788a1994824bb7The Android Open Source Project boolean unknown = artist == null || artist.equals(MediaFile.UNKNOWN_STRING); 664792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (unknown) { 665792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project displayartist = mUnknownArtist; 666792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 667792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.line1.setText(displayartist); 668792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 669792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int numalbums = cursor.getInt(mGroupAlbumIdx); 670792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int numsongs = cursor.getInt(mGroupSongIdx); 671792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 672792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String songs_albums = MusicUtils.makeAlbumsLabel(context, 673792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project numalbums, numsongs, unknown); 674792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 675792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.line2.setText(songs_albums); 676792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 677bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long currentartistid = MusicUtils.getCurrentArtistId(); 678bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long artistid = cursor.getLong(mGroupArtistIdIdx); 679792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (currentartistid == artistid && !isexpanded) { 680792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.play_indicator.setImageDrawable(mNowPlayingOverlay); 681792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 682792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.play_indicator.setImageDrawable(null); 683792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 684792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 685792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 686792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 687792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void bindChildView(View view, Context context, Cursor cursor, boolean islast) { 688792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 689792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ViewHolder vh = (ViewHolder) view.getTag(); 690792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 691792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM)); 692792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String displayname = name; 6936a9c41ccabded4f0d25288ad98788a1994824bb7The Android Open Source Project boolean unknown = name == null || name.equals(MediaFile.UNKNOWN_STRING); 694792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (unknown) { 695792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project displayname = mUnknownAlbum; 696792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 697792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.line1.setText(displayname); 698792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 699792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int numsongs = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.NUMBER_OF_SONGS)); 700792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int numartistsongs = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.NUMBER_OF_SONGS_FOR_ARTIST)); 701792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 702792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project final StringBuilder builder = mBuffer; 703792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project builder.delete(0, builder.length()); 704792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (unknown) { 705792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project numsongs = numartistsongs; 706792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 707792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 708792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (numsongs == 1) { 709792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project builder.append(context.getString(R.string.onesong)); 710792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 711792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (numsongs == numartistsongs) { 712792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project final Object[] args = mFormatArgs; 713792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project args[0] = numsongs; 714792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project builder.append(mResources.getQuantityString(R.plurals.Nsongs, numsongs, args)); 715792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 716792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project final Object[] args = mFormatArgs3; 717792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project args[0] = numsongs; 718792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project args[1] = numartistsongs; 719792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project args[2] = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST)); 720792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project builder.append(mResources.getQuantityString(R.plurals.Nsongscomp, numsongs, args)); 721792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 722792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 723792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project vh.line2.setText(builder.toString()); 724792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 725792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ImageView iv = vh.icon; 726792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // We don't actually need the path to the thumbnail file, 727792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // we just use it to see if there is album art or not 728792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String art = cursor.getString(cursor.getColumnIndexOrThrow( 729792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Albums.ALBUM_ART)); 730792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (unknown || art == null || art.length() == 0) { 731792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project iv.setBackgroundDrawable(mDefaultAlbumIcon); 732792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project iv.setImageDrawable(null); 733792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 734bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long artIndex = cursor.getLong(0); 735792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Drawable d = MusicUtils.getCachedArtwork(context, artIndex, mDefaultAlbumIcon); 736792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project iv.setImageDrawable(d); 737792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 738792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 739bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long currentalbumid = MusicUtils.getCurrentAlbumId(); 740bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long aid = cursor.getLong(0); 741792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project iv = vh.play_indicator; 742792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (currentalbumid == aid) { 743792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project iv.setImageDrawable(mNowPlayingOverlay); 744792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 745792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project iv.setImageDrawable(null); 746792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 747792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 748792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 749792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 750792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 751792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project protected Cursor getChildrenCursor(Cursor groupCursor) { 752792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 753bd447b61c42589133257fb7992ccbed18a507a46Marco Nelissen long id = groupCursor.getLong(groupCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID)); 754792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 755792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String[] cols = new String[] { 756792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Albums._ID, 757792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Albums.ALBUM, 758792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Albums.NUMBER_OF_SONGS, 759792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Albums.NUMBER_OF_SONGS_FOR_ARTIST, 760792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Albums.ALBUM_ART 761792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 762792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor c = MusicUtils.query(mActivity, 763792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Artists.Albums.getContentUri("external", id), 764792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project cols, null, null, MediaStore.Audio.Albums.DEFAULT_SORT_ORDER); 765792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 766792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project class MyCursorWrapper extends CursorWrapper { 767792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String mArtistName; 768792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int mMagicColumnIdx; 769792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MyCursorWrapper(Cursor c, String artist) { 770792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super(c); 771792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mArtistName = artist; 7726a9c41ccabded4f0d25288ad98788a1994824bb7The Android Open Source Project if (mArtistName == null || mArtistName.equals(MediaFile.UNKNOWN_STRING)) { 773792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mArtistName = mUnknownArtist; 774792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 775792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mMagicColumnIdx = c.getColumnCount(); 776792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 777792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 778792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 779792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public String getString(int columnIndex) { 780792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (columnIndex != mMagicColumnIdx) { 781792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return super.getString(columnIndex); 782792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 783792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return mArtistName; 784792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 785792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 786792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 787792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public int getColumnIndexOrThrow(String name) { 7886a9c41ccabded4f0d25288ad98788a1994824bb7The Android Open Source Project if (MediaStore.Audio.Albums.ARTIST.equals(name)) { 789792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return mMagicColumnIdx; 790792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 791792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return super.getColumnIndexOrThrow(name); 792792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 793792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 794792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 795792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public String getColumnName(int idx) { 796792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (idx != mMagicColumnIdx) { 797792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return super.getColumnName(idx); 798792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 799792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return MediaStore.Audio.Albums.ARTIST; 800792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 801792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 802792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 803792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public int getColumnCount() { 804792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return super.getColumnCount() + 1; 805792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 806792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 807792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return new MyCursorWrapper(c, groupCursor.getString(mGroupArtistIdx)); 808792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 809792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 810792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 811792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void changeCursor(Cursor cursor) { 812d99bc1e9481c68514a4e5eea4c3f429843b701b4Marco Nelissen if (mActivity.isFinishing() && cursor != null) { 813d99bc1e9481c68514a4e5eea4c3f429843b701b4Marco Nelissen cursor.close(); 814d99bc1e9481c68514a4e5eea4c3f429843b701b4Marco Nelissen cursor = null; 8150e17578179270916b49a7b7c3bc5b7b106dcd22cMarco Nelissen } 816792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (cursor != mActivity.mArtistCursor) { 817792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mActivity.mArtistCursor = cursor; 818792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project getColumnIndices(cursor); 819792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.changeCursor(cursor); 820792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 821792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 822792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 823792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 824792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public Cursor runQueryOnBackgroundThread(CharSequence constraint) { 825792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String s = constraint.toString(); 826792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mConstraintIsValid && ( 827792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project (s == null && mConstraint == null) || 828792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project (s != null && s.equals(mConstraint)))) { 829792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return getCursor(); 830792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 831792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor c = mActivity.getArtistCursor(null, s); 832792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mConstraint = s; 833792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mConstraintIsValid = true; 834792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return c; 835792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 836792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 837792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public Object[] getSections() { 838792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return mIndexer.getSections(); 839792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 840792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 841792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public int getPositionForSection(int sectionIndex) { 842792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return mIndexer.getPositionForSection(sectionIndex); 843792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 844792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 845792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public int getSectionForPosition(int position) { 846792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return 0; 847792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 848792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 849792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 850792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private Cursor mArtistCursor; 851792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project} 852792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 853