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; } }