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