Loading app/build.gradle +3 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,9 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'junit:junit:4.12' implementation 'androidx.appcompat:appcompat:1.1.0-beta01' implementation 'androidx.preference:preference:1.1.0-beta01' implementation 'androidx.exifinterface:exifinterface:1.0.0' testImplementation 'junit:junit:4.12' implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0' } app/src/main/AndroidManifest.xml +12 −16 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- ~ Copyright (c) 2017 Bartek Fabiszewski ~ http://www.fabiszewski.net ~ ~ This file is part of μlogger-android. ~ Licensed under GPL, either version 3, or any later. ~ See <http://www.gnu.org/licenses/> --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="net.fabiszewski.ulogger"> Loading @@ -15,35 +6,39 @@ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Write camera images --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- For auto start --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- For web sync retries --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- For foreground services API >= 28 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- Needed if app targets API >= 21 --> <!-- For location API >= 21 --> <uses-feature android:name="android.hardware.location.gps" /> <uses-feature android:name="android.hardware.location.network" /> <!-- Todo: attach camera image to position --> <!-- <uses-feature android:name="android.hardware.camera" android:required="false" /> --> <!-- For attaching images to waypoints --> <uses-feature android:name="android.hardware.camera" android:required="false" /> <application android:allowBackup="true" android:fullBackupContent="@xml/backup" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:supportsRtl="true" android:theme="@style/AppTheme" android:networkSecurityConfig="@xml/network_security_config" tools:ignore="UnusedAttribute"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".WaypointActivity" android:parentActivityName=".MainActivity" /> <activity android:name=".SettingsActivity" /> <service Loading @@ -54,10 +49,10 @@ <service android:name=".WebSyncService" android:exported="false" /> <service android:name=".GpxExportService" android:exported="false" /> <service android:name=".LoggerSingleService" /> <receiver android:name=".RestartBroadcastReceiver" Loading @@ -67,6 +62,7 @@ <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> Loading app/src/main/java/net/fabiszewski/ulogger/DbAccess.java +17 −1 Original line number Diff line number Diff line Loading @@ -76,6 +76,17 @@ class DbAccess { * @param loc Location */ void writeLocation(Location loc) { writeLocation(loc, null, null); } /** * Write location to database. * * @param loc Location * @param comment Comment * @param imageUri Image URI */ void writeLocation(Location loc, String comment, String imageUri) { if (Logger.DEBUG) { Log.d(TAG, "[writeLocation]"); } ContentValues values = new ContentValues(); values.put(DbContract.Positions.COLUMN_TIME, loc.getTime() / 1000); Loading @@ -94,7 +105,12 @@ class DbAccess { values.put(DbContract.Positions.COLUMN_ACCURACY, loc.getAccuracy()); } values.put(DbContract.Positions.COLUMN_PROVIDER, loc.getProvider()); if (comment != null && !comment.isEmpty()) { values.put(DbContract.Positions.COLUMN_COMMENT, comment); } if (imageUri != null && !imageUri.isEmpty()) { values.put(DbContract.Positions.COLUMN_IMAGE_URI, imageUri); } db.insert(DbContract.Positions.TABLE_NAME, null, values); } Loading app/src/main/java/net/fabiszewski/ulogger/DbContract.java +16 −14 Original line number Diff line number Diff line Loading @@ -22,23 +22,25 @@ final class DbContract { /** Positions table */ public static class Positions implements BaseColumns { public static final String TABLE_NAME = "positions"; public static final String COLUMN_TIME = "time"; public static final String COLUMN_LONGITUDE = "longitude"; public static final String COLUMN_LATITUDE = "latitude"; public static final String COLUMN_ALTITUDE = "altitude"; public static final String COLUMN_ACCURACY = "accuracy"; public static final String COLUMN_SPEED = "speed"; public static final String COLUMN_BEARING = "bearing"; public static final String COLUMN_PROVIDER = "provider"; public static final String COLUMN_SYNCED = "synced"; public static final String COLUMN_ERROR = "error"; static final String TABLE_NAME = "positions"; static final String COLUMN_TIME = "time"; static final String COLUMN_LONGITUDE = "longitude"; static final String COLUMN_LATITUDE = "latitude"; static final String COLUMN_ALTITUDE = "altitude"; static final String COLUMN_ACCURACY = "accuracy"; static final String COLUMN_SPEED = "speed"; static final String COLUMN_BEARING = "bearing"; static final String COLUMN_PROVIDER = "provider"; static final String COLUMN_COMMENT = "comment"; static final String COLUMN_IMAGE_URI = "imageUri"; static final String COLUMN_SYNCED = "synced"; static final String COLUMN_ERROR = "error"; } /** Track table */ public static class Track { public static final String TABLE_NAME = "track"; public static final String COLUMN_ID = "id"; public static final String COLUMN_NAME = "name"; static final String TABLE_NAME = "track"; static final String COLUMN_ID = "id"; static final String COLUMN_NAME = "name"; } } app/src/main/java/net/fabiszewski/ulogger/DbHelper.java +82 −10 Original line number Diff line number Diff line Loading @@ -22,8 +22,9 @@ class DbHelper extends SQLiteOpenHelper { private static DbHelper sInstance; private static final int DATABASE_VERSION = 1; private static final int DATABASE_VERSION = 2; private static final String DATABASE_NAME = "ulogger.db"; private static final String BACKUP_SUFFIX = "_backup"; private static final String SQL_CREATE_POSITIONS = "CREATE TABLE " + DbContract.Positions.TABLE_NAME + " (" + Loading @@ -36,18 +37,61 @@ class DbHelper extends SQLiteOpenHelper { DbContract.Positions.COLUMN_SPEED + " TEXT DEFAULT NULL," + DbContract.Positions.COLUMN_ACCURACY + " TEXT DEFAULT NULL," + DbContract.Positions.COLUMN_PROVIDER + " TEXT," + DbContract.Positions.COLUMN_COMMENT + " TEXT DEFAULT NULL," + DbContract.Positions.COLUMN_IMAGE_URI + " TEXT DEFAULT NULL," + DbContract.Positions.COLUMN_SYNCED + " INTEGER DEFAULT 0," + DbContract.Positions.COLUMN_ERROR + " TEXT DEFAULT NULL)"; private static final String SQL_CREATE_INDEX_SYNCED = "CREATE INDEX syncedIdx ON " + DbContract.Positions.TABLE_NAME + "(" + DbContract.Positions.COLUMN_SYNCED + ")"; private static final String SQL_CREATE_TRACK = "CREATE TABLE " + DbContract.Track.TABLE_NAME + " (" + DbContract.Track.COLUMN_ID + " INTEGER DEFAULT NULL," + DbContract.Track.COLUMN_NAME + " TEXT)"; private static final String SQL_DELETE_POSITIONS = private static final String SQL_DROP_POSITIONS = "DROP TABLE IF EXISTS " + DbContract.Positions.TABLE_NAME; private static final String SQL_DELETE_TRACK = private static final String SQL_DROP_TRACK = "DROP TABLE IF EXISTS " + DbContract.Track.TABLE_NAME; private static final String SQL_ADD_COLUMN_COMMENT = "ALTER TABLE " + DbContract.Positions.TABLE_NAME + " ADD COLUMN " + DbContract.Positions.COLUMN_IMAGE_URI + " TEXT DEFAULT NULL"; private static final String SQL_ADD_COLUMN_IMAGE_URI = "ALTER TABLE " + DbContract.Positions.TABLE_NAME + " ADD COLUMN " + DbContract.Positions.COLUMN_COMMENT + " TEXT DEFAULT NULL"; private static final String SQL_RENAME_POSITIONS_V1 = "ALTER TABLE " + DbContract.Positions.TABLE_NAME + " " + "RENAME TO " + DbContract.Positions.TABLE_NAME + BACKUP_SUFFIX; private static final String SQL_INSERT_FROM_BACKUP_V1 = "INSERT INTO " + DbContract.Positions.TABLE_NAME + " (" + DbContract.Positions.COLUMN_TIME + "," + DbContract.Positions.COLUMN_LATITUDE + "," + DbContract.Positions.COLUMN_LONGITUDE + "," + DbContract.Positions.COLUMN_ALTITUDE + "," + DbContract.Positions.COLUMN_BEARING + "," + DbContract.Positions.COLUMN_SPEED + "," + DbContract.Positions.COLUMN_ACCURACY + "," + DbContract.Positions.COLUMN_PROVIDER + "," + DbContract.Positions.COLUMN_SYNCED + "," + DbContract.Positions.COLUMN_ERROR + ") " + "SELECT " + DbContract.Positions.COLUMN_TIME + "," + DbContract.Positions.COLUMN_LATITUDE + "," + DbContract.Positions.COLUMN_LONGITUDE + "," + DbContract.Positions.COLUMN_ALTITUDE + "," + DbContract.Positions.COLUMN_BEARING + "," + DbContract.Positions.COLUMN_SPEED + "," + DbContract.Positions.COLUMN_ACCURACY + "," + DbContract.Positions.COLUMN_PROVIDER + "," + DbContract.Positions.COLUMN_SYNCED + "," + DbContract.Positions.COLUMN_ERROR + " " + "FROM " + DbContract.Positions.TABLE_NAME + BACKUP_SUFFIX; private static final String SQL_DROP_POSITIONS_BACKUP = "DROP TABLE IF EXISTS " + DbContract.Positions.TABLE_NAME + BACKUP_SUFFIX; /** * Private constructor * Loading Loading @@ -77,28 +121,56 @@ class DbHelper extends SQLiteOpenHelper { */ public void onCreate(SQLiteDatabase db) { db.execSQL(SQL_CREATE_POSITIONS); db.execSQL(SQL_CREATE_INDEX_SYNCED); db.execSQL(SQL_CREATE_TRACK); } /** * On upgrade delete all tables, call create * On upgrade * @param db Database handle * @param oldVersion Old version number * @param newVersion New version number */ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(SQL_DELETE_POSITIONS); db.execSQL(SQL_DELETE_TRACK); if (oldVersion == 1 && newVersion == 2) { migrateToVersion2(db); } else { dropAndCreate(db); } } private void dropAndCreate(SQLiteDatabase db) { db.execSQL(SQL_DROP_POSITIONS); db.execSQL(SQL_DROP_TRACK); onCreate(db); } private void migrateToVersion2(SQLiteDatabase db) { // only affects positions schema db.execSQL(SQL_ADD_COLUMN_COMMENT); db.execSQL(SQL_ADD_COLUMN_IMAGE_URI); db.execSQL(SQL_CREATE_INDEX_SYNCED); } /** * On downgrade behave as on upgrade * On downgrade * @param db Database handle * @param oldVersion Old version number * @param newVersion New version number */ public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { onUpgrade(db, oldVersion, newVersion); if (oldVersion == 2 && newVersion == 1) { downgradeToVersion1(db); } else { dropAndCreate(db); } } private void downgradeToVersion1(SQLiteDatabase db) { db.execSQL(SQL_RENAME_POSITIONS_V1); db.execSQL(SQL_CREATE_POSITIONS); db.execSQL(SQL_INSERT_FROM_BACKUP_V1); db.execSQL(SQL_DROP_POSITIONS_BACKUP); } } Loading
app/build.gradle +3 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,9 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'junit:junit:4.12' implementation 'androidx.appcompat:appcompat:1.1.0-beta01' implementation 'androidx.preference:preference:1.1.0-beta01' implementation 'androidx.exifinterface:exifinterface:1.0.0' testImplementation 'junit:junit:4.12' implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0' }
app/src/main/AndroidManifest.xml +12 −16 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- ~ Copyright (c) 2017 Bartek Fabiszewski ~ http://www.fabiszewski.net ~ ~ This file is part of μlogger-android. ~ Licensed under GPL, either version 3, or any later. ~ See <http://www.gnu.org/licenses/> --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="net.fabiszewski.ulogger"> Loading @@ -15,35 +6,39 @@ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Write camera images --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- For auto start --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- For web sync retries --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- For foreground services API >= 28 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- Needed if app targets API >= 21 --> <!-- For location API >= 21 --> <uses-feature android:name="android.hardware.location.gps" /> <uses-feature android:name="android.hardware.location.network" /> <!-- Todo: attach camera image to position --> <!-- <uses-feature android:name="android.hardware.camera" android:required="false" /> --> <!-- For attaching images to waypoints --> <uses-feature android:name="android.hardware.camera" android:required="false" /> <application android:allowBackup="true" android:fullBackupContent="@xml/backup" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:supportsRtl="true" android:theme="@style/AppTheme" android:networkSecurityConfig="@xml/network_security_config" tools:ignore="UnusedAttribute"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".WaypointActivity" android:parentActivityName=".MainActivity" /> <activity android:name=".SettingsActivity" /> <service Loading @@ -54,10 +49,10 @@ <service android:name=".WebSyncService" android:exported="false" /> <service android:name=".GpxExportService" android:exported="false" /> <service android:name=".LoggerSingleService" /> <receiver android:name=".RestartBroadcastReceiver" Loading @@ -67,6 +62,7 @@ <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> Loading
app/src/main/java/net/fabiszewski/ulogger/DbAccess.java +17 −1 Original line number Diff line number Diff line Loading @@ -76,6 +76,17 @@ class DbAccess { * @param loc Location */ void writeLocation(Location loc) { writeLocation(loc, null, null); } /** * Write location to database. * * @param loc Location * @param comment Comment * @param imageUri Image URI */ void writeLocation(Location loc, String comment, String imageUri) { if (Logger.DEBUG) { Log.d(TAG, "[writeLocation]"); } ContentValues values = new ContentValues(); values.put(DbContract.Positions.COLUMN_TIME, loc.getTime() / 1000); Loading @@ -94,7 +105,12 @@ class DbAccess { values.put(DbContract.Positions.COLUMN_ACCURACY, loc.getAccuracy()); } values.put(DbContract.Positions.COLUMN_PROVIDER, loc.getProvider()); if (comment != null && !comment.isEmpty()) { values.put(DbContract.Positions.COLUMN_COMMENT, comment); } if (imageUri != null && !imageUri.isEmpty()) { values.put(DbContract.Positions.COLUMN_IMAGE_URI, imageUri); } db.insert(DbContract.Positions.TABLE_NAME, null, values); } Loading
app/src/main/java/net/fabiszewski/ulogger/DbContract.java +16 −14 Original line number Diff line number Diff line Loading @@ -22,23 +22,25 @@ final class DbContract { /** Positions table */ public static class Positions implements BaseColumns { public static final String TABLE_NAME = "positions"; public static final String COLUMN_TIME = "time"; public static final String COLUMN_LONGITUDE = "longitude"; public static final String COLUMN_LATITUDE = "latitude"; public static final String COLUMN_ALTITUDE = "altitude"; public static final String COLUMN_ACCURACY = "accuracy"; public static final String COLUMN_SPEED = "speed"; public static final String COLUMN_BEARING = "bearing"; public static final String COLUMN_PROVIDER = "provider"; public static final String COLUMN_SYNCED = "synced"; public static final String COLUMN_ERROR = "error"; static final String TABLE_NAME = "positions"; static final String COLUMN_TIME = "time"; static final String COLUMN_LONGITUDE = "longitude"; static final String COLUMN_LATITUDE = "latitude"; static final String COLUMN_ALTITUDE = "altitude"; static final String COLUMN_ACCURACY = "accuracy"; static final String COLUMN_SPEED = "speed"; static final String COLUMN_BEARING = "bearing"; static final String COLUMN_PROVIDER = "provider"; static final String COLUMN_COMMENT = "comment"; static final String COLUMN_IMAGE_URI = "imageUri"; static final String COLUMN_SYNCED = "synced"; static final String COLUMN_ERROR = "error"; } /** Track table */ public static class Track { public static final String TABLE_NAME = "track"; public static final String COLUMN_ID = "id"; public static final String COLUMN_NAME = "name"; static final String TABLE_NAME = "track"; static final String COLUMN_ID = "id"; static final String COLUMN_NAME = "name"; } }
app/src/main/java/net/fabiszewski/ulogger/DbHelper.java +82 −10 Original line number Diff line number Diff line Loading @@ -22,8 +22,9 @@ class DbHelper extends SQLiteOpenHelper { private static DbHelper sInstance; private static final int DATABASE_VERSION = 1; private static final int DATABASE_VERSION = 2; private static final String DATABASE_NAME = "ulogger.db"; private static final String BACKUP_SUFFIX = "_backup"; private static final String SQL_CREATE_POSITIONS = "CREATE TABLE " + DbContract.Positions.TABLE_NAME + " (" + Loading @@ -36,18 +37,61 @@ class DbHelper extends SQLiteOpenHelper { DbContract.Positions.COLUMN_SPEED + " TEXT DEFAULT NULL," + DbContract.Positions.COLUMN_ACCURACY + " TEXT DEFAULT NULL," + DbContract.Positions.COLUMN_PROVIDER + " TEXT," + DbContract.Positions.COLUMN_COMMENT + " TEXT DEFAULT NULL," + DbContract.Positions.COLUMN_IMAGE_URI + " TEXT DEFAULT NULL," + DbContract.Positions.COLUMN_SYNCED + " INTEGER DEFAULT 0," + DbContract.Positions.COLUMN_ERROR + " TEXT DEFAULT NULL)"; private static final String SQL_CREATE_INDEX_SYNCED = "CREATE INDEX syncedIdx ON " + DbContract.Positions.TABLE_NAME + "(" + DbContract.Positions.COLUMN_SYNCED + ")"; private static final String SQL_CREATE_TRACK = "CREATE TABLE " + DbContract.Track.TABLE_NAME + " (" + DbContract.Track.COLUMN_ID + " INTEGER DEFAULT NULL," + DbContract.Track.COLUMN_NAME + " TEXT)"; private static final String SQL_DELETE_POSITIONS = private static final String SQL_DROP_POSITIONS = "DROP TABLE IF EXISTS " + DbContract.Positions.TABLE_NAME; private static final String SQL_DELETE_TRACK = private static final String SQL_DROP_TRACK = "DROP TABLE IF EXISTS " + DbContract.Track.TABLE_NAME; private static final String SQL_ADD_COLUMN_COMMENT = "ALTER TABLE " + DbContract.Positions.TABLE_NAME + " ADD COLUMN " + DbContract.Positions.COLUMN_IMAGE_URI + " TEXT DEFAULT NULL"; private static final String SQL_ADD_COLUMN_IMAGE_URI = "ALTER TABLE " + DbContract.Positions.TABLE_NAME + " ADD COLUMN " + DbContract.Positions.COLUMN_COMMENT + " TEXT DEFAULT NULL"; private static final String SQL_RENAME_POSITIONS_V1 = "ALTER TABLE " + DbContract.Positions.TABLE_NAME + " " + "RENAME TO " + DbContract.Positions.TABLE_NAME + BACKUP_SUFFIX; private static final String SQL_INSERT_FROM_BACKUP_V1 = "INSERT INTO " + DbContract.Positions.TABLE_NAME + " (" + DbContract.Positions.COLUMN_TIME + "," + DbContract.Positions.COLUMN_LATITUDE + "," + DbContract.Positions.COLUMN_LONGITUDE + "," + DbContract.Positions.COLUMN_ALTITUDE + "," + DbContract.Positions.COLUMN_BEARING + "," + DbContract.Positions.COLUMN_SPEED + "," + DbContract.Positions.COLUMN_ACCURACY + "," + DbContract.Positions.COLUMN_PROVIDER + "," + DbContract.Positions.COLUMN_SYNCED + "," + DbContract.Positions.COLUMN_ERROR + ") " + "SELECT " + DbContract.Positions.COLUMN_TIME + "," + DbContract.Positions.COLUMN_LATITUDE + "," + DbContract.Positions.COLUMN_LONGITUDE + "," + DbContract.Positions.COLUMN_ALTITUDE + "," + DbContract.Positions.COLUMN_BEARING + "," + DbContract.Positions.COLUMN_SPEED + "," + DbContract.Positions.COLUMN_ACCURACY + "," + DbContract.Positions.COLUMN_PROVIDER + "," + DbContract.Positions.COLUMN_SYNCED + "," + DbContract.Positions.COLUMN_ERROR + " " + "FROM " + DbContract.Positions.TABLE_NAME + BACKUP_SUFFIX; private static final String SQL_DROP_POSITIONS_BACKUP = "DROP TABLE IF EXISTS " + DbContract.Positions.TABLE_NAME + BACKUP_SUFFIX; /** * Private constructor * Loading Loading @@ -77,28 +121,56 @@ class DbHelper extends SQLiteOpenHelper { */ public void onCreate(SQLiteDatabase db) { db.execSQL(SQL_CREATE_POSITIONS); db.execSQL(SQL_CREATE_INDEX_SYNCED); db.execSQL(SQL_CREATE_TRACK); } /** * On upgrade delete all tables, call create * On upgrade * @param db Database handle * @param oldVersion Old version number * @param newVersion New version number */ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(SQL_DELETE_POSITIONS); db.execSQL(SQL_DELETE_TRACK); if (oldVersion == 1 && newVersion == 2) { migrateToVersion2(db); } else { dropAndCreate(db); } } private void dropAndCreate(SQLiteDatabase db) { db.execSQL(SQL_DROP_POSITIONS); db.execSQL(SQL_DROP_TRACK); onCreate(db); } private void migrateToVersion2(SQLiteDatabase db) { // only affects positions schema db.execSQL(SQL_ADD_COLUMN_COMMENT); db.execSQL(SQL_ADD_COLUMN_IMAGE_URI); db.execSQL(SQL_CREATE_INDEX_SYNCED); } /** * On downgrade behave as on upgrade * On downgrade * @param db Database handle * @param oldVersion Old version number * @param newVersion New version number */ public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { onUpgrade(db, oldVersion, newVersion); if (oldVersion == 2 && newVersion == 1) { downgradeToVersion1(db); } else { dropAndCreate(db); } } private void downgradeToVersion1(SQLiteDatabase db) { db.execSQL(SQL_RENAME_POSITIONS_V1); db.execSQL(SQL_CREATE_POSITIONS); db.execSQL(SQL_INSERT_FROM_BACKUP_V1); db.execSQL(SQL_DROP_POSITIONS_BACKUP); } }