TracksList.java :  » GPS » vlkgps » sk » bielyvlk » vlkgps » Android Open Source

Android Open Source » GPS » vlkgps 
vlkgps » sk » bielyvlk » vlkgps » TracksList.java
package sk.bielyvlk.vlkgps;

import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

import sk.bielyvlk.vlkgps.db.DbHelper;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.OnItemLongClickListener;

public class TracksList extends ListActivity implements ServiceConnection, OnItemLongClickListener {
  public static final String TAG = "vlkGPS.TracksList";

  VlkGpsService vlkGpsService = null;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onStart");

    try {
      Intent serviceIntent = new Intent(TracksList.this, VlkGpsService.class);
      bindService(serviceIntent, this, 0);
    } catch (Exception e) {
      Log.e(TAG, e.toString());
    }
    getListView().setOnItemLongClickListener(this);
  }

  @Override
  public void onStart() {
    super.onStart();
    Log.d(TAG, "onStart");
  }

  @Override
  public void onRestart() {
    super.onRestart();
    Log.d(TAG, "onRestart");
  }

  @Override
  public void onResume() {
    super.onResume();
    Log.d(TAG, "onResume");
  }

  @Override
  public void onPause() {
    super.onPause();
    Log.d(TAG, "onPause");
  }

  @Override
  public void onStop() {
    super.onStop();
    Log.d(TAG, "onStop");
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy");
  }

  @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
    Log.d(TAG, "onServiceConnected");
    try {
      vlkGpsService = ((VlkGpsService.LocalBinder) service).getService();
      DbHelper dbHelper = vlkGpsService.getDbHelper();
      Cursor c = dbHelper.getTracksList();
      String[] from = new String[] { "name", "name", };
      int[] to = new int[] { R.id.text1, R.id.text2, };
      SimpleCursorAdapter tracks = new SimpleCursorAdapter(this, R.layout.track_row, c, from, to);
      setListAdapter(tracks);
    } catch (Exception e) {
      Log.d(TAG, e.toString());
    }
  }

  @Override
  public void onServiceDisconnected(ComponentName name) {
    Log.d(TAG, "onServiceDisconnected");
    vlkGpsService = null;
  }

  @Override
  protected void onListItemClick(ListView l, View v, int position, long id) {
    Log.d(TAG, "item clicked: " + id);
  }

  private void exportTrack(long id) {
    DbHelper dbHelper = vlkGpsService.getDbHelper();
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    String name = dbHelper.getTrackName(id);
    try {
      FileWriter file = new FileWriter("/sdcard/vlkgps/" + name + ".gpx");
      file.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
      file.write("<gpx version=\"1.1\" creator=\"vlkGPS - http://vlkgps.bielyvlk.sk\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.topografix.com/GPX/1/1\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">\r\n");
      file.write("  <trk>\r\n");
      file.write("    <name>" + name + "</name>\r\n");
      file.write("    <trkseg>\r\n");
      Cursor c = db.rawQuery("SELECT lon, lat, alt, spd, acc, time FROM trackpoints WHERE track_id = " + id + " ORDER BY _id;", null);
      Log.d(TAG, "track points: " + c.getCount());
      c.moveToFirst();
      do {
        SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        formater.setTimeZone(TimeZone.getTimeZone("GMT"));
        String time = formater.format(new Date(c.getLong(5)));
        double lon = c.getLong(0) / DbHelper.DB_DEGREES_MULT;
        double lat = c.getLong(1) / DbHelper.DB_DEGREES_MULT;
        double alt = c.getLong(2) / DbHelper.DB_METERS_MULT;
        double spd = c.getLong(3) / DbHelper.DB_METERS_MULT;
        double acc = c.getLong(4) / DbHelper.DB_METERS_MULT;
        file.write("      <trkpt lon=\"" + lon + "\" lat=\"" + lat + "\">\r\n");
        file.write("        <ele>" + alt + "</ele>\r\n");
        file.write("        <speed>" + spd + "</speed>\r\n");
        file.write("        <time>" + time + "</time>\r\n");
        file.write("        <extensions>\r\n");
        file.write("          <accuracy>" + acc + "</accuracy>\r\n");
        file.write("        </extensions>\r\n");
        file.write("      </trkpt>\r\n");
      } while (c.moveToNext());
      file.write("    </trkseg>\r\n");
      file.write("  </trk>\r\n");
      file.write("</gpx>\r\n");
      file.close();
      c.close();
    } catch (IOException e) {
      Log.e(TAG, e.toString());
    }
  }

  private long selectedTrackId = 0;
  //private View selectedView = null;

  @Override
  public boolean onItemLongClick(AdapterView<?> l, View v, int position, long id) {
    DbHelper dbHelper = vlkGpsService.getDbHelper();
    selectedTrackId = id;
    //selectedView = v;
    try {
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      builder.setTitle(dbHelper.getTrackName(selectedTrackId));
      builder.setItems(R.array.trackSubmenu, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface d, int id) {
          Log.d(TAG, "submenu clicked: " + id + " trackId: " + selectedTrackId);
          /* TODO don't use numbers */
          switch (id) {
            case 2: /* export */
              exportTrack(selectedTrackId);
              break;
            case 3: /* delete */
              try {
                DbHelper dbHelper = vlkGpsService.getDbHelper();
                dbHelper.deleteTrack(selectedTrackId);
                finish();
              } catch (Exception e) {
                Log.e(TAG, e.toString());
              }
              break;
          }
        }
      });
      builder.create().show();
    } catch (Exception e) {
      Log.e(TAG, e.toString());
    }
    return true;
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.