package bf.io.openshop.ux.fragments; import android.app.ProgressDialog; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import bf.io.openshop.CONST; import bf.io.openshop.MyApplication; import bf.io.openshop.R; import bf.io.openshop.SettingsMy; import bf.io.openshop.api.EndPoints; import bf.io.openshop.api.GsonRequest; import bf.io.openshop.entities.User; import bf.io.openshop.entities.order.Order; import bf.io.openshop.utils.MsgUtils; import bf.io.openshop.utils.RecyclerMarginDecorator; import bf.io.openshop.utils.Utils; import bf.io.openshop.ux.adapters.OrderRecyclerAdapter; import bf.io.openshop.ux.dialogs.LoginExpiredDialogFragment; import timber.log.Timber; /** * Fragment shows a detail of an order from the order history. */ public class OrderFragment extends Fragment { private static final String ORDER_ID = "order_id"; private ProgressDialog progressDialog; private OrderRecyclerAdapter orderRecyclerAdapter; /** * Create a new fragment instance, which displays the order history * * @param orderId id of the order to load from server. * @return new fragment instance. */ public static OrderFragment newInstance(long orderId) { Bundle args = new Bundle(); args.putLong(ORDER_ID, orderId); OrderFragment fragment = new OrderFragment(); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Timber.d("%s - onCreateView", this.getClass().getSimpleName()); View view = inflater.inflate(R.layout.fragment_order, container, false); progressDialog = Utils.generateProgressDialog(getActivity(), false); prepareOrder(view); if (getArguments() != null) { long orderId = getArguments().getLong(ORDER_ID); loadOrderDetail(orderId); } else { Timber.e("Missing arguments with orderId"); } return view; } /** * Prepare content recycler. Create custom adapter and endless scroll. * * @param view root fragment view. */ private void prepareOrder(View view) { RecyclerView orderRecycler = (RecyclerView) view.findViewById(R.id.order_recycler); orderRecyclerAdapter = new OrderRecyclerAdapter(getActivity()); orderRecycler.setAdapter(orderRecyclerAdapter); orderRecycler.setLayoutManager(new LinearLayoutManager(orderRecycler.getContext())); orderRecycler.setItemAnimator(new DefaultItemAnimator()); orderRecycler.setHasFixedSize(true); orderRecycler.addItemDecoration(new RecyclerMarginDecorator(getResources().getDimensionPixelSize(R.dimen.base_margin))); } private void loadOrderDetail(long orderId) { User user = SettingsMy.getActiveUser(); if (user != null) { String url = String.format(EndPoints.ORDERS_SINGLE, SettingsMy.getActualNonNullShop(getActivity()).getId(), orderId); progressDialog.show(); GsonRequest<Order> req = new GsonRequest<>(Request.Method.GET, url, null, Order.class, new Response.Listener<Order>() { @Override public void onResponse(Order response) { orderRecyclerAdapter.addOrder(response); if (progressDialog != null) progressDialog.cancel(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (progressDialog != null) progressDialog.cancel(); MsgUtils.logAndShowErrorMessage(getActivity(), error); } }, getFragmentManager(), user.getAccessToken()); req.setRetryPolicy(MyApplication.getDefaultRetryPolice()); req.setShouldCache(false); MyApplication.getInstance().addToRequestQueue(req, CONST.ORDERS_DETAIL_REQUESTS_TAG); } else { LoginExpiredDialogFragment loginExpiredDialogFragment = new LoginExpiredDialogFragment(); loginExpiredDialogFragment.show(getFragmentManager(), "loginExpiredDialogFragment"); } } @Override public void onStop() { if (progressDialog != null) progressDialog.cancel(); MyApplication.getInstance().cancelPendingRequests(CONST.ORDERS_HISTORY_REQUESTS_TAG); super.onStop(); } }