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.Genre; 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 GenreArtistsFragment 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; private String genre; @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 = new ArrayList<Artist>(); /* 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 */{ List<Artist> custArtists = user.getArtists(); for(int i = 0 ;i<custArtists.size();i++){ Artist ar = custArtists.get(i); ArrayList<String> gg = ar.getGenreNames(); if(gg != null){ for(String g : gg){ if(g.toLowerCase().equals(this.genre.toLowerCase())){ artists.add(ar); break; } } } } 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) { GenreArtistsFragment fragment = new GenreArtistsFragment(); fragment.setUser(user); return fragment; } public void setGenre(String genre) { this.genre = genre; } }