package com.ved.musicmapapp.fragments;
import java.util.ArrayList;
import java.util.Collections;
import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.ved.musicmapapp.R;
import com.ved.musicmapapp.Objects.Artist;
import com.ved.musicmapapp.Objects.Genre;
import com.ved.musicmapapp.Objects.User;
import com.ved.musicmapapp.adapters.UserAdapter;
import com.ved.musicmapapp.fragments.MainFragment.TabInfo;
import com.ved.musicmapapp.providers.GetUserArtistListTask;
import com.ved.musicmapapp.providers.GetUserByTypeTask;
import com.ved.musicmapapp.providers.GetUserPlaylistsListTask;
import com.ved.musicmapapp.receiver.FollowedBroadcastReceiver;
import com.ved.musicmapapp.utils.Statics;
import com.ved.musicmapapp.utils.UserSort;
public class FollowYouFragment extends Fragment implements
GetUserByTypeTask.GetDataListener {
private ListView list;
private UserAdapter uAdapter;
private View loadingLayout;
private GetUserByTypeTask mTask;
private ArrayList<User> users;
private FragmentActivity mActivity;
private View resultLayout;
private FollowedBroadcastReceiver mFollowedBroadcastReceiver;
private Handler mHandler;
private Activity mContext;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg != null) {
if (Statics.curUser != null) {
reloadData();
}
}
super.handleMessage(msg);
}
};
mFollowedBroadcastReceiver = new FollowedBroadcastReceiver();
mFollowedBroadcastReceiver.setMessenger(new Messenger(mHandler));
IntentFilter filter = new IntentFilter(FollowedBroadcastReceiver.ACTION);
getActivity().registerReceiver(mFollowedBroadcastReceiver, filter);
return inflater.inflate(R.layout.activity_you_follow, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
list = (ListView) getView().findViewById(R.id.list_you_follow);
loadingLayout = getView().findViewById(R.id.loadingLayout);
resultLayout = getView().findViewById(R.id.resultLayout);
loadingLayout.setVisibility(View.GONE);
// list.setVisibility(View.VISIBLE);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
final int pos, long arg3) {
int songCount = 0;
final User selectedUser = users.get(pos);
ArrayList<Artist> userArtists = selectedUser.getArtists();
if (userArtists != null) {
for (Artist item : userArtists) {
songCount += item.getSongs().size();
}
}
//If playlist is not there, download that
if(selectedUser.getPlaylists() == null && Statics.isNetworkConnected(mContext)) {
new GetUserPlaylistsListTask(mContext, uAdapter.getItem(pos)){
protected void onPostExecute(User result) {
super.onPostExecute(result);
};
}.execute();
}
//If song count is changed at server then download all artists and songs
if ( songCount != users.get(pos).getNoSong() && Statics.isNetworkConnected(mContext)) {
new GetUserArtistListTask(getActivity(), Statics.curUser.getFbid(), uAdapter.getItem(pos).getFbid()) {
protected void onPostExecute(User result) {
super.onPostExecute(result);
if (result != null) {
selectedUser.setArtists(result.getArtists());
ArrayList<String>allGen = new ArrayList<String>();
for(String gen : result.getGenre()){
if(!allGen.toString().toLowerCase().contains(gen.toLowerCase()))
allGen.add(gen);
}
selectedUser.setGenre(allGen);
loadUserDetailFragment(selectedUser);
} else {
Toast.makeText(
getActivity().getApplicationContext(),
getString(R.string.error_no_saved_data),
Toast.LENGTH_SHORT).show();
}
};
}.execute();
}
else {
if ((selectedUser != null && selectedUser.getArtists().size() > 0)) {
loadUserDetailFragment(selectedUser);
}else{
Toast.makeText(getActivity(), getString(R.string.txt_not_internet), Toast.LENGTH_SHORT).show();
}
}
}
});
reloadData();
if (getTvCount() != null && !Statics.isFollowersLoaded
&& Statics.isNetworkConnected(getActivity())) {
getData(getFragmentActivity());
}
}
private void loadUserDetailFragment(User user) {
UserDetailsFragment fragment = new UserDetailsFragment();
fragment.setUser(user);
FragmentTransaction fragmentTransaction = getActivity()
.getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_content,
fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
public TextView getTvCount() {
// TabInfo tab = new ((MainFragment) getParentFragment()).getTab(1);
// if (tab == null) {
// return null;
// }
// return tab.tvCount;
return null;
}
@Override
public void onResume() {
super.onResume();
}
public void getData(final Activity act) {
if (null != mTask)
mTask.cancel(true);
if (Statics.curUser != null) {
mTask = new GetUserByTypeTask(getFragmentActivity(),
Statics.curUser.getFbid(), GetUserByTypeTask.FOLLOW_YOU,
this);
mTask.execute();
}
}
public void reloadData() {
try {
users = new ArrayList<User>();
for (String key : Statics.hashUsers.keySet()) {
User user = Statics.hashUsers.get(key);
if (user.isFollowMe()
&& !user.getFbid().equals(Statics.curUser.getFbid())) {
users.add(user);
}
}
Collections.sort(users, new UserSort());
loadingLayout.setVisibility(View.GONE);
uAdapter = new UserAdapter(getActivity(), users);
list.setAdapter(uAdapter);
if (users.size() >= 0) {
// TabInfo tabInfo = ((MainFragment) getParentFragment())
// .getTab(1);
// if (tabInfo != null) {
// tabInfo.tvCount.setText(users.size() + "");
// }
}
if (null != getFragmentActivity() && users.size() > 0) {
if (null != getTvCount())
getTvCount().setText(users.size() + "");
list.setVisibility(View.VISIBLE);
} else {
if (null != getTvCount()) {
getTvCount().setText("0");
}
list.setVisibility(View.GONE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param tv
* the tv to set
*/
// public void setReloadData(boolean reload) {
// this.reload = reload;
// }
@Override
public void onDestroyView() {
if (null != mTask)
mTask.cancel(true);
if (getView() != null) {
((ViewGroup) getView().getParent()).removeView(getView());
}
getActivity().unregisterReceiver(mFollowedBroadcastReceiver);
super.onDestroyView();
}
@Override
public void onStartGetData() {
if (users.size() == 0) {
/*loadingLayout.setVisibility(View.VISIBLE);
resultLayout.setVisibility(View.GONE);*/
getTvCount().setText("0");
}
}
@Override
public void onGotData(ArrayList<User> users) {
list.setVisibility(View.VISIBLE);
if (null != loadingLayout) {
loadingLayout.setVisibility(View.GONE);
resultLayout.setVisibility(View.VISIBLE);
}
if (this.users == null || this.users.size() == 0) {
// resultLayout.setVisibility(View.GONE);
getTvCount().setText("0");
loadingLayout.setVisibility(View.GONE);
list.setVisibility(View.GONE);
resultLayout.setVisibility(View.VISIBLE);
}
else{
this.users = users;
if (null != getTvCount())
getTvCount().setText(users.size() + "");
if (getFragmentActivity() != null) {
uAdapter = new UserAdapter(getFragmentActivity(), users);
// resultLayout.setVisibility(View.GONE);
list.setAdapter(uAdapter);
}
}
if (Statics.curUser != null) {
Statics.curUser.setTotalFollowYou(users.size());
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = (FragmentActivity) activity;
this.mContext = activity;
}
@Override
public void onError(String error) {
// TODO Auto-generated method stub
}
public FragmentActivity getFragmentActivity() {
if (getActivity() != null)
return getActivity();
if (mActivity != null)
return mActivity;
return null;
}
}