package com.xiaomi.xms.sales.ui;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.TextAppearanceSpan;
import android.util.Base64;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import com.xiaomi.xms.sales.R;
import com.xiaomi.xms.sales.activity.SameDayExchangeActivity;
import com.xiaomi.xms.sales.adapter.OrderViewProductAdapter;
import com.xiaomi.xms.sales.loader.ExchangeOrderInfoLoader;
import com.xiaomi.xms.sales.loader.ReturnOrderInfoLoader;
import com.xiaomi.xms.sales.model.Order.ProductBrief;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.util.LogUtil;
import com.xiaomi.xms.sales.util.ToastUtil;
import com.xiaomi.xms.sales.util.Utils;
import com.xiaomi.xms.sales.widget.BaseListView;
import com.xiaomi.xms.sales.widget.EmptyLoadingView;
public class ExchangeOrderDetailFragment extends Fragment {
private static final String TAG = "OrderViewFragment";
private static final int ORDER_INFO_LOADER = 0;
private static final int REFUND_CONFIRM_LOADER = 1;
private static final int SAVE_PRINTER = 100;
private TextView mOrderIdText;
private TextView mOrderStatusText;
private TextView mOrderFeeText;
private TextView mOrderFeeSubtotalText;
private TextView mOrderInvoiceText;
private TextView mOrderAddTime;
private View mActionContainer;
private View mOperationContainer;
private Button mPayButton;
private BaseListView mListView;
private View mHeaderView;
private View mHeaderContentView;
private View mExpressView;
private View mListFooterView;
private View mListSpinnerFooterView;
private View mPaymentInfoView;
private TextView mPayTimeText;
private TextView mPayNoText;
private View mUserInfoView;
private TextView mUserNameText;
private TextView mUserTelText;
private TextView mUserEmailText;
private ExchangeOrderInfoLoader mLoader;
private OrderViewProductAdapter mAdapter;
private EmptyLoadingView mLoadingView;
private String mOrderId;
private String mOrderFee;
private int orderType;
private String orderStatusType;
private TextAppearanceSpan mHighlightTextAppearanceSpan;
private OnOrderStatusChangedListener mOrderStatusListener;
private Spinner doSpinner;
private String doType;
private boolean onlyView;
private Bundle mBundle;
public interface OnOrderStatusChangedListener {
public void onOrderStatusChanged();
}
public void setOrderStatusListener(OnOrderStatusChangedListener listener) {
mOrderStatusListener = listener;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.exchange_order_detail_fragment, container, false);
mListView = (BaseListView) view.findViewById(android.R.id.list);
mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loading);
mHeaderView = inflater.inflate(R.layout.return_order_detail_header, null, false);
mHeaderView.setVisibility(View.GONE);
mHeaderContentView = inflater.inflate(R.layout.order_view_header_content, null, false);
mHeaderContentView.setVisibility(View.GONE);
mListFooterView = inflater.inflate(R.layout.return_order_detail_footer, null, false);
mListFooterView.setVisibility(View.GONE);
mListSpinnerFooterView = inflater.inflate(R.layout.exchange_order_detail_spinner_footer, null, false);
mListSpinnerFooterView.setVisibility(View.GONE);
doSpinner = (Spinner) mListSpinnerFooterView.findViewById(R.id.exchange_operation_type);
doSpinner.setVisibility(View.VISIBLE);
mListView.addHeaderView(mHeaderView, null, false);
mListView.addHeaderView(mHeaderContentView, null, false);
mListView.addFooterView(mListFooterView);
mListView.addFooterView(mListSpinnerFooterView);
mListView.setPadding(getResources().getDimensionPixelSize(R.dimen.list_item_padding), 0, getResources()
.getDimensionPixelSize(R.dimen.list_item_padding), getResources()
.getDimensionPixelSize(R.dimen.list_item_padding));
mOrderIdText = (TextView) view.findViewById(R.id.order_id);
mOrderStatusText = (TextView) view.findViewById(R.id.order_status);
mOrderFeeText = (TextView) view.findViewById(R.id.order_fee);
mOrderFeeSubtotalText = (TextView) mHeaderView.findViewById(R.id.order_fee_subtotal);
mExpressView = view.findViewById(R.id.order_express_info);
mOrderAddTime = (TextView) view.findViewById(R.id.add_time);
mOrderInvoiceText = (TextView) view.findViewById(R.id.invoice_info);
mPayButton = (Button) view.findViewById(R.id.confirm_btn);
mActionContainer = view.findViewById(R.id.action_container);
mOperationContainer = mListSpinnerFooterView.findViewById(R.id.exchange_operation_spinner);
mHighlightTextAppearanceSpan = new TextAppearanceSpan(getActivity(), R.style.TextAppearance_Notice_Medium);
mPaymentInfoView = mHeaderContentView.findViewById(R.id.payment_info);
mPayTimeText = (TextView) mHeaderContentView.findViewById(R.id.payment_info_time);
mPayNoText = (TextView) mHeaderContentView.findViewById(R.id.payment_info_refno);
mUserInfoView = mHeaderContentView.findViewById(R.id.user_info);
mUserNameText = (TextView) mHeaderContentView.findViewById(R.id.receive_user_name);
mUserTelText = (TextView) mHeaderContentView.findViewById(R.id.receive_user_tel);
mUserEmailText = (TextView) mHeaderContentView.findViewById(R.id.receive_user_email);
handleIntent();
mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loading);
// mLoadingView.setEmptyText(R.string.order_list_empty);
return view;
}
private void handleIntent() {
mBundle = getArguments();
if (mBundle != null) {
mOrderId = mBundle.getString(Constants.Intent.EXTRA_EXCHANGE_ORDER_SN_STR);
onlyView = mBundle.getBoolean(Constants.Intent.EXTRA_ONLY_VIEW);
}else{
mBundle = new Bundle();
}
LogUtil.d(TAG, mOrderId);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(ORDER_INFO_LOADER, null, mOrderInfoCallback);
mAdapter = new OrderViewProductAdapter(getActivity());
mListView.setAdapter(mAdapter);
mPayButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
SameDayExchangeActivity father = (SameDayExchangeActivity) getActivity();
mBundle.putString(Constants.Intent.EXTRA_RETURN_ORDER_SN_STR, mOrderId);
father.showFragment(SameDayExchangeActivity.Fragments.TAG_EXCHANGE_LIST_FRAGMENT, mBundle, true);
}
});
doSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
@Override
public void onResume() {
super.onResume();
mLoader.reload();
}
private LoaderCallbacks<ExchangeOrderInfoLoader.Result> mOrderInfoCallback = new LoaderCallbacks<ExchangeOrderInfoLoader.Result>() {
@Override
public Loader onCreateLoader(int id, Bundle arg1) {
if (id == ORDER_INFO_LOADER) {
mLoader = new ExchangeOrderInfoLoader(getActivity());
mLoader.setNeedSecurityKeyTask(false);
mLoader.setNeedDatabase(false);
mLoader.setOrderId(mOrderId);
mLoader.setProgressNotifiable(mLoadingView);
return mLoader;
}
return null;
}
@Override
public void onLoadFinished(Loader<ExchangeOrderInfoLoader.Result> loader, ExchangeOrderInfoLoader.Result data) {
LogUtil.d(TAG, "info loaded.");
if (data != null && data.mOrderInfo != null) {
orderStatusType = data.mOrderInfo.getmPayStatus();
mOrderId = data.mOrderInfo.getOrderId();
ArrayList<ProductBrief> productSnList = data.mOrderInfo.getmProductSnList();
if(productSnList != null && productSnList.size() > 0){
saveProductSnList(productSnList);
}
orderType = data.mOrderInfo.getOrderType();
mHeaderView.setVisibility(View.VISIBLE);
mHeaderContentView.setVisibility(View.VISIBLE);
mListFooterView.setVisibility(View.VISIBLE);
mActionContainer.setVisibility(View.VISIBLE);
mOperationContainer.setVisibility(View.VISIBLE);
Activity activity = getActivity();
// product list
mAdapter.updateData(data.mOrderInfo.getProductList());
// order id
mOrderIdText.setText(data.mOrderInfo.getOrderId());
// invoice info
mOrderInvoiceText.setText(data.mOrderInfo.getInvoiceInfo());
// add time
if (data.mOrderInfo.getAddTime() != null && data.mOrderInfo.getAddTime().length() > 0) {
mOrderAddTime.setText(Utils.DateTime.formatTime(getActivity(), String.valueOf(Long.parseLong(data.mOrderInfo.getAddTime()) / 1000)));
}
if (data.mOrderInfo.isMihomeBuy()) {
mExpressView.setVisibility(View.GONE);
}
// order status
SpannableStringBuilder orderStatusSB = new SpannableStringBuilder(activity.getString(R.string.order_view_status,
data.mOrderInfo.getOrderStatusInfo()));
mOrderFee = Utils.Money.valueOf(data.mOrderInfo.getFee());
SpannableStringBuilder orderFeeSB = new SpannableStringBuilder(activity.getString(R.string.order_view_fee, mOrderFee));
mUserInfoView.setVisibility(View.VISIBLE);
mUserNameText.setText(data.mOrderInfo.getOrderUserName());
mUserTelText.setText(data.mOrderInfo.getOrderUserTel());
mUserEmailText.setText(data.mOrderInfo.getOrderUserEmail());
mOrderFeeText.setText(orderFeeSB);
mOrderFeeSubtotalText.setText(getString(R.string.order_fee_subtotal_text, data.mOrderInfo.getFee()));
mOrderStatusText.setText(orderStatusSB);
} else {
if (TextUtils.isEmpty(data.mOrderError)) {
mLoadingView.setEmptyText(R.string.order_err);
} else {
mLoadingView.setEmptyText(data.mOrderError);
}
}
}
private void saveProductSnList(ArrayList<ProductBrief> productSnList) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(baos);
oos.writeObject(productSnList);
} catch (IOException e) {
e.printStackTrace();
}
SharedPreferences mySharedPreferences = getActivity().getSharedPreferences(Constants.productSnCache, Activity.MODE_PRIVATE);
// 将Product对象转换成byte数组,并将其进行base64编码
String productBase64 = new String(Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT));
SharedPreferences.Editor editor = mySharedPreferences.edit();
// 将编码后的字符串写到base64.xml文件中
editor.putString("productSnList", productBase64);
editor.commit();
}
@Override
public void onLoaderReset(Loader<ExchangeOrderInfoLoader.Result> loader) {
}
};
}