package com.snail.travellingTrail.newTravel.controller; import android.app.AlertDialog; import android.app.Dialog; import android.app.DownloadManager.Request; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.List; import org.apache.http.client.methods.HttpHead; import org.apache.http.entity.StringEntity; import net.tsz.afinal.FinalHttp; import net.tsz.afinal.http.AjaxCallBack; import com.google.gson.Gson; import com.snail.travellingTrail.R; import com.snail.travellingTrail.common.RequestAddress; import com.snail.travellingTrail.common.TravellingTrailApplication; import com.snail.travellingTrail.common.utils.ToastHelper; import com.snail.travellingTrail.common.wizard.model.AbstractWizardModel; import com.snail.travellingTrail.common.wizard.model.ModelCallbacks; import com.snail.travellingTrail.common.wizard.model.Page; import com.snail.travellingTrail.common.wizard.model.ReviewItem; import com.snail.travellingTrail.common.wizard.ui.PageFragmentCallbacks; import com.snail.travellingTrail.common.wizard.ui.ReviewFragment; import com.snail.travellingTrail.common.wizard.ui.StepPagerStrip; import com.snail.travellingTrail.newTravel.model.CreateNewTravelModel; public class CreateNewTravelActivity extends FragmentActivity implements PageFragmentCallbacks, ReviewFragment.Callbacks, ModelCallbacks, OnClickListener { private ViewPager mPager; private MyPagerAdapter mPagerAdapter; private boolean mEditingAfterReview; private AbstractWizardModel mWizardModel = new CreateNewTravelModel(this); private boolean mConsumePageSelectedEvent; private Button mNextButton; private Button mPrevButton; private List<Page> mCurrentPageSequence; private StepPagerStrip mStepPagerStrip; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_create_new_travel); if (savedInstanceState != null) { mWizardModel.load(savedInstanceState.getBundle("model")); } mWizardModel.registerListener(this); mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.pager); mPager.setAdapter(mPagerAdapter); mStepPagerStrip = (StepPagerStrip) findViewById(R.id.strip); mStepPagerStrip .setOnPageSelectedListener(new StepPagerStrip.OnPageSelectedListener() { @Override public void onPageStripSelected(int position) { position = Math.min(mPagerAdapter.getCount() - 1, position); if (mPager.getCurrentItem() != position) { mPager.setCurrentItem(position); } } }); mNextButton = (Button) findViewById(R.id.next_button); mPrevButton = (Button) findViewById(R.id.prev_button); mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { mStepPagerStrip.setCurrentPage(position); if (mConsumePageSelectedEvent) { mConsumePageSelectedEvent = false; return; } mEditingAfterReview = false; updateBottomBar(); } }); mNextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mPager.getCurrentItem() == mCurrentPageSequence.size()) { DialogFragment dg = new DialogFragment() { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()) .setMessage(R.string.submit_confirm_message) .setPositiveButton( R.string.submit_confirm_button, CreateNewTravelActivity.this) .setNegativeButton(android.R.string.cancel, CreateNewTravelActivity.this).create(); } }; dg.show(getSupportFragmentManager(), "提交"); } else { if (mEditingAfterReview) { mPager.setCurrentItem(mPagerAdapter.getCount() - 1); } else { mPager.setCurrentItem(mPager.getCurrentItem() + 1); } } } }); mPrevButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mPager.setCurrentItem(mPager.getCurrentItem() - 1); } }); onPageTreeChanged(); updateBottomBar(); } @Override public void onPageTreeChanged() { mCurrentPageSequence = mWizardModel.getCurrentPageSequence(); recalculateCutOffPage(); mStepPagerStrip.setPageCount(mCurrentPageSequence.size() + 1); // + 1 = // review // step mPagerAdapter.notifyDataSetChanged(); updateBottomBar(); } private void updateBottomBar() { int position = mPager.getCurrentItem(); if (position == mCurrentPageSequence.size()) { mNextButton.setText(R.string.finish); mNextButton.setBackgroundResource(R.drawable.finish_background); } else { mNextButton.setText(mEditingAfterReview ? R.string.review : R.string.next); mNextButton .setBackgroundResource(R.drawable.selectable_item_background); TypedValue v = new TypedValue(); getTheme().resolveAttribute(android.R.attr.textAppearanceMedium, v, true); mNextButton.setTextAppearance(this, v.resourceId); mNextButton.setEnabled(position != mPagerAdapter.getCutOffPage()); } mPrevButton .setVisibility(position <= 0 ? View.INVISIBLE : View.VISIBLE); } @Override protected void onDestroy() { super.onDestroy(); mWizardModel.unregisterListener(this); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBundle("model", mWizardModel.save()); } @Override public AbstractWizardModel onGetModel() { return mWizardModel; } @Override public void onEditScreenAfterReview(String key) { for (int i = mCurrentPageSequence.size() - 1; i >= 0; i--) { if (mCurrentPageSequence.get(i).getKey().equals(key)) { mConsumePageSelectedEvent = true; mEditingAfterReview = true; mPager.setCurrentItem(i); updateBottomBar(); break; } } } @Override public void onPageDataChanged(Page page) { if (page.isRequired()) { if (recalculateCutOffPage()) { mPagerAdapter.notifyDataSetChanged(); updateBottomBar(); } } } @Override public Page onGetPage(String key) { return mWizardModel.findByKey(key); } private boolean recalculateCutOffPage() { int cutOffPage = mCurrentPageSequence.size() + 1; for (int i = 0; i < mCurrentPageSequence.size(); i++) { Page page = mCurrentPageSequence.get(i); if (page.isRequired() && !page.isCompleted()) { cutOffPage = i; break; } } if (mPagerAdapter.getCutOffPage() != cutOffPage) { mPagerAdapter.setCutOffPage(cutOffPage); return true; } return false; } public class MyPagerAdapter extends FragmentStatePagerAdapter { private int mCutOffPage; private Fragment mPrimaryItem; private ReviewFragment reviewFragment; public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { if (i >= mCurrentPageSequence.size()) { reviewFragment = new ReviewFragment(); return reviewFragment; } return mCurrentPageSequence.get(i).createFragment(); } public ReviewFragment getReviewFragment() { return reviewFragment; } @Override public int getItemPosition(Object object) { if (object == mPrimaryItem) { return POSITION_UNCHANGED; } return POSITION_NONE; } @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { super.setPrimaryItem(container, position, object); mPrimaryItem = (Fragment) object; } @Override public int getCount() { if (mCurrentPageSequence == null) { return 0; } return Math.min(mCutOffPage + 1, mCurrentPageSequence.size() + 1); } public void setCutOffPage(int cutOffPage) { if (cutOffPage < 0) { cutOffPage = Integer.MAX_VALUE; } mCutOffPage = cutOffPage; } public int getCutOffPage() { return mCutOffPage; } } @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case Dialog.BUTTON_POSITIVE: ToastHelper.showToast(CreateNewTravelActivity.this, "创建旅程中...", Toast.LENGTH_SHORT); createTravel(); break; default: break; } } private void createTravel() { FinalHttp finalHttp = new FinalHttp(); ReviewFragment reviewFragment = mPagerAdapter.getReviewFragment(); List<ReviewItem> reviewItems = reviewFragment.getReviewItems(); HashMap<String, String> hashMap = new HashMap<String, String>(); for (ReviewItem reviewItem : reviewItems) { hashMap.put(reviewItem.getPageKey(), reviewItem.getDisplayValue()); } hashMap.put("Trvl_Us_Id", String.valueOf(TravellingTrailApplication.loginUser.getUs_Info_Us_Id())); Gson gson = new Gson(); StringEntity jsonEntity; try { String jsonString = gson.toJson(hashMap); jsonString = new String(jsonString.getBytes(), "8859_1"); jsonEntity = new StringEntity(jsonString); Log.v("createTravel---->jsonString", jsonString); finalHttp.post(RequestAddress.CREATE_NEW_TRAVEL, jsonEntity, "application/json", new AjaxCallBack<String>() { @Override public void onSuccess(String t) { ToastHelper.showToast(CreateNewTravelActivity.this, "创建成功!", Toast.LENGTH_SHORT); finish(); } @Override public void onFailure(Throwable t, int errorNo, String strMsg) { ToastHelper.showToast( CreateNewTravelActivity.this, "创建失败!错误代码:" + errorNo + ";错误信息:" + strMsg, Toast.LENGTH_SHORT); } } ); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }