Back to project page AudioBook.
The source code is released under:
Creative Commons Legal Code Attribution-NonCommercial 3.0 Unported CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT C...
If you think the Android project AudioBook listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/** * This work is licensed under the Creative Commons Attribution-NonCommercial- * NoDerivs 3.0 Unported License. To view a copy of this license, visit * http://creativecommons.org/licenses/by-nc-nd/3.0/ or send a letter to * Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, * 94041, USA./* w ww . j av a 2 s . c o m*/ * * Use of this work is permitted only in accordance with license rights granted. * Materials provided "AS IS"; no representations or warranties provided. * * Copyright ? 2012 Marcus Parkkinen, Aki K?kel?, Fredrik ?hs. **/ package edu.chalmers.dat255.audiobookplayer.model; import java.io.Serializable; import java.security.InvalidParameterException; import java.util.List; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import android.util.Log; import edu.chalmers.dat255.audiobookplayer.interfaces.ITrackUpdates; /** * Represents a single audio track. Includes its duration, current elapsed time * and file path. * <p> * Duration and track path are immutable. * * @author Aki K?kel?, Marcus Parkkinen * @version 0.6 * */ public final class Track implements ITrackUpdates, Serializable { private static final String TAG = "Bookshelf.java"; private static final String TAG_INDEX_ILLEGAL = " Tag index is illegal"; private static final long serialVersionUID = 3; private final String path; private final int duration; private int elapsedTime; private List<Tag> tags; private String title; /** * Constructor for a track. Path to the data source as well as the length of * the track must be provided. The path may not be an empty string (""). * * @param path * Path to the track * @param duration * Playing time of the track in ms. */ public Track(String path, int duration) { if (path != null && path.length() > 0 && duration > 0) { this.path = path; this.duration = duration; } else { throw new InvalidParameterException( "Attempting to create track with either null path or negative duration."); } } /** * Constructor for a track. Path to the data source as well as the title of * the book and the length of the track must be provided. The path may not * be an empty string (""). * * @param path * @param title * @param duration */ public Track(String path, String title, int duration) { this(path, duration); this.setTitle(title); } /** * Copy constructor. * * @param other */ public Track(Track original) { this(original.path, original.title, original.duration); this.elapsedTime = original.elapsedTime; this.title = original.title; } /** * @return The path to the track. */ protected String getTrackPath() { return path; } /** * @return The playing time of the track. */ protected int getDuration() { return duration; } /** * @return The elapsed time of the track. */ public int getElapsedTime() { return elapsedTime; } public void setSelectedTrackElapsedTime(int elapsedTime) { if (elapsedTime > duration) { Log.e(TAG, "elapsedTime (" + elapsedTime + ") set to duration (" + duration + ")"); this.elapsedTime = duration; } else if (elapsedTime >= 0) { this.elapsedTime = elapsedTime; } else { throw new InvalidParameterException( "Attempting to set elapsed time to a negative value."); } } /** * Returns the title of the track. * * @return The title of the track (the path without the parent folders). */ public String getTrackTitle() { return this.title; } /** * Sets the title of the track. * * @param title */ public void setTitle(String title) { this.title = title; } /* * (non-Javadoc) * * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return new HashCodeBuilder().append(duration).append(elapsedTime) .append(path).append(tags).append(title).toHashCode(); } /* * (non-Javadoc) * * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj instanceof Track) { final Track other = (Track) obj; return new EqualsBuilder().append(duration, other.duration) .append(elapsedTime, other.elapsedTime) .append(tags, other.tags).append(title, other.title) .append(path, other.path).isEquals(); } else { return false; } } /* * (non-Javadoc) * * @see * edu.chalmers.dat255.audiobookplayer.interfaces.ITrackUpdates#addTag(int) */ public void addTag(int time) { this.tags.add(new Tag(time)); } /* * (non-Javadoc) * * @see * edu.chalmers.dat255.audiobookplayer.interfaces.ITrackUpdates#removeTagAt * (int) */ public void removeTagAt(int tagIndex) { if (!isLegalTagIndex(tagIndex)) { throw new IndexOutOfBoundsException(TAG + " removeTagAt" + TAG_INDEX_ILLEGAL); } this.tags.remove(tagIndex); } /** * Returns an array of times for the tags. May return an empty array (check * length == 0). * * @return */ public int[] getTagTimes() { int[] result = new int[this.tags.size()]; for (int i = 0; i < this.tags.size(); i++) { result[i] = this.tags.get(i).getTime(); } return result; } /** * @param tagIndex * @return */ private boolean isLegalTagIndex(int tagIndex) { return tagIndex >= 0 && tagIndex < tags.size(); } }