Advertisement
Guest User

Untitled

a guest
Feb 12th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.43 KB | None | 0 0
  1. package com.todor.diabetes.ui.product_list;
  2.  
  3. import android.app.Activity;
  4. import android.app.LoaderManager;
  5. import android.content.Intent;
  6. import android.content.Loader;
  7. import android.os.Bundle;
  8. import android.support.annotation.Nullable;
  9. import android.support.design.widget.CoordinatorLayout;
  10. import android.support.design.widget.FloatingActionButton;
  11. import android.support.design.widget.Snackbar;
  12. import android.support.v4.view.MenuItemCompat;
  13. import android.support.v7.widget.DefaultItemAnimator;
  14. import android.support.v7.widget.LinearLayoutManager;
  15. import android.support.v7.widget.RecyclerView;
  16. import android.support.v7.widget.SearchView;
  17. import android.view.LayoutInflater;
  18. import android.view.Menu;
  19. import android.view.MenuInflater;
  20. import android.view.MenuItem;
  21. import android.view.View;
  22. import android.view.ViewGroup;
  23. import android.view.animation.AccelerateInterpolator;
  24. import android.view.animation.DecelerateInterpolator;
  25. import android.widget.Toast;
  26.  
  27. import com.todor.diabetes.Constants;
  28. import com.todor.diabetes.R;
  29. import com.todor.diabetes.db.ProductFunctionality;
  30. import com.todor.diabetes.models.Product;
  31. import com.todor.diabetes.models.TableProduct;
  32. import com.todor.diabetes.ui.BaseFragment;
  33. import com.todor.diabetes.ui.product_add.AddProductActivity;
  34. import com.todor.diabetes.ui.product_details.OnTableProductListener;
  35. import com.todor.diabetes.ui.product_details.ProductDetailsActivity;
  36.  
  37. import java.util.ArrayList;
  38. import java.util.List;
  39.  
  40. import butterknife.Bind;
  41. import butterknife.ButterKnife;
  42. import butterknife.OnClick;
  43.  
  44. public class ProductListFragment extends BaseFragment implements
  45.         LoaderManager.LoaderCallbacks<ArrayList<Product>>,
  46.         SearchView.OnQueryTextListener {
  47.  
  48.     @Bind(R.id.recyclerView)       RecyclerView         recyclerView;
  49.     @Bind(R.id.fab)                FloatingActionButton fab;
  50.     @Bind(R.id.coordinator_layout) CoordinatorLayout    coordinatorLayout;
  51.     private                        ProductFunctionality dbManager;
  52.     private List<Product>      productList    = null;
  53.     private ProductListAdapter productAdapter = null;
  54.     private OnTableProductListener onTableProductListener;
  55.  
  56.     @Override
  57.     public String getFragmentTitle() {
  58.         return getResources().getString(R.string.title_products);
  59.     }
  60.  
  61.     @Override
  62.     public void onAttach(Activity activity) {
  63.         super.onAttach(activity);
  64.         onTableProductListener = (OnTableProductListener) activity;
  65.     }
  66.  
  67.     @Nullable
  68.     @Override
  69.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  70.         View v = inflater.inflate(R.layout.fragment_product_list, container, false);
  71.  
  72.         ButterKnife.bind(this, v);
  73.         setHasOptionsMenu(true);
  74.         dbManager = new ProductFunctionality(getActivity());
  75.  
  76.         initLoader();
  77.         setupRecyclerView();
  78.         return v;
  79.     }
  80.  
  81.     private void setupRecyclerView() {
  82.         RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
  83.         recyclerView.setItemAnimator(itemAnimator);
  84.  
  85.         LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
  86.         recyclerView.setLayoutManager(layoutManager);
  87.  
  88.         recyclerView.setAdapter(productAdapter);
  89.  
  90.         recyclerView.addOnScrollListener(new HidingScrollListener() {
  91.             @Override
  92.             public void onHide() {
  93.                 hideFab();
  94.             }
  95.  
  96.             @Override
  97.             public void onShow() {
  98.                 showFab();
  99.             }
  100.         });
  101.     }
  102.  
  103.     private void hideFab() {
  104.         CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
  105.         int fabBottomMargin = lp.bottomMargin;
  106.         fab.animate().translationY(fab.getHeight() + fabBottomMargin).setInterpolator(new AccelerateInterpolator(2)).start();
  107.     }
  108.  
  109.     private void showFab() {
  110.         fab.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start();
  111.     }
  112.  
  113.     @OnClick(R.id.fab)
  114.     public void fab_OnClick() {
  115.         Intent intent = new Intent(getActivity(), AddProductActivity.class);
  116.         startActivityForResult(intent, Constants.REQUEST_CODE_FOR_RESTART_LOADER);
  117.     }
  118.  
  119.     private void setupProductAdapter(ArrayList<Product> data) {
  120.         productAdapter = new ProductListAdapter(data, new OnProductClickListener() {
  121.             @Override
  122.             public void onProductClick(Product product) {
  123.                 Intent intent = new Intent(getActivity(), ProductDetailsActivity.class);
  124.                 intent.putExtra(Constants.PRODUCT_KEY, product);
  125.                 startActivityForResult(intent, Constants.REQUEST_CODE_FOR_TABLE);
  126.             }
  127.         }, new OnProductLongClickListener() {
  128.             @Override
  129.             public void onItemLongClick(final int position, final Product product) {
  130.                 productAdapter.removeItem(position);
  131.                 dbManager.deleteProduct(product.name);
  132.                 Snackbar.make(coordinatorLayout, R.string.deletion_product, Snackbar.LENGTH_SHORT)
  133.                         .setAction(R.string.undo, new View.OnClickListener() {
  134.                             @Override
  135.                             public void onClick(View v) {
  136.                                 productAdapter.addItem(position, product);
  137.                                 dbManager.insertProduct(product);
  138.                             }
  139.                         })
  140.                         .show();
  141.             }
  142.         });
  143.     }
  144.  
  145.     @Override
  146.     public Loader<ArrayList<Product>> onCreateLoader(int id, Bundle args) {
  147.         return new ProductLoader(getActivity());
  148.     }
  149.  
  150.     private void initLoader() {
  151.         getActivity().getLoaderManager().initLoader(Constants.PRODUCT_LIST_LOADER, null, this);
  152.     }
  153.  
  154.     @Override
  155.     public void onLoadFinished(Loader<ArrayList<Product>> loader, ArrayList<Product> data) {
  156.         productList = data;
  157.         if (productList != null && productList.size() != 0) {
  158.             setupProductAdapter(data);
  159.             recyclerView.setAdapter(productAdapter);
  160.         } else {
  161.             Toast.makeText(getActivity(), R.string.toast_for_empty_products, Toast.LENGTH_SHORT).show();
  162.         }
  163.     }
  164.  
  165.     @Override
  166.     public void onLoaderReset(Loader<ArrayList<Product>> loader) {
  167.         recyclerView.setAdapter(null);
  168.     }
  169.  
  170.     @Override
  171.     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
  172.         inflater.inflate(R.menu.search, menu);
  173.  
  174.         final MenuItem item = menu.findItem(R.id.action_search);
  175.         final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
  176.         searchView.setOnQueryTextListener(this);
  177.     }
  178.  
  179.     private List<Product> filter(List<Product> models, String query) {
  180.         query = query.toLowerCase();
  181.  
  182.         final List<Product> filteredModelList = new ArrayList<>();
  183.         for (Product model : models) {
  184.             final String text = model.name.toLowerCase();
  185.             if (text.contains(query)) {
  186.                 filteredModelList.add(model);
  187.             }
  188.         }
  189.         return filteredModelList;
  190.     }
  191.  
  192.     @Override
  193.     public boolean onQueryTextSubmit(String query) {
  194.         return false;
  195.     }
  196.  
  197.     @Override
  198.     public boolean onQueryTextChange(String query) {
  199.         final List<Product> filteredModelList = filter(productList, query);
  200.         productAdapter.animateTo(filteredModelList);
  201.         recyclerView.scrollToPosition(0);
  202.         return true;
  203.     }
  204.  
  205.     @Override
  206.     public void onActivityResult(int requestCode, int resultCode, Intent data) {
  207.         super.onActivityResult(requestCode, resultCode, data);
  208.         if (requestCode == Constants.REQUEST_CODE_FOR_TABLE) {
  209.             if (resultCode == Activity.RESULT_OK) {
  210.                 TableProduct productForTable = data.getParcelableExtra(Constants.PRODUCT_FOR_TABLE);
  211.                 onTableProductListener.setProduct(productForTable);
  212.             }
  213.         } else if (requestCode == Constants.REQUEST_CODE_FOR_RESTART_LOADER) {
  214.             if (resultCode == Activity.RESULT_OK) {
  215.                 restartLoader();
  216.             }
  217.         }
  218.     }
  219.  
  220.     private void restartLoader() {
  221.         getActivity().getLoaderManager().restartLoader(Constants.PRODUCT_LIST_LOADER, null, this);
  222.     }
  223.  
  224.     @Override
  225.     public void onPause() {
  226.         super.onPause();
  227.         if (dbManager.getProductsCount() != productList.size()) {
  228.             restartLoader();
  229.         }
  230.     }
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement