package com.turtleplayer.view;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.TextView;
import com.turtleplayerv2.R;
import com.turtleplayer.model.Track;
import com.turtleplayer.persistance.turtle.db.TurtleDatabase;
import com.turtleplayer.preferences.Preferences;
import com.turtleplayer.presentation.AlbumArtResolver;
import com.turtleplayer.presentation.InstanceFormatter;
/**
* 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 AlbumArt
{
public enum Type
{
RIGHT(-1, com.turtleplayerv2.R.id.albumArtRight), // FIXME: should be 1, if your know why its inverted, change it
LEFT(1, com.turtleplayerv2.R.id.albumArtLeft), // FIXME: should be -1, your know why its inverted, change it
CENTER(0, com.turtleplayerv2.R.id.albumArt);
private final double horizontalShift;
private final int rId;
Type(double horizontalShift, int rId)
{
this.horizontalShift = horizontalShift;
this.rId = rId;
}
public double getHorizontalShift()
{
return horizontalShift;
}
public int getRId()
{
return rId;
}
}
private final View albumArtView;
private final Type type;
private final ImageView albumArt;
private final TextView title;
private final TextView artist;
private final TextView album;
private final TurtleDatabase db;
private AsyncTask<Track, Void, Bitmap> actualAsyncTask = null;
public AlbumArt(View albumArtViewGroup,
Type type,
TurtleDatabase db)
{
this.db = db;
albumArtView = albumArtViewGroup.findViewById(type.getRId());
this.type = type;
albumArt = (ImageView) albumArtView.findViewById(com.turtleplayerv2.R.id.picture);
title = (TextView) albumArtView.findViewById(com.turtleplayerv2.R.id.trackTitle);
artist = (TextView) albumArtView.findViewById(com.turtleplayerv2.R.id.trackArtist);
album = (TextView) albumArtView.findViewById(com.turtleplayerv2.R.id.trackAlbum);
albumArtView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
{
public boolean onPreDraw()
{
setInitialPositions();
albumArtView.getViewTreeObserver().removeOnPreDrawListener(this);
return true;
}
});
}
public View getAlbumArtView()
{
return albumArtView;
}
public void setTrack(final Track track)
{
setTrackDigest(track);
if(track != null){
actualAsyncTask = new AlbumArtResolver(db){
@Override
protected Bitmap doInBackground(Track... params)
{
if(actualAsyncTask == this)
{
return super.doInBackground(params);
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap)
{
if(actualAsyncTask == this && bitmap != null)
{
albumArt.setImageBitmap(bitmap);
Log.v(Preferences.TAG, "albumart for " + track.getFullPath() + " resolved");
}
}
}.execute(track);
}
}
/**
* update View synchronous with attributes easy to resolve
* @param track
*/
public void setTrackDigest(final Track track)
{
if(track != null){
title.setText(track.accept(InstanceFormatter.SHORT_WITH_NUMBER));
artist.setText(track.GetArtist().accept(InstanceFormatter.SHORT));
album.setText(track.GetAlbum().accept(InstanceFormatter.SHORT));
}
else
{
title.setText("");
artist.setText("");
album.setText("");
}
albumArt.setImageDrawable(albumArtView.getResources().getDrawable(com.turtleplayerv2.R.drawable.blank_album_art));
albumArtView.invalidate();
}
public void setInitialPositions()
{
albumArtView.setVisibility(View.VISIBLE);
albumArtView.scrollTo((int)(type.getHorizontalShift() * albumArtView.getWidth()), 0);
}
}