tw.com.geminihsu.app01.fragment.Fragment_PickUpTrain.java Source code

Java tutorial

Introduction

Here is the source code for tw.com.geminihsu.app01.fragment.Fragment_PickUpTrain.java

Source

/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package tw.com.geminihsu.app01.fragment;

import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import io.realm.RealmResults;
import tw.com.geminihsu.app01.BookmarksMapListActivity;
import tw.com.geminihsu.app01.ClientTakeRideActivity;
import tw.com.geminihsu.app01.ClientTakeRideSearchActivity;
import tw.com.geminihsu.app01.OrderMapActivity;
import tw.com.geminihsu.app01.R;
import tw.com.geminihsu.app01.adapter.ClientTakeRideSelectSpecListItem;
import tw.com.geminihsu.app01.adapter.ClientTakeRideSelectSpecListItemAdapter;
import tw.com.geminihsu.app01.bean.AccountInfo;
import tw.com.geminihsu.app01.bean.LocationAddress;
import tw.com.geminihsu.app01.bean.NormalOrder;
import tw.com.geminihsu.app01.bean.OrderLocationBean;
import tw.com.geminihsu.app01.bean.USerBookmark;
import tw.com.geminihsu.app01.common.Constants;
import tw.com.geminihsu.app01.serverbean.ServerBookmark;
import tw.com.geminihsu.app01.serverbean.ServerSpecial;
import tw.com.geminihsu.app01.utils.DateTimeUtil;
import tw.com.geminihsu.app01.utils.JsonPutsUtil;
import tw.com.geminihsu.app01.utils.RealmUtil;
import tw.com.geminihsu.app01.utils.ThreadPoolUtil;
import tw.com.geminihsu.app01.utils.Utility;

public class Fragment_PickUpTrain extends Fragment {
    //actionBar item Id
    private final int ACTIONBAR_MENU_ITEM_SUMMIT = 0x0001;

    public final static String BUNDLE_KEEP_BOOMARK = "add_bookmark";// from

    final public static int SEND_TRAIN = 0;
    final public static int PICKUP_TRAIN = 1;
    private LinearLayout change;
    private LinearLayout linearLayout_departure;
    private LinearLayout linearLayout_destination;
    private LinearLayout linearLayout_date_picker;
    private LinearLayout linearLayout_time_picker;
    private LinearLayout linearLayout_spec;

    private ImageButton timerPicker;
    private ImageButton departure;
    private ImageButton stop;
    private ImageButton destination;
    private ImageButton spec;
    private ImageButton btn_datePicker;
    private TextView show_title;
    private TextView spec_value;

    private Spinner spinner_go_location;
    private Spinner spinner_departure;
    private RadioGroup radiogroup_leave_location;
    private RadioGroup radiogroup_destination_station;
    private RadioGroup radioGroup_orderTimetype;

    private RadioButton realtime;
    private RadioButton reservation;

    private RadioButton thsrStation;
    private RadioButton traStation;

    private RadioButton departure_tra_train;
    private RadioButton departure_thsr_train;

    private EditText leave_train;
    private EditText stop_train;
    private EditText destination_train;
    private EditText date;
    private EditText time;
    private EditText reMark;

    private ArrayAdapter arrayAdapter_location;
    private ArrayAdapter arrayAdapter_departure;
    private int option;

    private final List<ClientTakeRideSelectSpecListItem> mCommentListData = new ArrayList<ClientTakeRideSelectSpecListItem>();;
    private ClientTakeRideSelectSpecListItemAdapter listViewAdapter;

    private DatePickerDialog.OnDateSetListener datePicker;
    private TimePickerDialog.OnTimeSetListener timePicker;

    private Calendar calendar;

    private JsonPutsUtil sendDataRequest;
    private AccountInfo driver;

    private LocationAddress departure_detail;
    private LocationAddress stop_detail;
    private LocationAddress destination_detail;

    private static int dType;//?
    private static int cargoType;//

    private static Constants.APP_REGISTER_DRIVER_TYPE dataType;
    private static Constants.APP_REGISTER_ORDER_TYPE orderCargoType;

    private Dialog dialog;
    private ArrayList<ServerBookmark> tainStationList;
    private ServerBookmark currentLocation;

    private long order_timeStamp;
    private ArrayList<ClientTakeRideSelectSpecListItem> spec_list;
    private ProgressDialog progressDialog_loading;

