package com.xiaomi.xms.sales.ui; import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.Fragment; 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.View.OnClickListener; import android.view.ViewGroup; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.LayoutParams; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.TextView; import android.widget.Toast; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.ShopApp; import com.xiaomi.xms.sales.activity.AddressActivity; import com.xiaomi.xms.sales.activity.BaseActivity; import com.xiaomi.xms.sales.activity.ShoppingActivity; import com.xiaomi.xms.sales.loader.CheckoutLoader; import com.xiaomi.xms.sales.loader.CheckoutLoader.Result; import com.xiaomi.xms.sales.loader.RegionPaymentLoader; import com.xiaomi.xms.sales.model.CheckoutFormInfo; import com.xiaomi.xms.sales.model.Tags; import com.xiaomi.xms.sales.request.HostManager; import com.xiaomi.xms.sales.ui.CheckoutFragment.RadioButtonInfo.Tag; 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.util.Utils.PhoneFormat; import com.xiaomi.xms.sales.widget.EmptyLoadingView; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; public class CheckoutFragment extends BaseFragment implements LoaderCallbacks<CheckoutLoader.Result>, OnCheckedChangeListener { private final static String TAG = "CheckoutFragment"; private final static int TAG_BACKPRESS_MESSAGE = 1; private CheckoutLoader mLoader; private final static int CHECKOUT_LOADER = 0; private final static int REGION_PAYMENT_LOADER = 1; private CheckoutFormInfo mFormInfo; private View mAddress; private View mView; private View mCheckoutInfoContainer; private TextView mAddressUp; private TextView mAddressMiddle; private TextView mAddressBottom; private TextView mNext; private EmptyLoadingView mLoadingView; private RadioGroup mPaymentGroup; private RadioGroup mShipmentGroup; private RadioGroup mDelivertimeGroup; private RadioGroup mInvoiceGroup; private EditText mInvoiceTitle; private ViewGroup mInvoiceTitleBg; private ViewGroup mCheckoutAddressEmpty; private View mCheckoutHintContainer; private TextView mCheckoutHint; private String mAddressId; private String mRegionId; private EditText mMihomeBuyAddr; private EditText mMihomeBuyTel; private EditText mMihomeBuyConsignee; private static final String mRowTitles[] = { Tags.CheckoutSubmit.PAYLIST, Tags.CheckoutSubmit.DELIVERTIME, Tags.CheckoutSubmit.INVOICE }; private final static int GROUP_PAYMENT = 1; private final static int GROUP_SHIPMENT = 2; private final static int GROUP_DELIVEERTIME = 3; private final static int GROUP_INVOICE = 4; private final static int INVOICE_TITLE = 5; private RadioButton mInvoiceRadioButton = null; private HashMap<Integer, String> mFormDefaultValue = new HashMap<Integer, String>(); private View mContainer; private boolean mIsPersonalInvoice; private String mMihomeBuyId = HostManager.Parameters.Values.MIHOME_BUY_NULL; private boolean mIsMihomeShopping = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** get mi-home buy id from bundle */ Bundle bundle = getArguments(); if (bundle != null) { mMihomeBuyId = bundle.getString(Constants.Intent.EXTRA_MIHOME_BUY); if (mMihomeBuyId == null) { mMihomeBuyId = HostManager.Parameters.Values.MIHOME_BUY_NULL; } mIsMihomeShopping = !mMihomeBuyId.equals(HostManager.Parameters.Values.MIHOME_BUY_NULL); } } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (getLoaderManager().getLoader(CHECKOUT_LOADER) == null) { mContainer.setVisibility(View.GONE); getLoaderManager().initLoader(CHECKOUT_LOADER, null, this); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.checkout_fragment, container, false); mCheckoutInfoContainer = view.findViewById(R.id.checkout_info_container); mCheckoutHintContainer = view.findViewById(R.id.checkout_hint_container); mCheckoutHint = (TextView) view.findViewById(R.id.checkout_hint); mAddressUp = (TextView) view.findViewById(R.id.checkout_address_up); mAddressMiddle = (TextView) view.findViewById(R.id.checkout_address_middle); mAddressBottom = (TextView) view.findViewById(R.id.checkout_address_bottom); mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loading); mNext = (TextView) view.findViewById(R.id.next); mPaymentGroup = (RadioGroup) view.findViewById(R.id.checkout_form_radiogroup_payment); mPaymentGroup.setOnCheckedChangeListener(this); mShipmentGroup = (RadioGroup) view.findViewById(R.id.checkout_form_radiogroup_shipment); mShipmentGroup.setOnCheckedChangeListener(this); mDelivertimeGroup = (RadioGroup) view .findViewById(R.id.checkout_form_radiogroup_delivertime); mDelivertimeGroup.setOnCheckedChangeListener(this); mInvoiceGroup = (RadioGroup) view.findViewById(R.id.checkout_form_radiogroup_invoice); mInvoiceGroup.setOnCheckedChangeListener(this); mInvoiceTitle = (EditText) view.findViewById(R.id.checkout_form_invoice_title); mInvoiceTitleBg = (ViewGroup) view.findViewById(R.id.checkout_form_invoice_title_bg); mAddress = view.findViewById(R.id.checkout_address); mAddress.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { openAddressActivity(mAddressId); } }); mNext.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onNext(); } }); mView = view; mCheckoutAddressEmpty = (ViewGroup) view.findViewById(R.id.checkout_address_empty); mCheckoutAddressEmpty.setVisibility(View.GONE); mCheckoutAddressEmpty.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), AddressActivity.class); intent.setAction(Constants.Intent.ACTION_ADD_ADDRESS); startActivityForResult(intent, Constants.RequestCode.CODE_ADDRESS); } }); getParent().getHomeButton().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } }); mContainer = view.findViewById(R.id.container); /** * If mi-home shopping, update UI. */ mMihomeBuyAddr = (EditText) view.findViewById(R.id.checkout_addr_mihome); mMihomeBuyConsignee = (EditText) view.findViewById(R.id.checkout_addr_mihome_consignee); mMihomeBuyTel = (EditText) view.findViewById(R.id.checkout_addr_mihome_tel); if (mIsMihomeShopping) { /** no deliver time */ View deliverTime = view.findViewById(R.id.checkout_form_delivertime); deliverTime.setVisibility(View.GONE); /** show mi-home address */ View mihomeAddrLayout = view.findViewById(R.id.checkout_addr_mihome_layout); mihomeAddrLayout.setVisibility(View.VISIBLE); } return view; } @Override public Loader onCreateLoader(int id, Bundle bundle) { if (id == CHECKOUT_LOADER) { mLoader = new CheckoutLoader(getActivity(), mMihomeBuyId); if (bundle != null) { String addressId = bundle.getString(Tags.CheckoutSubmit.ADDRESS_ID); mLoader.setAddressId(addressId); } mLoader.setProgressNotifiable(mLoadingView); return mLoader; } return null; } @Override public void onLoadFinished(Loader<Result> arg0, Result data) { LogUtil.d(TAG, "onLoadFinished"); if (data.json == null || data.json.length() == 0 || !Tags.isJSONResultOK(data.json)) { // mCheckoutInfoContainer.setVisibility(View.GONE); String description = null; if (data.json != null) { description = data.json.optString(Tags.DESCRIPTION); } if (TextUtils.isEmpty(description)) { description = ShopApp.getContext().getString(R.string.data_error); } ToastUtil.show(ShopApp.getContext(), description); mHandler.sendEmptyMessage(TAG_BACKPRESS_MESSAGE); return; } mCheckoutInfoContainer.setVisibility(View.VISIBLE); removeFormData(); setFormData(data.json); mContainer.setVisibility(View.VISIBLE); } @Override public void onLoaderReset(Loader<Result> arg0) { } private LoaderCallbacks<RegionPaymentLoader.Result> mRegionPaymentLoaderCallbacks = new LoaderCallbacks<RegionPaymentLoader.Result>() { @Override public Loader<com.xiaomi.xms.sales.loader.RegionPaymentLoader.Result> onCreateLoader(int id, Bundle bundle) { if (id == REGION_PAYMENT_LOADER) { String payId = bundle.getString(Tags.CheckoutSubmit.PAY_ID); RegionPaymentLoader loader = new RegionPaymentLoader(getActivity(), payId, mRegionId, mMihomeBuyId); loader.setProgressNotifiable(mLoadingView); return loader; } return null; } @Override public void onLoadFinished(Loader<com.xiaomi.xms.sales.loader.RegionPaymentLoader.Result> arg0, com.xiaomi.xms.sales.loader.RegionPaymentLoader.Result data) { if (data.json == null || data.json.length() == 0 || !Tags.isJSONResultOK(data.json)) { String description = null; if (data.json != null) { description = data.json.optString(Tags.DESCRIPTION); } if (TextUtils.isEmpty(description)) { description = ShopApp.getContext().getString(R.string.data_error); } ToastUtil.show(ShopApp.getContext(), description); return; } mShipmentGroup.removeAllViews(); JSONObject dataJson = data.json.optJSONObject(Tags.DATA); if (dataJson != null) { JSONArray jArray; jArray = dataJson.optJSONArray(Tags.CheckoutSubmit.SHIPMENTLIST); if (jArray == null || jArray.length() == 0) { return; } try { setShipment(jArray); } catch (JSONException e) { } } } @Override public void onLoaderReset(Loader<com.xiaomi.xms.sales.loader.RegionPaymentLoader.Result> data) { } }; private UIHandler mHandler = new UIHandler(this); private static class UIHandler extends Handler { private final WeakReference<CheckoutFragment> mFragment; public UIHandler(CheckoutFragment fragment) { mFragment = new WeakReference<CheckoutFragment>(fragment); } @Override public void handleMessage(Message msg) { if (msg.what == TAG_BACKPRESS_MESSAGE) { CheckoutFragment ckfer = mFragment.get(); if (ckfer != null) ckfer.getActivity().onBackPressed(); } } } private void setFormRow(String key, JSONArray jArray) { try { if (key.equals(Tags.CheckoutSubmit.PAYLIST)) { setPayment(jArray); } else if (key.equals(Tags.CheckoutSubmit.DELIVERTIME)) { setDelivertime(jArray); } else if (key.equals(Tags.CheckoutSubmit.INVOICE)) { setInvoice(jArray); } } catch (JSONException e) { e.printStackTrace(); } } private void setDelivertime(JSONArray jArray) throws JSONException { RadioGroup radioGroup = mDelivertimeGroup; ArrayList<RadioButtonInfo> buttons = new ArrayList<RadioButtonInfo>(); for (int i = 0; i < jArray.length(); i++) { RadioButtonInfo button = new RadioButtonInfo(); JSONObject item = jArray.optJSONObject(i); button.mTitle = item.optString(Tags.CheckoutSubmit.DESC); button.mTag = item.optString(Tags.CheckoutSubmit.VALUE); buttons.add(button); } addRadioButtons(radioGroup, buttons, getDefaultValue(GROUP_DELIVEERTIME)); } private void setInvoice(JSONArray jArray) throws JSONException { RadioGroup radioGroup = mInvoiceGroup; ArrayList<RadioButtonInfo> buttons = new ArrayList<RadioButtonInfo>(); RadioButtonInfo button = new RadioButtonInfo(); button.mTitle = getString(R.string.checkout_no_invoice); button.mTag = "0"; buttons.add(button); for (int i = 0; i < jArray.length(); i++) { button = new RadioButtonInfo(); JSONObject item = jArray.getJSONObject(i); button.mTitle = item.optString(Tags.CheckoutSubmit.DESC); button.mTag = item.optString(Tags.CheckoutSubmit.VALUE); buttons.add(button); } // INVOICE_ID_PERSONAL表示开个人发票 if (mIsPersonalInvoice) { setDefaultValue(GROUP_INVOICE, Tags.CheckoutSubmit.INVOICE_ID_PERSONAL); } addRadioButtons(radioGroup, buttons, getDefaultValue(GROUP_INVOICE)); mInvoiceTitle.setText(getDefaultValue(INVOICE_TITLE)); } private void setPayment(JSONArray jArray) throws JSONException { RadioGroup radioGroup = mPaymentGroup; ArrayList<RadioButtonInfo> buttons = new ArrayList<RadioButtonInfo>(); boolean useCachedValue = false; String cachedValue = getDefaultValue(GROUP_PAYMENT); String checkedValue = null; for (int i = 0; i < jArray.length(); i++) { JSONObject item = jArray.getJSONObject(i); String payId = item.optString(Tags.CheckoutSubmit.PAY_ID); String brief = item.optString(Tags.CheckoutSubmit.BRIEF); if (TextUtils.equals(payId, Tags.CheckoutSubmit.PICKUP_ID_SELF)) {// 小米之家自提 JSONArray list = item.getJSONArray(Tags.CheckoutSubmit.LIST); for (int j = 0; j < list.length(); j++) { JSONObject it = list.getJSONObject(j); RadioButtonInfo button = new RadioButtonInfo(); button.mTitle = String.format("%s\n%s\n%s", brief, it.optString(Tags.CheckoutSubmit.NAME), it.optString(Tags.CheckoutSubmit.ADDRESS)); String pickupId = it.optString(Tags.CheckoutSubmit.HOME_ID); button.addTag(R.id.tag_checkout_pay_id, payId); button.addTag(R.id.tag_checkout_pickup_id, pickupId); buttons.add(button); String value = String.format("%1$s_%2$s", payId, pickupId); if (!useCachedValue && cachedValue != null && cachedValue.equals(value)) { useCachedValue = true; } if (item.optBoolean(Tags.CheckoutSubmit.CHECKED)) { checkedValue = value; } } } else { RadioButtonInfo button = new RadioButtonInfo(); button.mTitle = brief; button.addTag(R.id.tag_checkout_pay_id, payId); button.addTag(R.id.tag_checkout_pickup_id, Tags.CheckoutSubmit.PICKUP_ID_DEFAULT); buttons.add(button); String value = String.format("%1$s_%2$s", payId, Tags.CheckoutSubmit.PICKUP_ID_DEFAULT); if (!useCachedValue && cachedValue != null && cachedValue.equals(value)) { useCachedValue = true; } if (item.optBoolean(Tags.CheckoutSubmit.CHECKED)) { checkedValue = value; } } } if (!useCachedValue) { setDefaultValue(GROUP_PAYMENT, checkedValue); } addRadioButtons(radioGroup, buttons, getDefaultValue(GROUP_PAYMENT)); } private void setShipment(JSONArray jArray) throws JSONException { RadioGroup radioGroup = mShipmentGroup; ArrayList<RadioButtonInfo> buttons = new ArrayList<RadioButtonInfo>(); boolean useCachedValue = false; String cachedValue = getDefaultValue(GROUP_SHIPMENT); String checkedValue = null; for (int i = 0; i < jArray.length(); i++) { JSONObject item = jArray.getJSONObject(i); String shipmentId = item.optString(Tags.CheckoutSubmit.SHIPMENT_ID); RadioButtonInfo button = new RadioButtonInfo(); button.mTitle = item.optString(Tags.CheckoutSubmit.BRIEF); button.addTag(R.id.tag_checkout_shipment_id, shipmentId); buttons.add(button); if (!useCachedValue && cachedValue != null && cachedValue.equals(shipmentId)) { useCachedValue = true; } if (item.optBoolean(Tags.CheckoutSubmit.CHECKED)) { checkedValue = shipmentId; } } if (!useCachedValue) { setDefaultValue(GROUP_SHIPMENT, checkedValue); } addRadioButtons(radioGroup, buttons, getDefaultValue(GROUP_SHIPMENT)); } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton button = (RadioButton) group.findViewById(checkedId); if (group == mInvoiceGroup) { if (TextUtils .equals(button.getTag().toString(), Tags.CheckoutSubmit.INVOICE_ID_COMPANY)) { displayInvoiceTitle(true); mInvoiceRadioButton = button; button.setBackgroundResource(R.drawable.radiobottom_middle_invoice_p); } else { if (mInvoiceRadioButton != null) { mInvoiceRadioButton.setBackgroundResource(R.drawable.radiobutton_bottom_bg); } displayInvoiceTitle(false); } setDefaultValue(GROUP_INVOICE, button.getTag().toString()); } else if (group == mPaymentGroup) { setDefaultValue( GROUP_PAYMENT, String.format("%1$s_%2$s", button.getTag(R.id.tag_checkout_pay_id), button.getTag(R.id.tag_checkout_pickup_id))); String payId = button.getTag(R.id.tag_checkout_pay_id).toString(); Bundle bundle = new Bundle(); bundle.putString(Tags.CheckoutSubmit.PAY_ID, payId); getLoaderManager().restartLoader(REGION_PAYMENT_LOADER, bundle, mRegionPaymentLoaderCallbacks); } else if (group == mShipmentGroup) { setDefaultValue(GROUP_SHIPMENT, (String) button.getTag(R.id.tag_checkout_shipment_id)); } else if (group == mDelivertimeGroup) { setDefaultValue(GROUP_DELIVEERTIME, button.getTag().toString()); } } private void displayInvoiceTitle(boolean isShow) { int n = isShow ? View.VISIBLE : View.GONE; if (isShow) { showInput(true); } else { showInput(false); } mInvoiceTitleBg.setVisibility(n); } private boolean getFormData() { if (mFormInfo == null) { mFormInfo = new CheckoutFormInfo(); } RadioButton button = null; String value = null; int id = 0; // 地址 View v = mView.findViewById(R.id.checkout_address); value = v.getTag().toString(); if (TextUtils.equals(value, "0")) { Toast.makeText(getActivity(), R.string.checkout_form_address_empty, Toast.LENGTH_SHORT) .show(); return false; } mFormInfo.setAddressId(value); // 发票方式 id = mInvoiceGroup.getCheckedRadioButtonId(); button = (RadioButton) mInvoiceGroup.findViewById(id); value = button.getTag().toString(); mFormInfo.setInvoiceType(value); String invoiceTitleString = null; if (value.equals(Tags.CheckoutSubmit.INVOICE_ID_COMPANY)) { String invoiceTitle = mInvoiceTitle.getText().toString(); if (TextUtils.isEmpty(invoiceTitle)) { Toast.makeText(getActivity(), R.string.checkout_form_invoice_title_input_pleases, Toast.LENGTH_SHORT).show(); return false; } invoiceTitleString = mInvoiceTitle.getText().toString(); mFormInfo.setInvoiceTitle(invoiceTitleString); } else { invoiceTitleString = ""; mFormInfo.setInvoiceTitle(invoiceTitleString); } setDefaultValue(INVOICE_TITLE, invoiceTitleString); // 支付方式 id = mPaymentGroup.getCheckedRadioButtonId(); button = (RadioButton) mPaymentGroup.findViewById(id); String payId = button.getTag(R.id.tag_checkout_pay_id).toString(); String pickupId = button.getTag(R.id.tag_checkout_pickup_id).toString(); mFormInfo.setPayId(payId); mFormInfo.setPickupId(pickupId); // 配送方式 id = mShipmentGroup.getCheckedRadioButtonId(); button = (RadioButton) mShipmentGroup.findViewById(id); Object shipmentId = button.getTag(R.id.tag_checkout_shipment_id); if (shipmentId != null) { mFormInfo.setShipmentId(shipmentId.toString()); } // 送货时间 id = mDelivertimeGroup.getCheckedRadioButtonId(); button = (RadioButton) mDelivertimeGroup.findViewById(id); mFormInfo.setBestTimeId(button.getTag().toString()); /** mi-home shopping info */ mFormInfo.setMihomeBuyConsignee(mMihomeBuyConsignee.getText().toString()); mFormInfo.setMihomeBuyTel(mMihomeBuyTel.getText().toString()); mFormInfo.setMihomeBuyId(mMihomeBuyId); return true; } private void setFormData(JSONObject json) { JSONObject address; try { JSONObject dataJson = json.getJSONObject(Tags.DATA); address = dataJson.optJSONObject(Tags.AddressInfo.ADDRESS); if (address != null) { if (address != null && address.length() != 0) { mAddressId = address.optString(Tags.AddressInfo.ID); mAddress.setTag(mAddressId); String tel = address.optString(Tags.AddressInfo.TEL); mAddressBottom.setText(getResources().getString(R.string.address_title, address.optString(Tags.AddressInfo.CONSIGNEE), PhoneFormat.valueOf(tel))); mMihomeBuyConsignee.setText(address.optString(Tags.AddressInfo.CONSIGNEE)); mMihomeBuyTel.setText(address.optString(Tags.AddressInfo.TEL)); mAddressUp.setText(getResources().getString(R.string.address_area, address.optJSONObject(Tags.AddressInfo.PROVINCE) .optString("name"), address.optJSONObject(Tags.AddressInfo.CITY).optString("name"), address.optJSONObject(Tags.AddressInfo.DISTRICT).optString("name"))); mRegionId = address.optJSONObject(Tags.AddressInfo.DISTRICT).optString("id"); mAddressMiddle.setText(getResources().getString(R.string.address_location, address.optString(Tags.AddressInfo.ADDRESS), address.optString(Tags.AddressInfo.ZIPCODE))); } mCheckoutAddressEmpty.setVisibility(View.GONE); mAddress.setVisibility(View.VISIBLE); } else { mAddress.setTag("0"); mCheckoutAddressEmpty.setVisibility(View.VISIBLE); mAddress.setVisibility(View.GONE); } /** mi-home shopping */ if (mIsMihomeShopping) { JSONObject mihomeBuyInfo = dataJson.optJSONObject(Tags.MihomeBuyInfo.SELF); mMihomeBuyAddr.setText(mihomeBuyInfo.optString(Tags.MihomeBuyInfo.NAME)); mCheckoutAddressEmpty.setVisibility(View.GONE); mAddress.setVisibility(View.GONE); } mIsPersonalInvoice = dataJson.optBoolean(Tags.CheckoutSubmit.INVOICE_OPEN, false); for (int i = 0; i < mRowTitles.length; i++) { String rowTitle = mRowTitles[i]; JSONArray jArray; jArray = dataJson.optJSONArray(rowTitle); if (jArray == null || jArray.length() == 0) { break; } setFormRow(rowTitle, jArray); } mInvoiceTitle.setText(getDefaultValue(INVOICE_TITLE)); /** * 在下单的时候有个提示,告知用户订单的一些状况,例如过年时候发货可能会慢一点啊,等等。 */ String hint = dataJson.optString("tip"); if (TextUtils.isEmpty(hint)) { mCheckoutHintContainer.setVisibility(View.GONE); } else { mCheckoutHintContainer.setVisibility(View.VISIBLE); mCheckoutHint.setText(hint); } } catch (JSONException e) { Toast.makeText(getActivity(), getString(R.string.checkout_set_form_data_exception), Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } private void removeFormData() { mAddress.setTag(""); mAddressUp.setText(""); mAddressMiddle.setText(""); mAddressBottom.setText(""); mPaymentGroup.removeAllViews(); mShipmentGroup.removeAllViews(); mInvoiceGroup.removeAllViews(); mDelivertimeGroup.removeAllViews(); } private void onNext() { if (!getFormData()) { return; } JSONObject json = new JSONObject(); try { json.put(Tags.OrderSubmit.ADDRESS_ID, mFormInfo.getAddressId()); json.put(Tags.OrderSubmit.PAY_ID, mFormInfo.getPayId()); json.put(Tags.OrderSubmit.PICKUP_ID, mFormInfo.getPickupId()); json.put(Tags.OrderSubmit.SHIPMENT_ID, mFormInfo.getShipmentId()); json.put(Tags.OrderSubmit.BEST_TIME, mFormInfo.getBestTimeId()); json.put(Tags.OrderSubmit.INVOICE_TYPE, mFormInfo.getInvoiceType()); json.put(Tags.OrderSubmit.INVOICE_TITLE, mFormInfo.getInvoiceTitle()); json.put(Tags.OrderSubmit.COUPON_TYPE, mFormInfo.getCouponType()); json.put(Tags.OrderSubmit.COUPON_CODE, mFormInfo.getCouponCode()); json.put(Tags.OrderSubmit.MIHOME_BUY_ID, mFormInfo.getMihomeBuyId()); JSONObject extendField = new JSONObject(); extendField.put(Tags.OrderSubmit.EXTEND_FIELD_CONSIGNESS, mFormInfo.getMihomeBuyConsignee()); extendField.put(Tags.OrderSubmit.EXTEND_FIELD_TEL, mFormInfo.getMihomeBuyTel()); json.put(Tags.OrderSubmit.EXTEND_FIELD, extendField); ShoppingActivity activity = (ShoppingActivity) getActivity(); Bundle bundle = new Bundle(); bundle.putString(Constants.Intent.EXTRA_SHOP_INTENT_SERVICE_RETURN_JSON, json.toString()); Fragment fragment = ((BaseActivity) getActivity()) .getFragmentByTag(ShoppingActivity.Fragments.TAG_ORDER_SUBMIT_FRAGMENT); if (fragment != null) { ((OrderSubmitFragment) fragment).setData(json.toString()); } activity.showFragment(ShoppingActivity.Fragments.TAG_ORDER_SUBMIT_FRAGMENT, bundle, true); } catch (JSONException e) { Toast.makeText(getActivity(), getString(R.string.checkout_build_request_params_exception), Toast.LENGTH_SHORT) .show(); e.printStackTrace(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK && requestCode == Constants.RequestCode.CODE_ADDRESS) { String selectedAddressId = data .getStringExtra(Constants.Intent.EXTRA_ADDRESS_ID); LogUtil.d(TAG, "finish from address activity:" + selectedAddressId); if (mLoader == null) { return; } Bundle bundle = new Bundle(); bundle.putString(Tags.CheckoutSubmit.ADDRESS_ID, selectedAddressId); mContainer.setVisibility(View.GONE); getLoaderManager().restartLoader(CHECKOUT_LOADER, bundle, this); } super.onActivityResult(requestCode, resultCode, data); } @Override public void onStart() { super.onStart(); getActivity().setTitle(R.string.title_checkout); } private String getDefaultValue(int key) { String ret = mFormDefaultValue.get(key); LogUtil.d(TAG, "getDefaultValue: key is " + key + ", value is " + ret); return ret; } private void setDefaultValue(int key, String value) { LogUtil.d(TAG, "SetDefaultValue: key is " + key + ", value is " + value); mFormDefaultValue.put(key, value); } private void addRadioButtons(RadioGroup group, ArrayList<RadioButtonInfo> items, String defaultValue) { LogUtil.d(TAG, "addRadioButtons"); String value = null; RadioButton first = null; int count = items.size(); for (int i = 0; i < count; i++) { RadioButtonInfo item = items.get(i); RadioButton button = new RadioButton(getActivity()); if (i == 0) { first = button; } button.setText(item.mTitle); if (item.mTags.size() == 0) { button.setTag(item.mTag); } else { for (int j = 0; j < item.mTags.size(); j++) { Tag tag = item.mTags.get(j); button.setTag(tag.key, tag.value); } } group.addView(button); if (count == 1) { button.setBackgroundResource(R.drawable.radiobutton_single_bg); } else if (i == 0) { button.setBackgroundResource(R.drawable.radiobutton_up_bg); } else if (i == count - 1) { button.setBackgroundResource(R.drawable.radiobutton_bottom_bg); } else { button.setBackgroundResource(R.drawable.radiobutton_middle_bg); } button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT)); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); button.setLayoutParams(params); if (group == mPaymentGroup) { value = String.format("%1$s_%2$s", button.getTag(R.id.tag_checkout_pay_id), button.getTag(R.id.tag_checkout_pickup_id)); } else if (group == mShipmentGroup) { value = button.getTag(R.id.tag_checkout_shipment_id).toString(); } else { value = button.getTag().toString(); } if (defaultValue == null) { first.setChecked(true); } else if (TextUtils.equals(value, defaultValue)) { button.setChecked(true); } } } private void openAddressActivity(String addressId) { Intent intent = new Intent(getActivity(), AddressActivity.class); intent.setAction(Constants.Intent.ACTION_USE_ADDRESS); intent.putExtra(Constants.Intent.EXTRA_ADDRESS_ID, addressId); startActivityForResult(intent, Constants.RequestCode.CODE_ADDRESS); } public ShoppingActivity getParent() { return (ShoppingActivity) getActivity(); } class RadioButtonInfo { public String mTitle; public String mTag; public ArrayList<Tag> mTags = new ArrayList<Tag>(); public void addTag(int key, String value) { Tag tag = new Tag(); tag.key = key; tag.value = value; mTags.add(tag); } class Tag { public int key; public String value; } } public void showInput(boolean isShow) { if (isShow) { mInvoiceTitle.setFocusable(true); mInvoiceTitle.setFocusableInTouchMode(true); mInvoiceTitle.requestFocus(); Utils.SoftInput.show(mInvoiceTitle.getContext(), mInvoiceTitle); } else { mInvoiceTitle.setFocusable(false); mInvoiceTitle.setFocusableInTouchMode(false); Utils.SoftInput.hide(mInvoiceTitle.getContext(), mInvoiceTitle.getWindowToken()); } } }