package com.turtleplayer.view;
import android.app.Activity;
import android.os.AsyncTask;
import android.view.View;
import com.turtleplayer.TurtlePlayer;
import com.turtleplayer.controller.TouchHandler;
import com.turtleplayer.model.Track;
import com.turtleplayer.model.TrackBundle;
import com.turtleplayer.persistance.framework.filter.Filter;
import com.turtleplayer.persistance.turtle.db.structure.Tables;
import com.turtleplayer.player.ObservableOutput;
import com.turtleplayer.player.Output;
import com.turtleplayer.player.OutputCommand;
import com.turtleplayer.playlist.playorder.PlayOrderStrategy;
/**
* TURTLE PLAYER
* <p/>
* Licensed under MIT & GPL
* <p/>
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
* <p/>
* More Information @ www.turtle-player.co.uk
*
* @author Simon Honegger (Hoene84)
*/
public class AlbumArtView
{
private final View albumArtViewGroup;
//AlbumArt
private final AlbumArt albumArt;
private final AlbumArt albumArtLeft;
private final AlbumArt albumArtRight;
private AsyncTask<Track, Void, TrackBundle> actualAsyncTask = null;
public AlbumArtView(final Activity activity,
final TurtlePlayer tp,
final PlayOrderStrategy playOrderStrategy)
{
albumArtViewGroup = activity.findViewById(com.turtleplayerv2.R.id.relativeLayout_albumArt);
albumArt = new AlbumArt(albumArtViewGroup, AlbumArt.Type.CENTER, tp.db);
albumArtLeft = new AlbumArt(albumArtViewGroup, AlbumArt.Type.LEFT, tp.db);
albumArtRight = new AlbumArt(albumArtViewGroup, AlbumArt.Type.RIGHT, tp.db);
tp.player.addObserver(new ObservableOutput.PlayerObserver()
{
public void trackChanged(final Track track, int lengthInMillis)
{
albumArt.setTrackDigest(track);
albumArtLeft.setTrackDigest(null);
albumArtRight.setTrackDigest(null);
actualAsyncTask = new AsyncTask<Track, Void, TrackBundle>(){
@Override
protected TrackBundle doInBackground(Track... params)
{
Thread.currentThread().setName(Thread.currentThread().getName() + ":albumArtUpdater");
if(actualAsyncTask == this)
{
return tp.playlist.enrich(playOrderStrategy, params[0]);
}
return null;
}
@Override
protected void onPostExecute(TrackBundle trackBundle)
{
if(actualAsyncTask == this && trackBundle != null)
{
albumArt.setTrack(trackBundle.getTrack());
albumArtRight.setTrack(trackBundle.getTrackAfter());
albumArtLeft.setTrack(trackBundle.getTrackBefore());
}
}
}.execute(track);
}
public void started()
{
//ignore
}
public void stopped()
{
//ignore
}
public String getId()
{
return "AlbumArtUpdater";
}
});
TouchHandler touchHandler = new TouchHandler(
activity,
albumArt.getAlbumArtView(),
albumArtLeft.getAlbumArtView(),
albumArtRight.getAlbumArtView()
){
@Override
protected void nextGestureRecognized()
{
tp.player.connectPlayer(new OutputCommand()
{
public void connected(Output output)
{
output.play(tp.playlist.getNext(playOrderStrategy, output.getCurrTrack()));
}
});
}
@Override
protected void previousGestureRecognized()
{
tp.player.connectPlayer(new OutputCommand()
{
public void connected(Output output)
{
output.play(tp.playlist.getPrevious(playOrderStrategy, output.getCurrTrack()));
}
});
}
@Override
protected void filterSelected(final Filter<? super Tables.Tracks> filter,
final boolean wasActive)
{
tp.player.connectPlayer(new OutputCommand()
{
public void connected(Output output)
{
if(wasActive){
tp.playlist.removeFilter(filter);
}
else
{
tp.playlist.addFilter(filter);
}
}
});
}
public String getId()
{
return "SwipeAndInstantFilterSelectionDetector";
}
};
albumArt.getAlbumArtView().setOnTouchListener(touchHandler);
tp.playlist.addObserver(touchHandler);
tp.player.addObserver(touchHandler);
}
}