| /* |
| * 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.data; |
| |
| import android.content.Context; |
| import android.database.Cursor; |
| import android.location.Location; |
| |
| /** |
| * Helper class for writing and retrieving data using the TrackerProvider |
| * content provider |
| * |
| */ |
| public class TrackerDataHelper { |
| |
| private Context mContext; |
| /** formats data output */ |
| protected IFormatter mFormatter; |
| |
| /** formats output as Comma separated value CSV file */ |
| public static final IFormatter CSV_FORMATTER = new CSVFormatter(); |
| /** formats output as KML file */ |
| public static final IFormatter KML_FORMATTER = new KMLFormatter(); |
| /** provides no formatting */ |
| public static final IFormatter NO_FORMATTER = new IFormatter() { |
| public String getFooter() { |
| return ""; |
| } |
| |
| public String getHeader() { |
| return ""; |
| } |
| |
| public String getOutput(TrackerEntry entry) { |
| return ""; |
| } |
| }; |
| |
| /** |
| * Creates instance |
| * |
| * @param context - content context |
| * @param formatter - formats the output from the get*Output* methods |
| */ |
| public TrackerDataHelper(Context context, IFormatter formatter) { |
| mContext = context; |
| mFormatter = formatter; |
| } |
| |
| /** |
| * Creates a instance with no output formatting capabilities. Useful for |
| * clients that require write-only access |
| */ |
| public TrackerDataHelper(Context context) { |
| this(context, NO_FORMATTER); |
| } |
| |
| /** |
| * insert given TrackerEntry into content provider |
| */ |
| void writeEntry(TrackerEntry entry) { |
| mContext.getContentResolver().insert(TrackerProvider.CONTENT_URI, |
| entry.getAsContentValues()); |
| } |
| |
| /** |
| * insert given location into tracker data |
| */ |
| public void writeEntry(Location loc, float distFromNetLoc) { |
| writeEntry(TrackerEntry.createEntry(loc, distFromNetLoc)); |
| } |
| |
| /** |
| * insert given log message into tracker data |
| */ |
| public void writeEntry(String tag, String logMsg) { |
| writeEntry(TrackerEntry.createEntry(tag, logMsg)); |
| } |
| |
| /** |
| * Deletes all tracker entries |
| */ |
| public void deleteAll() { |
| mContext.getContentResolver().delete(TrackerProvider.CONTENT_URI, null, |
| null); |
| } |
| |
| /** |
| * Query tracker data, filtering by given tag |
| * |
| * @param tag |
| * @return Cursor to data |
| */ |
| public Cursor query(String tag, int limit) { |
| String selection = (tag == null ? null : TrackerEntry.TAG + "=?"); |
| String[] selectionArgs = (tag == null ? null : new String[] {tag}); |
| Cursor cursor = mContext.getContentResolver().query( |
| TrackerProvider.CONTENT_URI, TrackerEntry.ATTRIBUTES, |
| selection, selectionArgs, null); |
| if (cursor == null) { |
| return cursor; |
| } |
| int pos = (cursor.getCount() < limit ? 0 : cursor.getCount() - limit); |
| cursor.moveToPosition(pos); |
| return cursor; |
| } |
| |
| /** |
| * Retrieves a cursor that starts at the last limit rows |
| * |
| * @param limit |
| * @return a cursor, null if bad things happened |
| */ |
| public Cursor query(int limit) { |
| return query(null, limit); |
| } |
| |
| /** |
| * Query tracker data, filtering by given tag. mo limit to number of rows |
| * returned |
| * |
| * @param tag |
| * @return Cursor to data |
| */ |
| public Cursor query(String tag) { |
| return query(tag, Integer.MAX_VALUE); |
| } |
| |
| /** |
| * Returns the output header particular to the associated formatter |
| */ |
| public String getOutputHeader() { |
| return mFormatter.getHeader(); |
| } |
| |
| /** |
| * Returns the output footer particular to the associated formatter |
| */ |
| public String getOutputFooter() { |
| return mFormatter.getFooter(); |
| } |
| |
| /** |
| * Helper method which converts row referenced by given cursor to a string |
| * output |
| * |
| * @param cursor |
| * @return CharSequence output, null if given cursor is invalid or no more |
| * data |
| */ |
| public String getNextOutput(Cursor cursor) { |
| if (cursor == null || cursor.isAfterLast()) { |
| return null; |
| } |
| String output = mFormatter.getOutput(TrackerEntry.createEntry(cursor)); |
| cursor.moveToNext(); |
| return output; |
| } |
| } |