package com.ved.musicmapapp.fragments;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.text.Spannable;
import android.text.TextUtils.TruncateAt;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.util.Pair;
import android.util.TypedValue;
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.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TextView.BufferType;
import android.widget.Toast;
import com.andraskindler.quickscroll.QuickScroll;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.ved.musicmapapp.MainActivity;
import com.ved.musicmapapp.MainActivity.OnShareListener;
import com.ved.musicmapapp.R;
import com.ved.musicmapapp.Objects.Artist;
import com.ved.musicmapapp.Objects.User;
import com.ved.musicmapapp.adapters.DBAdapter;
import com.ved.musicmapapp.adapters.ArtistGroupedListAdapter;
import com.ved.musicmapapp.providers.FollowUserTask;
import com.ved.musicmapapp.providers.GetUserArtistListTask;
import com.ved.musicmapapp.providers.GetUserPlaylistsListTask;
import com.ved.musicmapapp.utils.ArtistSort;
import com.ved.musicmapapp.utils.Statics;
/** Fragment show Artist list of an user */
public class UserArtistsFragment extends Fragment implements OnShareListener {
private ListView list;
private ArtistGroupedListAdapter mAdapter;
private Button btn_follow;
private ProgressDialog pd;
private User user;
private ImageView ivThumb;
private TextView tvUserName, tvNoSong, tvLastUDArtist, tv_update,
tvFollowMsg;
private ImageLoader imageLoader;
private DisplayImageOptions options;
private boolean lastVal;
private SharedPreferences prefs;
private Activity mContext;
// private Spinner sortSpinner;
private QuickScroll quickscroll;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.mContext = activity;
}
public void setUser(User user) {
this.user = user;
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putSerializable("user", user);
super.onSaveInstanceState(outState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_user_detail, container, false);
}
/**
* do action when click button follow
*/
public void onFollow() {
if (!Statics.isNetworkConnected(mContext) || null == Statics.curUser) {
return;
}
if (user.isFollowed()) { // Unfollowing
btn_follow.setText(" Follow ");
user.setFollowed(false);
if (Statics.hashUsers.containsKey(user.getFbid())) {
Statics.hashUsers.get(user.getFbid()).setFollowed(false);
}
new FollowUserTask(mContext).execute(Statics.curUser.getID(),
user.getID(), Statics.UNFOLLOW);
DBAdapter adapter = new DBAdapter(mContext);
adapter.addUser(user);
} else { // Following
btn_follow.setText("Unfollow");
user.setFollowed(true);
// Show share button
((MainActivity) mContext).showShareAction(this);
if (Statics.hashUsers.containsKey(user.getFbid())) {
Statics.hashUsers.get(user.getFbid()).setFollowed(true);
}
new FollowUserTask(mContext).execute(Statics.curUser.getID(),
user.getID(), Statics.FOLLOW);
DBAdapter adapter = new DBAdapter(mContext);
adapter.addUser(user);
}
updateView();
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
// ((MainActivity)getActivity()).showSpinnerForSort();
if (user != null
&& (user.getFbid() == Statics.curUser.getFbid() || user
.isFollowed())) {
((MainActivity) mContext).showShareAction(this);
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (user == null && savedInstanceState != null) {
user = (User) savedInstanceState.getSerializable("user");
user = Statics.hashUsers.get(user.getFbid());
}
if (null == mContext || null == user)
return;
prefs = mContext
.getSharedPreferences("MUSIC_MAP", Context.MODE_PRIVATE);
// Collections.sort(user.getArtists(), new ArtistSort());
quickscroll = (QuickScroll) getView().findViewById(R.id.quickscroll);
pd = new ProgressDialog(mContext);
pd.setMessage("Loading...");
pd.setCancelable(false);
pd.show();
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.img_no_image)
.showImageForEmptyUri(R.drawable.img_no_image)
.showImageOnFail(R.drawable.img_no_image).cacheInMemory(true)
.cacheOnDisc(true).bitmapConfig(Bitmap.Config.RGB_565).build();
// sortSpinner = (Spinner) getView().findViewById(R.id.spinner_sort);
// CreateSpinner();
ivThumb = (ImageView) getView().findViewById(R.id.ivThumb);
imageLoader.displayImage("https://graph.facebook.com/" + user.getFbid()
+ "/picture?type=large", ivThumb, options,
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage) {
//ivThumb.setImageBitmap(Utils.getRoundedCornerBitmap(loadedImage, 20));
ivThumb.setImageBitmap(loadedImage);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
tvUserName = (TextView) getView().findViewById(R.id.tvUserName);
tvUserName.setText(user.getFullName());
tvNoSong = (TextView) getView().findViewById(R.id.tvNumSong);
String text = user.getNoSong() > 1 ? getString(
R.string.user_details_tracks, user.getNoSong()) : getString(
R.string.user_details_track, user.getNoSong());
text += ", ";
text += user.getArtistcount() > 1 ? getString(
R.string.user_details_artists, user.getArtistcount())
: getString(R.string.user_details_artist, user.getArtistcount());
tvNoSong.setText(text);
tvLastUDArtist = (TextView) getView().findViewById(R.id.tvLastUDArtist);
if (user.getArtistcount() == 0) {
text = "Added: ";
} else {
// text = "Added: " + user.getArtists().get(0).getName();
text = "Added: " + user.getLastUpdate();
}
if (user.getNoLastAdd() > 1)
text += " & " + (user.getNoLastAdd() - 1) + " other tracks";
tvLastUDArtist.setText(text);
tvLastUDArtist.setEllipsize(TruncateAt.MARQUEE);
tvLastUDArtist.setSelected(true);
tv_update = (TextView) getView().findViewById(R.id.update_time);
tv_update.setText(user.getLastUDString());
list = (ListView) getView().findViewById(R.id.list_you_follow_detail);
btn_follow = (Button) getView().findViewById(R.id.btn_follow);
String text1 = getString(R.string.user_follow_user);
String text2 = getString(R.string.user_follow_msg, text1);
tvFollowMsg = (TextView) getView().findViewById(R.id.tv_follow_msg);
tvFollowMsg.setMovementMethod(LinkMovementMethod.getInstance());
tvFollowMsg.setText(text2, BufferType.SPANNABLE);
Spannable mySpannable = (Spannable) tvFollowMsg.getText();
tvFollowMsg.setVisibility(View.GONE);
ClickableSpan myClickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
}
};
mySpannable.setSpan(myClickableSpan, text2.length() - text1.length(),
text2.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tvFollowMsg.setClickable(true);
tvFollowMsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onFollow();
}
});
if (user.getFbid().equals(prefs.getString("FB_ID", ""))) {
btn_follow.setVisibility(View.GONE);
tvFollowMsg.setVisibility(View.GONE);
} else {
if (user.getFbid().equals(Statics.curUser.getFbid())) {
btn_follow.setVisibility(View.GONE);
tvFollowMsg.setVisibility(View.GONE);
} else {
btn_follow.setVisibility(View.VISIBLE);
tvFollowMsg.setVisibility(View.VISIBLE);
}
}
lastVal = user.isFollowed();
if (user.isFollowed()) {
btn_follow.setText("Unfollow");
// btn_follow.setBackgroundResource(R.drawable.rectangle_transperent);
} else {
btn_follow.setText(" Follow ");
//btn_follow.setBackgroundResource(R.drawable.rectangle_transperent);
}
btn_follow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onFollow();
}
});
if (user.getArtistcount() > 0) {
list.setVisibility(View.VISIBLE);
} else {
list.setVisibility(View.GONE);
}
if(user.getArtists() == null){
new GetUserArtistListTask(mContext, Statics.curUser.getFbid(), user.getFbid()){
protected void onPostExecute(User result) {
pd.dismiss();
super.onPostExecute(result);
user = (User)result;
updateView();
};
}.execute();
}else if(user.getArtists().size() == 0){
new GetUserArtistListTask(mContext, Statics.curUser.getFbid(), user.getFbid()){
protected void onPostExecute(User result) {
pd.dismiss();
super.onPostExecute(result);
user = (User)result;
updateView();
};
}.execute();
}
else{
updateView();
}
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos,long arg3) {
ArtistFragment fr = new ArtistFragment();
Artist artist = mAdapter.getItem(pos);
fr.setArtist(artist);
fr.setUser(user);
loadArtistFragment(fr);
}
});
}
private void loadArtistFragment(ArtistFragment fr) {
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_content,fr);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
String[] _methodStrings = new String[]{"Sort","A - Z"};
// public void CreateSpinner(){
//
// final ArrayList<String> reasonArray = new ArrayList<String>();
// for(int i = 0; i <_methodStrings.length;i ++){
// reasonArray.add(_methodStrings[i]);
// }
//
// sortSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
// @Override
// public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// String sortString = sortSpinner.getSelectedItem().toString();
//// ArtistFragment fragment = (ArtistFragment) getSupportFragmentManager().findFragmentByTag("ArtistFragment");
//// if(fragment != null){
//// if(fragment.isVisible()){
// if(sortString.contains("A - Z"))
// mAdapter.sortAscending();
//// }
////
//// }
// }
//
// @Override
// public void onNothingSelected(AdapterView<?> parentView) {
//
// }
//
// });
//
//
// ArrayAdapter<String> methodAdapter = new ArrayAdapter<String>(getActivity(), R.drawable.spinner_item, reasonArray){
//
// @Override
// public View getDropDownView(int position, View convertView,android.view.ViewGroup parent){
// View v = convertView;
// if (v == null) {
// Context mContext = getActivity().getBaseContext();
// LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// v = vi.inflate(R.layout.simple_spinner_dropdown_item, null);
// }
// // The text view of the spinner list view
// TextView tv = (TextView) v.findViewById(android.R.id.text1);
// String val = reasonArray.get(position);
// // remove the extra text here
// tv.setText(val.replace(":False", ""));
//
// boolean disabled = !isEnabled(position);
// if(disabled){tv.setTextColor(Color.GRAY);}
// else{tv.setTextColor(Color.WHITE);}
//
// return v;
// }
// };
// methodAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// sortSpinner.setAdapter(methodAdapter);
// }
/** show list of artist in 2 list :
* - match artist
* - unmatch artist
*
* limit number of artist by 10 if user isn't followed
*
*/
public void showData() {
pd.dismiss();
List<Artist> artists;
if (!user.isFollowed() && !user.getFbid().equals(Statics.curUser.getFbid())) {
if (user.getArtistcount() > 10 && user.getArtists().size() > 0) {
artists = user.getArtists().subList(0, 10);
tvFollowMsg.findViewById(R.id.tv_follow_msg).setVisibility(
View.VISIBLE);
} else {
artists = user.getArtists();
tvFollowMsg.findViewById(R.id.tv_follow_msg).setVisibility(
View.GONE);
}
} else {
artists = user.getArtists();
tvFollowMsg.setVisibility(View.GONE);
tvFollowMsg.findViewById(R.id.tv_follow_msg).setVisibility(View.GONE);
}
ArrayList<Artist> matchArtist = new ArrayList<Artist>();
ArrayList<Artist> otherArtist = new ArrayList<Artist>();
// Comparator<Artist> comparator = new Comparator<Artist>() {
//
// @Override
// public int compare(Artist la, Artist ra) {
// return la.getName().compareTo(ra.getName());
// }
// };
for (Artist artist : artists) {
if (artist.isHasArtist()) {
matchArtist.add(artist);
} else {
otherArtist.add(artist);
}
}
if (list == null) {
list = (ListView) getView().findViewById(R.id.list_you_follow_detail);
}
Collections.sort(matchArtist, new ArtistSort());
Collections.sort(otherArtist, new ArtistSort());
mAdapter = new ArtistGroupedListAdapter(mContext,new Pair<List<Artist>, List<Artist>>(matchArtist, otherArtist),false);
if (list != null)
list.setAdapter(mAdapter);
quickscroll.init(QuickScroll.TYPE_INDICATOR_WITH_HANDLE, list, mAdapter, QuickScroll.STYLE_HOLO);
quickscroll.setFixedSize(1);
quickscroll.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 48);
}
public void updateView() {
if (null != user) {
if (user.isFollowed()) {
btn_follow.setText("Unfollow");
} else {
btn_follow.setText(" Follow ");
tvFollowMsg.setVisibility(View.VISIBLE);
}
showData();
}
}
@Override
public void onStop() {
if (null != user && lastVal != user.isFollowed() && null != mContext) {
MainActivity m = (MainActivity) mContext;
m.setHasReload(true);
}
super.onStop();
}
@Override
public void onDestroyView() {
if (getView() != null) {
((ViewGroup) getView().getParent()).removeView(getView());
}
// ((MainActivity) mContext).hideShareAction();
// ((MainActivity)mContext).hideSpinnerForSort();
super.onDestroyView();
}
@Override
public void onShare() {
String sharedUrl = Statics.WEB_APP_URL + user.getUserName();
String shareBody;
if (Statics.curUser.getFbid() == user.getFbid()) {
if (user.getArtistcount() == 1) {
shareBody = getString(R.string.share_user_current_user_, user
.getArtists().get(0).getName());
} else {
shareBody = getString(R.string.share_user_current_user, user
.getArtists().get(0).getName(), user.getArtists()
.size() - 1);
}
} else {
if (user.getArtistcount() == 1) {
shareBody = getString(R.string.share_user_other_user_,
user.getFirstName(), user.getArtists().get(0).getName());
} else {
shareBody = getString(R.string.share_user_other_user,
user.getFirstName(),
user.getArtists().get(0).getName(), user.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"));
}
public void sortAscending() {
mAdapter.sortAscending();
}
public static Fragment newInstance(User user) {
UserArtistsFragment fragment = new UserArtistsFragment();
fragment.setUser(user);
return fragment;
}
}