package com.ved.musicmapapp.fragments; import java.util.ArrayList; import android.app.Activity; import android.app.Dialog; import android.app.FragmentManager; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.ved.musicmapapp.MainActivity; import com.ved.musicmapapp.MainActivity.OnShareListener; import com.ved.musicmapapp.R; import com.ved.musicmapapp.Objects.Playlist; import com.ved.musicmapapp.Objects.User; import com.ved.musicmapapp.adapters.DBAdapter; import com.ved.musicmapapp.adapters.UserPlaylistsAdapter; import com.ved.musicmapapp.providers.DeletePlaylistTask; import com.ved.musicmapapp.providers.GetUserByTypeTask; import com.ved.musicmapapp.providers.GetUserPlaylistsListTask; import com.ved.musicmapapp.providers.GetUserSongsFromPlaylistsListTask; import com.ved.musicmapapp.providers.RenamePlaylistTask; import com.ved.musicmapapp.utils.Statics; /** * * @author Quang * */ public class PlaylistFragment extends Fragment implements GetUserByTypeTask.GetDataListener, OnShareListener { private ListView list; private UserPlaylistsAdapter 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; View emptyLayout; private User mUser; private boolean isCurrentUser; public void setUser(User user){ this.mUser = user; if(this.mUser.getID() == Statics.curUser.getID()) { isCurrentUser = true; } } @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); this.mContext = activity; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View v = inflater.inflate(R.layout.activity_you_follow, null); init(v); return v; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { // TODO Auto-generated method stub super.onViewCreated(view, savedInstanceState); } private void initList(View view) { if(mUser != null){ uAdapter = new UserPlaylistsAdapter(getActivity(), mUser.getPlaylists()); } else uAdapter = new UserPlaylistsAdapter(getActivity(), null); list.setAdapter(uAdapter); } private void init(final View view) { list = (ListView) view.findViewById(R.id.list_you_follow); mLoadingLayout = view.findViewById(R.id.loadingLayout); mLoadingLayout.setVisibility(View.GONE); // group_loadmore = (LinearLayout) // mView.findViewById(R.id.group_loadmore); group_find = (LinearLayout) view.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); View v = view.findViewById(R.id.layout_section); // if(mUser.getID() != Statics.curUser.getID()) v.setVisibility(View.VISIBLE); v.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { UserArtistsFragment fragment = new UserArtistsFragment(); fragment.setUser(mUser); if(mUser.getPlaylists() != null) Log.e("check","mUser playlist size" + mUser.getPlaylists().size()); else Log.e("check","mUser playlist size 0"); if(getParentFragment().getClass().equals(UserDetailsFragment.class)) ((UserDetailsFragment)getParentFragment()).update(fragment, true); else ((MainFragment)getParentFragment()).update(fragment, true); } }); 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)); } }); emptyLayout = view.findViewById(R.id.resultLayout); list.setVisibility(View.VISIBLE); emptyLayout.setVisibility(View.GONE); if(mUser != null) { if(mUser.getPlaylists() == null){ // list.setVisibility(View.GONE); // emptyLayout.setVisibility(View.VISIBLE); new GetUserPlaylistsListTask(mContext, mUser){ protected void onPostExecute(User result) { super.onPostExecute(result); if(mUser != null){ mUser = (User)result; if(mUser != null ) { initList(view); } } }; }.execute(); } else{ // emptyLayout.setVisibility(View.GONE); initList(view); uAdapter.notifyDataSetChanged(); } } list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, final int pos, long arg3) { final ArrayList<Playlist> userPlaylists = mUser.getPlaylists(); final Playlist selectedPlaylist = userPlaylists.get(pos); int localSongCount = Statics.getSelectedPlaylistSongCount(selectedPlaylist); if(selectedPlaylist.getNumberOfTracks() == 0) { Toast.makeText(mContext, "No Track Added in this Playlist.", Toast.LENGTH_SHORT).show(); } else if (Statics.isNetworkConnected(mContext) && selectedPlaylist.getNumberOfTracks() != localSongCount) { new GetUserSongsFromPlaylistsListTask(getActivity(), mUser, selectedPlaylist) { protected void onPostExecute(Playlist result) { super.onPostExecute(result); if (result != null) { // Updating resulted playlist in model userPlaylists.remove(pos); userPlaylists.add(pos, result); mUser.setPlaylists(userPlaylists); // loadPlaylistArtistFragment(result); loadPlaylistTracksFragment(result); } else { Toast.makeText(getActivity().getApplicationContext(),"No Song Found..!",Toast.LENGTH_SHORT).show(); } }; }.execute(); }else if(!Statics.isNetworkConnected(mContext) && selectedPlaylist.getNumberOfTracks() != localSongCount && localSongCount > 0) { Toast.makeText(getActivity().getApplicationContext(),"Internet Not available! You might not be viewing latest content..!",Toast.LENGTH_SHORT).show(); // loadPlaylistArtistFragment(selectedPlaylist); loadPlaylistTracksFragment(selectedPlaylist); } else{ // loadPlaylistArtistFragment(selectedPlaylist); loadPlaylistTracksFragment(selectedPlaylist); } } }); if (!Statics.isFollowingLoaded) { getData(); } if(isCurrentUser) registerForContextMenu(list); else unregisterForContextMenu(list); } private void loadPlaylistArtistFragment(Playlist result) { PlaylistArtistsFragment fr = new PlaylistArtistsFragment(); fr.setPlaylistDetails(mUser, result); loadPlayListArtistFragment(fr); } private void loadPlayListArtistFragment(PlaylistArtistsFragment fr) { FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.frame_content,fr); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } private void loadPlaylistTracksFragment(Playlist result) { PlaylistTracksFragment fr = new PlaylistTracksFragment(); fr.setPlaylist(result); fr.setUser(mUser); loadPlaylistTracks(fr); } private void loadPlaylistTracks(PlaylistTracksFragment fr) { FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.frame_content,fr); 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 = ((UsersPlaylistFragment) 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 UserPlaylistsAdapter(getActivity(), user.getPlaylists()); 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; } */} } @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); // } } public static Fragment newInstance(User user) { PlaylistFragment fragment = new PlaylistFragment(); fragment.setUser(user); return fragment; } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); ArrayList<Playlist> playlists = mUser.getPlaylists(); final Playlist selectedPlaylist = playlists.get(info.position); final int playlistId = selectedPlaylist.getID(); Activity activity = getActivity(); final DBAdapter adapter = new DBAdapter(mContext); if(activity instanceof MainActivity) { switch (item.getItemId()){ case R.id.delete: new DeletePlaylistTask(activity, playlistId){ protected void onPostExecute(String result) { super.onPostExecute(result); if(result != null) { if(result.contains("success")) { adapter.deleteUserPlaylist(mUser, playlistId); mUser.removeUserPlaylistById(playlistId); uAdapter.notifyDataSetChanged(); } else { Toast.makeText(mContext, result, Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(mContext, "Somthing Went Wrong!", Toast.LENGTH_SHORT).show(); } }; }.execute(); return true; case R.id.rename: renmaePlaylistDialog(selectedPlaylist); return true; default: return super.onContextItemSelected(item); } } return super.onContextItemSelected(item); } public void renmaePlaylistDialog(final Playlist playlist){ final Dialog dialog = new Dialog(mContext); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.create_playlist_dialog); dialog.setCanceledOnTouchOutside(false); TextView title = (TextView) dialog.findViewById(R.id.title); title.setText("Rename Playlist"); final EditText playlistName = (EditText) dialog.findViewById(R.id.et_playlist_name); Button add = (Button)dialog.findViewById(R.id.btn_addplaylist); add.setVisibility(View.GONE); View container = dialog.findViewById(R.id.buttonContainer); container.setVisibility(View.VISIBLE); Button rename = (Button)container.findViewById(R.id.btn_rename); Button cancel = (Button)container.findViewById(R.id.cancel_rename); cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); rename.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { final String text = playlistName.getText().toString(); if(text.equals("")) { Toast.makeText(mContext, "Please Enter Playlist Name", Toast.LENGTH_SHORT).show(); return; } final DBAdapter adapter = new DBAdapter(mContext); new RenamePlaylistTask(mContext, playlist.getID(), text){ protected void onPostExecute(String result) { super.onPostExecute(result); if(result != null) { if(result.contains("success")) { ArrayList<Playlist> playlists = Statics.curUser.getPlaylists(); playlists.remove(playlist); playlist.setPlaylistName(text); playlists.add(playlist); Statics.curUser.setPlaylists(playlists); adapter.updatePlaylist(playlist, mUser); uAdapter.notifyDataSetChanged(); } else { Toast.makeText(mContext, result, Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(mContext, "Somthing Went Wrong!", Toast.LENGTH_SHORT).show(); } }; }.execute(); dialog.dismiss(); } }); dialog.show(); } @Override public void onResume() { super.onResume(); if (this.mUser != null && this.mUser.isFollowed()) { ((MainActivity) mContext).showShareAction(this); } else ((MainActivity) mContext).hideShareAction(); } @Override public void onShare() { String sharedUrl = Statics.WEB_APP_URL + mUser.getUserName(); String shareBody; if (Statics.curUser.getFbid() == mUser.getFbid()) { if (mUser.getArtistcount() == 1) { shareBody = getString(R.string.share_user_current_user_, mUser .getArtists().get(0).getName()); } else { shareBody = getString(R.string.share_user_current_user, mUser .getArtists().get(0).getName(), mUser.getArtists() .size() - 1); } } else { if (mUser.getArtistcount() == 1) { shareBody = getString(R.string.share_user_other_user_, mUser.getFirstName(), mUser.getArtists().get(0).getName()); } else { shareBody = getString(R.string.share_user_other_user, mUser.getFirstName(), mUser.getArtists().get(0).getName(), mUser.getArtists() .size() - 1); } } shareBody += "\n" + sharedUrl; Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); sharingIntent.setType("text/plain"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); startActivity(Intent.createChooser(sharingIntent, "Share")); } }