package com.ved.musicmapapp.fragments; import java.util.ArrayList; 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.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.text.TextUtils.TruncateAt; import android.util.Log; import android.util.SparseArray; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.google.android.gms.internal.fr; 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.User; import com.ved.musicmapapp.adapters.DBAdapter; import com.ved.musicmapapp.providers.FollowUserTask; import com.ved.musicmapapp.utils.CustomSparseFragmentsArray; import com.ved.musicmapapp.utils.Statics; import com.viewpagerindicator.TabPageIndicator; public class UserDetailsFragment extends Fragment implements OnShareListener { private static final String[] CONTENT = new String[] {"Last Added", "Playlists","Genres"}; // private TabHost mTabHost; // private ViewPager mViewPager; // private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, UsersPlaylistFragment.TabInfo>(); // private MainFragmentAdapter mPagerAdapter; private int curTab = 0; private User user; private TextView tvUserName, tvNoSong, tvLastUDArtist, tv_update; private Button btn_follow; private ImageView ivThumb; private ImageLoader imageLoader; private DisplayImageOptions options; private Activity mContext; private SharedPreferences prefs; private boolean lastVal; ViewPager pager; TabPageIndicator indicator; int index = 0; private CustomSparseFragmentsArray<Fragment> mFragments; GoogleMusicAdapter adapter; private CustomSparseFragmentsArray<Fragment> mBackFragments; public static final int PAGE_COUNT = 3; public static final int FIRST_PAGE = 0; public static final int SECOND_PAGE = 1; public static final int THIRD_PAGE = 2; ProgressDialog pd; @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); this.mContext = activity; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if(savedInstanceState != null){ mFragments = (CustomSparseFragmentsArray<Fragment>) savedInstanceState.getSerializable("mFragments"); mBackFragments = (CustomSparseFragmentsArray<Fragment>) savedInstanceState.getSerializable("mBackFragments"); } return inflater.inflate(R.layout.user_playlist_fragment, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (null == getActivity()) return; if(savedInstanceState != null){ mFragments = (CustomSparseFragmentsArray<Fragment>) savedInstanceState.getSerializable("mFragments"); mBackFragments = (CustomSparseFragmentsArray<Fragment>) savedInstanceState.getSerializable("mBackFragments"); } pd= new ProgressDialog(getActivity()); pd.setMessage("Loading.."); pd.setCancelable(false); adapter = new GoogleMusicAdapter(getChildFragmentManager()); pager = (ViewPager)view.findViewById(R.id.pager); pager.setAdapter(adapter); indicator = (TabPageIndicator)view.findViewById(R.id.indicator); indicator.setContext(getActivity()); indicator.setViewPager(pager); prefs = mContext.getSharedPreferences("MUSIC_MAP", Context.MODE_PRIVATE); 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(); 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(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()); 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); 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 "); ((MainActivity) mContext).hideShareAction(); //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); } // pd.show(); /* new GetUserPlaylistsListTask(mContext, Statics.curUser){ protected void onPostExecute(User result) { super.onPostExecute(result); }; }.execute(); if(user.getPlaylists() != null && user.getPlaylists().size()>0){ } else{ new GetUserPlaylistsListTask(mContext, user){ protected void onPostExecute(User result) { super.onPostExecute(result); user = (User)result; pd.dismiss(); updateView(); }; }.execute(); }*/ //else { updateView(); } //this.initialiseTabHost(savedInstanceState); //this.intialiseViewPager(); } public void updateView() { // user = Statics.hashUsers.get(user.getFbid()); if (null != user) { if (user.isFollowed()) { btn_follow.setText("Unfollow"); //btn_follow.setBackgroundResource(R.drawable.rectangle_transperent); } else { btn_follow.setText(" Follow "); // btn_follow.setBackgroundResource(R.drawable.bg_button); } // showData(); } } public void onFollow() { if (!Statics.isNetworkConnected(mContext) || null == Statics.curUser) { return; } if (user.isFollowed()) { // Unfollowing btn_follow.setText(" Follow "); // btn_follow.setBackgroundResource(R.drawable.rectangle_transperent); user.setFollowed(false); // Hide share button ((MainActivity) mContext).hideShareAction(); 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"); // btn_follow.setBackgroundResource(R.drawable.rectangle_transperent); 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 onSaveInstanceState(Bundle outState) { outState.putSerializable("mFragments", mFragments); outState.putSerializable("mBackFragments", mBackFragments); super.onSaveInstanceState(outState); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); } class GoogleMusicAdapter extends FragmentStatePagerAdapter { FragmentManager mFragmentManager; public GoogleMusicAdapter(FragmentManager fm) { super(fm); mFragmentManager = fm; if(mFragments == null){ mFragments = new CustomSparseFragmentsArray<Fragment>(); mBackFragments = new CustomSparseFragmentsArray<Fragment>(); for (int i = 0; i < 3; i++) { mFragments.put(i,null); } } } /** * Replaces the current fragment by fragment stored in back stack. Does nothing and returns * false if no fragment is back-stacked. */ public boolean back() { if(mBackFragments.size() > 0) { Fragment fragment = mBackFragments.get(pager.getCurrentItem()); if (fragment == null) { // Nothing to go back. return false; } update(fragment, false); mBackFragments.remove(pager.getCurrentItem()); return true; } else { return false; } } public void replace(int position, Fragment fragment, boolean pushPrevious) { // Get currently active fragment. if(mFragments.get(FIRST_PAGE) == null || mFragments.get(SECOND_PAGE) == null || mFragments.get(THIRD_PAGE) == null){ mFragments.put(FIRST_PAGE,getItem(FIRST_PAGE)); mFragments.put(SECOND_PAGE,getItem(SECOND_PAGE)); mFragments.put(THIRD_PAGE,getItem(THIRD_PAGE)); } Fragment old_fragment = mFragments.get(position); if (old_fragment == null) { return; } if(pushPrevious) mBackFragments.put(position,old_fragment); mFragments.put(position, fragment); notifyDataSetChanged(); } public int getItemPosition(Object object) { return POSITION_NONE; } @Override public Fragment getItem(int position) { index = position; Log.e("check","Current position is : " + pager.getCurrentItem() + ".. Index is : " + index); // If fragment not yet initialized, create its instance. if (mFragments.get(position) == null) { switch (position) { case FIRST_PAGE: { mFragments.put(FIRST_PAGE, UserLastAddedFragment.newInstance(user)); } break; case SECOND_PAGE: { mFragments.put(SECOND_PAGE, PlaylistFragment.newInstance(user)); } break; case THIRD_PAGE: { mFragments.put(THIRD_PAGE, GenreFragment.newInstance(user)); } break; } } // Return fragment instance at requested position. return mFragments.get(position); } @Override public CharSequence getPageTitle(int position) { return CONTENT[position % CONTENT.length]; } @Override public int getCount() { return CONTENT.length; } } public void update(Fragment fragment, boolean pushPrevious){ Log.e("check","Current position is : " + pager.getCurrentItem() + ".. Index is : " + index); adapter.replace(pager.getCurrentItem(),fragment, pushPrevious); } public boolean onBack() { if(adapter.back()) return true; /*else{ int currentPage = pager.getCurrentItem(); if(currentPage == 2){ pager.setCurrentItem(1); return true; } else if(currentPage == 1){ pager.setCurrentItem(0); return true; }*/ else return false; // } // return adapter.back(); } @Override public void onDestroyView() { if (getView() != null) { ((ViewGroup) getView().getParent()).removeView(getView()); } super.onDestroyView(); } public void setUser(User item) { this.user = item; } @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")); } }