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
82 }
83
84 public void playlistChanged(Interval target) {
85
86 }
87
88 public void randomChanged(Random random) {
89
90 }
91
92 public void repeatChanged(Repeat repeat) {
93
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
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 }