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