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
19f33a575c2b09095d58ad7af527113f767e4c37b1Marco Nelissenimport com.android.music.MusicUtils.ServiceToken;
20f33a575c2b09095d58ad7af527113f767e4c37b1Marco Nelissen
21792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.ListActivity;
22792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.Context;
23792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.Intent;
24792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.ContentUris;
25792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.database.Cursor;
26792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.net.Uri;
27792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.os.Bundle;
28792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.os.RemoteException;
29792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.provider.MediaStore;
30792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.View;
31792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.ViewGroup;
32792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.ImageView;
33792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.ListView;
34792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.SimpleCursorAdapter;
35792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.TextView;
36792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
37792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport java.util.ArrayList;
38792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
39792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpublic class MediaPickerActivity extends ListActivity implements MusicUtils.Defs
40792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project{
41f33a575c2b09095d58ad7af527113f767e4c37b1Marco Nelissen    private ServiceToken mToken;
42792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
43792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public MediaPickerActivity()
44792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    {
45792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
46792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
47792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    /** Called when the activity is first created. */
48792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    @Override
49792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public void onCreate(Bundle icicle)
50792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    {
51792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        super.onCreate(icicle);
52792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
53792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        mFirstYear = getIntent().getStringExtra("firstyear");
54792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        mLastYear = getIntent().getStringExtra("lastyear");
55792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
56792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        if (mFirstYear == null) {
57792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            setTitle(R.string.all_title);
58792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        } else if (mFirstYear.equals(mLastYear)) {
59792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            setTitle(mFirstYear);
60792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        } else {
61792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            setTitle(mFirstYear + "-" + mLastYear);
62792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
63f33a575c2b09095d58ad7af527113f767e4c37b1Marco Nelissen        mToken = MusicUtils.bindToService(this);
64792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        init();
65792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
66792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
67792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    @Override
68792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public void onDestroy() {
69f33a575c2b09095d58ad7af527113f767e4c37b1Marco Nelissen        MusicUtils.unbindFromService(mToken);
70792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        super.onDestroy();
71792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        if (mCursor != null) {
72792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            mCursor.close();
73792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
74792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
75792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
76792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public void init() {
77792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
78792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        setContentView(R.layout.media_picker_activity);
79792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
80792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        MakeCursor();
81792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        if (null == mCursor || 0 == mCursor.getCount()) {
82792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            return;
83792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
84792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
85792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        PickListAdapter adapter = new PickListAdapter(
86792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                this,
87792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                R.layout.track_list_item,
88792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                mCursor,
89792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                new String[] {},
90792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                new int[] {});
91792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
92792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        setListAdapter(adapter);
93792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
94792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
95792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    @Override
96792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    protected void onListItemClick(ListView l, View v, int position, long id)
97792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    {
98792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        mCursor.moveToPosition(position);
99792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        String type = mCursor.getString(mCursor.getColumnIndexOrThrow(
100792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.MIME_TYPE));
101792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
102792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        String action = getIntent().getAction();
103792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        if (Intent.ACTION_GET_CONTENT.equals(action)) {
104792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            Uri uri;
105792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
106792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            long mediaId;
107792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            if (type.startsWith("video")) {
108792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
109792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                mediaId = mCursor.getLong(mCursor.getColumnIndexOrThrow(
110792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                        MediaStore.Video.Media._ID));
111792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            } else {
112792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
113792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                mediaId = mCursor.getLong(mCursor.getColumnIndexOrThrow(
114792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                        MediaStore.Audio.Media._ID));
115792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            }
116792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
117792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            setResult(RESULT_OK, new Intent().setData(ContentUris.withAppendedId(uri, mediaId)));
118792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            finish();
119792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            return;
120792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
121792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
122792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // Need to stop the playbackservice, in case it is busy playing audio
123792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // and the user selected a video.
124792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        if (MusicUtils.sService != null) {
125792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            try {
126792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MusicUtils.sService.stop();
127792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            } catch (RemoteException ex) {
128792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            }
129792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
130792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Intent intent = new Intent(Intent.ACTION_VIEW);
131792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        intent.setDataAndType(ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id), type);
132792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
133792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        startActivity(intent);
134792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
135792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
136792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    private void MakeCursor() {
137792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        String[] audiocols = new String[] {
138792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media._ID,
139792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.ARTIST,
140792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.ALBUM,
141792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.TITLE,
142792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.DATA,
143792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.MIME_TYPE,
144792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.YEAR
145792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        };
146792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        String[] videocols = new String[] {
147792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media._ID,
148792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.TITLE,
149792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.ARTIST,
150792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.ALBUM,
151792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.TITLE,
152792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.DATA,
153792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Media.MIME_TYPE
154792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        };
155792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
156792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Cursor[] cs;
157792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // Use ArrayList for the moment, since we don't know the size of
158792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // Cursor[]. If the length of Corsor[] larger than really used,
159792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // a NPE will come up when access the content of Corsor[].
160792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        ArrayList<Cursor> cList = new ArrayList<Cursor>();
161792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Intent intent = getIntent();
162792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        String type = intent.getType();
163792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
164792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        if (mFirstYear != null) {
165792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            // If mFirstYear is not null, the picker only for audio because
166792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            // video has no year column.
167792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            if(type.equals("video/*")) {
168792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                mCursor = null;
169792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                return;
170792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            }
171792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
172792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            mWhereClause = MediaStore.Audio.Media.YEAR + ">=" + mFirstYear + " AND " +
173792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                           MediaStore.Audio.Media.YEAR + "<=" + mLastYear;
174792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
175792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
176792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // If use Cursor[] as before, the Cursor[i] could be null when there is
177792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // no video/audio/sdcard. Then a NPE will come up when access the content of the
178792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // Array.
179792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
180792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Cursor c;
181792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        if (type.equals("video/*")) {
182792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            // Only video.
183792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            c = MusicUtils.query(this, MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
184792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                    videocols, null , null, mSortOrder);
185792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            if (c != null) {
186792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                cList.add(c);
187792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            }
188792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        } else {
189792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            c = MusicUtils.query(this, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
190792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                    audiocols, mWhereClause , null, mSortOrder);
191792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
192792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            if (c != null) {
193792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                cList.add(c);
194792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            }
195792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
196792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            if (mFirstYear == null && intent.getType().equals("media/*")) {
197792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                // video has no year column
198792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                c = MusicUtils.query(this, MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
199792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                    videocols, null , null, mSortOrder);
200792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                if (c != null) {
201792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                    cList.add(c);
202792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                }
203792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            }
204792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
205792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
206792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // Get the ArrayList size.
207792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        int size = cList.size();
208792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        if (0 == size) {
209792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            // If no video/audio/SDCard exist, return.
210792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            mCursor = null;
211792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            return;
212792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
213792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
214792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        // The size is known now, we're sure each item of Cursor[] is not null.
215792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        cs = new Cursor[size];
216792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        cs = cList.toArray(cs);
217792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        mCursor = new SortCursor(cs, MediaStore.Audio.Media.TITLE);
218792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
219792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
220792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    private Cursor mCursor;
221792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    private String mSortOrder = MediaStore.Audio.Media.TITLE + " COLLATE UNICODE";
222792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    private String mFirstYear;
223792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    private String mLastYear;
224792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    private String mWhereClause;
225792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
226756c3f57f11a7bb3bf1cf1333ee8ffbc51039748Marco Nelissen    static class PickListAdapter extends SimpleCursorAdapter {
227792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        int mTitleIdx;
228792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        int mArtistIdx;
229792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        int mAlbumIdx;
230792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        int mMimeIdx;
231792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
232792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        PickListAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to) {
233792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            super(context, layout, cursor, from, to);
234792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
235792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            mTitleIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
236792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            mArtistIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);
237792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            mAlbumIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM);
238792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            mMimeIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.MIME_TYPE);
239792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
240792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
241792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        @Override
242792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        public View newView(Context context, Cursor cursor, ViewGroup parent) {
243792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           View v = super.newView(context, cursor, parent);
244792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           ImageView iv = (ImageView) v.findViewById(R.id.icon);
245792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           iv.setVisibility(View.VISIBLE);
246792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           ViewGroup.LayoutParams p = iv.getLayoutParams();
247792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           p.width = ViewGroup.LayoutParams.WRAP_CONTENT;
248792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           p.height = ViewGroup.LayoutParams.WRAP_CONTENT;
249792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
250792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           TextView tv = (TextView) v.findViewById(R.id.duration);
251792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           tv.setVisibility(View.GONE);
252792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           iv = (ImageView) v.findViewById(R.id.play_indicator);
253792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           iv.setVisibility(View.GONE);
254792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
255792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project           return v;
256792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
257792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
258792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        @Override
259792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        public void bindView(View view, Context context, Cursor cursor) {
260792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
261792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            TextView tv = (TextView) view.findViewById(R.id.line1);
262792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            String name = cursor.getString(mTitleIdx);
263792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            tv.setText(name);
264792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
265792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            tv = (TextView) view.findViewById(R.id.line2);
266792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            name = cursor.getString(mAlbumIdx);
267792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            StringBuilder builder = new StringBuilder();
268f4d4b342061ade12eb7903f454df62814179906fMarco Nelissen            if (name == null || name.equals(MediaStore.UNKNOWN_STRING)) {
269792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                builder.append(context.getString(R.string.unknown_album_name));
270792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            } else {
271792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                builder.append(name);
272792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            }
273792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            builder.append("\n");
274792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            name = cursor.getString(mArtistIdx);
275f4d4b342061ade12eb7903f454df62814179906fMarco Nelissen            if (name == null || name.equals(MediaStore.UNKNOWN_STRING)) {
276792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                builder.append(context.getString(R.string.unknown_artist_name));
277792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            } else {
278792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                builder.append(name);
279792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            }
280792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            tv.setText(builder.toString());
281792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
282792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            String text = cursor.getString(mMimeIdx);
283792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            ImageView iv = (ImageView) view.findViewById(R.id.icon);;
284792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            if("audio/midi".equals(text)) {
285792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                iv.setImageResource(R.drawable.midi);
286792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            } else if(text != null && (text.startsWith("audio") ||
287792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                    text.equals("application/ogg") ||
288792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                    text.equals("application/x-ogg"))) {
289792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                iv.setImageResource(R.drawable.ic_search_category_music_song);
290792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            } else if(text != null && text.startsWith("video")) {
291792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                iv.setImageResource(R.drawable.movie);
292792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            } else {
293792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                iv.setImageResource(0);
294792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            }
295792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
296792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
297792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project}
298