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;
20  
21  import sk.baka.ambient.commons.Interval;
22  import sk.baka.ambient.playerservice.PlayerStateEnum;
23  import sk.baka.ambient.playlist.PlaylistItem;
24  import sk.baka.ambient.playlist.Random;
25  import sk.baka.ambient.playlist.Repeat;
26  
27  /***
28   * Listens for higher-level player and playlist events. All methods are invoked
29   * in the message loop handler.
30   * 
31   * @author Martin Vysny
32   */
33  public interface IPlaylistPlayerListener {
34  	/***
35  	 * The playback state was changed.
36  	 * 
37  	 * @param state
38  	 *            new playback state.
39  	 */
40  	void playbackStateChanged(final PlayerStateEnum state);
41  
42  	/***
43  	 * A new track was selected in the playlist.
44  	 * 
45  	 * @param track
46  	 *            the new track, may be <code>null</code> - in this case the
47  	 *            playback is stopped.
48  	 * @param play
49  	 *            if <code>true</code> then the track is already being played
50  	 *            (or is about to be played).
51  	 * @param positionMillis
52  	 *            the starting playback position in milliseconds.
53  	 */
54  	void trackChanged(final PlaylistItem track, final boolean play,
55  			final int positionMillis);
56  
57  	/***
58  	 * <p>
59  	 * A position in the track was changed. This is only due to
60  	 * {@link PlaylistPlayer#seek(int)} - it is never invoked periodically as
61  	 * the playback progresses. This event is not invoked when a playback is
62  	 * started with non-zero start seek time.
63  	 * </p>
64  	 * <p>
65  	 * Note that the playback may be paused.
66  	 * </p>
67  	 * 
68  	 * @param position
69  	 *            the new position in milliseconds.
70  	 * @param playing
71  	 *            if <code>true</code> then playback is activated, if
72  	 *            <code>false</code> then the playback is paused. This event is
73  	 *            not invoked when the playback is stopped.
74  	 */
75  	void trackPositionChanged(final int position, final boolean playing);
76  
77  	/***
78  	 * The play mode was changed.
79  	 * 
80  	 * @param repeat
81  	 *            new repeat value, never <code>null</code>.
82  	 */
83  	void repeatChanged(final Repeat repeat);
84  
85  	/***
86  	 * The play mode was changed.
87  	 * 
88  	 * @param random
89  	 *            new random value, never <code>null</code>.
90  	 */
91  	void randomChanged(final Random random);
92  
93  	/***
94  	 * Fired when the playlist changes - by removing a track, reshuffling etc.
95  	 * 
96  	 * @param target
97  	 *            the "target" (or the product) of the operation - for example
98  	 *            for copy/move operations this interval contains added items,
99  	 *            for delete operation the interval is empty. May be
100 	 *            <code>null</code> if the target is not known. Semantically,
101 	 *            the target should contain tracks that were 'produced' by the
102 	 *            operation and they should be the target of the next operation.
103 	 *            This implies that the playlist view should make these tracks
104 	 *            appear selected.
105 	 */
106 	void playlistChanged(final Interval target);
107 }