    private String curAddress = "";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        sendDataRequest = new JsonPutsUtil(getActivity());
        sendDataRequest.setServerRequestOrderManagerCallBackFunction(
                new JsonPutsUtil.ServerRequestOrderManagerCallBackFunction() {

                    @Override
                    public void createNormalOrder(NormalOrder order) {

                        Intent intent = new Intent(getActivity(), ClientTakeRideSearchActivity.class);

                        startActivity(intent);
                        getActivity().finish();
                    }

                    @Override
                    public void cancelNormalOrder(NormalOrder order) {

                    }
                });
        // If activity recreated (such as from screen rotate), restore
        // the previous article selection set by onSaveInstanceState().
        // This is primarily necessary when in the two-pane layout.
        //if (savedInstanceState != null) {
        //   mCurrentPosition = savedInstanceState.getInt(Constants.ARG_POSITION);
        //}

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.client_pick_up_train, container, false);
    }

    @Override
    public void onStart() {
        super.onStart();
        Bundle data = getArguments();
        if (data != null) {
            option = data.getInt(Constants.ARG_POSITION);
            if (data.containsKey(Constants.NEW_ORDER_DTYPE)) {
                dType = data.getInt(Constants.NEW_ORDER_DTYPE);
                dataType = Constants.conversion_register_driver_account_result(Integer.valueOf(dType));
            }
            if (data.containsKey(Constants.NEW_ORDER_CARGO_TYPE)) {
                cargoType = data.getInt(Constants.NEW_ORDER_CARGO_TYPE);
                orderCargoType = Constants
                        .conversion_create_new_order_cargo_type_result(Integer.valueOf(cargoType));
            }
            if (data.containsKey(Fragment_TrainPlanePickUp.BUNDLE_ORDER_CUR_ADDRESS)) {
                curAddress = data.getString(Fragment_TrainPlanePickUp.BUNDLE_ORDER_CUR_ADDRESS);
            }
        }
        this.findViews();
        displayLayout();
        setLister();
        getLocationFromDB("?");
    }

    @Override
    public void onResume() {
        super.onResume();
        getActivity().setTitle(getString(R.string.client_train_pick_up));

    }

    @Override
    public void onStop() {
        if (progressDialog_loading != null) {
            progressDialog_loading.cancel();
            progressDialog_loading = null;
        }
        super.onStop();

    }

    private void findViews() {
        spec_list = new ArrayList<ClientTakeRideSelectSpecListItem>();
        change = (LinearLayout) getView().findViewById(R.id.change);
        linearLayout_departure = (LinearLayout) getView().findViewById(R.id.layout_departure);
        linearLayout_destination = (LinearLayout) getView().findViewById(R.id.layout_destination);
        linearLayout_date_picker = (LinearLayout) getView().findViewById(R.id.date_layout);
        linearLayout_time_picker = (LinearLayout) getView().findViewById(R.id.time_layout);
        linearLayout_spec = (LinearLayout) getView().findViewById(R.id.spec_require);

        btn_datePicker = (ImageButton) getView().findViewById(R.id.date_picker);
        timerPicker = (ImageButton) getView().findViewById(R.id.time_picker);
        departure = (ImageButton) getView().findViewById(R.id.departure);
        stop = (ImageButton) getView().findViewById(R.id.stop);
        destination = (ImageButton) getView().findViewById(R.id.destination_find);
        spec = (ImageButton) getView().findViewById(R.id.spec_option);
        show_title = (TextView) getView().findViewById(R.id.txt_info);
        spec_value = (TextView) getView().findViewById(R.id.passenger_spec_value);

        spinner_go_location = (Spinner) getActivity().findViewById(R.id.train_go_location);
        spinner_departure = (Spinner) getActivity().findViewById(R.id.train_departure);
        radiogroup_leave_location = (RadioGroup) getActivity().findViewById(R.id.departure_train);
        radiogroup_destination_station = (RadioGroup) getActivity().findViewById(R.id.train);
        radioGroup_orderTimetype = (RadioGroup) getActivity().findViewById(R.id.source);

        realtime = (RadioButton) getActivity().findViewById(R.id.real_radio);
        reservation = (RadioButton) getActivity().findViewById(R.id.reservation_radio);
        thsrStation = (RadioButton) getActivity().findViewById(R.id.thsr_train);
        traStation = (RadioButton) getActivity().findViewById(R.id.tra_train);
        departure_tra_train = (RadioButton) getActivity().findViewById(R.id.departure_tra_train);
        departure_thsr_train = (RadioButton) getActivity().findViewById(R.id.departure_thsr_train);

        leave_train = (EditText) getActivity().findViewById(R.id.leave_location);
        leave_train.setText(curAddress);
        destination_train = (EditText) getActivity().findViewById(R.id.destination_map);
        destination_train.setText(curAddress);
        stop_train = (EditText) getActivity().findViewById(R.id.stoptrain);

        date = (EditText) getActivity().findViewById(R.id.date_info);
        time = (EditText) getActivity().findViewById(R.id.time_info);
        reMark = (EditText) getActivity().findViewById(R.id.spec_info);

        Date dateIfo = new Date();
        date.setText(new SimpleDateFormat("yyyy/MM/dd").format(dateIfo));
        time.setText(new SimpleDateFormat("yyyy/MM/dd  HH:mm:ss").format(dateIfo));

    }

    private void displayLayout() {
        if (option == SEND_TRAIN) {
            //getActivity().getActionBar().setTitle(getString(R.string.client_take_ride_title));
            //spinner_go_location.setVisibility(View.GONE);
            radiogroup_leave_location.setVisibility(View.VISIBLE);
            radiogroup_destination_station.setVisibility(View.GONE);
            leave_train.setVisibility(View.GONE);
            //departure.setVisibility(View.VISIBLE);
            destination_train.setVisibility(View.VISIBLE);
            destination.setVisibility(View.GONE);
            //linearLayout_departure.setVisibility(View.GONE);
            //spinner_departure.setVisibility(View.VISIBLE);
            linearLayout_destination.setVisibility(View.VISIBLE);
            change.setVisibility(View.VISIBLE);
        } else if (option == PICKUP_TRAIN) {
            leave_train.setVisibility(View.VISIBLE);
            departure.setVisibility(View.GONE);
            spinner_go_location.setVisibility(View.VISIBLE);
            spinner_departure.setVisibility(View.GONE);
            radiogroup_leave_location.setVisibility(View.GONE);
            radiogroup_destination_station.setVisibility(View.VISIBLE);
            destination_train.setVisibility(View.GONE);
            //destination.setVisibility(View.VISIBLE);
            linearLayout_departure.setVisibility(View.VISIBLE);
            linearLayout_destination.setVisibility(View.GONE);
            change.setVisibility(View.VISIBLE);
        }
    }

    private void setLister() {

        calendar = Calendar.getInstance();
        timePicker = new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

            }
        };
        timerPicker.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                new TimePickerDialog(getActivity(), timePicker, 24, 59, true).show();
            }
        });
        datePicker = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                date.setText(dayOfMonth + "/" + (month + 1) + "/" + year);
            }

        };
        btn_datePicker.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                new DatePickerDialog(getActivity(), datePicker, calendar.get(Calendar.YEAR),
                        calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
            }
        });

        radioGroup_orderTimetype.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == reservation.getId()) {
                    linearLayout_date_picker.setVisibility(View.VISIBLE);
                    linearLayout_time_picker.setVisibility(View.GONE);
                } else {
                    linearLayout_date_picker.setVisibility(View.GONE);
                    linearLayout_time_picker.setVisibility(View.VISIBLE);
                }
            }
        });

        radiogroup_destination_station.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == thsrStation.getId()) {
                    getLocationFromDB("?");
                } else {

                    getLocationFromDB("?");
                }
            }
        });

        radiogroup_leave_location.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == departure_thsr_train.getId()) {
                    getLocationFromDB("?");
                } else {

                    getLocationFromDB("?");
                }
            }
        });
        departure.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                AlertDialog.Builder builderSingle = new AlertDialog.Builder(getActivity());

                final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(),
                        android.R.layout.select_dialog_item);
                arrayAdapter.add(getString(R.string.pop_map_option1));
                arrayAdapter.add(getString(R.string.pop_map_option2));

                builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String strName = arrayAdapter.getItem(which);

                        switch (which) {
                        case 0:
                            Intent map = new Intent(getActivity(), OrderMapActivity.class);
                            Bundle b = new Bundle();
                            b.putInt(Constants.ARG_POSITION, Constants.DEPARTURE_QUERY_GPS);
                            map.putExtras(b);
                            startActivityForResult(map, Constants.DEPARTURE_QUERY_GPS);

                            break;
                        case 1:
                            Intent page = new Intent(getActivity(), BookmarksMapListActivity.class);
                            Bundle flag = new Bundle();
                            flag.putInt(Constants.ARG_POSITION, Constants.DEPARTURE_QUERY_BOOKMARK);
                            page.putExtras(flag);
                            startActivityForResult(page, Constants.DEPARTURE_QUERY_BOOKMARK);

                            break;
                        }
                    }
                });
                builderSingle.show();
            }
        });

        stop.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                AlertDialog.Builder builderSingle = new AlertDialog.Builder(getActivity());

                final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(),
                        android.R.layout.select_dialog_item);
                arrayAdapter.add(getString(R.string.pop_map_option1));
                arrayAdapter.add(getString(R.string.pop_map_option2));

                builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String strName = arrayAdapter.getItem(which);

                        switch (which) {
                        case 0:
                            Intent map = new Intent(getActivity(), OrderMapActivity.class);
                            Bundle b = new Bundle();
                            b.putInt(Constants.ARG_POSITION, Constants.STOP_QUERY_GPS);
                            map.putExtras(b);
                            startActivityForResult(map, Constants.STOP_QUERY_GPS);

                            break;
                        case 1:
                            Intent page = new Intent(getActivity(), BookmarksMapListActivity.class);
                            Bundle flag = new Bundle();
                            flag.putInt(Constants.ARG_POSITION, Constants.STOP_QUERY_BOOKMARK);
                            page.putExtras(flag);
                            startActivityForResult(page, Constants.STOP_QUERY_BOOKMARK);

                            break;
                        }
                    }
                });
                builderSingle.show();
            }
        });

        destination.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                AlertDialog.Builder builderSingle = new AlertDialog.Builder(getActivity());

                final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(),
                        android.R.layout.select_dialog_item);
                arrayAdapter.add(getString(R.string.pop_map_option1));
                arrayAdapter.add(getString(R.string.pop_map_option2));

                builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String strName = arrayAdapter.getItem(which);

                        switch (which) {
                        case 0:
                            Intent map = new Intent(getActivity(), OrderMapActivity.class);
                            Bundle b = new Bundle();
                            b.putInt(Constants.ARG_POSITION, Constants.DESTINATION_QUERY_GPS);
                            map.putExtras(b);
                            startActivityForResult(map, Constants.DESTINATION_QUERY_GPS);

                            break;
                        case 1:
                            Intent page = new Intent(getActivity(), BookmarksMapListActivity.class);
                            Bundle flag = new Bundle();
                            flag.putInt(Constants.ARG_POSITION, Constants.DESTINATION_QUERY_BOOKMARK);
                            page.putExtras(flag);
                            startActivityForResult(page, Constants.DESTINATION_QUERY_BOOKMARK);

                            break;
                        }
                    }
                });
                builderSingle.show();
            }
        });

        getDataFromDB();
        linearLayout_spec.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // custom dialog
                final Dialog dialog = new Dialog(getActivity());
                dialog.setContentView(R.layout.client_take_ride_selectspec_requirement);
                dialog.setTitle(getString(R.string.txt_take_spec));
                Button cancel = (Button) dialog.findViewById(R.id.button_category_cancel);
                Button ok = (Button) dialog.findViewById(R.id.button_category_ok);

                //dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                // set the custom dialog components - text, image and button
                ListView requirement = (ListView) dialog.findViewById(R.id.listViewDialog);

                requirement.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                        ClientTakeRideSelectSpecListItem item = mCommentListData.get(position);
                        item.check = !item.check;
                        mCommentListData.set(position, item);
                        listViewAdapter.notifyDataSetChanged();
                    }
                });

                if (listViewAdapter == null) {
                    listViewAdapter = new ClientTakeRideSelectSpecListItemAdapter(getActivity(), 0,
                            mCommentListData);

                }
                requirement.setAdapter(listViewAdapter);
                listViewAdapter.notifyDataSetChanged();

                dialog.show();
                cancel.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        dialog.cancel();
                    }
                });

                String require;
                ok.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        String require = "";
                        for (ClientTakeRideSelectSpecListItem item : mCommentListData) {
                            if (item.check) {
                                spec_list.add(item);
                                require += item.book_title + ",";
                            }
                        }

                        if (!require.isEmpty())
                            require = require.substring(0, require.length() - 1);
                        spec_value.setText(require);
                        dialog.cancel();
                    }
                });

            }
        });

        spec.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // custom dialog
                final Dialog dialog = new Dialog(getActivity());
                dialog.setContentView(R.layout.client_take_ride_selectspec_requirement);
                dialog.setTitle(getString(R.string.txt_take_spec));
                Button cancel = (Button) dialog.findViewById(R.id.button_category_ok);

                //dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                // set the custom dialog components - text, image and button
                ListView requirement = (ListView) dialog.findViewById(R.id.listViewDialog);

                getDataFromDB();
                listViewAdapter = new ClientTakeRideSelectSpecListItemAdapter(getActivity(), 0, mCommentListData);
                requirement.setAdapter(listViewAdapter);
                listViewAdapter.notifyDataSetChanged();

                dialog.show();
                cancel.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        dialog.cancel();
                    }
                });

            }
        });

        spinner_go_location.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapter, View v, int position, long id) {
                currentLocation = tainStationList.get(position);
                destination_detail = new LocationAddress();
                destination_detail.setLongitude(Double.parseDouble(currentLocation.getLng()));
                destination_detail.setLatitude(Double.parseDouble(currentLocation.getLat()));
                destination_detail.setAddress(currentLocation.getStreetAddress().substring(3,
                        currentLocation.getStreetAddress().length()));
                destination_detail.setLocation(currentLocation.getLocation());
                String zipCpde = (getTrainStationZip(currentLocation.getLocation()));
                destination_detail.setZipCode(zipCpde);
                destination_detail.setCountryName("Taiwan");
                destination_detail.setLocality(currentLocation.getStreetAddress());
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
            }
        });

        spinner_departure.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapter, View v, int position, long id) {
                currentLocation = tainStationList.get(position);
                departure_detail = new LocationAddress();
                departure_detail.setLongitude(Double.parseDouble(currentLocation.getLng()));
                departure_detail.setLatitude(Double.parseDouble(currentLocation.getLat()));
                departure_detail.setAddress(currentLocation.getStreetAddress().substring(3,
                        currentLocation.getStreetAddress().length()));
                departure_detail.setLocation(currentLocation.getLocation());
                //departure_detail.setZipCode(currentLocation.getStreetAddress().substring(0,3));
                String zipCode = (getTrainStationZip(currentLocation.getLocation()));
                departure_detail.setZipCode(zipCode);
                departure_detail.setCountryName("Taiwan");
                departure_detail.setLocality(currentLocation.getStreetAddress());
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
            }
        });
    }

    private void getDataFromDB() {

        mCommentListData.clear();
        //Resources res =getResources();
        //String[] opt=res.getStringArray(R.array.client_take_ride_requirement);
        RealmUtil data = new RealmUtil(getActivity());
        RealmResults<ServerSpecial> specials = data.queryServerSpecial(Constants.SERVER_SPECIAL, "1");
        try {
            // GeoDeviceManagement.deviceList = new ArrayList<UpnpSearchResultBean>();
            // GeoDeviceManagement.deviceList.clear();
            for (int i = 0; i < specials.size(); i++) {
                // for listview ?
                ClientTakeRideSelectSpecListItem item = new ClientTakeRideSelectSpecListItem();

                item.check = false;
                //if(specials.get(i).getDtype().equals(dType))
                item.spec_id = specials.get(i).getId();
                item.book_title = specials.get(i).getContent();
                mCommentListData.add(item);

            }

        } catch (Throwable t) {
            Toast.makeText(getActivity(), "Exception: " + t.toString(), Toast.LENGTH_SHORT).show();
        }
    }

    //
    private void getLocationFromDB(String filterName) {
        tainStationList = new ArrayList<ServerBookmark>();
        ArrayList<String> stationInfo = new ArrayList<String>();
        RealmUtil database = new RealmUtil(getActivity());
        RealmResults<ServerBookmark> tainList = database.queryServerBookmark();
        for (ServerBookmark station : tainList) {
            if (station.getLocation().contains(filterName)) {
                stationInfo.add(station.getLocation());
                tainStationList.add(station);
            }
        }

        arrayAdapter_location = new ArrayAdapter<String>(getActivity(), R.layout.spinner_item, stationInfo);
        //arrayAdapter_departure= new ArrayAdapter<String>(getActivity(), R.layout.spinner_item, stationInfo);
        spinner_go_location.setAdapter(arrayAdapter_location);
        spinner_departure.setAdapter(arrayAdapter_location);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
        case Constants.DEPARTURE_QUERY_GPS:
            ArrayList<Address> locationInfo = null;
            if (data != null) {
                //departure_detail = new LocationAddress();
                departure_detail = (LocationAddress) data.getSerializableExtra(Constants.BUNDLE_LOCATION);
                //String add_bookmark = data.getStringExtra(BUNDLE_KEEP_BOOMARK);
                //String latitude = data.getStringExtra(Constants.BUNDLE_MAP_LATITUDE);
                //String longitude = data.getStringExtra(Constants.BUNDLE_MAP_LONGITUDE);
                //departure_detail.setLatitude(location.getLatitude());
                //departure_detail.setLongitude(location.getLongitude());
                boolean isBookMark = data.getBooleanExtra(BUNDLE_KEEP_BOOMARK, false);
                if (isBookMark) {
                    addUserLocationToBookMark(departure_detail);
                }
                leave_train.setText(departure_detail.getAddress());
                //departure_detail.setLocation(location.getAddress());
                //departure_detail.setAddress(location.getAddress());
                /*if(add_bookmark.equals(true))
                {
                    //BookMark
                }*/
                //showAddressList((ArrayList<Address>)locationInfo,departure_address,departure_detail);
            }
            break;
        case Constants.STOP_QUERY_GPS:
            //ArrayList<Address> locationInfo=null;
            if (data != null) {
                //departure_detail = new LocationAddress();
                stop_detail = (LocationAddress) data.getSerializableExtra(Constants.BUNDLE_LOCATION);
                //String add_bookmark = data.getStringExtra(BUNDLE_KEEP_BOOMARK);
                //String latitude = data.getStringExtra(Constants.BUNDLE_MAP_LATITUDE);
                //String longitude = data.getStringExtra(Constants.BUNDLE_MAP_LONGITUDE);
                //departure_detail.setLatitude(location.getLatitude());
                //departure_detail.setLongitude(location.getLongitude());
                boolean isBookMark = data.getBooleanExtra(BUNDLE_KEEP_BOOMARK, false);
                if (isBookMark) {
                    addUserLocationToBookMark(stop_detail);
                }
                stop_train.setText(stop_detail.getAddress());
                //departure_detail.setLocation(location.getAddress());
                //departure_detail.setAddress(location.getAddress());
                /*if(add_bookmark.equals(true))
                {
                    //BookMark
                }*/
                //showAddressList((ArrayList<Address>)locationInfo,departure_address,departure_detail);
            }
            break;
        case Constants.DESTINATION_QUERY_GPS:
            ArrayList<Address> locationInfo2 = null;
            if (data != null) {
                //destination_detail = new LocationAddress();
                destination_detail = (LocationAddress) data.getSerializableExtra(Constants.BUNDLE_LOCATION);
                //String latitude = data.getStringExtra(Constants.BUNDLE_MAP_LATITUDE);
                //String longitude = data.getStringExtra(Constants.BUNDLE_MAP_LONGITUDE);
                //destination_detail.setLatitude(Double.valueOf(latitude));
                //destination_detail.setLongitude(Double.valueOf(longitude));
                boolean isBookMark = data.getBooleanExtra(BUNDLE_KEEP_BOOMARK, false);
                if (isBookMark) {
                    addUserLocationToBookMark(destination_detail);
                }
                destination_train.setText(destination_detail.getAddress());
                //destination_detail.setAddress(locationInfo2.get(0).getAddressLine(0));
                //destination_detail.setLocation(locationInfo2.get(0).getAddressLine(0));
                //showAddressList(locationInfo2,destination_address,destination_detail);
            }
            break;

        case Constants.DEPARTURE_QUERY_BOOKMARK:
            if (data != null) {
                departure_detail = new LocationAddress();
                USerBookmark uSerBookmark = (USerBookmark) data.getSerializableExtra(Constants.BUNDLE_LOCATION);
                leave_train.setText(uSerBookmark.getStreetAddress());
                departure_detail.setLongitude(Double.parseDouble(uSerBookmark.getLng()));
                departure_detail.setLatitude(Double.parseDouble(uSerBookmark.getLat()));
                departure_detail.setAddress(uSerBookmark.getStreetAddress());
                departure_detail.setLocation(uSerBookmark.getLocation());
                departure_detail.setCountryName(uSerBookmark.getCountryName());
                departure_detail.setLocality(uSerBookmark.getLocality());
                departure_detail.setZipCode(uSerBookmark.getZipCode());

            }
            break;
        case Constants.STOP_QUERY_BOOKMARK:
            if (data != null) {
                stop_detail = new LocationAddress();
                USerBookmark uSerBookmark = (USerBookmark) data.getSerializableExtra(Constants.BUNDLE_LOCATION);
                stop_train.setText(uSerBookmark.getStreetAddress());
                stop_detail.setLongitude(Double.parseDouble(uSerBookmark.getLng()));
                stop_detail.setLatitude(Double.parseDouble(uSerBookmark.getLat()));
                stop_detail.setAddress(uSerBookmark.getStreetAddress());
                stop_detail.setLocation(uSerBookmark.getLocation());
                stop_detail.setCountryName(uSerBookmark.getCountryName());
                stop_detail.setLocality(uSerBookmark.getLocality());
                stop_detail.setZipCode(uSerBookmark.getZipCode());

            }
            break;
        case Constants.DESTINATION_QUERY_BOOKMARK:
            if (data != null) {
                destination_detail = new LocationAddress();
                USerBookmark uSerBookmark1 = (USerBookmark) data.getSerializableExtra(Constants.BUNDLE_LOCATION);
                destination_train.setText(uSerBookmark1.getStreetAddress());
                destination_detail.setLongitude(Double.parseDouble(uSerBookmark1.getLng()));
                destination_detail.setLatitude(Double.parseDouble(uSerBookmark1.getLat()));
                destination_detail.setAddress(uSerBookmark1.getStreetAddress());
                destination_detail.setLocation(uSerBookmark1.getLocation());
                destination_detail.setCountryName(uSerBookmark1.getCountryName());
                destination_detail.setLocality(uSerBookmark1.getLocality());
                destination_detail.setZipCode(uSerBookmark1.getZipCode());

            }
            break;
        }
    }

    private void addUserLocationToBookMark(LocationAddress location) {
        USerBookmark item = new USerBookmark();
        item.setLat("" + location.getLatitude());
        item.setLng("" + location.getLongitude());
        item.setLocation(location.getLocation());
        item.setLocality(location.getLocality());
        item.setCountryName(location.getCountryName());
        item.setZipCode(location.getZipCode());
        item.setStreetAddress(location.getAddress());

        //
        RealmUtil database = new RealmUtil(getActivity());
        database.addUserBookMark(item);

    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        MenuItem item = menu.add(Menu.NONE, ACTIONBAR_MENU_ITEM_SUMMIT, Menu.NONE, getString(R.string.menu_take));
        SpannableString spanString = new SpannableString(item.getTitle().toString());
        spanString.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanString.length(), 0); //fix the color to white
        item.setTitle(spanString);

        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case ACTIONBAR_MENU_ITEM_SUMMIT:
            if (!leave_train.getText().toString().isEmpty() || !destination_train.getText().toString().isEmpty())
                sendOrder();
            else
                alert();
            break;

        default:
            return super.onOptionsItemSelected(item);
        }

        return true;
    }

    private void provideOrderPrice() {
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
        // ...Irrelevant code for customizing the buttons and title
        dialogBuilder.setTitle(getString(R.string.order_change_fee));
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View dialogView = inflater.inflate(R.layout.dialog_enter_order_price_layout, null);
        dialogBuilder.setView(dialogView);

        TextView content = (TextView) dialogView.findViewById(R.id.txt_msg);
        final EditText enter = (EditText) dialogView.findViewById(R.id.editText_password);
        enter.setText("");
        final EditText tip = (EditText) dialogView.findViewById(R.id.editText_tip);
        tip.setText("");
        Button sure = (Button) dialogView.findViewById(R.id.sure_action);

        Button cancel = (Button) dialogView.findViewById(R.id.cancel_action);

        final AlertDialog alertDialog = dialogBuilder.create();
        cancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                alertDialog.dismiss();
            }
        });
        sure.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                parserAddressToGPS();
                createTaxiOrder("" + option, enter.getText().toString(), tip.getText().toString());
                if (alertDialog != null) {
                    alertDialog.dismiss();
                }
            }
        });
        alertDialog.show();

    }

    private void createTaxiOrder(String target, String price, String tip) {

        Utility info = new Utility(getActivity());
        driver = info.getAccountInfo();
        OrderLocationBean begin_location = new OrderLocationBean();
        begin_location.setId(1);
        begin_location.setLatitude("" + departure_detail.getLatitude());
        begin_location.setLongitude("" + departure_detail.getLongitude());
        //String zip = departure_detail.getAddress().substring(0,3);
        begin_location.setZipcode(departure_detail.getZipCode());
        begin_location.setAddress(departure_detail.getAddress());

        OrderLocationBean stop_location = new OrderLocationBean();
        stop_location.setId(2);
        stop_location.setLatitude("" + stop_detail.getLatitude());
        stop_location.setLongitude("" + stop_detail.getLongitude());
        stop_location.setZipcode(stop_detail.getZipCode());
        stop_location.setAddress(stop_detail.getAddress());

        OrderLocationBean end_location = new OrderLocationBean();
        end_location.setId(3);
        end_location.setLatitude("" + destination_detail.getLatitude());
        end_location.setLongitude("" + destination_detail.getLongitude());
        //String zip1 = destination_detail.getAddress().substring(0,3);
        end_location.setZipcode(destination_detail.getZipCode());
        end_location.setAddress(destination_detail.getAddress());

        final NormalOrder order = new NormalOrder();
        order.setUser_id(driver.getId());
        order.setUser_uid(driver.getUid());
        order.setUser_name(driver.getPhoneNumber());
        order.setAccesskey(driver.getAccessKey());

        //Log.e(TAG,"time stamp:"+time.getText().toString());
        order_timeStamp = DateTimeUtil.convertString_yyyymmddToMillisecondsTime(time.getText().toString());

        order.setTimebegin("" + order_timeStamp);
        order.setDtype("" + dataType.value());
        order.setCargo_type("" + orderCargoType.value());
        order.setBegin(begin_location);
        order.setEnd(end_location);
        order.setStop(stop_location);
        order.setBegin_address(begin_location.getAddress());
        order.setStop_address(stop_location.getAddress());
        order.setEnd_address(end_location.getAddress());
        order.setTicket_status("0");
        order.setOrderdate(time.getText().toString());
        order.setTarget(target);

        order.setPrice(price);
        order.setTip(tip);

        String spec = "";
        if (!spec_list.isEmpty()) {
            for (ClientTakeRideSelectSpecListItem item : spec_list) {
                spec += item.spec_id + ",";
            }
            spec = spec.substring(0, spec.length() - 1);

        }

        //Log.e(TAG,"spec car:"+spec);
        order.setCar_special(spec);
        order.setRemark(reMark.getText().toString());
        //sendDataRequest.putCreateQuickTaxiOrder(order);
        if (progressDialog_loading == null) {
            progressDialog_loading = ProgressDialog.show(getActivity(), "", "Loading. Please wait...", true);
        }
        ThreadPoolUtil.getThreadPoolExecutor().execute((new Runnable() {
            @Override
            public void run() {
                sendDataRequest.putCreateNormalOrder(order);
            }
        }));

    }

    private void parserAddressToGPS() {

        Geocoder fwdGeocoder = new Geocoder(getActivity());

        if (departure_detail == null) {
            String departure = leave_train.getText().toString();

            List<Address> departure_locations = null;
            try {
                departure_locations = fwdGeocoder.getFromLocationName(departure, 10);
            } catch (IOException e) {
            }

            departure_detail = new LocationAddress();
            if (departure_locations.size() > 0) {
                departure_detail.setLongitude(departure_locations.get(0).getLongitude());
                departure_detail.setLatitude(departure_locations.get(0).getLatitude());
                departure_detail.setAddress(departure);
                departure_detail.setLocation(departure);
                departure_detail.setCountryName(departure_locations.get(0).getCountryName());
                departure_detail.setLocality(departure_locations.get(0).getLocality());
                departure_detail.setZipCode(departure_locations.get(0).getPostalCode());
            }
        }
        String stop = stop_train.getText().toString();

        if (stop_detail == null) {
            List<Address> stop_locations = null;
            try {
                stop_locations = fwdGeocoder.getFromLocationName(stop, 10);
            } catch (IOException e) {
            }

            //Log.e("", "Stop zipCode:" + stop_locations.get(0).getPostalCode());
            stop_detail = new LocationAddress();
            if (stop_locations.size() > 0) {
                stop_detail.setLongitude(stop_locations.get(0).getLongitude());
                stop_detail.setLatitude(stop_locations.get(0).getLatitude());
                stop_detail.setAddress(stop);
                stop_detail.setLocation(stop);
                stop_detail.setCountryName(stop_locations.get(0).getCountryName());
                stop_detail.setLocality(stop_locations.get(0).getLocality());
                stop_detail.setZipCode(stop_locations.get(0).getPostalCode());
            }
        }
        String destination = destination_train.getText().toString();

        if (destination_detail == null) {
            List<Address> destination_locations = null;
            try {
                destination_locations = fwdGeocoder.getFromLocationName(destination, 10);
            } catch (IOException e) {
            }

            destination_detail = new LocationAddress();
            if (destination_locations.size() > 0) {
                destination_detail.setLongitude(destination_locations.get(0).getLongitude());
                destination_detail.setLatitude(destination_locations.get(0).getLatitude());
                destination_detail.setAddress(destination);
                destination_detail.setLocation(destination);
                destination_detail.setCountryName(destination_locations.get(0).getCountryName());
                destination_detail.setLocality(destination_locations.get(0).getLocality());
                destination_detail.setZipCode(destination_locations.get(0).getPostalCode());
            }
        }

    }

    private void sendOrder() {

        if (option == SEND_TRAIN) {
            //
            currentLocation = tainStationList.get(spinner_go_location.getSelectedItemPosition());
            //if(destination_detail==null) {
            destination_detail = new LocationAddress();
            destination_detail.setLongitude(Double.parseDouble(currentLocation.getLng()));
            destination_detail.setLatitude(Double.parseDouble(currentLocation.getLat()));
            destination_detail.setAddress(
                    currentLocation.getStreetAddress().substring(3, currentLocation.getStreetAddress().length()));
            destination_detail.setLocation(currentLocation.getLocation());
            //destination_detail.setZipCode(currentLocation.getStreetAddress().substring(0, 3));
            String zipCpde = (getTrainStationZip(currentLocation.getLocation()));
            destination_detail.setZipCode(zipCpde);
            destination_detail.setCountryName("Taiwan");
            destination_detail.setLocality(currentLocation.getStreetAddress());
            // }
        } else {
            //?
            currentLocation = tainStationList.get(spinner_departure.getSelectedItemPosition());
            if (departure_detail == null) {
                departure_detail = new LocationAddress();
                departure_detail.setLongitude(Double.parseDouble(currentLocation.getLng()));
                departure_detail.setLatitude(Double.parseDouble(currentLocation.getLat()));
                departure_detail.setAddress(currentLocation.getStreetAddress().substring(3,
                        currentLocation.getStreetAddress().length()));
                departure_detail.setLocation(currentLocation.getLocation());
                //departure_detail.setZipCode(currentLocation.getStreetAddress().substring(0, 3));
                String zipCpde = (getTrainStationZip(currentLocation.getLocation()));
                destination_detail.setZipCode(zipCpde);
                departure_detail.setCountryName("Taiwan");
                departure_detail.setLocality(currentLocation.getStreetAddress());
            }
        }
        String departure_address_info;
        if (departure_detail != null)
            departure_address_info = departure_detail.getAddress();
        else
            departure_address_info = leave_train.getText().toString();
        String stop_address_info;
        if (stop_detail != null)
            stop_address_info = stop_detail.getAddress();
        else
            stop_address_info = stop_train.getText().toString();

        String destination_address_info;
        if (destination_detail != null)
            destination_address_info = destination_detail.getAddress();
        else
            destination_address_info = destination_train.getText().toString();

        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());

        // set title
        alertDialogBuilder.setTitle(getString(R.string.menu_dialog_sure));

        // set dialog message
        alertDialogBuilder
                .setMessage(date.getText().toString() + "\t" + time.getText().toString() + "\n:"
                        + departure_address_info + "\n?:+" + stop_address_info + "\n:"
                        + destination_address_info)
                .setCancelable(false)
                .setPositiveButton(getString(R.string.cancel_take_spec), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                    }
                }).setNegativeButton(getString(R.string.sure_take_spec), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        if (dataType == Constants.APP_REGISTER_DRIVER_TYPE.K_REGISTER_DRIVER_TYPE_TAXI) {
                            parserAddressToGPS();
                            createTaxiOrder("" + option, "0", "0");

                        } else {
                            //?
                            provideOrderPrice();
                        }

                    }
                });

        // create alert dialog
        AlertDialog alertDialog = alertDialogBuilder.create();

        // show it
        alertDialog.show();
        /* }else
         {
             NormalOrder order = createMechardiseOrder(""+SEND_MERCHANDISE);
             Intent question = new Intent(ClientTakeRideActivity.this, MerchandiseOrderActivity.class);
             Bundle b = new Bundle();
             b.putInt(Constants.ARG_POSITION, MerchandiseOrderActivity.SEND_MERCHANDISE);
             b.putSerializable(BUNDLE_ORDER_TICKET_ID, order);
             question.putExtras(b);
             startActivity(question);
         }*/
    }

    private void alert() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
        // set title
        alertDialogBuilder.setTitle(getString(R.string.order));

        alertDialogBuilder.setMessage(getString(R.string.login_error_register_msg)).setCancelable(false)
                .setNegativeButton(getString(R.string.dialog_get_on_car_comfirm),
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {

                            }
                        });
        // create alert dialog
        AlertDialog alertDialog = alertDialogBuilder.create();
        // show it
        alertDialog.show();
    }

    private String getTrainStationZip(String address) {

        Geocoder fwdGeocoder = new Geocoder(getActivity());

        String zipCode = "";
        String departure = address;

        List<Address> departure_locations = null;
        try {
            departure_locations = fwdGeocoder.getFromLocationName(departure, 10);
        } catch (IOException e) {
        }

        zipCode = departure_locations.get(0).getPostalCode();

        return zipCode;
    }

}