package com.smp.funwithmusic.fragments;
import static com.smp.funwithmusic.global.Constants.TAG_VOLLEY;
import java.util.ArrayList;
import org.json.JSONObject;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.afollestad.cardsui.CardBase;
import com.afollestad.cardsui.CardHeader;
import com.afollestad.cardsui.CardListView;
import com.android.volley.VolleyError;
import com.smp.funwithmusic.R;
import com.smp.funwithmusic.adapters.EventCardAdapter;
import com.smp.funwithmusic.apiclient.SongKickClient;
import com.smp.funwithmusic.dataobjects.Event;
import com.smp.funwithmusic.dataobjects.EventCard;
import com.smp.funwithmusic.global.ApplicationContextProvider;
import com.smp.funwithmusic.global.GlobalRequest;
public class EventsFragment extends BaseArtistFragment
{
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
}
public EventsFragment()
{
super();
}
private CardListView listView;
private EventsListener eventListener;
private String imageUrl;
private EventCardAdapter<EventCard> cardsAdapter;
@Override
public void onPause()
{
super.onPause();
}
@Override
public void onDestroy()
{
super.onDestroy();
if (eventListener != null)
{
eventListener.frag = null;
}
if (cardsAdapter != null)
{
cardsAdapter.cancelPicasso();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View layout = inflater.inflate(R.layout.fragment_cards_list, null);
listView = (CardListView) layout.findViewById(R.id.cardsList);
listView.setOnCardClickListener(new CardListView.CardClickListener()
{
@SuppressWarnings("rawtypes")
@Override
public void onCardClick(int index, CardBase card, View view)
{
final int CORRECT_FOR_HEADER = 1;
String eventUrl = ((ArrayList<Event>) data)
.get(index - CORRECT_FOR_HEADER).getMainUri();
Uri uri = Uri.parse(eventUrl);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
// flipper = (ViewFlipper) layout.findViewById(R.id.flipper);
// prepareAdapter();
return layout;
}
@Override
protected void getData()
{
SongKickClient.getId(GlobalRequest.getInstance(ApplicationContextProvider.getContext())
.getRequestQueue(), TAG_VOLLEY, artist,
listen, listen);
}
private void onIdReceived(String artistId)
{
eventListener = new EventsListener(this);
imageUrl = SongKickClient.getImageUrl(artistId);
SongKickClient.getEvents(GlobalRequest.getInstance(ApplicationContextProvider.getContext())
.getRequestQueue(), TAG_VOLLEY, artistId,
eventListener, eventListener);
}
@Override
protected void makeAdapter()
{
if (isAdded())
{
cardsAdapter = new EventCardAdapter<EventCard>(getActivity(), imageUrl, data.size());
cardsAdapter.setAccentColorRes(android.R.color.holo_blue_dark);
CardHeader header = new CardHeader("Upcoming Events");
cardsAdapter.add(header);
for (int i = 0; i < data.size(); ++i)
{
Event event = ((ArrayList<Event>) data).get(i);
cardsAdapter.add(new EventCard(event));
}
listView.setAdapter(cardsAdapter);
}
}
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
}
static class ArtistIdListener extends BaseArtistListener
{
ArtistIdListener(BaseArtistFragment baseArtistFragment)
{
super(baseArtistFragment);
}
@Override
public void onResponse(JSONObject response)
{
if (frag != null)
{
super.onResponse(response);
((EventsFragment) frag).onIdReceived(
SongKickClient.parseId(response));
}
}
@Override
public void onErrorResponse(VolleyError error)
{
if (frag != null)
{
super.onErrorResponse(error);
}
}
}
static class EventsListener extends BaseArtistListener
{
EventsListener(BaseArtistFragment baseArtistFragment)
{
super(baseArtistFragment);
}
@Override
public void onResponse(JSONObject response)
{
if (frag != null)
{
super.onResponse(response);
frag.onDataReceived(SongKickClient
.parseEvents(response));
}
}
@Override
public void onErrorResponse(VolleyError error)
{
if (frag != null)
{
super.onErrorResponse(error);
}
}
}
}