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"); you may not 5c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * use this file except in compliance with the License. You may obtain a copy of 6c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 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, WITHOUT 12c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * License for the specific language governing permissions and limitations under 14c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * the License. 15c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 16c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 17191d898468d2f4910a684f429bec518320843744Mike Lockwoodpackage com.android.locationtracker.data; 18c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 19c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.content.ContentValues; 20c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.database.Cursor; 21c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.location.Location; 22c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 23c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 24c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood/** 25c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Class that holds a tracker entry. An entry can be either a valid location, or 26c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * a simple log msg 27c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 28c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * It provides a concrete data structure to represent data stored in the 29c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * TrackerProvider 30c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 31c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodclass TrackerEntry { 32c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 33c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String TIMESTAMP = "Timestamp"; 34c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String TAG = "Tag"; 35c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String ENTRY_TYPE = "Type"; 36c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 37c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private Location mLocation; 38c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private float mDistFromNetLocation; 39c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private String mLogMsg; 40c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 41c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String ID_COL = "_id"; 42c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String ACCURACY = "Accuracy"; 43c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String LATITUDE = "Latitude"; 44c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String LONGITUDE = "Longitude"; 45c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String ALTITUDE = "Altitude"; 46c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String SPEED = "Speed"; 47c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String BEARING = "Bearing"; 48c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String DIST_NET_LOCATION = "DistFromNetLocation"; 49c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String LOC_TIME = "LocationTime"; 50c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String DEBUG_INFO = "DebugInfo"; 51c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 52c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String STRING_DATA = "STRING"; 53c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String INT_DATA = "INTEGER"; 54c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String REAL_DATA = "REAL"; 55c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String BLOB_DATA = "BLOB"; 56c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 57c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String[] ATTRIBUTES = { 58c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood ID_COL, TIMESTAMP, TAG, ENTRY_TYPE, ACCURACY, LATITUDE, LONGITUDE, 59c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood ALTITUDE, SPEED, BEARING, DIST_NET_LOCATION, LOC_TIME, DEBUG_INFO}; 60c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static final String[] ATTRIBUTES_DATA_TYPE = { 61c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood INT_DATA + " PRIMARY KEY", STRING_DATA, STRING_DATA, STRING_DATA, 62c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood REAL_DATA, REAL_DATA, REAL_DATA, REAL_DATA, REAL_DATA, REAL_DATA, 63c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood REAL_DATA, INT_DATA, STRING_DATA}; 64c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 65c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood // location extra keys used to retrieve debug info 66c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private static final String NETWORK_LOCATION_SOURCE_KEY = 67c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood "networkLocationSource"; 68c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private static final String NETWORK_LOCATION_TYPE_KEY = 69c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood "networkLocationType"; 70c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private static final String[] LOCATION_DEBUG_KEYS = { 71c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood NETWORK_LOCATION_SOURCE_KEY, NETWORK_LOCATION_TYPE_KEY}; 72c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 73c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood enum EntryType { 74c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood LOCATION_TYPE, LOG_TYPE 75c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 76c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 77c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private String mTimestamp; 78c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private String mTag; 79c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private EntryType mType; 80c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 81c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private TrackerEntry(String tag, EntryType type) { 82c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mType = type; 83c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mTag = tag; 84c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mLocation = null; 85c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 86c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 87c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private TrackerEntry(Location loc) { 88c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood this(loc.getProvider(), EntryType.LOCATION_TYPE); 89c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mLocation = new Location(loc); 90c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 91c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 92c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood /** 93c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Creates a TrackerEntry from a Location 94c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 95c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static TrackerEntry createEntry(Location loc, float distFromNetLocation) { 96c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood TrackerEntry entry = new TrackerEntry(loc); 97c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 98c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String timestampVal = DateUtils.getCurrentKMLTimestamp(); 99c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood entry.setTimestamp(timestampVal); 100c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood entry.setDistFromNetLocation(distFromNetLocation); 101c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return entry; 102c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 103c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 104c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood /** 105c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Creates a TrackerEntry from a log msg 106c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 107c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static TrackerEntry createEntry(String tag, String msg) { 108c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood TrackerEntry entry = new TrackerEntry(tag, EntryType.LOG_TYPE); 109c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String timestampVal = DateUtils.getCurrentKMLTimestamp(); 110c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood entry.setTimestamp(timestampVal); 111c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood entry.setLogMsg(msg); 112c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return entry; 113c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 114c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 115c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void setTimestamp(String timestamp) { 116c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mTimestamp = timestamp; 117c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 118c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 119c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood EntryType getType() { 120c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return mType; 121c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 122c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 123c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void setDistFromNetLocation(float distFromNetLocation) { 124c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mDistFromNetLocation = distFromNetLocation; 125c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 126c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 127c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void setLogMsg(String msg) { 128c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mLogMsg = msg; 129c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 130c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 131c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private void setLocation(Location location) { 132c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mLocation = location; 133c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 134c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 135c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String getTimestamp() { 136c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return mTimestamp; 137c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 138c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 139c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String getTag() { 140c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return mTag; 141c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 142c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 143c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Location getLocation() { 144c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return mLocation; 145c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 146c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 147c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String getLogMsg() { 148c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return mLogMsg; 149c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 150c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 151c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood float getDistFromNetLocation() { 152c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return mDistFromNetLocation; 153c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 154c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 155c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static void buildCreationString(StringBuilder builder) { 156c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (ATTRIBUTES.length != ATTRIBUTES_DATA_TYPE.length) { 157c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood throw new IllegalArgumentException( 158c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood "Attribute length does not match data type length"); 159c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 160c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood for (int i = 0; i < ATTRIBUTES_DATA_TYPE.length; i++) { 161c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (i != 0) { 162c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.append(", "); 163c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 164c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.append(String.format("%s %s", ATTRIBUTES[i], 165c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood ATTRIBUTES_DATA_TYPE[i])); 166c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 167c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 168c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 169c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood ContentValues getAsContentValues() { 170c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood ContentValues cValues = new ContentValues(ATTRIBUTES.length); 171c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(TIMESTAMP, mTimestamp); 172c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(TAG, mTag); 173c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(ENTRY_TYPE, mType.toString()); 174c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (mType == EntryType.LOCATION_TYPE) { 175c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(LATITUDE, mLocation.getLatitude()); 176c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(LONGITUDE, mLocation.getLongitude()); 177c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (mLocation.hasAccuracy()) { 178c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(ACCURACY, mLocation.getAccuracy()); 179c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 180c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (mLocation.hasAltitude()) { 181c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(ALTITUDE, mLocation.getAltitude()); 182c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 183c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (mLocation.hasSpeed()) { 184c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(SPEED, mLocation.getSpeed()); 185c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 186c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (mLocation.hasBearing()) { 187c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(BEARING, mLocation.getBearing()); 188c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 189c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(DIST_NET_LOCATION, mDistFromNetLocation); 190c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(LOC_TIME, mLocation.getTime()); 191c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood StringBuilder debugBuilder = new StringBuilder(""); 192c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (mLocation.getExtras() != null) { 193c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood for (String key : LOCATION_DEBUG_KEYS) { 194c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Object val = mLocation.getExtras().get(key); 195c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (val != null) { 196c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood debugBuilder.append(String.format("%s=%s; ", key, val 197c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood .toString())); 198c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 199c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 200c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 201c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(DEBUG_INFO, debugBuilder.toString()); 202c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } else { 203c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood cValues.put(DEBUG_INFO, mLogMsg); 204c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 205c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return cValues; 206c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 207c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 208c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood static TrackerEntry createEntry(Cursor cursor) { 209c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String timestamp = cursor.getString(cursor.getColumnIndex(TIMESTAMP)); 210c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String tag = cursor.getString(cursor.getColumnIndex(TAG)); 211c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood String sType = cursor.getString(cursor.getColumnIndex(ENTRY_TYPE)); 212c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood TrackerEntry entry = new TrackerEntry(tag, EntryType.valueOf(sType)); 213c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood entry.setTimestamp(timestamp); 214c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (entry.getType() == EntryType.LOCATION_TYPE) { 215c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Location location = new Location(tag); 216c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood location.setLatitude(cursor.getFloat(cursor 217c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood .getColumnIndexOrThrow(LATITUDE))); 218c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood location.setLongitude(cursor.getFloat(cursor 219c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood .getColumnIndexOrThrow(LONGITUDE))); 220c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 221c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Float accuracy = getNullableFloat(cursor, ACCURACY); 222c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (accuracy != null) { 223c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood location.setAccuracy(accuracy); 224c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 225c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Float altitude = getNullableFloat(cursor, ALTITUDE); 226c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (altitude != null) { 227c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood location.setAltitude(altitude); 228c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 229c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Float bearing = getNullableFloat(cursor, BEARING); 230c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (bearing != null) { 231c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood location.setBearing(bearing); 232c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 233c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Float speed = getNullableFloat(cursor, SPEED); 234c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (speed != null) { 235c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood location.setSpeed(speed); 236c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 237c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood location.setTime(cursor.getLong(cursor.getColumnIndex(LOC_TIME))); 238c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood entry.setLocation(location); 239c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 240c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood entry.setLogMsg(cursor.getString(cursor.getColumnIndex(DEBUG_INFO))); 241c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 242c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return entry; 243c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 244c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 245c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private static Float getNullableFloat(Cursor cursor, String colName) { 246c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Float retValue = null; 247c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood int colIndex = cursor.getColumnIndexOrThrow(colName); 248c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (!cursor.isNull(colIndex)) { 249c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood retValue = cursor.getFloat(colIndex); 250c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 251c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return retValue; 252c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 253c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood} 254