/*
* Copyright 2008-2013, ETH Zürich, Samuel Welten, Michael Kuhn, Tobias Langner,
* Sandro Affentranger, Lukas Bossard, Michael Grob, Rahul Jain,
* Dominic Langenegger, Sonia Mayor Alonso, Roger Odermatt, Tobias Schlueter,
* Yannick Stucki, Sebastian Wendland, Samuel Zehnder, Samuel Zihlmann,
* Samuel Zweifel
*
* This file is part of Jukefox.
*
* Jukefox is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or any later version. Jukefox is
* distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* Jukefox. If not, see <http://www.gnu.org/licenses/>.
*/
package ch.ethz.dcg.pancho3.model;
import ch.ethz.dcg.jukefox.commons.DataUnavailableException;
import ch.ethz.dcg.jukefox.commons.utils.JoinableThread;
import ch.ethz.dcg.jukefox.commons.utils.Log;
import ch.ethz.dcg.jukefox.manager.AndroidSettingsManager;
import ch.ethz.dcg.jukefox.manager.libraryimport.ImportProgressListener;
import ch.ethz.dcg.jukefox.manager.libraryimport.LibraryChangeDetectedListener;
import ch.ethz.dcg.jukefox.manager.libraryimport.Progress;
import ch.ethz.dcg.jukefox.model.AndroidCollectionModelManager;
public class AndroidApplicationState implements IAndroidApplicationStateController {
public static final String TAG = AndroidApplicationState.class.getSimpleName();
private AndroidCollectionModelManager collectionModel;
public AndroidApplicationState(AndroidCollectionModelManager collectionModel) {
super();
this.collectionModel = collectionModel;
}
@Override
public void setFirstStart(boolean b) {
AndroidSettingsManager.getAndroidSettingsEditor().setFirstStart(b);
}
@Override
public void addImportProgressListener(ImportProgressListener listener) {
collectionModel.getLibraryImportManager().getImportState().addProgressListener(listener);
}
@Override
public Progress getImportProgress() {
return collectionModel.getLibraryImportManager().getImportState().getProgress();
}
@Override
public int getNumbersOfSongsWithCoordinates() {
try {
return collectionModel.getOtherDataProvider().getNumberOfSongsWithCoordinates();
} catch (DataUnavailableException e) {
Log.w(TAG, e);
return 0;
}
}
@Override
public boolean isBaseDataCommitted() {
return collectionModel.getLibraryImportManager().getImportState().isBaseDataCommitted();
}
@Override
public boolean isCoversFetched() {
return collectionModel.getLibraryImportManager().getImportState().isCoversFetched();
}
@Override
public boolean isFirstStart() {
return AndroidSettingsManager.getAndroidSettingsReader().isFirstStart();
}
@Override
public boolean isImporting() {
return collectionModel.getLibraryImportManager().getImportState().isImporting();
}
@Override
public boolean isMapDataCommitted() {
return collectionModel.getLibraryImportManager().getImportState().isMapDataCommitted();
}
@Override
public void waitForPlaybackFunctionality() {
// TODO: replace this hack by event mechanism!!
// OnPlaylistFunctionalityInitialized event (when registering, and it is
// already initialized => invoke callback method on sender to make sure
// the required actions are performed; otherwise, this will work like a
// normal event).
while (!JukefoxApplication.getPlayerController().isReady()) {
try {
JoinableThread.sleep(10);
} catch (InterruptedException e) {
Log.w(TAG, e);
}
}
}
@Override
public void addLibraryChangeDetectedListener(LibraryChangeDetectedListener listener) {
collectionModel.getLibraryImportManager().addLibraryChangeDetectedListener(listener);
}
@Override
public void removeLibraryChangeDetectedListener(LibraryChangeDetectedListener listener) {
collectionModel.getLibraryImportManager().removeLibraryChangeDetectedListener(listener);
}
@Override
public void removeImportProgressListener(ImportProgressListener listener) {
collectionModel.getLibraryImportManager().getImportState().removeProgressListener(listener);
}
}