Commit 69e1f5db authored by Bartek Fabiszewski's avatar Bartek Fabiszewski
Browse files

When saving location mark whether it is trackpoint or waypoint.

parent 470b2a4d
Loading
Loading
Loading
Loading
+48 −5
Original line number Diff line number Diff line
@@ -104,8 +104,9 @@ public class DbAccess implements AutoCloseable {
     * @param loc      Location
     * @param comment  Comment
     * @param imageUri Image URI
     * @param isWaypoint Waypoint if true, trackpoint otherwise
     */
    private void writeLocation(@NonNull Location loc, @Nullable String comment, @Nullable String imageUri) {
    private void writeLocation(@NonNull Location loc, @Nullable String comment, @Nullable String imageUri, boolean isWaypoint) {
        if (Logger.DEBUG) {
            Log.d(TAG, "[writeLocation]");
        }
@@ -132,6 +133,9 @@ public class DbAccess implements AutoCloseable {
        if (imageUri != null && !imageUri.isEmpty()) {
            values.put(DbContract.Positions.COLUMN_IMAGE_URI, imageUri);
        }
        if (isWaypoint) {
            values.put(DbContract.Positions.COLUMN_WAYPOINT, 1);
        }
        db.insert(DbContract.Positions.TABLE_NAME, null, values);
    }

@@ -141,7 +145,20 @@ public class DbAccess implements AutoCloseable {
     * @param location Location
     */
    public static void writeLocation(@NonNull Context context, @NonNull Location location) {
        writeLocation(context, location, null, null);
        writeLocation(context, location, null, null, false);
    }

    /**
     * Write waypoint to database.
     *
     * @param context Context
     * @param location Location
     * @param comment Comment
     * @param imageUri Image URI
     */
    public static void writeWaypoint(@NonNull Context context, @NonNull Location location, @Nullable String comment, @Nullable String imageUri) {
        writeLocation(context, location, comment, imageUri, true);

    }

    /**
@@ -151,10 +168,11 @@ public class DbAccess implements AutoCloseable {
     * @param location Location
     * @param comment Comment
     * @param imageUri Image URI
     * @param isWaypoint Waypoint if true, trackpoint otherwise
     */
    public static void writeLocation(@NonNull Context context, @NonNull Location location, @Nullable String comment, @Nullable String imageUri) {
    public static void writeLocation(@NonNull Context context, @NonNull Location location, @Nullable String comment, @Nullable String imageUri, boolean isWaypoint) {
        try (DbAccess dbAccess = getOpenInstance(context)) {
            dbAccess.writeLocation(location, comment, imageUri);
            dbAccess.writeLocation(location, comment, imageUri, isWaypoint);
        }
    }

@@ -210,6 +228,21 @@ public class DbAccess implements AutoCloseable {
                DbContract.Positions.COLUMN_TIME);
    }

    /**
     * Get result set containing waypoints.
     *
     * @return Result set
     */
    @NonNull
    public Cursor getWaypoints() {
        return db.query(DbContract.Positions.TABLE_NAME,
                new String[]{ "*" },
                DbContract.Positions.COLUMN_WAYPOINT + " = ?",
                new String[]{ "1" },
                null, null,
                DbContract.Positions.COLUMN_TIME);
    }

    /**
     * Get error message stored in track table.
     *
@@ -268,7 +301,7 @@ public class DbAccess implements AutoCloseable {
     */
    public void setSynced(@NonNull Context context, int id) {
        ContentValues values = new ContentValues();
        values.put(DbContract.Positions.COLUMN_SYNCED, "1");
        values.put(DbContract.Positions.COLUMN_SYNCED, 1);
        db.update(DbContract.Positions.TABLE_NAME,
                values,
                DbContract.Positions._ID + " = ?",
@@ -760,6 +793,16 @@ public class DbAccess implements AutoCloseable {
        return isColumnNotNull(cursor, DbContract.Positions.COLUMN_COMMENT);
    }

    /**
     * Check if cursor data is waypoint
     *
     * @param cursor Cursor
     * @return True if it is waypoint
     */
    public static boolean isWaypoint(@NonNull Cursor cursor) {
        return cursor.getInt(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_WAYPOINT)) == 1;
    }

    /**
     * Get latitude from positions cursor
     *
+2 −0
Original line number Diff line number Diff line
@@ -34,9 +34,11 @@ public final class DbContract {
        static final String COLUMN_COMMENT = "comment";
        static final String COLUMN_IMAGE_URI = "imageUri";
        static final String COLUMN_SYNCED = "synced";
        static final String COLUMN_WAYPOINT = "waypoint";

        static final String INDEX_TIME = "timeIdx";
        static final String INDEX_SYNCED = "syncedIdx";
        static final String INDEX_WAYPOINT = "waypointIdx";
    }

    /** Track table */
+27 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ class DbHelper extends SQLiteOpenHelper {

    private static final String TAG = DbHelper.class.getSimpleName();

    private static final int DATABASE_VERSION = 3;
    private static final int DATABASE_VERSION = 4;
    private static final String DATABASE_NAME = "ulogger.db";
    private static final String BACKUP_SUFFIX = "_backup";

@@ -46,6 +46,7 @@ class DbHelper extends SQLiteOpenHelper {
            DbContract.Positions.COLUMN_PROVIDER + " TEXT," +
            DbContract.Positions.COLUMN_COMMENT + " TEXT DEFAULT NULL," +
            DbContract.Positions.COLUMN_IMAGE_URI + " TEXT DEFAULT NULL," +
            DbContract.Positions.COLUMN_WAYPOINT + " INTEGER DEFAULT 0," +
            DbContract.Positions.COLUMN_SYNCED + " INTEGER DEFAULT 0)";

    private static final String SQL_POS_CREATE_INDEX_SYNCED =
@@ -56,6 +57,10 @@ class DbHelper extends SQLiteOpenHelper {
            "CREATE INDEX " + DbContract.Positions.INDEX_TIME + " " +
            "ON " + DbContract.Positions.TABLE_NAME +  "(" + DbContract.Positions.COLUMN_TIME + ")";

    private static final String SQL_POS_CREATE_INDEX_WAYPOINT =
            "CREATE INDEX " + DbContract.Positions.INDEX_WAYPOINT + " " +
                    "ON " + DbContract.Positions.TABLE_NAME +  "(" + DbContract.Positions.COLUMN_WAYPOINT + ")";

    private static final String SQL_POS_DROP_INDEX_SYNCED =
            "DROP INDEX IF EXISTS " + DbContract.Positions.INDEX_SYNCED;

@@ -82,6 +87,10 @@ class DbHelper extends SQLiteOpenHelper {
            "ALTER TABLE " + DbContract.Positions.TABLE_NAME + " ADD COLUMN " +
            DbContract.Positions.COLUMN_COMMENT + " TEXT DEFAULT NULL";

    private static final String SQL_POS_ADD_COLUMN_WAYPOINT =
            "ALTER TABLE " + DbContract.Positions.TABLE_NAME + " ADD COLUMN " +
                    DbContract.Positions.COLUMN_WAYPOINT + " INTEGER DEFAULT 0";

    private static final String SQL_TRACK_ADD_COLUMN_ERROR =
            "ALTER TABLE " + DbContract.Track.TABLE_NAME + " ADD COLUMN " +
            DbContract.Track.COLUMN_ERROR + " TEXT DEFAULT NULL";
@@ -153,6 +162,7 @@ class DbHelper extends SQLiteOpenHelper {
        db.execSQL(SQL_CREATE_POSITIONS);
        db.execSQL(SQL_POS_CREATE_INDEX_TIME);
        db.execSQL(SQL_POS_CREATE_INDEX_SYNCED);
        db.execSQL(SQL_POS_CREATE_INDEX_WAYPOINT);
        db.execSQL(SQL_CREATE_TRACK);
    }

@@ -172,6 +182,9 @@ class DbHelper extends SQLiteOpenHelper {
            case 2:
                migrateToVersion3(db);
                break;
            case 3:
                migrateToVersion4(db);
                break;
            default:
                dropAndCreate(db);
        }
@@ -226,6 +239,19 @@ class DbHelper extends SQLiteOpenHelper {
        db.execSQL(SQL_DROP_POSITIONS_BACKUP);
    }

    /**
     * Migrates base from version 3 to 4
     *
     * @param db Database handle
     */
    private void migrateToVersion4(@NonNull SQLiteDatabase db) {
        if (Logger.DEBUG) { Log.d(TAG, "[migrateToVersion4]"); }

        // only affects positions schema
        db.execSQL(SQL_POS_ADD_COLUMN_WAYPOINT);
        db.execSQL(SQL_POS_CREATE_INDEX_WAYPOINT);
    }

    /**
     * On downgrade just drop and recreate tables
     * Warning: data will be lost
+1 −1
Original line number Diff line number Diff line
@@ -342,7 +342,7 @@ public class WaypointFragment extends Fragment implements LoggerTask.LoggerTaskC
            }
            String comment = commentEditText.getText().toString();
            String uri = (photoUri == null) ? null : photoUri.toString();
            DbAccess.writeLocation(view.getContext(), location, comment, uri);
            DbAccess.writeWaypoint(view.getContext(), location, comment, uri);
            photoUri = null;
            if (Logger.DEBUG) { Log.d(TAG, "[saveWaypoint: " + location + ", " + comment + ", " + uri + "]"); }
        }