1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17 package com.android.locationtracker.data; 18 19 import android.content.Context; 20 import android.database.Cursor; 21 import android.location.Location; 22 23 /** 24 * Helper class for writing and retrieving data using the TrackerProvider 25 * content provider 26 * 27 */ 28 public class TrackerDataHelper { 29 30 private Context mContext; 31 /** formats data output */ 32 protected IFormatter mFormatter; 33 34 /** formats output as Comma separated value CSV file */ 35 public static final IFormatter CSV_FORMATTER = new CSVFormatter(); 36 /** formats output as KML file */ 37 public static final IFormatter KML_FORMATTER = new KMLFormatter(); 38 /** provides no formatting */ 39 public static final IFormatter NO_FORMATTER = new IFormatter() { 40 public String getFooter() { 41 return ""; 42 } 43 44 public String getHeader() { 45 return ""; 46 } 47 48 public String getOutput(TrackerEntry entry) { 49 return ""; 50 } 51 }; 52 53 /** 54 * Creates instance 55 * 56 * @param context - content context 57 * @param formatter - formats the output from the get*Output* methods 58 */ TrackerDataHelper(Context context, IFormatter formatter)59 public TrackerDataHelper(Context context, IFormatter formatter) { 60 mContext = context; 61 mFormatter = formatter; 62 } 63 64 /** 65 * Creates a instance with no output formatting capabilities. Useful for 66 * clients that require write-only access 67 */ TrackerDataHelper(Context context)68 public TrackerDataHelper(Context context) { 69 this(context, NO_FORMATTER); 70 } 71 72 /** 73 * insert given TrackerEntry into content provider 74 */ writeEntry(TrackerEntry entry)75 void writeEntry(TrackerEntry entry) { 76 mContext.getContentResolver().insert(TrackerProvider.CONTENT_URI, 77 entry.getAsContentValues()); 78 } 79 80 /** 81 * insert given location into tracker data 82 */ writeEntry(Location loc, float distFromNetLoc)83 public void writeEntry(Location loc, float distFromNetLoc) { 84 writeEntry(TrackerEntry.createEntry(loc, distFromNetLoc)); 85 } 86 87 /** 88 * insert given log message into tracker data 89 */ writeEntry(String tag, String logMsg)90 public void writeEntry(String tag, String logMsg) { 91 writeEntry(TrackerEntry.createEntry(tag, logMsg)); 92 } 93 94 /** 95 * Deletes all tracker entries 96 */ deleteAll()97 public void deleteAll() { 98 mContext.getContentResolver().delete(TrackerProvider.CONTENT_URI, null, 99 null); 100 } 101 102 /** 103 * Query tracker data, filtering by given tag 104 * 105 * @param tag 106 * @return Cursor to data 107 */ query(String tag, int limit)108 public Cursor query(String tag, int limit) { 109 String selection = (tag == null ? null : TrackerEntry.TAG + "=?"); 110 String[] selectionArgs = (tag == null ? null : new String[] {tag}); 111 Cursor cursor = mContext.getContentResolver().query( 112 TrackerProvider.CONTENT_URI, TrackerEntry.ATTRIBUTES, 113 selection, selectionArgs, null); 114 if (cursor == null) { 115 return cursor; 116 } 117 int pos = (cursor.getCount() < limit ? 0 : cursor.getCount() - limit); 118 cursor.moveToPosition(pos); 119 return cursor; 120 } 121 122 /** 123 * Retrieves a cursor that starts at the last limit rows 124 * 125 * @param limit 126 * @return a cursor, null if bad things happened 127 */ query(int limit)128 public Cursor query(int limit) { 129 return query(null, limit); 130 } 131 132 /** 133 * Query tracker data, filtering by given tag. mo limit to number of rows 134 * returned 135 * 136 * @param tag 137 * @return Cursor to data 138 */ query(String tag)139 public Cursor query(String tag) { 140 return query(tag, Integer.MAX_VALUE); 141 } 142 143 /** 144 * Returns the output header particular to the associated formatter 145 */ getOutputHeader()146 public String getOutputHeader() { 147 return mFormatter.getHeader(); 148 } 149 150 /** 151 * Returns the output footer particular to the associated formatter 152 */ getOutputFooter()153 public String getOutputFooter() { 154 return mFormatter.getFooter(); 155 } 156 157 /** 158 * Helper method which converts row referenced by given cursor to a string 159 * output 160 * 161 * @param cursor 162 * @return CharSequence output, null if given cursor is invalid or no more 163 * data 164 */ getNextOutput(Cursor cursor)165 public String getNextOutput(Cursor cursor) { 166 if (cursor == null || cursor.isAfterLast()) { 167 return null; 168 } 169 String output = mFormatter.getOutput(TrackerEntry.createEntry(cursor)); 170 cursor.moveToNext(); 171 return output; 172 } 173 } 174