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;
19  
20  import java.util.ArrayList;
21  import java.util.List;
22  
23  import sk.baka.ambient.commons.Bind;
24  import android.content.Context;
25  import android.view.Gravity;
26  import android.widget.Toast;
27  
28  /***
29   * Contains current ambient configuration.
30   * 
31   * @author Martin Vysny
32   */
33  public final class ConfigurationBean {
34  	/***
35  	 * A notification to show when the current playing track is changed.
36  	 * 
37  	 * @author Martin Vysny
38  	 */
39  	public static enum TrackChangeNotifEnum {
40  		/***
41  		 * No notification.
42  		 */
43  		None(R.string.configNotifNone, 0),
44  		/***
45  		 * A quick info.
46  		 */
47  		Short(R.string.configNotifShort, Toast.LENGTH_SHORT),
48  		/***
49  		 * Detailed info.
50  		 */
51  		Long(R.string.configNotifLong, Toast.LENGTH_LONG);
52  		/***
53  		 * Caption text.
54  		 */
55  		public final int caption;
56  
57  		/***
58  		 * View duration, intended for the {@link Toast#setDuration(int)}
59  		 * method.
60  		 */
61  		public final int viewDuration;
62  
63  		private TrackChangeNotifEnum(final int caption, final int viewDuration) {
64  			this.caption = caption;
65  			this.viewDuration = viewDuration;
66  		}
67  
68  		/***
69  		 * Returns captions list.
70  		 * 
71  		 * @param context
72  		 *            string resolver
73  		 * @return list of strings - captions
74  		 */
75  		public static List<CharSequence> getCaptions(final Context context) {
76  			final List<CharSequence> captions = new ArrayList<CharSequence>();
77  			for (final TrackChangeNotifEnum notif : values()) {
78  				captions.add(context.getString(notif.caption));
79  			}
80  			return captions;
81  		}
82  	}
83  
84  	/***
85  	 * A notification to show when the current playing track is changed.
86  	 * 
87  	 * @author Martin Vysny
88  	 */
89  	public static enum TrackChangeNotifLocationEnum {
90  		/***
91  		 * Location: top
92  		 */
93  		Top(R.string.configNotifLocationTop, Gravity.TOP),
94  		/***
95  		 * Center the notification
96  		 */
97  		Center(R.string.configNotifLocationCenter, Gravity.CENTER),
98  		/***
99  		 * Show the notification in the bottom of the screen.
100 		 */
101 		Bottom(R.string.configNotifLocationBottom, Gravity.BOTTOM);
102 		/***
103 		 * Caption text.
104 		 */
105 		public final int caption;
106 
107 		/***
108 		 * The gravity, intended for the {@link Toast#setGravity(int, int, int)}
109 		 * method.
110 		 */
111 		public final int gravity;
112 
113 		private TrackChangeNotifLocationEnum(final int caption,
114 				final int gravity) {
115 			this.caption = caption;
116 			this.gravity = gravity;
117 		}
118 
119 		/***
120 		 * Returns captions list.
121 		 * 
122 		 * @param context
123 		 *            string resolver
124 		 * @return list of strings - captions
125 		 */
126 		public static List<CharSequence> getCaptions(final Context context) {
127 			final List<CharSequence> captions = new ArrayList<CharSequence>();
128 			for (final TrackChangeNotifLocationEnum notif : values()) {
129 				captions.add(context.getString(notif.caption));
130 			}
131 			return captions;
132 		}
133 	}
134 
135 	/***
136 	 * A notification to show when the current playing track is changed.
137 	 */
138 	@Bind(captionId = R.string.configNotifCaption, viewId = R.id.configNotificationType)
139 	public TrackChangeNotifEnum notificationType = TrackChangeNotifEnum.Short;
140 
141 	/***
142 	 * Where to show the notification on screen.
143 	 */
144 	@Bind(captionId = R.string.configNotifLocationCaption, viewId = R.id.configNotificationLocation)
145 	public TrackChangeNotifLocationEnum notificationLocation = TrackChangeNotifLocationEnum.Top;
146 
147 	/***
148 	 * The "short" notification format.
149 	 */
150 	@Bind(captionId = R.string.configNotificationShortFormat, viewId = R.id.configNotificationShortFormat, escape = true, tagFormat = true)
151 	public String shortNotificationFormat = "{%artist - }%title{\n%album{, %year}}";
152 
153 	/***
154 	 * The "long" notification format.
155 	 */
156 	@Bind(captionId = R.string.configNotificationLongFormat, viewId = R.id.configNotificationLongFormat, escape = true, tagFormat = true)
157 	public String longNotificationFormat = "{%track: }%title{ (%length)}{\nArtist: %artist}{\nAlbum: %album{, %year}}{\nGenre: %genre}{\nBitrate: %bitratekbps}";
158 
159 	/***
160 	 * Dynamic playlist: History length.
161 	 */
162 	@Bind(captionId = R.string.configDynamicHistory, viewId = R.id.configDynamicHistory, min = 0, max = 99)
163 	public int dynamicHistorySize = 10;
164 
165 	/***
166 	 * Dynamic playlist: upcoming track count.
167 	 */
168 	@Bind(captionId = R.string.configDynamicUpcoming, viewId = R.id.configDynamicUpcoming, min = 1, max = 99)
169 	public int dynamicUpcomingSize = 5;
170 
171 	/***
172 	 * Notify only when minimized.
173 	 */
174 	@Bind(captionId = -1, viewId = R.id.configPlayerNotifHiddenOnly)
175 	public boolean notifyWhenMinimizedOnly = true;
176 
177 	/***
178 	 * Formatting string for the player ticker.
179 	 */
180 	@Bind(captionId = R.string.configPlayerTickerFormat, viewId = R.id.configPlayerTickerFormat, escape = true, tagFormat = true)
181 	public String playerTickerFormat = "{%track: }{%artist - }%title{ (%album{, %year})}";
182 
183 	/***
184 	 * The gap between tracks, in millis.
185 	 */
186 	@Bind(captionId = R.string.configPlayerGap, viewId = R.id.configPlayerGap, min = 0, max = 9999)
187 	public long playerGap = 1000;
188 
189 	/***
190 	 * Formatting string for the playlist items.
191 	 */
192 	@Bind(captionId = R.string.configPlaylistFormat, viewId = R.id.configPlaylistFormat, escape = true, tagFormat = true)
193 	public String playlistFormat = "{{%artist{, }%album{, }%year}\n}   {%track }%title{ (%length)}";
194 
195 	/***
196 	 * Show tag as <code>null</code> if previous track's tag was the same.
197 	 */
198 	@Bind(captionId = -1, viewId = R.id.configPlaylistRepeatIsNull)
199 	public boolean dontRepeatSameTag = true;
200 
201 	/***
202 	 * Remember playlist on player quit.
203 	 */
204 	@Bind(captionId = -1, viewId = R.id.configPlaylistRemember)
205 	public boolean rememberPlaylist = true;
206 
207 	/***
208 	 * Cache size in kb.
209 	 */
210 	@Bind(captionId = R.string.configCoverCache, viewId = R.id.configCoverCache)
211 	public int coverCache = 256;
212 
213 	/***
214 	 * If <code>true</code> then new covers will not be downloaded. If
215 	 * <code>false</code> then old covers will be purged.
216 	 */
217 	@Bind(captionId = -1, viewId = R.id.configCoverCacheFull)
218 	public boolean dontDownloadOnCacheFull = true;
219 
220 	/***
221 	 * If <code>true</code> then new covers will not be downloaded. If
222 	 * <code>false</code> then old covers will be purged.
223 	 */
224 	@Bind(captionId = -1, viewId = R.id.configAmpacheServerPassword)
225 	public String ampacheEmbeddedPassword = null;
226 }