Advertisement
Guest User

ItemsListFragment

a guest
Jan 29th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 19.19 KB | None | 0 0
  1. package com.allstoresteam.allstores;
  2.  
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.content.SharedPreferences;
  6. import android.graphics.Bitmap;
  7. import android.net.Uri;
  8. import android.os.Bundle;
  9. import android.support.v4.app.Fragment;
  10. import android.support.v4.app.LoaderManager.LoaderCallbacks;
  11. import android.support.v4.content.Loader;
  12. import android.support.v4.widget.SwipeRefreshLayout;
  13. import android.view.LayoutInflater;
  14. import android.view.View;
  15. import android.view.ViewGroup;
  16. import android.widget.AdapterView;
  17. import android.widget.AdapterView.OnItemClickListener;
  18. import android.widget.Button;
  19. import android.widget.FrameLayout;
  20. import android.widget.ImageView;
  21. import android.widget.ProgressBar;
  22. import android.widget.TextView;
  23. import android.widget.Toast;
  24.  
  25. import com.allstoresteam.allstores.MyHttpClient;
  26. import com.allstoresteam.allstores.gcm.PushRegIdManager;
  27. import com.allstoresteam.allstores.model.BucketGoods;
  28. import com.allstoresteam.allstores.model.GoodLikeLoaderResponse;
  29. import com.allstoresteam.allstores.model.goods.Good;
  30. import com.allstoresteam.allstores.model.goods.GoodsFromJSON;
  31. import com.allstoresteam.allstores.model.shops.Shop;
  32. import com.allstoresteam.allstores.network.GoodLikeLoader;
  33. import com.allstoresteam.allstores.network.GoodsLoader;
  34. import com.allstoresteam.allstores.network.ShopLoader;
  35. import com.allstoresteam.allstores.ui.EndlessScrollListenerFixed;
  36. import com.allstoresteam.allstores.ui.activities.GoodDetailActivity;
  37. import com.allstoresteam.allstores.ui.activities.LoginActivity;
  38. import com.allstoresteam.allstores.ui.activities.ShopOnMapActivity;
  39. import com.allstoresteam.allstores.ui.adapters.GoodsListAdapter;
  40. import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;
  41. import com.nostra13.universalimageloader.core.DisplayImageOptions;
  42. import com.nostra13.universalimageloader.core.ImageLoader;
  43. import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
  44. import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
  45.  
  46. import org.json.JSONArray;
  47.  
  48. import in.srain.cube.views.GridViewWithHeaderAndFooter;
  49.  
  50. public class GoodsListFragment extends Fragment implements GoodsListAdapter.OnGoodLikedListener,
  51.         SwipeRefreshLayout.OnRefreshListener{
  52.     public static final String GOODS_URL_EXTRA_KEY = "goods_url_key";
  53.     public static final String SHOP_URL_EXTRA_KEY = "shop_url_key";
  54.     public static final String SHOP_NAME_EXTRA_KEY = "shop_name_key";
  55.     public static final String SHOP_IMAGE_URL_EXTRA_KEY = "shop_image_url_key";
  56.     public static final String SHOP_ID_EXTRA_KEY = "shop_id_key";
  57.     public static final String TAB_POSITION_EXTRA_KEY = "tab_position_key";
  58.     private static final int VISIBLE_THRESHOLD = 20;
  59.     private static final int GOODS_LOADER_ID = 0;
  60.     private static final int SHOP_LOADER_ID = 1;
  61.     private static final int GOOD_LIKE_LOADER_ID = 2;
  62.  
  63.     private ImageLoader imageLoader;
  64.     private GridViewWithHeaderAndFooter goodsGridView;
  65.     private View goodsFooterView, goodsHeaderView;
  66.     private TextView tvShopDescription, tvShopAddress;
  67.     private Button bShowOnMap, bCall;
  68.     private ProgressBar pbShopDescription;
  69.     private GoodsListAdapter goodsListAdapter;
  70.     private Loader<JSONArray> goodsLoader;
  71.     private Loader<Shop> shopLoader;
  72.     private Loader<GoodLikeLoaderResponse> goodLikeLoader;
  73.     private GoodsFromJSON goods;
  74.     private String goodsUrl, shopUrl, shopName, shopImageUrl, shopId;
  75.     private int tabPosition;
  76.     private BucketGoods bucketGoods;
  77.     private String username, password;
  78.     private SwipeRefreshLayout mSwipeRefreshLayout;
  79.     private EndlessScrollListenerFixed endlessScrollListener;
  80.  
  81.     public static GoodsListFragment newInstance(String goodsUrl, String shopUrl, String shopName,
  82.                                                 String shopImageUrl, String shopId, int tabPosition) {
  83.         GoodsListFragment frag = new GoodsListFragment();
  84.         Bundle args = new Bundle();
  85.         args.putString(GOODS_URL_EXTRA_KEY, goodsUrl);
  86.         args.putString(SHOP_URL_EXTRA_KEY, shopUrl);
  87.         args.putString(SHOP_NAME_EXTRA_KEY, shopName);
  88.         args.putString(SHOP_IMAGE_URL_EXTRA_KEY, shopImageUrl);
  89.         args.putString(SHOP_ID_EXTRA_KEY, shopId);
  90.         args.putInt(TAB_POSITION_EXTRA_KEY, tabPosition);
  91.         frag.setArguments(args);
  92.         return frag;
  93.     }
  94.  
  95.     public static GoodsListFragment newInstance(String goodsUrl, int tabPosition) {
  96.         GoodsListFragment frag = new GoodsListFragment();
  97.         Bundle args = new Bundle();
  98.         args.putString(GOODS_URL_EXTRA_KEY, goodsUrl);
  99.         args.putInt(TAB_POSITION_EXTRA_KEY, tabPosition);
  100.         frag.setArguments(args);
  101.         return frag;
  102.     }
  103.     public static GoodsListFragment newInstance(String goodsUrl) {
  104.         GoodsListFragment frag = new GoodsListFragment();
  105.         Bundle args = new Bundle();
  106.         args.putString(GOODS_URL_EXTRA_KEY, goodsUrl);
  107.         args.putInt(TAB_POSITION_EXTRA_KEY, 0);
  108.         frag.setArguments(args);
  109.         return frag;
  110.     }
  111.  
  112.     @Override
  113.     public View onCreateView(LayoutInflater inflater, ViewGroup container,
  114.             Bundle savedInstanceState) {
  115.         initImageLoader();
  116.         setUsernameAndPassword();
  117.         DisplayImageOptions imageLoaderOptions = new DisplayImageOptions.Builder()
  118.                 .showImageOnLoading(R.drawable.loading_afisha_image)
  119.                 .showImageOnFail(R.drawable.loading_afisha_image)
  120.                 .cacheInMemory(true)
  121.                 .bitmapConfig(Bitmap.Config.RGB_565)
  122.                 .cacheOnDisc(true)
  123.                 .build();
  124.         DisplayImageOptions ilShopImageOptions = new DisplayImageOptions.Builder()
  125.                 .showImageOnLoading(R.drawable.loading_brend_image)
  126.                 .showImageOnFail(R.drawable.loading_brend_image)
  127.                 .cacheInMemory(true)
  128.                 .cacheOnDisc(true)
  129.                 .bitmapConfig(Bitmap.Config.RGB_565)
  130.                 .build();
  131.         shopUrl = getArguments().getString(SHOP_URL_EXTRA_KEY);
  132.         shopName = getArguments().getString(SHOP_NAME_EXTRA_KEY);
  133.         shopImageUrl = getArguments().getString(SHOP_IMAGE_URL_EXTRA_KEY);
  134.         shopId = getArguments().getString(SHOP_ID_EXTRA_KEY);
  135.         goodsUrl = getArguments().getString(GOODS_URL_EXTRA_KEY);
  136.         tabPosition = getArguments().getInt(TAB_POSITION_EXTRA_KEY);
  137.         SharedPreferences mPreferences = getActivity().getSharedPreferences(getActivity().getString(R.string.app_name), 0);
  138.         bucketGoods = new BucketGoods(mPreferences);
  139.  
  140.  
  141.         final View rootView = inflater.inflate(R.layout.fragment_goods_grid, container, false);
  142.         mSwipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.refresh);
  143.         mSwipeRefreshLayout.setOnRefreshListener(this);
  144.         goods = new GoodsFromJSON();
  145.         goodsGridView = (GridViewWithHeaderAndFooter) rootView.findViewById(R.id.goods_grid);
  146.         LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
  147.         goodsFooterView = layoutInflater.inflate(R.layout.good_grid_footer, null);
  148.         goodsFooterView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT));
  149.         goodsListAdapter = new GoodsListAdapter(getActivity(), goods, imageLoaderOptions, this, bucketGoods);
  150.  
  151.         if (shopUrl != null && !shopUrl.equals("")){
  152.             goodsHeaderView = layoutInflater.inflate(R.layout.good_grid_header2, null);
  153.             goodsHeaderView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT));
  154.             goodsGridView.addHeaderView(goodsHeaderView);
  155.             bShowOnMap = (Button) goodsHeaderView.findViewById(R.id.b_on_map);
  156.             bCall = (Button) goodsHeaderView.findViewById(R.id.b_call);
  157.             TextView tvShopName = (TextView) goodsHeaderView.findViewById(R.id.tv_shop_name);
  158.             tvShopName.setText(shopName);
  159.             ImageView ivShop = (ImageView) goodsHeaderView.findViewById(R.id.iv_shop);
  160.             if (!shopImageUrl.equals(""))
  161.                 imageLoader.displayImage(shopImageUrl, ivShop, ilShopImageOptions,
  162.                         new SimpleImageLoadingListener(){
  163.                     @Override
  164.                     public void onLoadingComplete(String imageUri,
  165.                                                   View view, Bitmap loadedImage) {
  166.                         goodsListAdapter.notifyDataSetChanged();
  167.                     }
  168.                 });
  169.             tvShopDescription = (TextView) goodsHeaderView.findViewById(R.id.tv_shop_description);
  170.             tvShopDescription.setVisibility(View.GONE);
  171.             tvShopAddress = (TextView) goodsHeaderView.findViewById(R.id.tv_shop_address);
  172.             tvShopAddress.setVisibility(View.GONE);
  173.  
  174.             pbShopDescription = (ProgressBar) goodsHeaderView.findViewById(R.id.pb_shop_description);
  175.             pbShopDescription.setVisibility(View.VISIBLE);
  176.             Bundle bundle = new Bundle();
  177.             bundle.putString(GoodsLoader.ARGS_URL, MyHttpClient.GET_SHOP_URL_NEW + shopId);
  178.             shopLoader = getLoaderManager().initLoader(SHOP_LOADER_ID, bundle, new ShopLoaderCallbacks());
  179.             shopLoader.forceLoad();
  180.         }
  181.         goodsGridView.post(new Runnable() {
  182.             @Override
  183.             public void run() {
  184.                 goodsGridView.tryToScrollToBottomSmoothly(100);
  185.             }
  186.         });
  187.         goodsGridView.addFooterView(goodsFooterView);;
  188.         goodsGridView.setAdapter(goodsListAdapter);
  189.         goodsGridView.setFastScrollEnabled(false);
  190.         goodsGridView.setOnItemClickListener(new OnItemClickListener() {
  191.             @Override
  192.             public void onItemClick(AdapterView<?> arg0, View arg1, int position,
  193.                                     long id) {
  194.                 Intent intent = new Intent(getActivity(), GoodDetailActivity.class);
  195.                 if (goodsListAdapter.getItem((int) id) != null) {
  196.                     Good good = (Good) goodsListAdapter.getItem((int) id);
  197.                     intent.putExtra(GoodDetailActivity.GOOD_DETAIL_JSON_INTENT_KEY, good.getJSONStr());
  198.                     startActivity(intent);
  199.                 }
  200.             }
  201.         });
  202.         endlessScrollListener = new EndlessScrollListenerFixed(0) {
  203.             @Override
  204.             public void onLoadMore(int page, int totalItemsCount) {
  205.                 goodsFooterView.setVisibility(View.VISIBLE);
  206.                 restartLoader(page);
  207.                 endlessScrollListener.setIsLoading(true);
  208.             }
  209.         };
  210.         goodsGridView.setOnScrollListener(endlessScrollListener);
  211.         restartLoader(0);
  212.         return rootView;
  213.     }
  214.  
  215.    
  216.     public void initImageLoader() {
  217.         ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(getActivity())
  218.                 .threadPoolSize(5)
  219.                 .memoryCache(new WeakMemoryCache())
  220.                 .denyCacheImageMultipleSizesInMemory()
  221.                 .memoryCacheSize(1048576 * 10).build();
  222.         imageLoader = ImageLoader.getInstance();
  223.         imageLoader.init(imageLoaderConfiguration);
  224.         //ImageLoader.getInstance().clearDiskCache();
  225.         //ImageLoader.getInstance().clearMemoryCache();
  226.         // Initialize ImageLoader with configuration.
  227.     }
  228.  
  229.     private void setUsernameAndPassword(){
  230.         SharedPreferences mPreferences = getActivity().getSharedPreferences(getString(R.string.app_name), 0);
  231.         String email = mPreferences.getString(LoginActivity.PROPERTY_EMAIL, "");
  232.         String name = mPreferences.getString(LoginActivity.PROPERTY_NAME, "");
  233.         if (!email.equals("")){
  234.             username = name;
  235.             password = mPreferences.getString(LoginActivity.PROPERTY_PASSWORD, "");
  236.         } else {
  237.             username = mPreferences.getString(PushRegIdManager.PROPERTY_REG_ID, "");
  238.             password = "";
  239.         }
  240.     }
  241.  
  242.     public void restartLoader(final int currentPage){
  243.         Bundle bundle = new Bundle();
  244.         bundle.putInt(GoodsLoader.ARGS_SKIP, currentPage);
  245.         bundle.putInt(GoodsLoader.ARGS_LIMIT, VISIBLE_THRESHOLD);
  246.         bundle.putString(GoodsLoader.ARGS_URL, goodsUrl);
  247.         goodsLoader = getLoaderManager().restartLoader(GOODS_LOADER_ID, bundle, new LoaderCallbacks<JSONArray>(){
  248.             @Override
  249.             public Loader<JSONArray> onCreateLoader(int id, Bundle args) {
  250.                 Loader<JSONArray> loader = new GoodsLoader(getActivity(), args);
  251.                 return loader;
  252.             }
  253.  
  254.             @Override
  255.             public void onLoadFinished(Loader<JSONArray> loader, JSONArray goodsJSONArray) {
  256.                 if (mSwipeRefreshLayout.isRefreshing())
  257.                     mSwipeRefreshLayout.setRefreshing(false);
  258.                 goodsFooterView.setVisibility(View.GONE);
  259.                 if (goodsJSONArray == null)
  260.                     return;
  261.                 if (goodsJSONArray.length() == 0 && tabPosition == 0 && currentPage == 0){
  262.                     Toast.makeText(getActivity(), getResources().getString(R.string.no_items_in_here), Toast.LENGTH_SHORT).show();
  263.                 }
  264.                 goods.appendGoodsFromJSON(goodsJSONArray);
  265.                 goods.setGoodsLikesData(bucketGoods);
  266.                 goodsListAdapter.notifyDataSetChanged();
  267.                 if (goodsJSONArray.length() == VISIBLE_THRESHOLD) {
  268.                     endlessScrollListener.setIsLoading(false);
  269.                     endlessScrollListener.increaseCurrentPage();
  270.                 }
  271.             }
  272.  
  273.             @Override
  274.             public void onLoaderReset(Loader<JSONArray> loader) {
  275.                 // TODO Auto-generated method stub
  276.             }
  277.         });
  278.         goodsLoader.forceLoad();
  279.     }
  280.  
  281.     @Override
  282.     public void onGoodLiked(String goodId, String goodJSONStr) {
  283.         SharedPreferences mPreferences = getActivity().getSharedPreferences(getString(R.string.app_name), 0);
  284.         String email = mPreferences.getString(LoginActivity.PROPERTY_EMAIL, "");
  285.         if (email.equals("")){
  286.             Toast.makeText(getContext(), getResources().getString(R.string.login_to_like ability), Toast.LENGTH_SHORT).show();
  287.             return;
  288.         }
  289.         Bundle bundle = new Bundle();
  290.         bundle.putString(GoodLikeLoader.ARGS_GOOD_ID, goodId);
  291.         bundle.putString(GoodLikeLoader.ARGS_GOOD_JSON_STR, goodJSONStr);
  292.         bundle.putBoolean(GoodLikeLoader.ARGS_LIKE_OR_DISLIKE, true);
  293.         bundle.putString(GoodLikeLoader.ARGS_PASSWORD, password);
  294.         bundle.putString(GoodLikeLoader.ARGS_USERNAME, username);
  295.         goodLikeLoader = getLoaderManager().restartLoader(GOOD_LIKE_LOADER_ID, bundle, new GoodLikeLoaderCallbacks());
  296.         goodLikeLoader.forceLoad();
  297.     }
  298.  
  299.     @Override
  300.     public void onGoodDisliked(String goodId, String goodJSONStr) {
  301.         SharedPreferences mPreferences = getActivity().getSharedPreferences(getString(R.string.app_name), 0);
  302.         String email = mPreferences.getString(LoginActivity.PROPERTY_EMAIL, "");
  303.         if (email.equals("")){
  304.             Toast.makeText(getContext(), getResources().getString(R.string.login_to_like ability), Toast.LENGTH_SHORT).show();
  305.             return;
  306.         }
  307.         Bundle bundle = new Bundle();
  308.         bundle.putString(GoodLikeLoader.ARGS_GOOD_ID, goodId);
  309.         bundle.putString(GoodLikeLoader.ARGS_GOOD_JSON_STR, goodJSONStr);
  310.         bundle.putBoolean(GoodLikeLoader.ARGS_LIKE_OR_DISLIKE, false);
  311.         bundle.putString(GoodLikeLoader.ARGS_PASSWORD, password);
  312.         bundle.putString(GoodLikeLoader.ARGS_USERNAME, username);
  313.         goodLikeLoader = getLoaderManager().restartLoader(GOODS_LOADER_ID, bundle, new GoodLikeLoaderCallbacks());
  314.         goodLikeLoader.forceLoad();
  315.     }
  316.  
  317.     @Override
  318.     public void onRefresh() {
  319.         goods.clear();
  320.         goodsListAdapter.notifyDataSetChanged();
  321.         restartLoader(0);
  322.         endlessScrollListener.init();
  323.     }
  324.  
  325.     private class ShopLoaderCallbacks implements LoaderCallbacks<Shop> {
  326.  
  327.         @Override
  328.         public Loader<Shop> onCreateLoader(int id, Bundle args) {
  329.             Loader<Shop> loader = new ShopLoader(getActivity(), args);
  330.             return loader;
  331.         }
  332.  
  333.         @Override
  334.         public void onLoadFinished(Loader<Shop> loader, final Shop shop) {
  335.             if (pbShopDescription != null)
  336.                 pbShopDescription.setVisibility(View.GONE);
  337.             if (shop == null)
  338.                 return;
  339.             if (shop.getDescription() != null && !shop.getDescription().equals("")) {
  340.                 tvShopDescription.setVisibility(View.VISIBLE);
  341.                 tvShopDescription.setText(shop.getDescription());
  342.             }
  343.             if (shop.getAddress() != null && !shop.getAddress().equals("")){
  344.                 tvShopAddress.setVisibility(View.VISIBLE);
  345.                 tvShopAddress.setText(shop.getAddress());
  346.             }
  347.             if (shop.getGpsLat() != 0) {
  348.                 bShowOnMap.setOnClickListener(new View.OnClickListener() {
  349.                     @Override
  350.                     public void onClick(View view) {
  351.                         Intent intent = new Intent(getActivity(), ShopOnMapActivity.class);
  352.                         intent.putExtra(ShopOnMapActivity.SHOP_NAME_INTENT_KEY, shopName);
  353.                         intent.putExtra(ShopOnMapActivity.SHOP_GPS_LAT_INTENT_KEY, shop.getGpsLat());
  354.                         intent.putExtra(ShopOnMapActivity.SHOP_GPS_LONG_INTENT_KEY, shop.getGpsLong());
  355.                         startActivity(intent);
  356.                     }
  357.                 });
  358.             }
  359.             bCall.setOnClickListener(new View.OnClickListener() {
  360.                 @Override
  361.                 public void onClick(View view) {
  362.                     String phoneStr = shop.getTel();
  363.                     if (phoneStr.equals("")){
  364.                         Toast.makeText(getActivity(), "Магазин не указал своего номера телефона.",
  365.                                 Toast.LENGTH_SHORT).show();
  366.                         return;
  367.                     }
  368.                     Intent intent = new Intent(Intent.ACTION_DIAL);
  369.                     intent.setData(Uri.parse("tel:+7" + phoneStr));
  370.                     startActivity(intent);
  371.                 }
  372.             });
  373.  
  374.             goodsListAdapter.notifyDataSetChanged();
  375.         }
  376.  
  377.         @Override
  378.         public void onLoaderReset(Loader<Shop> loader) {
  379.  
  380.         }
  381.     }
  382.  
  383.     private class GoodLikeLoaderCallbacks implements LoaderCallbacks<GoodLikeLoaderResponse> {
  384.  
  385.         @Override
  386.         public Loader<GoodLikeLoaderResponse> onCreateLoader(int id, Bundle args) {
  387.             Loader<GoodLikeLoaderResponse> loader = new GoodLikeLoader(getActivity(), args);
  388.             return loader;
  389.         }
  390.  
  391.         @Override
  392.         public void onLoadFinished(Loader<GoodLikeLoaderResponse> loader, GoodLikeLoaderResponse response) {
  393.             if (!response.isSuccess()) {
  394.                 if (response.isLike())
  395.                     bucketGoods.removeGood(response.getGoodId());
  396.                 else {
  397.                     bucketGoods.addGood(response.getGoodJSONStr());
  398.                 }
  399.                 goods.setGoodsLikesData(bucketGoods);
  400.                 goodsListAdapter.notifyDataSetChanged();
  401.             } else {
  402.                 if (response.isLike())
  403.                     goods.increaseNumLikesByGoodId(response.getGoodId());
  404.                 else
  405.                     goods.decreaseNumLikesByGoodId(response.getGoodId());
  406.                 goods.setGoodsLikesData(bucketGoods);
  407.                 goodsListAdapter.notifyDataSetChanged();
  408.             }
  409.         }
  410.         @Override
  411.         public void onLoaderReset(Loader<GoodLikeLoaderResponse> loader) {
  412.  
  413.         }
  414.     }
  415. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement