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 * Scan these directories for sound files. Directory names are separated by 161 * ':' 162 */ 163 @Bind(captionId = R.string.configScanDirsShort, viewId = R.id.configScanDirs) 164 public String scanDirs = "/sdcard"; 165 166 /*** 167 * Dynamic playlist: History length. 168 */ 169 @Bind(captionId = R.string.configDynamicHistory, viewId = R.id.configDynamicHistory, min = 0, max = 99) 170 public int dynamicHistorySize = 10; 171 172 /*** 173 * Dynamic playlist: upcoming track count. 174 */ 175 @Bind(captionId = R.string.configDynamicUpcoming, viewId = R.id.configDynamicUpcoming, min = 1, max = 99) 176 public int dynamicUpcomingSize = 5; 177 178 /*** 179 * Notify only when minimized. 180 */ 181 @Bind(captionId = -1, viewId = R.id.configPlayerNotifHiddenOnly) 182 public boolean notifyWhenMinimizedOnly = true; 183 184 /*** 185 * Formatting string for the player ticker. 186 */ 187 @Bind(captionId = R.string.configPlayerTickerFormat, viewId = R.id.configPlayerTickerFormat, escape = true, tagFormat = true) 188 public String playerTickerFormat = "{%track: }{%artist - }%title{ (%album{, %year})}"; 189 190 /*** 191 * The gap between tracks, in millis. 192 */ 193 @Bind(captionId = R.string.configPlayerGap, viewId = R.id.configPlayerGap, min = 0, max = 9999) 194 public long playerGap = 1000; 195 196 /*** 197 * Formatting string for the playlist items. 198 */ 199 @Bind(captionId = R.string.configPlaylistFormat, viewId = R.id.configPlaylistFormat, escape = true, tagFormat = true) 200 public String playlistFormat = "{{%artist{, }%album{, }%year}\n} {%track }%title{ (%length)}"; 201 202 /*** 203 * Show tag as <code>null</code> if previous track's tag was the same. 204 */ 205 @Bind(captionId = -1, viewId = R.id.configPlaylistRepeatIsNull) 206 public boolean dontRepeatSameTag = true; 207 208 /*** 209 * Remember playlist on player quit. 210 */ 211 @Bind(captionId = -1, viewId = R.id.configPlaylistRemember) 212 public boolean rememberPlaylist = true; 213 214 /*** 215 * Cache size in kb. 216 */ 217 @Bind(captionId = R.string.configCoverCache, viewId = R.id.configCoverCache) 218 public int coverCache = 256; 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.configCoverCacheFull) 225 public boolean dontDownloadOnCacheFull = true; 226 227 /*** 228 * If <code>true</code> then new covers will not be downloaded. If 229 * <code>false</code> then old covers will be purged. 230 */ 231 @Bind(captionId = -1, viewId = R.id.configAmpacheServerPassword) 232 public String ampacheEmbeddedPassword = null; 233 }