ppamorim

FeedAdapter

May 10th, 2014
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.25 KB | None | 0 0
  1. package com.fatos.fatos_desconhecidos.app.adapter;
  2.  
  3. import android.content.Context;
  4. import android.os.AsyncTask;
  5. import android.os.Handler;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.BaseAdapter;
  10. import android.widget.ImageButton;
  11. import android.widget.ImageView;
  12. import android.widget.LinearLayout;
  13. import android.widget.TextView;
  14. import android.widget.Toast;
  15.  
  16. import com.facebook.Session;
  17. import com.facebook.SessionState;
  18. import com.facebook.UiLifecycleHelper;
  19. import com.facebook.widget.FacebookDialog;
  20. import com.fatos.fatos_desconhecidos.app.R;
  21. import com.fatos.fatos_desconhecidos.app.activity.BaseActivity;
  22. import com.fatos.fatos_desconhecidos.app.core.Communicator;
  23. import com.fatos.fatos_desconhecidos.app.core.DialogInterface;
  24. import com.fatos.fatos_desconhecidos.app.core.model.impl.Feed;
  25. import com.nostra13.universalimageloader.core.ImageLoader;
  26. import com.parse.ParseException;
  27. import com.parse.ParseObject;
  28. import com.parse.ParseQuery;
  29.  
  30. import java.util.ArrayList;
  31. import java.util.List;
  32.  
  33. import uk.co.senab.actionbarpulltorefresh.extras.actionbarcompat.PullToRefreshLayout;
  34.  
  35. public class FeedAdapter extends BaseAdapter {
  36.  
  37.     ViewHolder mViewHolder;
  38.     private Context mContext;
  39.     private List<Feed> mItems = new ArrayList<Feed>();
  40.     private boolean isLoading;
  41.     private boolean hasNext = false;
  42.     private int page = 0;
  43.     private int displayLimit = 5;
  44.  
  45.     private NewsAsyncTask asyncTask = null;
  46.  
  47.     private PullToRefreshLayout pullToRefresh = null;
  48.  
  49.     List<ParseObject> responseList = null;//esse!
  50.  
  51.     public FeedAdapter(Context context, LinearLayout relativeLayout) {
  52.         mContext = context;
  53.         asyncTask = new NewsAsyncTask();
  54.         asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, page);
  55.     }
  56.  
  57.     public PullToRefreshLayout getPullToRefresh() {
  58.         return pullToRefresh;
  59.     }
  60.  
  61.     public void setPullToRefresh(PullToRefreshLayout pullToRefresh) {
  62.         this.pullToRefresh = pullToRefresh;
  63.     }
  64.  
  65.     @Override
  66.     public int getCount() {
  67.         return mItems.size();
  68.     }
  69.  
  70.     @Override
  71.     public Feed getItem(int position) {
  72.         return mItems.get(position);
  73.     }
  74.  
  75.     @Override
  76.     public long getItemId(int position) {
  77.         //Feed feed = mItems.get(position);
  78.         return position;//feed.getId();
  79.     }
  80.  
  81.     @Override
  82.     public View getView(final int position, View convertView, ViewGroup parent) {
  83.  
  84.         if (!isLoading && hasNext && position > getCount() - 5) {
  85.             page++;
  86.             asyncTask = new NewsAsyncTask();
  87.             asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, page);
  88.         }
  89.  
  90.         if (convertView == null) {
  91.  
  92.             convertView = LayoutInflater.from(mContext).inflate(R.layout.adapter_feed_item, parent, false);
  93.  
  94.             mViewHolder = new ViewHolder();
  95.             mViewHolder.mTitle = (TextView) convertView.findViewById(R.id.Title);
  96.             mViewHolder.mDescription = (TextView) convertView.findViewById(R.id.Description);
  97.             mViewHolder.mImage = (ImageView) convertView.findViewById(R.id.Image);
  98.             mViewHolder.mShare = (ImageButton) convertView.findViewById(R.id.share_button);
  99.             mViewHolder.mComments = (ImageButton) convertView.findViewById(R.id.comments_button);
  100.             mViewHolder.mLike = (ImageButton) convertView.findViewById(R.id.like_button);
  101.  
  102.             convertView.setTag(mViewHolder);
  103.  
  104.         } else {
  105.             mViewHolder = (ViewHolder) convertView.getTag();
  106.         }
  107.         final Feed item = getItem(position);
  108.  
  109.         mViewHolder.mTitle.setText(item.getTitle());
  110.         mViewHolder.mDescription.setText(item.getDescription());
  111.         ImageLoader.getInstance().displayImage(item.getImageURL(), mViewHolder.mImage);
  112.  
  113.         View.OnClickListener onClickButton = new View.OnClickListener() {
  114.             @Override
  115.             public void onClick(View view) {
  116.                 Feed item = getItem((Integer) view.getTag());
  117.                 ((Communicator) mContext).onItemListViewClick(item.getobjectid(), item.getImageURL(), item.getTitle(), item.getCompleteText(), item.getSiteURL());
  118.             }
  119.         };
  120.  
  121.         mViewHolder.mTitle.setTag(new Integer(position));
  122.         mViewHolder.mDescription.setTag(new Integer(position));
  123.         mViewHolder.mImage.setTag(new Integer(position));
  124.  
  125.         mViewHolder.mTitle.setOnClickListener(onClickButton);
  126.         mViewHolder.mDescription.setOnClickListener(onClickButton);
  127.         mViewHolder.mImage.setOnClickListener(onClickButton);
  128.  
  129.         mViewHolder.mShare.setOnClickListener(new View.OnClickListener() {
  130.             @Override
  131.             public void onClick(View view) {
  132.                 ((DialogInterface) mContext).openDialog();
  133.                 //dialogInterface.openDialog();
  134.                 Handler handler = new Handler();
  135.                 handler.postDelayed(new Runnable() {
  136.                     public void run() {
  137.                         try {
  138.                             FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder((BaseActivity) mContext)
  139.                                     .setLink(item.getSiteURL())
  140.                                     .build();
  141.  
  142.                             UiLifecycleHelper uiHelper = new UiLifecycleHelper((BaseActivity) mContext, callback);
  143.                             uiHelper.trackPendingDialogCall(shareDialog.present());
  144.                             ((DialogInterface) mContext).closeDialog();
  145.                         } catch (Exception e) {
  146.                             ((DialogInterface) mContext).closeDialog();
  147.                             Toast.makeText(mContext, mContext.getString(R.string.error_share), Toast.LENGTH_LONG).show();
  148.                         }
  149.                     }
  150.                 }, 2000); //Safe delay
  151.  
  152.  
  153.             }
  154.         });
  155.         mViewHolder.mComments.setOnClickListener(new View.OnClickListener() {
  156.             @Override
  157.             public void onClick(View view) {
  158.                 ((Communicator) mContext).onCommentsClick(item.getobjectid());
  159.             }
  160.         });
  161.  
  162.         return convertView;
  163.     }
  164.  
  165.     public void forceReload() {
  166.         page = 0;
  167.         if (isLoading)
  168.             asyncTask.cancel(true);
  169.  
  170.         asyncTask = new NewsAsyncTask();
  171.         asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, page);
  172.     }
  173.  
  174.     private Session.StatusCallback callback = new Session.StatusCallback() {
  175.         @Override
  176.         public void call(Session session, SessionState state, Exception exception) {
  177.         }
  178.     };
  179.  
  180.     private static class ViewHolder {
  181.         private TextView mTitle;
  182.         private TextView mDescription;
  183.         private ImageView mImage;
  184.         private ImageButton mShare;
  185.         private ImageButton mComments;
  186.         private ImageButton mLike;
  187.     }
  188.  
  189.     private class NewsAsyncTask extends AsyncTask<Integer, Void, ArrayList<Feed>> {
  190.         private int page = 0;
  191.         @Override
  192.         protected void onPreExecute() {
  193.             super.onPreExecute();
  194.             isLoading = true;
  195.         }
  196.  
  197.         @Override
  198.         protected ArrayList<Feed> doInBackground(Integer... integers) {
  199.             page = integers[0];
  200.             ArrayList<Feed> backgroundItems = new ArrayList<Feed>();
  201.             ParseQuery<ParseObject> query = ParseQuery.getQuery("FeedPost");
  202.             query.orderByDescending("createdAt");
  203.  
  204. //            if(mFilter != null) {
  205. //                query.whereContains("Type", mFilter);
  206. //            }
  207.             query.setLimit(displayLimit);//Aqui o limite da 5
  208.             query.setSkip(page * displayLimit);
  209.             try {
  210.                 responseList = query.find();
  211.             } catch (ParseException e) {
  212.                 e.printStackTrace();
  213.             }
  214.             for (int i = 0; i < responseList.size(); i++) {
  215.                 ParseObject parseObject = responseList.get(i);
  216.                 backgroundItems.add(new Feed(parseObject.getObjectId(),
  217.                         parseObject.getString("Title"),
  218.                         parseObject.getString("Description"),
  219.                         parseObject.getString("CompleteText"),
  220.                         parseObject.getString("imageURL"),
  221.                         parseObject.getString("Link_on_Site")));
  222.             }
  223.             return backgroundItems;
  224.         }
  225.  
  226.         @Override
  227.         protected void onPostExecute(ArrayList<Feed> newsPaginatedArrayList) {
  228.             super.onPostExecute(newsPaginatedArrayList);
  229.             if (isCancelled()) {
  230.                 isLoading = false;
  231.                 return;
  232.             }
  233.             hasNext = false;
  234.  
  235.             if (page == 0) {
  236.                 mItems.clear();
  237.                 notifyDataSetInvalidated();
  238.  
  239.             }
  240.  
  241.             if (newsPaginatedArrayList != null && newsPaginatedArrayList.size() != 0) {
  242.                 mItems.addAll(newsPaginatedArrayList);
  243.                 hasNext = true;
  244.                 notifyDataSetChanged();
  245.             }
  246.  
  247.             if (!hasNext) {
  248.                 //mRelativeLayout.setVisibility(View.GONE);
  249.             }
  250.             if (getPullToRefresh() != null)
  251.                 getPullToRefresh().setRefreshComplete();
  252.             isLoading = false;
  253.         }
  254.     }
  255.  
  256. }
Advertisement
Add Comment
Please, Sign In to add comment