Friday, October 7, 2011

Simple Android Project

main_page.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/linear1"
    android:layout_weight="1" android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:background="#ffffffff" xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout android:id="@+id/linear2"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android">

        <ImageView android:id="@+id/test_image" android:src="@drawable/header"
            android:layout_width="fill_parent" android:layout_height="fill_parent" />

    </LinearLayout>
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gridview" android:layout_width="wrap_content"
        android:layout_height="fill_parent" android:columnWidth="90dp"
        android:numColumns="2" android:verticalSpacing="5dp"
        android:horizontalSpacing="5dp" android:stretchMode="columnWidth"
        android:gravity="center" android:background="@layout/black_white_gradient" />

</LinearLayout>

Home.class


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class Home extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_page);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
                R.layout.custom_title);

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

                Intent myIntent = null;
                String positionString = "";
                switch (position) {
                case 0:
                    // FlightInfo
                    positionString = "Flight Info";
                    myIntent = new Intent(Home.this, SearchFlights.class);
                    startActivity(myIntent);
                    break;
                // case 1:
                // // AirportInfo
                // positionString = "Airport Info";
                // myIntent = new Intent(Home.this, SearchFlights.class);
                // startActivity(myIntent);
                // break;

                default:
                    break;
                }
                Toast.makeText(Home.this, "" + positionString,
                        Toast.LENGTH_SHORT).show();
            }
        });
    }
}

ImageAdapter.class

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {

    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    @Override
    public int getCount() {
        return mThumbIds.length;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) { // if it's not recycled, initialize some
                                    // attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(126, 126));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = { R.drawable.flight_info,
            R.drawable.flight_schedule, R.drawable.check_in,
            R.drawable.check_out };
}

list_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<ListView
    android:id="@+id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />
<TextView
    android:id="@+id/android:empty"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/main_no_items"/>
</LinearLayout>

ListViewByFligh.class


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.al.srv.dto.FlightVO;
import com.al.srv.parser.Parser;
import com.serendibit.flightstats.webservice.WebserviceClient;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class ListViewByFlight extends ListActivity {

    private ProgressDialog m_ProgressDialog = null;
    private ArrayList<FlightVO> m_flights = null;
    private FlightsAdapter m_adapter;
    private Runnable viewFlights;

    Intent myIntent = null;

    private String strAirLine, strFlightNo, strFlightFromDate, strFlightToDate;

    public static SearchByFlightNo byFlightNo;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_view_by_flight);

        strAirLine = byFlightNo.getStrAirLine();
        strFlightNo = byFlightNo.getStrFlightNo();
        strFlightFromDate = byFlightNo.getStrFlightFromDate();
        strFlightToDate = byFlightNo.getStrFlightToDate();

        m_flights = new ArrayList<FlightVO>();
        this.m_adapter = new FlightsAdapter(this, R.layout.row, m_flights);
        setListAdapter(this.m_adapter);

        viewFlights = new Runnable() {
            @Override
            public void run() {
                getFlights();
            }
        };
        Thread thread = new Thread(null, viewFlights, "MagentoBackground");
        thread.start();
        m_ProgressDialog = ProgressDialog.show(ListViewByFlight.this,
                "Please wait...", "Retrieving data ...", true);
    }

    private Runnable returnRes = new Runnable() {

        @Override
        public void run() {
            if (m_flights != null && m_flights.size() > 0) {
                m_adapter.notifyDataSetChanged();
                for (int i = 0; i < m_flights.size(); i++)
                    m_adapter.add(m_flights.get(i));
            }
            m_ProgressDialog.dismiss();
            m_adapter.notifyDataSetChanged();
        }
    };

    private void getFlights() {
        try {
            int count = 0;
            int objLength;
            // Call flight info web service
            WebserviceClient client = new WebserviceClient();

            String resultXML = client.getFlightInfoByFlightNo(strAirLine,
                    strFlightNo, strFlightFromDate, strFlightToDate);

            Object obj = new Parser().parse(resultXML);

            if (obj instanceof String) {
                // SearchByFlightNo.error =
                // "Incorrect parameter or Connection error";
                myIntent = new Intent(ListViewByFlight.this,
                        SearchByFlightNo.class);
                startActivity(myIntent);
            } else if (obj instanceof List) {

                m_flights = new ArrayList<FlightVO>();
                FlightVO o1;
               
                List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
               
                for (count = 0; count < ((List<FlightVO>) obj).size(); count++) {
                    o1 = new FlightVO();
                   
                    o1.setFlightNumber(((List<FlightVO>) obj).get(count)
                            .getAirline().getAirlineCode()
                            + ((List<FlightVO>) obj).get(count)
                                    .getFlightNumber());
                    o1.setDepartureDate(((List<FlightVO>) obj).get(count)
                            .getDepartureDate().substring(0, 10)
                            + " "
                            + ((List<FlightVO>) obj).get(count)
                                    .getDepartureDate().substring(11, 16));
                    o1.setFlyRoot("from ("
                            + ((List<FlightVO>) obj).get(count).getOrigin()
                                    .getAirportCode()
                            + ") to "
                            + "("
                            + ((List<FlightVO>) obj).get(count).getDestination()
                                    .getAirportCode() + ")");
                    m_flights.add(o1);
                }
            }
            Thread.sleep(5000);
            Log.i("ARRAY", "" + m_flights.size());
        } catch (Exception e) {
            Log.e("BACKGROUND_PROC", e.getMessage());
        }
        runOnUiThread(returnRes);
    }

    private class FlightsAdapter extends ArrayAdapter<FlightVO> {

        private ArrayList<FlightVO> items;

        public FlightsAdapter(Context context, int textViewResourceId,
                ArrayList<FlightVO> items) {
            super(context, textViewResourceId, items);
            this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.row, null);
            }

            FlightVO o = items.get(position);
            if (o != null) {
                TextView tvFlightNo = (TextView) v
                        .findViewById(R.id.flightNumber);
                TextView tvDateTime = (TextView) v.findViewById(R.id.dateTime);
                if (tvFlightNo != null) {
                    tvFlightNo.setText("Flight: " + o.getFlightNumber());
                }
                if (tvDateTime != null) {
                    tvDateTime.setText("Fly Date: "
                            + o.getDepartureDate()
                            + "\nRoot: "
                            + o.getFlyRoot());
                }
            }
            return v;
        }
    }
}

