227 lines
7.2 KiB
Java
227 lines
7.2 KiB
Java
/*
|
|
* Copyright (C) 2008 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 com.android.locationtracker;
|
|
|
|
import com.android.locationtracker.data.DateUtils;
|
|
import com.android.locationtracker.data.TrackerDataHelper;
|
|
import com.android.locationtracker.data.TrackerListHelper;
|
|
|
|
import android.app.AlertDialog;
|
|
import android.app.ListActivity;
|
|
import android.content.DialogInterface;
|
|
import android.content.DialogInterface.OnClickListener;
|
|
import android.content.Intent;
|
|
import android.database.Cursor;
|
|
import android.location.LocationManager;
|
|
import android.os.Bundle;
|
|
import android.os.Environment;
|
|
import android.util.Log;
|
|
import android.view.Menu;
|
|
import android.view.MenuInflater;
|
|
import android.view.MenuItem;
|
|
import android.widget.Toast;
|
|
|
|
import java.io.BufferedWriter;
|
|
import java.io.File;
|
|
import java.io.FileWriter;
|
|
import java.io.IOException;
|
|
import java.io.Writer;
|
|
|
|
/**
|
|
* Activity for location tracker service
|
|
*
|
|
* Contains facilities for starting and
|
|
* stopping location tracker service, as well as displaying the current location
|
|
* data
|
|
*
|
|
* Future enhancements:
|
|
* - export data as dB
|
|
* - enable/disable "start service" and "stop service" menu items as
|
|
* appropriate
|
|
*/
|
|
public class TrackerActivity extends ListActivity {
|
|
|
|
static final String LOG_TAG = "LocationTracker";
|
|
|
|
private TrackerListHelper mDataHelper;
|
|
|
|
/**
|
|
* Retrieves and displays the currently logged location data from file
|
|
*
|
|
* @param icicle
|
|
*/
|
|
@Override
|
|
protected void onCreate(Bundle icicle) {
|
|
super.onCreate(icicle);
|
|
|
|
mDataHelper = new TrackerListHelper(this);
|
|
mDataHelper.bindListUI(R.layout.entrylist_item);
|
|
}
|
|
|
|
/**
|
|
* Builds the menu
|
|
*
|
|
* @param menu - menu to add items to
|
|
*/
|
|
@Override
|
|
public boolean onCreateOptionsMenu(Menu menu) {
|
|
MenuInflater menuInflater = getMenuInflater();
|
|
menuInflater.inflate(R.menu.menu, menu);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Handles menu item selection
|
|
*
|
|
* @param item - the selected menu item
|
|
*/
|
|
@Override
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
switch (item.getItemId()) {
|
|
case R.id.start_service_menu: {
|
|
startService(new Intent(TrackerActivity.this,
|
|
TrackerService.class));
|
|
break;
|
|
}
|
|
case R.id.stop_service_menu: {
|
|
stopService(new Intent(TrackerActivity.this,
|
|
TrackerService.class));
|
|
break;
|
|
}
|
|
case R.id.settings_menu: {
|
|
launchSettings();
|
|
break;
|
|
}
|
|
case R.id.export_kml: {
|
|
exportKML();
|
|
break;
|
|
}
|
|
case R.id.export_csv: {
|
|
exportCSV();
|
|
break;
|
|
}
|
|
case R.id.clear_data_menu: {
|
|
clearData();
|
|
break;
|
|
}
|
|
}
|
|
return super.onOptionsItemSelected(item);
|
|
}
|
|
|
|
private void clearData() {
|
|
Runnable clearAction = new Runnable() {
|
|
public void run() {
|
|
TrackerDataHelper helper =
|
|
new TrackerDataHelper(TrackerActivity.this);
|
|
helper.deleteAll();
|
|
}
|
|
};
|
|
showConfirm(R.string.delete_confirm, clearAction);
|
|
}
|
|
|
|
private void showConfirm(int textId, final Runnable onConfirmAction) {
|
|
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
|
|
dialogBuilder.setTitle(R.string.confirm_title);
|
|
dialogBuilder.setMessage(textId);
|
|
dialogBuilder.setPositiveButton(android.R.string.ok,
|
|
new OnClickListener() {
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
onConfirmAction.run();
|
|
}
|
|
});
|
|
dialogBuilder.setNegativeButton(android.R.string.cancel,
|
|
new OnClickListener() {
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
// do nothing
|
|
}
|
|
});
|
|
dialogBuilder.show();
|
|
}
|
|
|
|
private void exportCSV() {
|
|
String exportFileName = getUniqueFileName("csv");
|
|
exportFile(null, exportFileName, new TrackerDataHelper(this,
|
|
TrackerDataHelper.CSV_FORMATTER));
|
|
}
|
|
|
|
private void exportKML() {
|
|
String exportFileName = getUniqueFileName(
|
|
LocationManager.NETWORK_PROVIDER + ".kml");
|
|
exportFile(LocationManager.NETWORK_PROVIDER, exportFileName,
|
|
new TrackerDataHelper(this, TrackerDataHelper.KML_FORMATTER));
|
|
exportFileName = getUniqueFileName(
|
|
LocationManager.GPS_PROVIDER + ".kml");
|
|
exportFile(LocationManager.GPS_PROVIDER, exportFileName,
|
|
new TrackerDataHelper(this, TrackerDataHelper.KML_FORMATTER));
|
|
}
|
|
|
|
private void exportFile(String tagFilter,
|
|
String exportFileName,
|
|
TrackerDataHelper trackerData) {
|
|
BufferedWriter exportWriter = null;
|
|
Cursor cursor = trackerData.query(tagFilter);
|
|
try {
|
|
exportWriter = new BufferedWriter(new FileWriter(exportFileName));
|
|
exportWriter.write(trackerData.getOutputHeader());
|
|
|
|
String line = null;
|
|
|
|
while ((line = trackerData.getNextOutput(cursor)) != null) {
|
|
exportWriter.write(line);
|
|
}
|
|
exportWriter.write(trackerData.getOutputFooter());
|
|
Toast.makeText(this, "Successfully exported data to " +
|
|
exportFileName, Toast.LENGTH_SHORT).show();
|
|
|
|
} catch (IOException e) {
|
|
Toast.makeText(this, "Error exporting file: " +
|
|
e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
|
|
|
|
Log.e(LOG_TAG, "Error exporting file", e);
|
|
} finally {
|
|
closeWriter(exportWriter);
|
|
if (cursor != null) {
|
|
cursor.close();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void closeWriter(Writer exportWriter) {
|
|
if (exportWriter != null) {
|
|
try {
|
|
exportWriter.close();
|
|
} catch (IOException e) {
|
|
Log.e(LOG_TAG, "error closing file", e);
|
|
}
|
|
}
|
|
}
|
|
|
|
private String getUniqueFileName(String ext) {
|
|
File dir = new File(Environment.getExternalStorageDirectory() + "/locationtracker");
|
|
if (!dir.exists()) {
|
|
dir.mkdir();
|
|
}
|
|
return dir + "/tracking-" + DateUtils.getCurrentTimestamp() + "." + ext;
|
|
}
|
|
|
|
private void launchSettings() {
|
|
Intent settingsIntent = new Intent();
|
|
settingsIntent.setClass(this, SettingsActivity.class);
|
|
startActivity(settingsIntent);
|
|
}
|
|
}
|