package com.johnlam.cloudplayer.adapter;
import java.util.ArrayList;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
import com.johnlam.cloudplayer.constants.ICloudMusicPlayerConstants;
import com.johnlam.soundcloud.object.TrackObject;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.ypyproductions.abtractclass.DBBaseAdapter;
import com.johnlam.cloudplayer.R;
import com.ypyproductions.utils.ResolutionUtils;
import com.ypyproductions.utils.StringUtils;
/**
*
*
* @author:YPY Productions
* @Skype: baopfiev_k50
* @Mobile : +84 983 028 786
* @Email: dotrungbao@gmail.com
* @Website: www.ypyproductions.com
* @Project:AndroidCloundMusicPlayer
* @Date:Dec 14, 2014
*
*/
public class TrackAdapter extends DBBaseAdapter implements ICloudMusicPlayerConstants {
public static final String TAG = TrackAdapter.class.getSimpleName();
private Typeface mTypefaceBold;
private DisplayImageOptions mImgOptions;
private ITrackAdapterListener trackAdapter;
private DisplayImageOptions mAvatarOptions;
private Typeface mTypefaceLight;
private Date mDate;
public TrackAdapter(Activity mContext, ArrayList<TrackObject> listDrawerObjects, Typeface mTypefaceBold, Typeface mTypefaceLight, DisplayImageOptions mImgOptions,
DisplayImageOptions mAvatarOptions) {
super(mContext, listDrawerObjects);
this.mTypefaceBold = mTypefaceBold;
this.mTypefaceLight = mTypefaceLight;
this.mImgOptions = mImgOptions;
this.mAvatarOptions = mAvatarOptions;
this.mDate = new Date();
}
@Override
public View getAnimatedView(int position, View convertView, ViewGroup parent) {
return null;
}
@Override
public View getNormalView(int position, View convertView, ViewGroup parent) {
final ViewHolder mHolder;
LayoutInflater mInflater;
if (convertView == null) {
mHolder = new ViewHolder();
mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.item_track, null);
convertView.setTag(mHolder);
mHolder.mImgSongs = (ImageView) convertView.findViewById(R.id.img_track);
mHolder.mImgUsername = (ImageView) convertView.findViewById(R.id.img_avatar);
mHolder.mTvSongName = (TextView) convertView.findViewById(R.id.tv_song);
mHolder.mTvUsername = (TextView) convertView.findViewById(R.id.tv_username);
mHolder.mTvDuration = (TextView) convertView.findViewById(R.id.tv_duration);
mHolder.mTvPlayCount = (TextView) convertView.findViewById(R.id.tv_playcount);
mHolder.mTvTime = (TextView) convertView.findViewById(R.id.tv_time);
mHolder.mBtnDownload = (Button) convertView.findViewById(R.id.btn_download);
mHolder.mRootLayout = (RelativeLayout) convertView.findViewById(R.id.layout_root);
mHolder.mImgLogo = (ImageView) convertView.findViewById(R.id.img_logo);
mHolder.mTvSongName.setTypeface(mTypefaceBold);
mHolder.mTvUsername.setTypeface(mTypefaceBold);
mHolder.mTvDuration.setTypeface(mTypefaceLight);
mHolder.mTvPlayCount.setTypeface(mTypefaceLight);
mHolder.mTvTime.setTypeface(mTypefaceLight);
if(!ALLOW_DOWNLOAD_ALL){
RelativeLayout.LayoutParams mLayoutParams= new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
mLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
mLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL);
mLayoutParams.rightMargin=(int) ResolutionUtils.convertDpToPixel(mContext, 5);
mHolder.mImgLogo.setLayoutParams(mLayoutParams);
}
}
else {
mHolder = (ViewHolder) convertView.getTag();
}
final TrackObject mTrackObject = (TrackObject) mListObjects.get(position);
mHolder.mTvSongName.setText(mTrackObject.getTitle());
mHolder.mTvUsername.setText(mTrackObject.getUsername());
String strPlayerCount = formatVisualNumber(mTrackObject.getPlaybackCount(), ",");
mHolder.mTvPlayCount.setText(strPlayerCount);
Date mTrackDate = mTrackObject.getCreatedDate();
if (mTrackDate != null) {
String mTime = getStringTimeAgo((mDate.getTime() - mTrackDate.getTime()) / 1000);
mHolder.mTvTime.setText(mTime);
}
long duration = mTrackObject.getDuration() / 1000;
String minute = String.valueOf((int) (duration / 60));
String seconds = String.valueOf((int) (duration % 60));
if (minute.length() < 2) {
minute = "0" + minute;
}
if (seconds.length() < 2) {
seconds = "0" + seconds;
}
mHolder.mTvDuration.setText(minute + ":" + seconds);
String urlTrack = mTrackObject.getArtworkUrl();
if (StringUtils.isEmptyString(urlTrack) || urlTrack.equals("null")) {
urlTrack = mTrackObject.getAvatarUrl();
}
if (!StringUtils.isEmptyString(urlTrack) && urlTrack.startsWith("http")) {
urlTrack = urlTrack.replace("large", "crop");
ImageLoader.getInstance().displayImage(urlTrack, mHolder.mImgSongs, mImgOptions);
}
else {
mHolder.mImgSongs.setImageResource(R.drawable.music_note);
}
if(!StringUtils.isEmptyString(mTrackObject.getAvatarUrl()) && mTrackObject.getAvatarUrl().startsWith("http")){
ImageLoader.getInstance().displayImage(mTrackObject.getAvatarUrl(), mHolder.mImgUsername, mAvatarOptions);
}
else{
mHolder.mImgUsername.setImageResource(R.drawable.ic_account_circle_grey);
}
if(ALLOW_DOWNLOAD_ALL){
mHolder.mBtnDownload.setVisibility(View.VISIBLE);
mHolder.mBtnDownload.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (trackAdapter != null) {
trackAdapter.onDownload(mTrackObject);
}
}
});
}
else{
mHolder.mBtnDownload.setVisibility(View.INVISIBLE);
}
mHolder.mRootLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (trackAdapter != null) {
trackAdapter.onListenDemo(mTrackObject);
}
}
});
return convertView;
}
public String formatVisualNumber(long numberValue, String demiter) {
String value = String.valueOf(numberValue);
if (value.length() > 3) {
try {
int number = (int) Math.floor(value.length() / 3);
int lenght = value.length();
String total = "";
for (int i = 0; i < number; i++) {
for (int j = 0; j < 3; j++) {
int index = lenght - 1 - (i * 3 + j);
total = value.charAt(index) + total;
}
if (i != number - 1) {
total = demiter + total;
}
else {
int delta = lenght - number * 3;
if (delta > 0) {
total = demiter + total;
}
}
}
total = value.substring(0, lenght - number * 3) + total;
return total;
}
catch (Exception e) {
e.printStackTrace();
}
}
return String.valueOf(value);
}
public String getStringTimeAgo(long second) {
double minutes = second / 60f;
if (second < 5) {
return "Just now";
}
else if (second < 60) {
return String.valueOf(second) + " seconds ago";
}
else if (second < 120) {
return "A minute ago";
}
else if (minutes < 60) {
return String.valueOf((int) minutes) + " minutes ago";
}
else if (minutes < 120) {
return "A hour ago";
}
else if (minutes < 24 * 60) {
minutes = Math.floor(minutes / 60);
return String.valueOf((int) minutes) + " hours ago";
}
else if (minutes < 24 * 60 * 2) {
return "Yesterday";
}
else if (minutes < 24 * 60 * 7) {
minutes = Math.floor(minutes / (60 * 24));
return String.valueOf((int) minutes) + " days ago";
}
else if (minutes < 24 * 60 * 14) {
return "Last week";
}
else if (minutes < 24 * 60 * 31) {
minutes = Math.floor(minutes / (60 * 24 * 7));
return String.valueOf((int) minutes) + " weeks ago";
}
else if (minutes < 24 * 60 * 61) {
return "Last Month";
}
else if (minutes < 24 * 60 * 365.25) {
minutes = Math.floor(minutes / (60 * 24 * 30));
return String.valueOf((int) minutes) + " months ago";
}
else if (minutes < 24 * 60 * 731) {
return "Last year";
}
else if (minutes > 24 * 60 * 731) {
minutes = Math.floor(minutes / (60 * 24 * 365));
return String.valueOf((int) minutes) + " years ago";
}
return "Unknown";
}
public interface ITrackAdapterListener {
public void onDownload(TrackObject mTrackObject);
public void onListenDemo(TrackObject mTrackObject);
}
public void setTrackAdapterListener(ITrackAdapterListener trackAdapter) {
this.trackAdapter = trackAdapter;
}
private static class ViewHolder {
public RelativeLayout mRootLayout;
public ImageView mImgSongs;
public ImageView mImgUsername;
public TextView mTvSongName;
public TextView mTvUsername;
public Button mBtnDownload;
public TextView mTvDuration;
public TextView mTvPlayCount;
public TextView mTvTime;
public ImageView mImgLogo;
}
}