package com.ved.musicmapapp.fragments;
import java.util.ArrayList;
import java.util.Collections;
import android.app.Activity;
import android.os.Bundle;
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.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import com.ved.musicmapapp.MainActivity;
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.utils.Statics;
import com.ved.musicmapapp.utils.UserSort;
/**
*
* @author Quang
*
*/
public class YouFollowFragment extends Fragment implements GetUserByTypeTask.GetDataListener {
private ListView list;
private UserAdapter uAdapter;
private LinearLayout group_find;
// private LinearLayout group_loadmore;
private Button find_similar, find_fb_friend, find_by_name;
private View mLoadingLayout;
private ArrayList<User> users;
private GetUserByTypeTask mTask;
private Activity mContext;
private FragmentActivity mActivity;
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
mActivity = (FragmentActivity) activity;
this.mContext = activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
return inflater.inflate(R.layout.activity_you_follow, null);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init();
}
private void init() {
list = (ListView) getView().findViewById(R.id.list_you_follow);
mLoadingLayout = getView().findViewById(R.id.loadingLayout);
mLoadingLayout.setVisibility(View.GONE);
// group_loadmore = (LinearLayout)
// mView.findViewById(R.id.group_loadmore);
group_find = (LinearLayout) getView().findViewById(R.id.group_find);
find_similar = (Button) group_find.findViewById(R.id.btn_find_similar);
find_fb_friend = (Button) group_find
.findViewById(R.id.btn_find_fb_friend);
find_by_name = (Button) group_find.findViewById(R.id.btn_find_by_name);
find_similar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity m = (MainActivity) getActivity();
m.setNewPage(new SimilarUserFragment());
}
});
find_fb_friend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity m = (MainActivity) getActivity();
m.setNewPage(new InviteFriendFragment());
}
});
find_by_name.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity m = (MainActivity) getActivity();
m.setNewPage(AddPlaylistFragment.newInstance(2));
}
});
list.setVisibility(View.VISIBLE);
users = new ArrayList<User>();
for (String key : Statics.hashUsers.keySet()) {
User user = Statics.hashUsers.get(key);
if (user.isFollowed()) {
users.add(user);
}
}
Collections.sort(users, new UserSort());
uAdapter = new UserAdapter(getActivity(), users);
list.setAdapter(uAdapter);
if (users.size() == 0) {
group_find.setVisibility(View.VISIBLE);
} else {
group_find.setVisibility(View.GONE);
// TabInfo tabInfo = ((MainFragment) getParentFragment()).getTab(0);
// if (tabInfo != null) {
// tabInfo.tvCount.setText(users.size() + "");
// }
}
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);
//selectedUser.setGenre(result.getGenre());
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() != null && selectedUser.getArtists().size() > 0)) {
loadUserDetailFragment(selectedUser);
}else{
Toast.makeText(getActivity(), getString(R.string.txt_not_internet), Toast.LENGTH_SHORT).show();
}
}
}
});
if (!Statics.isFollowingLoaded) {
getData();
}
}
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 void getData() {
if (mTask != null) {
mTask.cancel(true);
}
if (Statics.curUser != null && getActivity() != null) {
mTask = new GetUserByTypeTask(getActivity(),
Statics.curUser.getFbid(), GetUserByTypeTask.YOU_FOLLOW,
this);
mTask.execute();
}
}
@Override
public void onDestroyView() {
if (mTask != null) {
mTask.cancel(true);
}
if (getView() != null) {
((ViewGroup) getView().getParent()).removeView(getView());
}
super.onDestroyView();
}
/**
* @param tv
*
*/
@Override
public void onStartGetData() {
if (users.size() == 0) {
mLoadingLayout.setVisibility(View.VISIBLE);
}
}
@Override
public void onGotData(ArrayList<User> users) {
mLoadingLayout.setVisibility(View.GONE);
if (users != null) {
// TabInfo tabInfo = ((MainFragment) getParentFragment()).getTab(0);
// if (tabInfo != null) {
// tabInfo.tvCount.setText(users.size() + "");
// }
if (Statics.curUser != null)
Statics.curUser.setTotalYouFollow(users.size());
if (getActivity() != null) {
uAdapter = new UserAdapter(getActivity(), users);
list.setAdapter(uAdapter);
}
if (users.size() == 0) {
group_find.setVisibility(View.VISIBLE);
} else {
list.setVisibility(View.VISIBLE);
group_find.setVisibility(View.GONE);
this.users = users;
}
}
}
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 FragmentActivity getFragmentActivity() {
if (getActivity() != null)
return getActivity();
if (mActivity != null)
return mActivity;
return null;
}
@Override
public void onError(String error) {
mLoadingLayout.setVisibility(View.GONE);
if (users != null && users.size() > 0) {
list.setVisibility(View.VISIBLE);
group_find.setVisibility(View.GONE);
} else {
group_find.setVisibility(View.VISIBLE);
}
}
}