WebserviceClient.class

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.util.Log;

public class WebserviceClient {

    String URLbase = "http://www.pathfinder-xml.com/development/xml?Service=FlightHistoryGetRecordsService&login.accountID=6686&login.userID=nhliyanage&login.password=nandika";

    private String call(String url) {
        Log.i("URL :", url);
        String content = null;
        HttpClient mClient = new DefaultHttpClient();
        HttpGet get = new HttpGet(url);
        try {
            mClient.execute(get);
            HttpResponse res = mClient.execute(get);

            InputStream is = res.getEntity().getContent();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
            String line;
            StringBuffer response = new StringBuffer();
            while ((line = rd.readLine()) != null) {
                response.append(line);
                response.append('\r');
            }
            rd.close();

            content = response.toString();

            System.out.println("content :" + content);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }

    public String getFlightInfoByFlightNo(String airlineCode, String flightNo,
            String fromDate, String toDate) {
        String url = URLbase
                + "&info.specificationFlights[0].airline.airlineCode="
                + airlineCode + "&info.specificationFlights[0].flightNumber="
                + flightNo
                + "&info.specificationFlights[0].searchCodeshares=true"
                + "&info.specificationDateRange.departureDateTimeMin="
                + fromDate + "T00:00"
                + "&info.specificationDateRange.departureDateTimeMax=" + toDate
                + "T23:59";

        return call(url);
    }

    public String getFlightInfoByDestination(String from, String to,
            String fromDate, String toDate) {

        String url = URLbase
                + "&info.specificationDepartures[0].airport.airportCode="
                + from + "&info.specificationArrivals[0].airport.airportCode="
                + to + "&info.specificationDateRange.departureDateTimeMin="
                + fromDate + "T00:00"
                + "&info.specificationDateRange.departureDateTimeMax=" + toDate
                + "T23:59"
                + "&info.flightHistoryGetRecordsRequestedData.codeshares=true";

        return call(url);
    }
}

No comments: