/** * */ package com.gmail.charleszq.picorner.ui; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.gmail.charleszq.picorner.R; import com.gmail.charleszq.picorner.model.Author; import com.gmail.charleszq.picorner.model.MediaObject; import com.gmail.charleszq.picorner.model.MediaSourceType; import com.gmail.charleszq.picorner.task.AbstractGeneralTask; import com.gmail.charleszq.picorner.task.IGeneralTaskDoneListener; import com.gmail.charleszq.picorner.task.flickr.FetchFlickrUserIconUrlTask; import com.gmail.charleszq.picorner.task.flickr.GetFlickrPhotoFavUsersTask; import com.gmail.charleszq.picorner.task.ig.InstagramLoadLikesTask; import com.gmail.charleszq.picorner.utils.IConstants; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; /** * Represents the fragment to show the users who like a photo. * * @author charles(charleszq@gmail.com) * */ public class PhotoDetailLikesFragment extends AbstractFragmentWithImageFetcher implements OnItemClickListener { private MediaObject mCurrentPhoto; private List<Author> mAuthors = new ArrayList<Author>(); // UI controls private ProgressBar mProgressBar; private TextView mNoLikesText; /** * */ public PhotoDetailLikesFragment() { } public static PhotoDetailLikesFragment newInstance(MediaObject photo) { PhotoDetailLikesFragment f = new PhotoDetailLikesFragment(); final Bundle bundle = new Bundle(); bundle.putSerializable(IConstants.DETAIL_PAGE_PHOTO_ARG_KEY, photo); f.setArguments(bundle); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = this.getArguments(); mCurrentPhoto = (MediaObject) bundle .getSerializable(IConstants.DETAIL_PAGE_PHOTO_ARG_KEY); this.setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.ig_like_users, null); mProgressBar = (ProgressBar) v.findViewById(R.id.ig_like_progress_bar); mNoLikesText = (TextView) v.findViewById(R.id.ig_no_like_text); GridView grid = (GridView) v.findViewById(R.id.ig_like_grid); LikesListAdapter adapter = new LikesListAdapter(getActivity(), mCurrentPhoto, mAuthors, mImageFetcher); grid.setAdapter(adapter); grid.setOnItemClickListener(this); loadLikes(adapter); return v; } private void loadLikes(final LikesListAdapter adapter) { IGeneralTaskDoneListener<List<Author>> lis = new IGeneralTaskDoneListener<List<Author>>() { @Override public void onTaskDone(List<Author> result) { mProgressBar.setVisibility(View.INVISIBLE); if (result == null || result.isEmpty()) { mAuthors.clear(); mNoLikesText.setVisibility(View.VISIBLE); adapter.notifyDataSetChanged(); return; } mAuthors.clear(); mAuthors.addAll(result); adapter.notifyDataSetChanged(); } }; String photoId = mCurrentPhoto.getId(); AbstractGeneralTask<String, Integer, List<Author>> task = null; switch (mCurrentPhoto.getMediaSource()) { case INSTAGRAM: task = new InstagramLoadLikesTask(getActivity()); break; case FLICKR: task = new GetFlickrPhotoFavUsersTask(); break; case PX500: break; } task.addTaskDoneListener(lis); task.execute(photoId); } @SuppressLint("SimpleDateFormat") private static class LikesListAdapter extends BaseAdapter { private Context mContext; private ImageLoader mFetcher; private List<Author> mLikeUsers; private MediaObject mCurrentPhoto; LikesListAdapter(Context context, MediaObject photo, List<Author> mAuthors, ImageLoader fetcher) { mContext = context; mFetcher = fetcher; mLikeUsers = mAuthors; this.mCurrentPhoto = photo; } @Override public int getCount() { return mLikeUsers.size(); } @Override public Object getItem(int position) { return mLikeUsers.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { v = LayoutInflater.from(mContext).inflate( R.layout.photo_detail_ig_like_item, null); } ImageView avatorImage = (ImageView) v .findViewById(R.id.detail_ig_like_avator); TextView txtUserName = (TextView) v .findViewById(R.id.detail_ig_like_user_name); Author user = (Author) getItem(position); txtUserName.setText(user.getUserName() == null ? user .getBuddyIconUrl() : user.getUserName()); loadAvator(mCurrentPhoto, user, avatorImage); return v; } private void loadAvator(MediaObject photo, Author user, ImageView image) { MediaSourceType type = photo.getMediaSource(); switch (type) { case INSTAGRAM: String buddyIcon = user.getBuddyIconUrl(); DisplayImageOptions imageDisplayOptions = new DisplayImageOptions.Builder() .showStubImage(R.drawable.empty_photo).cacheInMemory() .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) .bitmapConfig(Bitmap.Config.RGB_565).build(); mFetcher.displayImage(buddyIcon, image, imageDisplayOptions); break; case FLICKR: FetchFlickrUserIconUrlTask task = new FetchFlickrUserIconUrlTask( mContext, user.getUserId()); task.execute(image); break; case PX500: break; } } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Author user = (Author) parent.getAdapter().getItem(position); PhotoDetailActivity act = (PhotoDetailActivity) getActivity(); act.showUserPhotos(user); } }