package com.xiaomi.xms.sales.ui;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import com.xiaomi.xms.sales.R;
import com.xiaomi.xms.sales.activity.OrderListActivity;
import com.xiaomi.xms.sales.adapter.BaseDataAdapter;
import com.xiaomi.xms.sales.adapter.OrderListAdapter;
import com.xiaomi.xms.sales.loader.BasePageLoader;
import com.xiaomi.xms.sales.loader.BaseResult;
import com.xiaomi.xms.sales.loader.OrderListLoader;
import com.xiaomi.xms.sales.model.OrderPreview;
import com.xiaomi.xms.sales.model.Tags;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.widget.BaseListView;
import com.xiaomi.xms.sales.widget.EmptyLoadingView;
import com.xiaomi.xms.sales.widget.PageScrollListener;
public class OrderListFragment extends BaseFragment {
private static final String TAG = "OrderListFragment";
private BaseListView mListView;
private EmptyLoadingView mLoadingView;
private BaseDataAdapter mAdapter;
private String mAction;
private String mType;
private final static int ORDERLIST_LOADER = 0;
public void setAction(String action) {
mAction = action;
}
public void setType(String type) {
mType = type;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.order_list_fragment, container, false);
mListView = (BaseListView) view.findViewById(android.R.id.list);
mListView.setOnScrollListener(mOnScrollListener);
if (TextUtils.equals(mAction, Constants.Intent.ACTION_ORDER_LIST)) {
mAdapter = new OrderListAdapter(getActivity());
}
mListView.setAdapter(mAdapter);
mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loading);
mLoadingView.setEmptyText(R.string.order_list_empty);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (TextUtils.equals(mAction, Constants.Intent.ACTION_ORDER_LIST)) {
mLoader = (BasePageLoader) getLoader(ORDERLIST_LOADER);
}
if (mLoader != null) {
mLoader.setProgressNotifiable(mLoadingView);
}
mListView.setOnItemClickListener(mItemClickListener);
}
@Override
public void onResume() {
super.onResume();
setTitle();
if (mLoader != null) {
mLoader.reload();
}
}
private void setTitle() {
if (TextUtils.equals(mType, Tags.Order.ORDER_STATUS_OPEN)) {
getActivity().setTitle(R.string.account_my_order_list);
} else if (TextUtils.equals(mType, Tags.Order.ORDER_STATUS_CLOSE)) {
getActivity().setTitle(R.string.account_my_end_list);
} else if (TextUtils.equals(mType, Tags.Order.ORDER_STATUS_CHANGE)) {
getActivity().setTitle(R.string.account_my_change_list);
} else if (TextUtils.equals(mType, Tags.Order.ORDER_STATUS_REFUND)) {
getActivity().setTitle(R.string.account_my_refund_list);
} else if (TextUtils.equals(mType, Tags.Order.ORDER_STATUS_WAIT_PAYMENT)) {
getActivity().setTitle(R.string.account_wait_pay_list);
} else if (TextUtils.equals(mType, Tags.Order.ORDER_STATUS_EXPRESS)) {
getActivity().setTitle(R.string.account_express_list);
}
}
public BasePageLoader getLoader() {
return (BasePageLoader) mLoader;
}
private Loader<BaseResult> getLoader(int loaderId) {
LoaderManager loaderManager = getLoaderManager();
Loader<BaseResult> loader = loaderManager.getLoader(loaderId);
if (loader == null) {
loaderManager.initLoader(loaderId, null, mListCallback);
loader = loaderManager.getLoader(loaderId);
}
return loader;
}
private OnScrollListener mOnScrollListener = new PageScrollListener(new Runnable() {
@Override
public void run() {
if (TextUtils.equals(mAction, Constants.Intent.ACTION_ORDER_LIST) && mLoader != null
&& !mLoader.isLoading() && ((BasePageLoader) mLoader).hasNextPage()) {
mLoader.forceLoad();
}
}
});
private OnItemClickListener mItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View item, int position, long id) {
Bundle bundle = new Bundle();
OrderPreview order = (OrderPreview) mAdapter.getItem(position);
bundle.putString(Constants.Intent.EXTRA_PAYMENT_ORDER_ID, order.getOrderId());
if (order.getDeliverCount() > 1) {
((OrderListActivity) getActivity()).showFragment(
OrderListActivity.TAG_ORDER_DELIVERVIEW,
bundle, true);
return;
}
bundle.putBoolean(Constants.Intent.EXTRA_ONLY_VIEW, true);
((OrderListActivity) getActivity()).showFragment(OrderListActivity.TAG_ORDER_VIEW,
bundle, true);
}
};
private LoaderCallbacks<BaseResult> mListCallback = new LoaderCallbacks<BaseResult>() {
@Override
public Loader onCreateLoader(int id, Bundle arg1) {
if (id == ORDERLIST_LOADER) {
mLoader = new OrderListLoader(getActivity(), mType);
}
mLoader.setProgressNotifiable(mLoadingView);
return mLoader;
}
@Override
public void onLoadFinished(Loader<BaseResult> loader, BaseResult data) {
if(data != null ){
OrderListLoader.Result result = (OrderListLoader.Result) data;
if(result != null && result.mOrderList != null){
mAdapter.updateData(result.mOrderList);
}
}
}
@Override
public void onLoaderReset(Loader<BaseResult> loader) {
}
};
@Override
protected void onNetworkConnected(int type) {
if (TextUtils.equals(mAction, Constants.Intent.ACTION_ORDER_LIST)
|| TextUtils.equals(mAction, Constants.Intent.ACTION_REPAIR_LIST)) {
if (mLoader != null) {
mLoader.reload();
}
}
}
}