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  
19  package sk.baka.ambient.activity.main;
20  
21  import java.util.Arrays;
22  import java.util.Collections;
23  import java.util.List;
24  import java.util.Map;
25  
26  import sk.baka.ambient.ActionsEnum;
27  import sk.baka.ambient.AmbientApplication;
28  import sk.baka.ambient.IPlaylistPlayerListener;
29  import sk.baka.ambient.R;
30  import sk.baka.ambient.ZoomEnum;
31  import sk.baka.ambient.activity.main.cb.AbstractCollectionController;
32  import sk.baka.ambient.collection.TrackMetadataBean;
33  import sk.baka.ambient.collection.TrackOriginEnum;
34  import sk.baka.ambient.collection.local.LibraryCollection;
35  import sk.baka.ambient.commons.Interval;
36  import sk.baka.ambient.commons.MiscUtils;
37  import sk.baka.ambient.playerservice.PlayerStateEnum;
38  import sk.baka.ambient.playlist.PlaylistItem;
39  import sk.baka.ambient.playlist.Random;
40  import sk.baka.ambient.playlist.Repeat;
41  import sk.baka.ambient.views.gesturelist.GesturesListView;
42  import android.app.Activity;
43  import android.content.Intent;
44  import android.net.Uri;
45  import android.widget.TextView;
46  
47  /***
48   * Controls the Magnatune view
49   * 
50   * @author Martin Vysny
51   */
52  public final class MagnatuneController extends AbstractCollectionController
53  		implements IPlaylistPlayerListener {
54  
55  	/***
56  	 * Creates new Magnatune controller.
57  	 * 
58  	 * @param mainActivity
59  	 * @param playlistView
60  	 */
61  	public MagnatuneController(final Activity mainActivity,
62  			final GesturesListView playlistView) {
63  		super(R.id.magnatunebrowser, R.id.magnatuneList, mainActivity,
64  				playlistView, new LibraryCollection(AmbientApplication
65  						.getInstance().getLibrary()), R.id.magnatunePath);
66  		initButtonBar(R.id.magnatuneButtons, actions);
67  		((LibraryCollection) collection).filterOrigin(TrackOriginEnum.Magnatune);
68  		updateData();
69  	}
70  
71  	/***
72  	 * The actions to display on the Task switcher.
73  	 */
74  	public static final List<ActionsEnum> actions = Collections
75  			.unmodifiableList(Arrays.asList(ActionsEnum.Back,
76  					ActionsEnum.MagnatuneRescan, ActionsEnum.CollectionYear,
77  					ActionsEnum.BuyAlbum, ActionsEnum.ShowLicense,
78  					ActionsEnum.ShowArtistPage));
79  
80  	public void playbackStateChanged(PlayerStateEnum state) {
81  		// ignore
82  	}
83  
84  	public void playlistChanged(Interval target) {
85  		// ignore
86  	}
87  
88  	public void randomChanged(Random random) {
89  		// ignore
90  	}
91  
92  	public void repeatChanged(Repeat repeat) {
93  		// ignore
94  	}
95  
96  	public void trackChanged(final PlaylistItem track, final boolean play,
97  			final int positionMillis) {
98  		final String artistDesc = track == null ? null : track.getTrack()
99  				.getArtistDesc();
100 		final TextView view = (TextView) mainView
101 				.findViewById(R.id.magnatuneArtistDesc);
102 		view.setText(MiscUtils.emptyIfNull(artistDesc));
103 	}
104 
105 	public void trackPositionChanged(final int position, final boolean playing) {
106 		// ignore
107 	}
108 
109 	@Override
110 	public void update(Interval select) {
111 		trackChanged(app.getPlaylist().getCurrentlyPlayingItem(), false, 0);
112 		super.update(select);
113 	}
114 
115 	@Override
116 	protected void onAction(ActionsEnum action) {
117 		if (action == ActionsEnum.BuyAlbum) {
118 			buyAlbum();
119 		}
120 		if (action == ActionsEnum.ShowLicense) {
121 			showLicense();
122 		}
123 		if (action == ActionsEnum.ShowArtistPage) {
124 			showArtistPage();
125 		}
126 		if (action == ActionsEnum.MagnatuneRescan) {
127 			if (app.isOffline()) {
128 				app.error(MainActivity.class, true, mainActivity
129 						.getString(R.string.inOfflineMode), null);
130 			} else {
131 				app.getLibrary().queueScanner(TrackOriginEnum.Magnatune);
132 			}
133 		}
134 		super.onAction(action);
135 	}
136 
137 	private TrackMetadataBean getCurrent() {
138 		final TrackMetadataBean currentTrack = app.getPlaylist()
139 				.getCurrentlyPlayingTrack();
140 		if (currentTrack == null) {
141 			app.error(MainActivity.class, true, mainActivity
142 					.getString(R.string.no_playing_track), null);
143 		}
144 		return currentTrack;
145 	}
146 
147 	private void buyAlbum() {
148 		final TrackMetadataBean currentTrack = getCurrent();
149 		if (currentTrack == null) {
150 			return;
151 		}
152 		if (MiscUtils.isEmptyOrWhitespace(currentTrack.getBuyURL())) {
153 			app.error(MainActivity.class, true, mainActivity
154 					.getString(R.string.no_track_meta), null);
155 			return;
156 		}
157 		mainActivity.startActivity(new Intent(Intent.ACTION_VIEW, Uri
158 				.parse(currentTrack.getBuyURL())));
159 	}
160 
161 	private void showLicense() {
162 		final TrackMetadataBean currentTrack = getCurrent();
163 		if (currentTrack == null) {
164 			return;
165 		}
166 		if (MiscUtils.isEmptyOrWhitespace(currentTrack.getLicense())) {
167 			app.error(MainActivity.class, true, mainActivity
168 					.getString(R.string.no_track_meta), null);
169 			return;
170 		}
171 		mainActivity.startActivity(new Intent(Intent.ACTION_VIEW, Uri
172 				.parse(currentTrack.getLicense())));
173 	}
174 
175 	private void showArtistPage() {
176 		final TrackMetadataBean currentTrack = getCurrent();
177 		if (currentTrack == null)
178 			return;
179 		if (MiscUtils.isEmptyOrWhitespace(currentTrack.getArtistURL())) {
180 			app.error(MainActivity.class, true, mainActivity
181 					.getString(R.string.no_track_meta), null);
182 			return;
183 		}
184 		mainActivity.startActivity(new Intent(Intent.ACTION_VIEW, Uri
185 				.parse(currentTrack.getArtistURL())));
186 	}
187 
188 	@Override
189 	protected void performZoom(final Map<ZoomEnum, Integer> zoom) {
190 		super.performZoom(zoom);
191 		initButtonBar(R.id.magnatuneButtons, actions);
192 	}
193 
194 	@Override
195 	protected void yearChanged(boolean year) {
196 		checkButton(R.id.magnatuneButtons, 2, year);
197 	}
198 }