ppamorim

Untitled

May 10th, 2014
473
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.68 KB | None | 0 0
  1. package com.fatos.fatos_desconhecidos.app.fragment;
  2.  
  3. import android.content.Context;
  4. import android.os.AsyncTask;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.support.v4.app.Fragment;
  8. import android.support.v4.app.FragmentTransaction;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.widget.AbsListView;
  13. import android.widget.AbsListView.OnScrollListener;
  14. import android.widget.AdapterView;
  15. import android.widget.Button;
  16. import android.widget.ListView;
  17. import android.widget.RelativeLayout;
  18. import android.widget.TextView;
  19. import android.widget.Toast;
  20.  
  21. import com.fatos.fatos_desconhecidos.app.R;
  22. import com.fatos.fatos_desconhecidos.app.adapter.FeedAdapter;
  23. import com.fatos.fatos_desconhecidos.app.core.fragment.ErrorFragment;
  24. import com.fatos.fatos_desconhecidos.app.core.model.impl.Feed;
  25. import com.fatos.fatos_desconhecidos.app.utils.FirstItemScrollListener.OnFirstItemVisible;
  26. import com.parse.FindCallback;
  27. import com.parse.ParseException;
  28. import com.parse.ParseObject;
  29. import com.parse.ParseQuery;
  30.  
  31. import uk.co.senab.actionbarpulltorefresh.extras.actionbarcompat.PullToRefreshLayout;
  32. import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh;
  33. import uk.co.senab.actionbarpulltorefresh.library.Options;
  34. import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener;
  35.  
  36. import java.util.ArrayList;
  37. import java.util.List;
  38.  
  39. public class FeedFragment extends Fragment implements OnScrollListener {
  40.  
  41.     private int limit = 0;
  42.     private boolean hasFilter = false;
  43.     private String mFilter;
  44.     private ListView mListView;
  45.     private FeedAdapter adapter;
  46.     private RelativeLayout mFeedLoader;
  47.     private TextView mTooLongMessage;
  48.     private Button mTryAgain;
  49.     private List<Feed> items = new ArrayList<Feed>();
  50.     private PullToRefreshLayout mPullToRefreshLayout;
  51.     private Context mContext;
  52.     protected OnFirstItemVisible mScrollListener;
  53.  
  54.     private View mFooterView;
  55.     private boolean mIsLoading = false;
  56.  
  57.     @Override
  58.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  59.  
  60.         View view = inflater.inflate(R.layout.fragment_feed, container, false);
  61.         mListView = (ListView) view.findViewById(R.id.listView_feed);
  62.         mFooterView = inflater.inflate(R.layout.footer_listview, null, false);
  63.         mPullToRefreshLayout = (PullToRefreshLayout) view.findViewById(R.id.ptr_layout);
  64.         mFeedLoader = (RelativeLayout) view.findViewById(R.id.feed_loader);
  65.         mTooLongMessage = (TextView) view.findViewById(R.id.loading_text);
  66.         mTryAgain = (Button) view.findViewById(R.id.try_again);
  67.  
  68.         return view;
  69.     }
  70.  
  71.     @Override
  72.     public void onViewCreated(View view, Bundle savedInstanceState) {
  73.         super.onViewCreated(view, savedInstanceState);
  74.         final String[] mArray = getResources().getStringArray(R.array.navigation_drawer_items);
  75.         final Bundle extras = getArguments();
  76.        
  77.         mContext = getActivity();
  78.         mListView.addFooterView(mFooterView);
  79.         mListView.setOnScrollListener(this);
  80.  
  81.         verifyExtras(extras, mArray);
  82.  
  83.         mTryAgain.setOnClickListener(new View.OnClickListener() {
  84.             @Override
  85.             public void onClick(View view) {
  86.                 getFeed();
  87.             }
  88.         });
  89.  
  90.         if(mFeedLoader.getVisibility() == View.VISIBLE) {
  91.             showTooLongMessage();
  92.         }
  93.  
  94.         ActionBarPullToRefresh.from(getActivity())
  95.                 .allChildrenArePullable()
  96.                 .options(Options.create().scrollDistance(.20f).build())
  97.                 .listener(new OnRefreshListener() {
  98.                     @Override
  99.                     public void onRefreshStarted(View view) {
  100.                         verifyExtras(extras, mArray);
  101.                         mListView.addFooterView(mFooterView);
  102.                         limit = 0;
  103.                     }
  104.                 }).setup(mPullToRefreshLayout);
  105.  
  106.     }
  107.  
  108.     private void verifyExtras(Bundle extras, String[] mArray) {
  109.         if(extras.getString("extra") != null) {
  110.             mFilter = extras.getString("extra");
  111.         }
  112.         if (mFilter != null) {
  113.             if (mFilter.equals(mArray[0])) {
  114.                 mFilter = null;
  115.                 getFeed();
  116.             } else {
  117.                 mFilter = extras.getString("extra");
  118.                 getFeedFilter(mFilter);
  119.             }
  120.         } else {
  121.             getFeed();
  122.         }
  123.     }
  124.  
  125.     private class LoadMore extends AsyncTask<Void, Void, Void> {
  126.         @Override
  127.         protected Void doInBackground(Void... voids) {
  128.             try {
  129.                 if (isCancelled()) {
  130.                     return null;
  131.                 }
  132.  
  133.                 try {
  134.                     Thread.sleep(1000);
  135.                 } catch (InterruptedException e) {
  136.                 }
  137.  
  138.                 ParseQuery<ParseObject> query = ParseQuery.getQuery("FeedPost");
  139.                 query.orderByDescending("createdAt");
  140.                 if(mFilter != null) {
  141.                     query.whereContains("Type", mFilter);
  142.                 }
  143.                 query.setLimit(5);
  144.                 query.setSkip(limit = limit + 5);
  145.                 query.findInBackground(new FindCallback<ParseObject>() {
  146.                     @Override
  147.                     public void done(List<ParseObject> responseList, ParseException e) {
  148.                         if (e == null) {
  149.                             for(int i = 0; i < responseList.size(); i++) {
  150.                                 items.add(new Feed(responseList.get(i).getObjectId(),
  151.                                         responseList.get(i).getString("Title"),
  152.                                         responseList.get(i).getString("Description"),
  153.                                         responseList.get(i).getString("CompleteText"),
  154.                                         responseList.get(i).getString("imageURL"),
  155.                                         responseList.get(i).getString("Link_on_Site")));
  156.                             }
  157.                             mIsLoading = false;
  158.                         }
  159.                     }
  160.                 });
  161.             } catch (Exception e) {
  162.                 e.printStackTrace();
  163.             }
  164.             return null;
  165.         }
  166.  
  167.         @Override
  168.         protected void onPostExecute(Void result) {
  169.             super.onPostExecute(result);
  170.             try {
  171.                 mListView.removeFooterView(mFooterView);
  172.                 adapter.notifyDataSetChanged();
  173.             } catch (Exception e) {
  174.                 e.printStackTrace();
  175.             }
  176.         }
  177.     }
  178.  
  179.     public void getFeed() {
  180.         try {
  181.             ParseQuery<ParseObject> query = ParseQuery.getQuery("FeedPost");
  182.             query.orderByDescending("createdAt");
  183.             query.setLimit(5);
  184.             query.findInBackground(new FindCallback<ParseObject>() {
  185.                 public void done(List<ParseObject> responseList, ParseException e) {
  186.                     if (e == null) {
  187.  
  188.                         hideLoad();
  189.                         items = new ArrayList<Feed>();
  190.                         for(int i = 0; i < responseList.size(); i++) {
  191.                             items.add(new Feed(responseList.get(i).getObjectId(),
  192.                                     responseList.get(i).getString("Title"),
  193.                                     responseList.get(i).getString("Description"),
  194.                                     responseList.get(i).getString("CompleteText"),
  195.                                     responseList.get(i).getString("imageURL"),
  196.                                     responseList.get(i).getString("Link_on_Site")));
  197.                         }
  198.  
  199.  
  200.                         adapter = new FeedAdapter(getActivity(), items);
  201.                         adapter.notifyDataSetChanged();
  202.                         mListView.setAdapter(adapter);
  203.                         endLoad();
  204.  
  205.                     } else {
  206.                         //TODO: Show Error
  207.                     }
  208.                 }
  209.             });
  210.         } catch (Exception e) {
  211.             //TODO: Show hard Error
  212.         }
  213.  
  214.     }
  215.  
  216.     private void showTooLongMessage() {
  217.  
  218.         new Handler().postDelayed(new Runnable() {
  219.             @Override
  220.             public void run() {
  221.                 try {
  222.                     mTooLongMessage.setText(getString(R.string.too_slow));
  223.                     mTryAgain.setVisibility(View.VISIBLE);
  224.                 } catch (Exception e) {
  225.                     showTooLongMessage();
  226.                 }
  227.             }
  228.         }, 5000);
  229.  
  230.     }
  231.  
  232.     private void hideLoad() {
  233.         mFeedLoader.setVisibility(View.GONE);
  234.         mPullToRefreshLayout.setVisibility(View.VISIBLE);
  235.     }
  236.  
  237.     protected void endLoad() {
  238.         if (isAdded() && (!isRemoving())) {
  239.             mPullToRefreshLayout.setRefreshComplete();
  240.         }
  241.     }
  242.  
  243.     private void getFeedFilter(String filter) {
  244.  
  245.         ParseQuery<ParseObject> query = ParseQuery.getQuery("FeedPost");
  246.         query.whereContains("Type", filter);
  247.         query.setLimit(5);
  248.         query.findInBackground(new FindCallback<ParseObject>() {
  249.             public void done(List<ParseObject> responseList, ParseException e) {
  250.                 if (e == null) {
  251.  
  252.                     hideLoad();
  253.                     items = new ArrayList<Feed>();
  254.  
  255.                     for(int i = 0; i < responseList.size(); i++) {
  256.                         items.add(new Feed(responseList.get(i).getObjectId(),
  257.                                 responseList.get(i).getString("Title"),
  258.                                 responseList.get(i).getString("Description"),
  259.                                 responseList.get(i).getString("CompleteText"),
  260.                                 responseList.get(i).getString("imageURL"),
  261.                                 responseList.get(i).getString("Link_on_Site")));
  262.                     }
  263.  
  264.  
  265.                     if(items.size() <= 0) {
  266.                         System.out.println("Error s");
  267.  
  268.                         ErrorFragment errorFragment = new ErrorFragment();
  269.                         FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
  270.                         transaction.replace(R.id.fragment_placeholder, errorFragment, "A");
  271.                         transaction.addToBackStack(null);
  272.                         transaction.commit();
  273.  
  274.  
  275.                     } else {
  276.  
  277.                         adapter = new FeedAdapter(getActivity(), items);
  278.                         adapter.notifyDataSetChanged();
  279.                         mListView.setAdapter(adapter);
  280.                         endLoad();
  281.                     }
  282.  
  283.                 } else if(responseList.size() <= 0) {
  284.                     System.out.println("Error 0");
  285.  
  286.                 } else {
  287.                     System.out.println("Error 1");
  288.                 }
  289.             }
  290.         });
  291.  
  292.     }
  293.  
  294.     @Override
  295.     public void onScrollStateChanged(AbsListView absListView, int i) {
  296.  
  297.     }
  298.  
  299.     @Override
  300.     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
  301.         try {
  302.             if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
  303.             {
  304.                 if(!mIsLoading) {
  305.                     if(mListView.getFooterViewsCount() >= 0) {
  306.                         mListView.addFooterView(mFooterView);
  307.                     }
  308.                     new LoadMore().execute();
  309.                     mIsLoading = true;
  310.                     System.out.println("LoadMore");
  311.                 }
  312.             }
  313.         } catch (Exception e) {
  314.             e.printStackTrace();
  315.         }
  316.     }
  317.  
  318. }
Advertisement
Add Comment
Please, Sign In to add comment