Closes #21; Refactored the Bookshelf part of the application. The flow is now similar to the Player. Extracted GUI-specific methods from IBookshelfEvents to a IBookshelfGUIEvents interface. Extracted the save/load bookmark functionality from BookshelfController to a separate class; BookshelfHandler. The contrllers are now created in the same way. Started adding exceptions to be thrown when something not intended happens in the model. These are to be caught by the controlls that call the methods in the model. Added a 'no cover' image.
Refactored model code. Model methods should now all throw exceptions if an invalid parameter is sent. Therefore it should always be checked if a track or book is selected before modifying the model. Created BookshelfControllerTest and implemented it. Changed the implementation of some model methods. Partially implemented the Tag feature. Made some changes in names and restructured the interfaces. Added a getTitle method to the model for books. This should be used instead of getBook().getTitle; everything must go through the bookshelf for events to fire.
Fixed some minor issues. Reorganized the code in the model classes. Added missing throwing declarations. Removed dead code.
Closes #8, closes #10, closes #16, closes #17, closes #20; Fixed a number of issues. Audio now stops playing when intended. Expanding a finished book no longer crashes the app. Both the book and track seek bars are slightly optimized (they no longer jump around as much when using them). Track titles now show up properly (no longer null). Selecting tracks in the bookshelf tracklist now plays them properly. Solved some logical issues in PlayerController and model classes.
Closes #22; Fixed all issues (except tabs, import orders and some TODOs) pointed out by Checkstyle-analysis.
Implemented the play/pause button and functionality.
Moved tag implementation to Track class as intended. Fixed a few issues pointed out by FindBugs.
Closes #38; Made tags serializable.
Minor fix.
Disabled property change updates from being sent if no listeners are present.
Fixed broken save functionality. The view module is no longer updated when in stopped state.
Created user's guide, added some comments to bookshelffragment and browseractivity and implemented BrowserActivityTest.
Fixed some erroneous calls.
Merge branch 'candidate' of https://github.com/MarcusParkkinen/AudioBook into candidate
Worked on Player UI. It now shows the current track and how many there are. It should also update properly. Fixed issue with track bar thumb being out-of-synch with its progress bar. Fixed issues in model. The selected index can now be set to -1. This means that when an update fires with that index it should be checked before the model is used. Removed lots of dead code. Improved PlayerController. next/previousTrack now work as intended. Added thrown exceptions to model classes (mostly for debugging). Moved hard-coded variables to Constants. The pause button still at times will show the wrong state, and still needs an initial state (when no book is selected) if the Player UI should be accessible then. IBookUpdates now extends ITrackupdates, since all track updates must be implemented if book updates are implemented. Added some documentation. (Note: Player UI is a WIP.)
Merge branch 'candidate' of ssh://github.com/MarcusParkkinen/AudioBook into candidate
Closes #37, closes #36, closes #25, closes #18; NOTE: some issues were fixed in separate branches. Fixed issue on MainActivity registering itself as a listener twice (since onCreate also calls onResume). Changed some hard-coded values. WIP on Player GUI.
Fixed some violations and added &aring; and &auml;.
Reworked the Player GUI. Implemented the missing graphical components (duration for book and track, and elapsed time for book).
Changed implementation of bookshelfFragment to use bookshelf instead of a list of books and its tracks.