package com.csound.wizard; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import android.app.Application; import android.content.Context; import android.view.View; import com.csound.wizard.model.CacheState; import com.csound.wizard.model.Model; import com.csound.wizard.model.TrackState; public class App extends Application { private Player player = new Player(); private String playerTrack = ""; private Model model = null; private CacheState cache = new CacheState(); private boolean isWatchingCurrentPlaylist = false; private Settings settings = new Settings();; public Model getModel() { return model; } public Settings getSettings() { return settings; } public void loadModel(Context ctx) { if (model == null) { model = Model.load(ctx); } } public TrackState loadCurrentState(String track) { if (cache.containsKey(track)) { return cache.get(track); } else { TrackState st; try { st = TrackState.load(getCurrentStateFileName(track)); } catch (IOException e) { st = TrackState.readDefaultState(track); } cache.put(track, st); return st; } } public static String getCurrentStateDir(String trackName) { return FilenameUtils.concat(FilenameUtils.getFullPath(trackName), FilenameUtils.getBaseName(trackName) + "-state"); } public static String getCurrentStateFileName(String trackName) { return FilenameUtils.concat(getCurrentStateDir(trackName), "current.json"); } public void saveCurrentState(String track, TrackState value) { cache.put(track, value); } public void saveCacheToDisk() { cache.saveToDisk(); } public void saveStateFromView(String trackName, View rootView) { TrackState st; if (cache.containsKey(trackName)) { st = cache.get(trackName); st.saveFromView(rootView); } else { st = new TrackState(); st.saveFromView(rootView); cache.put(trackName, st); } } @Override public void onCreate() { super.onCreate(); Model.clear(this); } public void clearCurrentTrack() { String track = model.getCurrentTrack().getName(); File dir = new File(getCurrentStateDir(track)); if (dir.exists()) { try { FileUtils.deleteDirectory(dir); } catch (IOException e) { } } cache.remove(track); } public void setWatchingCurrentPlaylist(boolean val) { isWatchingCurrentPlaylist = val; } public boolean getIsWatchingCurrentPlaylist() { return isWatchingCurrentPlaylist; } public void setupNewPlayer() { player.stop(); player = new Player(); } public void play(String trackPath) { player.play(trackPath); } public void stop() { player.stop(); } public Player getPlayer() { return player; } public void setupPlayerFor(String trackPath) { if (!playerTrack.equals(trackPath)) { setupNewPlayer(); playerTrack = trackPath; } } public boolean isSameTrack(String trackPath) { return playerTrack.equals(trackPath); } public void clearPlayerTrack() { playerTrack = ""; } }