1c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood/* 28ab8b411b81e4581060a31a97a0cb204a803b2e5Mike Lockwood * Copyright (C) 2008 The Android Open Source Project 3c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 4c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 5c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * you may not use this file except in compliance with the License. 6c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * You may obtain a copy of the License at 7c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 8c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 9c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 10c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Unless required by applicable law or agreed to in writing, software 11c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 12c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * See the License for the specific language governing permissions and 14c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * limitations under the License. 15c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 16c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 17191d898468d2f4910a684f429bec518320843744Mike Lockwoodpackage com.android.locationtracker; 18c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 191e47b321dd5977b30f72d49a900b882891347be9Victoria Leaseimport com.android.locationtracker.data.DateUtils; 201e47b321dd5977b30f72d49a900b882891347be9Victoria Leaseimport com.android.locationtracker.data.TrackerDataHelper; 211e47b321dd5977b30f72d49a900b882891347be9Victoria Leaseimport com.android.locationtracker.data.TrackerListHelper; 221e47b321dd5977b30f72d49a900b882891347be9Victoria Lease 23c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.app.AlertDialog; 24c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.app.ListActivity; 25c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.content.DialogInterface; 26c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.content.DialogInterface.OnClickListener; 27c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.content.Intent; 28c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.database.Cursor; 291e47b321dd5977b30f72d49a900b882891347be9Victoria Leaseimport android.location.LocationManager; 30c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.os.Bundle; 318b85dceadf281705a94d7546556fa5969364a658Christian Mehlmauerimport android.os.Environment; 32c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.util.Log; 33c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.view.Menu; 34c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.view.MenuInflater; 35c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.view.MenuItem; 36c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.widget.Toast; 37c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 38c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport java.io.BufferedWriter; 39c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport java.io.File; 40c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport java.io.FileWriter; 41c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport java.io.IOException; 42c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport java.io.Writer; 43c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 44c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood/** 45c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Activity for location tracker service 46c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 47c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Contains facilities for starting and 48c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * stopping location tracker service, as well as displaying the current location 49c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * data 50c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 51c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Future enhancements: 52c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * - export data as dB 53c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * - enable/disable "start service" and "stop service" menu items as 54c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * appropriate 55c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 56c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodpublic class TrackerActivity extends ListActivity { 57c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 58c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String LOG_TAG = "LocationTracker"; 59c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 60c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private TrackerListHelper mDataHelper; 61c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 62c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood /** 63c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Retrieves and displays the currently logged location data from file 64c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 65c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * @param icicle 66c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 67c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood @Override 68c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood protected void onCreate(Bundle icicle) { 69c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood super.onCreate(icicle); 70c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 71c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mDataHelper = new TrackerListHelper(this); 72c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mDataHelper.bindListUI(R.layout.entrylist_item); 73c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 74c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 75c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood /** 76c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Builds the menu 77c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 78c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * @param menu - menu to add items to 79c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 80c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood @Override 81c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public boolean onCreateOptionsMenu(Menu menu) { 82c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood MenuInflater menuInflater = getMenuInflater(); 83c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood menuInflater.inflate(R.menu.menu, menu); 84c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return true; 85c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 86c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 87c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood /** 88c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Handles menu item selection 89c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 90c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * @param item - the selected menu item 91c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 92c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood @Override 93c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public boolean onOptionsItemSelected(MenuItem item) { 94c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood switch (item.getItemId()) { 95c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood case R.id.start_service_menu: { 96c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood startService(new Intent(TrackerActivity.this, 97c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood TrackerService.class)); 98c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood break; 99c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 100c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood case R.id.stop_service_menu: { 101c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood stopService(new Intent(TrackerActivity.this, 102c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood TrackerService.class)); 103c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood break; 104c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 105c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood case R.id.settings_menu: { 106c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood launchSettings(); 107c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood break; 108c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 109c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood case R.id.export_kml: { 110c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood exportKML(); 111c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood break; 112c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 113c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood case R.id.export_csv: { 114c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood exportCSV(); 115c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood break; 116c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 117c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood case R.id.clear_data_menu: { 118c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood clearData(); 119c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood break; 120c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 121c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 122c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return super.onOptionsItemSelected(item); 123c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 124c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 125c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void clearData() { 126c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Runnable clearAction = new Runnable() { 127c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public void run() { 128c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood TrackerDataHelper helper = 129c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood new TrackerDataHelper(TrackerActivity.this); 130c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood helper.deleteAll(); 131c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 132c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood }; 133c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood showConfirm(R.string.delete_confirm, clearAction); 134c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 135c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 136c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void showConfirm(int textId, final Runnable onConfirmAction) { 137c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 138c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood dialogBuilder.setTitle(R.string.confirm_title); 139c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood dialogBuilder.setMessage(textId); 140c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood dialogBuilder.setPositiveButton(android.R.string.ok, 141c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood new OnClickListener() { 142c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public void onClick(DialogInterface dialog, int which) { 143c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood onConfirmAction.run(); 144c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 145c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood }); 146c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood dialogBuilder.setNegativeButton(android.R.string.cancel, 147c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood new OnClickListener() { 148c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public void onClick(DialogInterface dialog, int which) { 149c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood // do nothing 150c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 151c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood }); 152c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood dialogBuilder.show(); 153c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 154c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 155c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void exportCSV() { 156c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String exportFileName = getUniqueFileName("csv"); 157c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood exportFile(null, exportFileName, new TrackerDataHelper(this, 158c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood TrackerDataHelper.CSV_FORMATTER)); 159c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 160c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 161c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void exportKML() { 162c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String exportFileName = getUniqueFileName( 1631e47b321dd5977b30f72d49a900b882891347be9Victoria Lease LocationManager.NETWORK_PROVIDER + ".kml"); 1641e47b321dd5977b30f72d49a900b882891347be9Victoria Lease exportFile(LocationManager.NETWORK_PROVIDER, exportFileName, 1651e47b321dd5977b30f72d49a900b882891347be9Victoria Lease new TrackerDataHelper(this, TrackerDataHelper.KML_FORMATTER)); 1661e47b321dd5977b30f72d49a900b882891347be9Victoria Lease exportFileName = getUniqueFileName( 1671e47b321dd5977b30f72d49a900b882891347be9Victoria Lease LocationManager.GPS_PROVIDER + ".kml"); 1681e47b321dd5977b30f72d49a900b882891347be9Victoria Lease exportFile(LocationManager.GPS_PROVIDER, exportFileName, 169c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood new TrackerDataHelper(this, TrackerDataHelper.KML_FORMATTER)); 170c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 171c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 172c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void exportFile(String tagFilter, 173c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String exportFileName, 174c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood TrackerDataHelper trackerData) { 175c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood BufferedWriter exportWriter = null; 176c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Cursor cursor = trackerData.query(tagFilter); 177c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood try { 178c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood exportWriter = new BufferedWriter(new FileWriter(exportFileName)); 179c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood exportWriter.write(trackerData.getOutputHeader()); 180c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 181c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String line = null; 182c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 183c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood while ((line = trackerData.getNextOutput(cursor)) != null) { 184c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood exportWriter.write(line); 185c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 186c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood exportWriter.write(trackerData.getOutputFooter()); 187c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Toast.makeText(this, "Successfully exported data to " + 188c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood exportFileName, Toast.LENGTH_SHORT).show(); 189c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 190c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } catch (IOException e) { 191c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Toast.makeText(this, "Error exporting file: " + 192c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood e.getLocalizedMessage(), Toast.LENGTH_SHORT).show(); 193c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 194c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Log.e(LOG_TAG, "Error exporting file", e); 195c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } finally { 196c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood closeWriter(exportWriter); 197c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (cursor != null) { 198c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cursor.close(); 199c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 200c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 201c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 202c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 203c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void closeWriter(Writer exportWriter) { 204c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (exportWriter != null) { 205c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood try { 206c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood exportWriter.close(); 207c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } catch (IOException e) { 208c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Log.e(LOG_TAG, "error closing file", e); 209c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 210c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 211c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 212c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 213c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private String getUniqueFileName(String ext) { 2148b85dceadf281705a94d7546556fa5969364a658Christian Mehlmauer File dir = new File(Environment.getExternalStorageDirectory() + "/locationtracker"); 215c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (!dir.exists()) { 216c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood dir.mkdir(); 217c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 2188b85dceadf281705a94d7546556fa5969364a658Christian Mehlmauer return dir + "/tracking-" + DateUtils.getCurrentTimestamp() + "." + ext; 219c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 220c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 221c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void launchSettings() { 222c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Intent settingsIntent = new Intent(); 223c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood settingsIntent.setClass(this, SettingsActivity.class); 224c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood startActivity(settingsIntent); 225c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 226c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood} 227