View Javadoc

1   /***
2    *     Ambient - A music player for the Android platform
3    Copyright (C) 2007 Martin Vysny
4    
5    This program is free software: you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation, either version 3 of the License, or
8    (at your option) any later version.
9    
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14  
15   You should have received a copy of the GNU General Public License
16   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17   */
18  package sk.baka.ambient.collection.local;
19  
20  import java.util.EnumMap;
21  import java.util.List;
22  
23  import android.database.Cursor;
24  
25  import sk.baka.ambient.AmbientApplication;
26  import sk.baka.ambient.collection.CategoryEnum;
27  import sk.baka.ambient.collection.TrackMetadataBean;
28  import sk.baka.ambient.library.DBStrategy;
29  import sk.baka.ambient.library.LibraryUtils;
30  import sk.baka.ambient.playlist.Random;
31  
32  /***
33   * Provides tracks from the library.
34   * 
35   * @author Martin Vysny
36   */
37  public final class LibraryTrackProvider extends AbstractTrackProvider {
38  
39  	private static final long serialVersionUID = 1L;
40  
41  	/***
42  	 * Creates new library track provider.
43  	 * 
44  	 * @param random
45  	 *            initial random value.
46  	 */
47  	public LibraryTrackProvider(Random random) {
48  		super(random);
49  	}
50  
51  	@Override
52  	protected List<TrackMetadataBean> getAlbumTracks(String album) {
53  		final DBStrategy strategy = AmbientApplication.getInstance()
54  				.getLibrary().getBackend();
55  		final EnumMap<CategoryEnum, String> map = new EnumMap<CategoryEnum, String>(
56  				CategoryEnum.class);
57  		map.put(CategoryEnum.Album, album);
58  		final Cursor albumTracks = strategy.findByCriteria(map, false, null);
59  		final List<TrackMetadataBean> result = LibraryUtils
60  				.pollTracks(albumTracks);
61  		return result;
62  	}
63  
64  	@Override
65  	protected TrackMetadataBean getTrackFromCursor(Cursor c) {
66  		return LibraryUtils.cursorToTrackBean(c);
67  	}
68  
69  	@Override
70  	protected Cursor newCursor(boolean albums) {
71  		final String sql;
72  		if (!albums) {
73  			sql = "select * from tracks order by random()";
74  		} else {
75  			sql = "select distinct album from tracks order by random()";
76  		}
77  		final DBStrategy strategy = AmbientApplication.getInstance()
78  				.getLibrary().getBackend();
79  		return strategy.rawQuery(sql, null);
80  	}
81  }