package com.xiaomi.xms.sales.ui; import android.database.Cursor; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.text.TextUtils; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.cache.RegionCache; import com.xiaomi.xms.sales.cache.RegionCache.QueryCallback; import com.xiaomi.xms.sales.db.DBContract.Region; import com.xiaomi.xms.sales.loader.RequestLoader; import com.xiaomi.xms.sales.loader.RequestLoader.Result; import com.xiaomi.xms.sales.model.Tags; import com.xiaomi.xms.sales.request.HostManager; import com.xiaomi.xms.sales.request.Request; 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.widget.RegionSelector; import com.xiaomi.xms.sales.widget.RegionSelector.OnSelectedListener; import com.xiaomi.xms.sales.xmsf.account.LoginManager; public class OrderEditAddressFragment extends BaseFragment { private static final String TAG = "OrderEditAddressFragment"; private static final int UNSELECTED = 0; private static final int REQUEST_LOADER = 0; private RequestLoader mLoader; private RegionSelector mRegionSelector; private EditText mNameView; private EditText mLocation; private EditText mZipCode; private EditText mTel; private Button mSubmit; private String mOldConsignee; private String mOldAddressId = null; private String mOldLocation = ""; private String mOldZipCode = ""; private String mOldTel = ""; private int mOldProvinceId = -1; private int mOldCityId = -1; private int mOldDistrictId = -1; private String mOrderId; private boolean hasPhone; private String mNewName = ""; private String mNewTel = ""; private String mNewLocation = ""; private String mNewZipCode = ""; private int mNewProvinceId = -1; private int mNewCityId = -1; private int mNewDistrictId = -1; private String mHideTel=""; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.order_edit_address_fragment, container, false); mRegionSelector = (RegionSelector) view.findViewById(R.id.city_selector); mNameView = (EditText) view.findViewById(R.id.address_consignee); mLocation = (EditText) view.findViewById(R.id.address_location); mZipCode = (EditText) view.findViewById(R.id.address_zipcode); mTel = (EditText) view.findViewById(R.id.address_tel); mSubmit = (Button) view.findViewById(R.id.address_submit); return view; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); LogUtil.d(TAG, "received addressid:" + mOldAddressId); mSubmit.setOnClickListener(mSubmitListener); setTabIndex(); initData(); mRegionSelector.setOnSelectedListener(new OnSelectedListener() { @Override public void onProvinceSelected(long id) { } @Override public void onCitySelected(long id) { } @Override public void onDistrictSelected(long id) { RegionCache.getInstance(getActivity()).getZipCodeById(id, new QueryCallback() { @Override public void queryComplete(Cursor cursor) { if (cursor != null) { try { cursor.moveToFirst(); mZipCode.setText(String.format( getResources().getString(R.string.zipcode_format), cursor.getInt(cursor.getColumnIndex(Region.ZIPCODE)))); } finally { cursor.close(); } } } }); } }); } @Override public void onResume() { super.onResume(); getActivity().setTitle(R.string.order_edit_address_title); } private void setTabIndex() { mLocation.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { mZipCode.requestFocus(); return true; } }); } private void initData() { Bundle bundle = getArguments(); if (bundle == null) { return; } loadOldAddressInfo(bundle); mNameView.setText(mOldConsignee); mLocation.setText(mOldLocation); mZipCode.setText(mOldZipCode); mHideTel = mOldTel.substring(0, 3) + "****" + mOldTel.substring(7); mTel.setText(mHideTel); mRegionSelector.set(mOldProvinceId, mOldCityId, mOldDistrictId); } private OnClickListener mSubmitListener = new OnClickListener() { @Override public void onClick(View arg0) { // get input mNewName = mNameView.getText().toString(); mNewProvinceId = mRegionSelector.getProvince(); mNewCityId = mRegionSelector.getCity(); mNewDistrictId = mRegionSelector.getDistrict(); mNewLocation = mLocation.getText().toString(); mNewZipCode = mZipCode.getText().toString(); mNewTel = mTel.getText().toString(); // TODO if(TextUtils.equals(mNewTel, mHideTel)) { mNewTel = mOldTel; } if (TextUtils.isEmpty(mNewTel)) { ToastUtil.show(getActivity(), R.string.order_edit_tel_not_null); return; } requestEditOrder(mNewName, mNewTel, mNewProvinceId, mNewCityId, mNewDistrictId, mNewLocation, mNewZipCode); } }; private void loadOldAddressInfo(Bundle bundle) { mOldConsignee = bundle.getString(Constants.Intent.EXTRA_ADDRESS_CONSIGNEE); mOldLocation = bundle.getString(Constants.Intent.EXTRA_ADDRESS_LOCATION); mOldZipCode = bundle.getString(Constants.Intent.EXTRA_ADDRESS_ZIPCODE); mOldTel = bundle.getString(Constants.Intent.EXTRA_ADDRESS_TEL); mOldProvinceId = bundle.getInt(Constants.Intent.EXTRA_ADDRESS_PROVINCE); mOldCityId = bundle.getInt(Constants.Intent.EXTRA_ADDRESS_CITY); mOldDistrictId = bundle.getInt(Constants.Intent.EXTRA_ADDRESS_DISTRICT); mOrderId = bundle.getString(Constants.Intent.EXTRA_PAYMENT_ORDER_ID); hasPhone = bundle.getBoolean(Constants.Intent.EXTRA_ORDER_HAS_PHONE, false); } private Handler mHandler = new Handler(); private LoaderCallbacks<RequestLoader.Result> mRequestCallback = new LoaderCallbacks<RequestLoader.Result>() { @Override public void onLoaderReset(Loader<Result> loader) { } @Override public void onLoadFinished(Loader<Result> loader, Result result) { getLoaderManager().destroyLoader(REQUEST_LOADER); if (result != null) { if (Tags.isJSONResultOK(result.mData)) { ToastUtil.show(getActivity(), R.string.order_edit_ok); mHandler.post(new Runnable() { @Override public void run() { getActivity().onBackPressed(); } }); } else { ToastUtil.show(getActivity(), result.mData.optString(Tags.DESCRIPTION)); } } } @Override public Loader<Result> onCreateLoader(int type, Bundle bundle) { mLoader = new RequestLoader(getActivity()); return mLoader; } }; private void requestEditOrder(String name, String tel, int province, int city, int district, String location, String zipCode) { getLoaderManager().initLoader(REQUEST_LOADER, null, mRequestCallback); if (mLoader != null) { Request request = new Request(HostManager.getEditOrder()); request.addParam(Tags.EditOrder.USER_ID, LoginManager.getInstance().getUserId()); request.addParam(Tags.EditOrder.ORDER_ID, mOrderId); request.addParam(Tags.EditOrder.CONSIGNEE, name); request.addParam(Tags.EditOrder.TEL, tel); request.addParam(Tags.EditOrder.TYPE, Tags.EditOrder.VALUE_TYPE_ADDRESS); request.addParam(Tags.EditOrder.PROVINCE, String.valueOf(province)); request.addParam(Tags.EditOrder.CITY, String.valueOf(city)); request.addParam(Tags.EditOrder.DISTRICT, String.valueOf(district)); request.addParam(Tags.EditOrder.ADDRESS, location); request.addParam(Tags.EditOrder.ZIPCODE, zipCode); mLoader.load(REQUEST_LOADER, request); } } }