package com.xiaomi.xms.sales.ui; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.activity.OrderListActivity; import com.xiaomi.xms.sales.loader.OrderInfoLoader; import com.xiaomi.xms.sales.loader.OrderInfoLoader.Result; import com.xiaomi.xms.sales.model.Order; import com.xiaomi.xms.sales.model.Tags; import com.xiaomi.xms.sales.request.HostManager; import com.xiaomi.xms.sales.util.Constants; import com.xiaomi.xms.sales.widget.EmptyLoadingView; import java.lang.ref.WeakReference; public class PaymentResultFragment extends BaseFragment implements LoaderCallbacks<OrderInfoLoader.Result> { private int mStatus = PAYMENT_STATUS_UNKNOWN; private String mOrderId; private boolean mUserConfirmResult; private TextView mPaymentResult; private Button mPaymentExplainBtn; private EmptyLoadingView mLoadingView; private static final int ORDER_LOADER = 0; public static final int PAYMENT_STATUS_OK = 0; public static final int PAYMENT_STATUS_FIALED = 1; public static final int PAYMENT_STATUS_UNKNOWN = 2; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.payment_progress_fragment, container, false); mPaymentResult = (TextView) v.findViewById(R.id.payment_result); mPaymentExplainBtn = (Button) v.findViewById(R.id.payment_explain_btn); mLoadingView = (EmptyLoadingView) v.findViewById(R.id.loading); Bundle bundle = getArguments(); if (bundle != null) { mOrderId = bundle.getString(Constants.Intent.EXTRA_PAYMENT_ORDER_ID); mUserConfirmResult = bundle.getBoolean( Constants.Intent.EXTRA_PAYMENT_USER_CONFIRM_RESULT, false); } else { getActivity().finish(); } return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getLoaderManager().initLoader(ORDER_LOADER, null, this); } private void onPaymentStatusQueryCompleted() { mPaymentExplainBtn.setVisibility(View.GONE); if (mStatus == PAYMENT_STATUS_OK) { // 如果支付成功,那么不管用户确认是什么,都跳到该条订单的详情页 Intent intent = new Intent(getActivity(), OrderListActivity.class); intent.setAction(Constants.Intent.ACTION_VIEW_ORDER); intent.putExtra(Constants.Intent.EXTRA_PAYMENT_ORDER_ID, mOrderId); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); getActivity().finish(); } else if (mStatus == PAYMENT_STATUS_FIALED) { // 支付失败,如果用户确认支付成功,那么可能由于延迟,尚未收到支付宝通知,那么提示用户 if (mUserConfirmResult) { mPaymentResult.setText(R.string.payment_fail_text); mPaymentExplainBtn.setVisibility(View.VISIBLE); mPaymentExplainBtn.setText(R.string.payment_fail_explain); mPaymentExplainBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Uri uri = Uri.parse(HostManager.URL_XIAOMI_SHOP_PAYMENT_EXPLAIN); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } }); } else { // 如果用户也点击支付失败,返回上页 mHandler.sendEmptyMessage(MSG_PRESS_BACK); } } else { // 如果网络出现了异常,支付结果没有查询到 mPaymentResult.setText(getActivity().getString(R.string.order_pay_state_unknown, mOrderId)); } } @SuppressWarnings("unchecked") @Override public Loader<Result> onCreateLoader(int id, Bundle bundle) { if (id == ORDER_LOADER) { mLoader = new OrderInfoLoader(getActivity()); mLoader.setNeedDatabase(false); ((OrderInfoLoader) mLoader).setNeedSecurityKeyTask(false); ((OrderInfoLoader) mLoader).setOrderId(mOrderId); mLoader.setProgressNotifiable(mLoadingView); return (Loader<Result>) mLoader; } return null; } @Override public void onLoadFinished(Loader<Result> loader, Result result) { mStatus = PAYMENT_STATUS_UNKNOWN; if (result != null) { Order orderInfo = result.mOrderInfo; if (orderInfo != null) { int orderStatus = orderInfo.getOrderStatus(); if (orderStatus == Tags.Order.PAYMENT_STATUS_OK || orderStatus == Tags.Order.PAYMENT_STATUS_WAIT_NOTIFY_WAREHOUSE || orderStatus == Tags.Order.PAYMENT_STATUS_NOTIFIED_WAREHOUST || orderStatus == Tags.Order.PAYMENT_STATUS_CONTRACTPHONE_WAIT_VERIFY) { mStatus = PAYMENT_STATUS_OK; } else if (orderStatus == Tags.Order.PAYMENT_STATUS_WAIT_PAY) { mStatus = PAYMENT_STATUS_FIALED; } } } onPaymentStatusQueryCompleted(); } @Override public void onLoaderReset(Loader<Result> loader) { if (loader != null) { ((OrderInfoLoader) mLoader).setOrderId(mOrderId); } } private UIHandler mHandler = new UIHandler(this); private static final int MSG_PRESS_BACK = 0; private static class UIHandler extends Handler { private final WeakReference<PaymentResultFragment> mFragment; public UIHandler(PaymentResultFragment fragment) { mFragment = new WeakReference<PaymentResultFragment>(fragment); } @Override public void handleMessage(Message msg) { if (msg.what == MSG_PRESS_BACK) { PaymentResultFragment refer = mFragment.get(); if (refer != null) refer.getActivity().onBackPressed(); } } } }