Loading app/src/main/java/net/fabiszewski/ulogger/ExternalCommandReceiver.java +7 −5 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.preference.PreferenceManager; Loading @@ -31,7 +33,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { private static final String START_UPLOAD = "start upload"; @Override public void onReceive(Context context, Intent intent) { public void onReceive(@NonNull Context context, @Nullable Intent intent) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean allowExternal = prefs.getBoolean(SettingsActivity.KEY_ALLOW_EXTERNAL, false); if (!allowExternal) { Loading @@ -55,7 +57,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { * Start logger service forcing new track * @param context Context */ private void startNewLoggerService(Context context, boolean overwrite) { private void startNewLoggerService(@NonNull Context context, boolean overwrite) { if (overwrite || !DbAccess.needsSync(context)) { DbAccess.newTrack(context, AutoNamePreference.getAutoTrackName(context)); Intent intent = new Intent(context, LoggerService.class); Loading @@ -67,7 +69,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { * Start logger service * @param context Context */ private void startLoggerService(Context context) { private void startLoggerService(@NonNull Context context) { DbAccess.newAutoTrack(context); Intent intent = new Intent(context, LoggerService.class); ContextCompat.startForegroundService(context, intent); Loading @@ -77,7 +79,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { * Stop logger service * @param context Context */ private void stopLogger(Context context) { private void stopLogger(@NonNull Context context) { Intent intent = new Intent(context, LoggerService.class); context.stopService(intent); } Loading @@ -86,7 +88,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { * Start logger service * @param context Context */ private void uploadData(Context context) { private void uploadData(@NonNull Context context) { if (DbAccess.needsSync(context)) { Intent intent = new Intent(context, WebSyncService.class); ContextCompat.startForegroundService(context, intent); Loading app/src/main/java/net/fabiszewski/ulogger/RestartBroadcastReceiver.java +4 −2 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.preference.PreferenceManager; Loading @@ -39,7 +41,7 @@ public class RestartBroadcastReceiver extends BroadcastReceiver { * @param intent Intent */ @Override public void onReceive(Context context, Intent intent) { public void onReceive(@NonNull Context context, @Nullable Intent intent) { if (intent != null && intent.getAction() != null) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); switch (intent.getAction()) { Loading @@ -64,7 +66,7 @@ public class RestartBroadcastReceiver extends BroadcastReceiver { * Start logger service * @param context Context */ private void startLoggerService(Context context) { private void startLoggerService(@NonNull Context context) { DbAccess.newAutoTrack(context); Intent intent = new Intent(context, LoggerService.class); ContextCompat.startForegroundService(context, intent); Loading app/src/main/java/net/fabiszewski/ulogger/TlsSocketFactory.java +4 −1 Original line number Diff line number Diff line Loading @@ -13,6 +13,8 @@ import android.annotation.TargetApi; import android.os.Build; import android.util.Log; import androidx.annotation.NonNull; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; Loading Loading @@ -50,8 +52,9 @@ public class TlsSocketFactory extends SSLSocketFactory { factory = sslContext.getSocketFactory(); } @NonNull @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException { public Socket createSocket(@NonNull Socket socket, String host, int port, boolean autoClose) throws IOException { socket = factory.createSocket(socket, host, port, autoClose); if (socket instanceof SSLSocket sslSocket) { Loading app/src/main/java/net/fabiszewski/ulogger/db/DbAccess.java +66 −46 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ public class DbAccess implements AutoCloseable { * * @return DbAccess singleton */ @NonNull public static synchronized DbAccess getInstance() { if (instance == null) { instance = new DbAccess(); Loading @@ -68,7 +69,8 @@ public class DbAccess implements AutoCloseable { * * @return DbAccess singleton */ public static synchronized DbAccess getOpenInstance(Context context) { @NonNull public static synchronized DbAccess getOpenInstance(@NonNull Context context) { if (instance == null) { instance = new DbAccess(); } Loading @@ -81,7 +83,7 @@ public class DbAccess implements AutoCloseable { * * @param context Context */ public void open(Context context) { public void open(@NonNull Context context) { synchronized (DbAccess.class) { if (openCount++ == 0) { if (Logger.DEBUG) { Loading @@ -103,7 +105,7 @@ public class DbAccess implements AutoCloseable { * @param comment Comment * @param imageUri Image URI */ private void writeLocation(Location loc, String comment, String imageUri) { private void writeLocation(@NonNull Location loc, @Nullable String comment, @Nullable String imageUri) { if (Logger.DEBUG) { Log.d(TAG, "[writeLocation]"); } Loading Loading @@ -136,10 +138,10 @@ public class DbAccess implements AutoCloseable { /** * Write location to database. * * @param loc Location * @param location Location */ public static void writeLocation(Context context, Location loc) { writeLocation(context, loc, null, null); public static void writeLocation(@NonNull Context context, @NonNull Location location) { writeLocation(context, location, null, null); } /** Loading @@ -150,7 +152,7 @@ public class DbAccess implements AutoCloseable { * @param comment Comment * @param imageUri Image URI */ public static void writeLocation(Context context, Location location, String comment, String imageUri) { public static void writeLocation(@NonNull Context context, @NonNull Location location, @Nullable String comment, @Nullable String imageUri) { try (DbAccess dbAccess = getOpenInstance(context)) { dbAccess.writeLocation(location, comment, imageUri); } Loading @@ -161,6 +163,7 @@ public class DbAccess implements AutoCloseable { * * @return Result set */ @NonNull public Cursor getPositions() { return db.query(DbContract.Positions.TABLE_NAME, new String[]{ "*" }, Loading Loading @@ -197,6 +200,7 @@ public class DbAccess implements AutoCloseable { * * @return Result set */ @NonNull public Cursor getUnsynced() { return db.query(DbContract.Positions.TABLE_NAME, new String[]{ "*" }, Loading Loading @@ -232,7 +236,7 @@ public class DbAccess implements AutoCloseable { * @return Error message or null if none */ @Nullable public static String getError(Context context) { public static String getError(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.getError(); } Loading Loading @@ -262,7 +266,7 @@ public class DbAccess implements AutoCloseable { * * @param id Position id */ public void setSynced(Context context, int id) { public void setSynced(@NonNull Context context, int id) { ContentValues values = new ContentValues(); values.put(DbContract.Positions.COLUMN_SYNCED, "1"); db.update(DbContract.Positions.TABLE_NAME, Loading Loading @@ -300,7 +304,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return Count */ public static int countUnsynced(Context context) { public static int countUnsynced(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.countUnsynced(); } Loading @@ -322,7 +326,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return Count */ public static int countImages(Context context) { public static int countImages(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.countImages(); } Loading @@ -345,7 +349,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return True if synchronization needed, false otherwise */ public static boolean needsSync(Context context) { public static boolean needsSync(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.needsSync(); } Loading Loading @@ -395,7 +399,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return UTC timestamp in seconds */ public static long getLastTimestamp(Context context) { public static long getLastTimestamp(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.getLastTimestamp(); } Loading Loading @@ -445,7 +449,8 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return Track name, null if no track in database */ public static String getTrackName(Context context) { @Nullable public static String getTrackName(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.getTrackName(); } Loading @@ -457,7 +462,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return Track id, zero if no track with valid id in database */ public static int getTrackId(Context context) { public static int getTrackId(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.getTrackId(); } Loading @@ -480,7 +485,7 @@ public class DbAccess implements AutoCloseable { * * @param name New track name */ private void newTrack(String name) { private void newTrack(@NonNull String name) { clear(); ContentValues values = new ContentValues(); values.put(DbContract.Track.COLUMN_NAME, name); Loading @@ -494,7 +499,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @param name New track name */ public static void newTrack(Context context, String name) { public static void newTrack(@NonNull Context context, @NonNull String name) { try (DbAccess dbAccess = getOpenInstance(context)) { ImageHelper.clearTrackImages(context); dbAccess.newTrack(name); Loading @@ -515,7 +520,7 @@ public class DbAccess implements AutoCloseable { * * @param context Context */ public static void clearTrack(Context context) { public static void clearTrack(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { ImageHelper.clearTrackImages(context); dbAccess.clear(); Loading @@ -529,7 +534,7 @@ public class DbAccess implements AutoCloseable { * * @param context Context */ public static void newAutoTrack(Context context) { public static void newAutoTrack(@NonNull Context context) { if (getTrackName(context) == null) { newTrack(context, AutoNamePreference.getAutoTrackName(context)); } Loading @@ -541,7 +546,7 @@ public class DbAccess implements AutoCloseable { * @return TrackSummary object, null if no positions */ @Nullable public static TrackSummary getTrackSummary(Context context) { public static TrackSummary getTrackSummary(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context); Cursor positions = dbAccess.getPositions()) { TrackSummary summary = null; Loading Loading @@ -614,7 +619,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String accuracy */ public static String getAccuracy(Cursor cursor) { @Nullable public static String getAccuracy(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_ACCURACY); } Loading @@ -624,7 +630,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has accuracy data */ public static boolean hasAccuracy(Cursor cursor) { public static boolean hasAccuracy(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_ACCURACY); } Loading @@ -634,7 +640,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String speed */ public static String getSpeed(Cursor cursor) { @Nullable public static String getSpeed(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_SPEED); } Loading @@ -644,7 +651,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has speed data */ public static boolean hasSpeed(Cursor cursor) { public static boolean hasSpeed(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_SPEED); } Loading @@ -654,7 +661,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String bearing */ public static String getBearing(Cursor cursor) { @Nullable public static String getBearing(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_BEARING); } Loading @@ -664,7 +672,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has bearing data */ public static boolean hasBearing(Cursor cursor) { public static boolean hasBearing(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_BEARING); } Loading @@ -674,7 +682,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String altitude */ public static String getAltitude(Cursor cursor) { @Nullable public static String getAltitude(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_ALTITUDE); } Loading @@ -684,7 +693,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has altitude data */ public static boolean hasAltitude(Cursor cursor) { public static boolean hasAltitude(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_ALTITUDE); } Loading @@ -694,7 +703,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String provider */ public static String getProvider(Cursor cursor) { @Nullable public static String getProvider(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_PROVIDER); } Loading @@ -704,7 +714,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has provider data */ public static boolean hasProvider(Cursor cursor) { public static boolean hasProvider(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_PROVIDER); } Loading @@ -714,7 +724,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String comment */ public static String getComment(Cursor cursor) { @Nullable public static String getComment(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_COMMENT); } Loading @@ -724,7 +735,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has image URI */ public static boolean hasImageUri(Cursor cursor) { public static boolean hasImageUri(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_IMAGE_URI); } Loading @@ -734,7 +745,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String URI */ public static String getImageUri(Cursor cursor) { @Nullable public static String getImageUri(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_IMAGE_URI); } Loading @@ -744,7 +756,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has comment data */ public static boolean hasComment(Cursor cursor) { public static boolean hasComment(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_COMMENT); } Loading @@ -754,7 +766,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String latitude */ public static String getLatitude(Cursor cursor) { @Nullable public static String getLatitude(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_LATITUDE); } Loading @@ -764,7 +777,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String longitude */ public static String getLongitude(Cursor cursor) { @Nullable public static String getLongitude(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_LONGITUDE); } Loading @@ -774,7 +788,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return Longitude */ private static double getLongitudeAsDouble(Cursor cursor) { private static double getLongitudeAsDouble(@NonNull Cursor cursor) { return getColumnAsDouble(cursor, DbContract.Positions.COLUMN_LONGITUDE); } Loading @@ -784,7 +798,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return Longitude */ private static double getLatitudeAsDouble(Cursor cursor) { private static double getLatitudeAsDouble(@NonNull Cursor cursor) { return getColumnAsDouble(cursor, DbContract.Positions.COLUMN_LATITUDE); } Loading @@ -794,7 +808,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String time */ public static String getTime(Cursor cursor) { @Nullable public static String getTime(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_TIME); } Loading @@ -804,7 +819,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String time */ public static String getTimeISO8601(Cursor cursor) { @NonNull public static String getTimeISO8601(@NonNull Cursor cursor) { long timestamp = cursor.getLong(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); return getTimeISO8601(timestamp); } Loading @@ -815,7 +831,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return Time */ private static long getTimeAsLong(Cursor cursor) { private static long getTimeAsLong(@NonNull Cursor cursor) { return cursor.getLong(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); } Loading @@ -825,8 +841,10 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String ID */ public static String getID(Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions._ID); @NonNull public static String getID(@NonNull Cursor cursor) { String id = getColumnAsString(cursor, DbContract.Positions._ID); return id == null ? "0" : id; } /** Loading @@ -835,6 +853,7 @@ public class DbAccess implements AutoCloseable { * @param timestamp Timestamp * @return Formatted time */ @NonNull public static String getTimeISO8601(long timestamp) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); df.setTimeZone(TimeZone.getTimeZone("UTC")); Loading @@ -848,7 +867,7 @@ public class DbAccess implements AutoCloseable { * @param column Column name * @return Column value */ private static double getColumnAsDouble(Cursor cursor, String column) { private static double getColumnAsDouble(@NonNull Cursor cursor, @NonNull String column) { return cursor.getDouble(cursor.getColumnIndexOrThrow(column)); } Loading @@ -859,7 +878,8 @@ public class DbAccess implements AutoCloseable { * @param column Column name * @return Column value */ private static String getColumnAsString(Cursor cursor, String column) { @Nullable private static String getColumnAsString(@NonNull Cursor cursor, @NonNull String column) { return cursor.getString(cursor.getColumnIndexOrThrow(column)); } Loading @@ -870,7 +890,7 @@ public class DbAccess implements AutoCloseable { * @param column Column name * @return True if not null */ private static boolean isColumnNotNull(Cursor cursor, String column) { private static boolean isColumnNotNull(@NonNull Cursor cursor, @NonNull String column) { return !cursor.isNull(cursor.getColumnIndexOrThrow(column)); } } app/src/main/java/net/fabiszewski/ulogger/db/DbHelper.java +11 −8 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import androidx.annotation.NonNull; import net.fabiszewski.ulogger.Logger; /** Loading Loading @@ -123,7 +125,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param context Context */ private DbHelper(Context context) { private DbHelper(@NonNull Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } Loading @@ -133,7 +135,8 @@ class DbHelper extends SQLiteOpenHelper { * @param context Context * @return DbHelper instance */ static DbHelper getInstance(Context context) { @NonNull static DbHelper getInstance(@NonNull Context context) { if (instance == null) { instance = new DbHelper(context.getApplicationContext()); Loading @@ -146,7 +149,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param db Database handle */ public void onCreate(SQLiteDatabase db) { public void onCreate(@NonNull SQLiteDatabase db) { db.execSQL(SQL_CREATE_POSITIONS); db.execSQL(SQL_POS_CREATE_INDEX_TIME); db.execSQL(SQL_POS_CREATE_INDEX_SYNCED); Loading @@ -160,7 +163,7 @@ class DbHelper extends SQLiteOpenHelper { * @param oldVersion Old version number * @param newVersion New version number */ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onUpgrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion) { if (Logger.DEBUG) { Log.d(TAG, "[onUpgrade: from " + oldVersion + " to " + newVersion + "]"); } switch (oldVersion) { case 1: Loading @@ -179,7 +182,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param db Database handle */ private void dropAndCreate(SQLiteDatabase db) { private void dropAndCreate(@NonNull SQLiteDatabase db) { db.execSQL(SQL_DROP_POSITIONS); db.execSQL(SQL_DROP_TRACK); onCreate(db); Loading @@ -190,7 +193,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param db Database handle */ private void migrateToVersion2(SQLiteDatabase db) { private void migrateToVersion2(@NonNull SQLiteDatabase db) { if (Logger.DEBUG) { Log.d(TAG, "[migrateToVersion2]"); } // only affects positions schema Loading @@ -204,7 +207,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param db Database handle */ private void migrateToVersion3(SQLiteDatabase db) { private void migrateToVersion3(@NonNull SQLiteDatabase db) { if (Logger.DEBUG) { Log.d(TAG, "[migrateToVersion3]"); } // migrate track Loading @@ -231,7 +234,7 @@ class DbHelper extends SQLiteOpenHelper { * @param oldVersion Old version number * @param newVersion New version number */ public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onDowngrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion) { if (Logger.DEBUG) { Log.d(TAG, "[onDowngrade: from " + oldVersion + " to " + newVersion + "]"); } dropAndCreate(db); } Loading Loading
app/src/main/java/net/fabiszewski/ulogger/ExternalCommandReceiver.java +7 −5 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.preference.PreferenceManager; Loading @@ -31,7 +33,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { private static final String START_UPLOAD = "start upload"; @Override public void onReceive(Context context, Intent intent) { public void onReceive(@NonNull Context context, @Nullable Intent intent) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean allowExternal = prefs.getBoolean(SettingsActivity.KEY_ALLOW_EXTERNAL, false); if (!allowExternal) { Loading @@ -55,7 +57,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { * Start logger service forcing new track * @param context Context */ private void startNewLoggerService(Context context, boolean overwrite) { private void startNewLoggerService(@NonNull Context context, boolean overwrite) { if (overwrite || !DbAccess.needsSync(context)) { DbAccess.newTrack(context, AutoNamePreference.getAutoTrackName(context)); Intent intent = new Intent(context, LoggerService.class); Loading @@ -67,7 +69,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { * Start logger service * @param context Context */ private void startLoggerService(Context context) { private void startLoggerService(@NonNull Context context) { DbAccess.newAutoTrack(context); Intent intent = new Intent(context, LoggerService.class); ContextCompat.startForegroundService(context, intent); Loading @@ -77,7 +79,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { * Stop logger service * @param context Context */ private void stopLogger(Context context) { private void stopLogger(@NonNull Context context) { Intent intent = new Intent(context, LoggerService.class); context.stopService(intent); } Loading @@ -86,7 +88,7 @@ public class ExternalCommandReceiver extends BroadcastReceiver { * Start logger service * @param context Context */ private void uploadData(Context context) { private void uploadData(@NonNull Context context) { if (DbAccess.needsSync(context)) { Intent intent = new Intent(context, WebSyncService.class); ContextCompat.startForegroundService(context, intent); Loading
app/src/main/java/net/fabiszewski/ulogger/RestartBroadcastReceiver.java +4 −2 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.preference.PreferenceManager; Loading @@ -39,7 +41,7 @@ public class RestartBroadcastReceiver extends BroadcastReceiver { * @param intent Intent */ @Override public void onReceive(Context context, Intent intent) { public void onReceive(@NonNull Context context, @Nullable Intent intent) { if (intent != null && intent.getAction() != null) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); switch (intent.getAction()) { Loading @@ -64,7 +66,7 @@ public class RestartBroadcastReceiver extends BroadcastReceiver { * Start logger service * @param context Context */ private void startLoggerService(Context context) { private void startLoggerService(@NonNull Context context) { DbAccess.newAutoTrack(context); Intent intent = new Intent(context, LoggerService.class); ContextCompat.startForegroundService(context, intent); Loading
app/src/main/java/net/fabiszewski/ulogger/TlsSocketFactory.java +4 −1 Original line number Diff line number Diff line Loading @@ -13,6 +13,8 @@ import android.annotation.TargetApi; import android.os.Build; import android.util.Log; import androidx.annotation.NonNull; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; Loading Loading @@ -50,8 +52,9 @@ public class TlsSocketFactory extends SSLSocketFactory { factory = sslContext.getSocketFactory(); } @NonNull @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException { public Socket createSocket(@NonNull Socket socket, String host, int port, boolean autoClose) throws IOException { socket = factory.createSocket(socket, host, port, autoClose); if (socket instanceof SSLSocket sslSocket) { Loading
app/src/main/java/net/fabiszewski/ulogger/db/DbAccess.java +66 −46 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ public class DbAccess implements AutoCloseable { * * @return DbAccess singleton */ @NonNull public static synchronized DbAccess getInstance() { if (instance == null) { instance = new DbAccess(); Loading @@ -68,7 +69,8 @@ public class DbAccess implements AutoCloseable { * * @return DbAccess singleton */ public static synchronized DbAccess getOpenInstance(Context context) { @NonNull public static synchronized DbAccess getOpenInstance(@NonNull Context context) { if (instance == null) { instance = new DbAccess(); } Loading @@ -81,7 +83,7 @@ public class DbAccess implements AutoCloseable { * * @param context Context */ public void open(Context context) { public void open(@NonNull Context context) { synchronized (DbAccess.class) { if (openCount++ == 0) { if (Logger.DEBUG) { Loading @@ -103,7 +105,7 @@ public class DbAccess implements AutoCloseable { * @param comment Comment * @param imageUri Image URI */ private void writeLocation(Location loc, String comment, String imageUri) { private void writeLocation(@NonNull Location loc, @Nullable String comment, @Nullable String imageUri) { if (Logger.DEBUG) { Log.d(TAG, "[writeLocation]"); } Loading Loading @@ -136,10 +138,10 @@ public class DbAccess implements AutoCloseable { /** * Write location to database. * * @param loc Location * @param location Location */ public static void writeLocation(Context context, Location loc) { writeLocation(context, loc, null, null); public static void writeLocation(@NonNull Context context, @NonNull Location location) { writeLocation(context, location, null, null); } /** Loading @@ -150,7 +152,7 @@ public class DbAccess implements AutoCloseable { * @param comment Comment * @param imageUri Image URI */ public static void writeLocation(Context context, Location location, String comment, String imageUri) { public static void writeLocation(@NonNull Context context, @NonNull Location location, @Nullable String comment, @Nullable String imageUri) { try (DbAccess dbAccess = getOpenInstance(context)) { dbAccess.writeLocation(location, comment, imageUri); } Loading @@ -161,6 +163,7 @@ public class DbAccess implements AutoCloseable { * * @return Result set */ @NonNull public Cursor getPositions() { return db.query(DbContract.Positions.TABLE_NAME, new String[]{ "*" }, Loading Loading @@ -197,6 +200,7 @@ public class DbAccess implements AutoCloseable { * * @return Result set */ @NonNull public Cursor getUnsynced() { return db.query(DbContract.Positions.TABLE_NAME, new String[]{ "*" }, Loading Loading @@ -232,7 +236,7 @@ public class DbAccess implements AutoCloseable { * @return Error message or null if none */ @Nullable public static String getError(Context context) { public static String getError(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.getError(); } Loading Loading @@ -262,7 +266,7 @@ public class DbAccess implements AutoCloseable { * * @param id Position id */ public void setSynced(Context context, int id) { public void setSynced(@NonNull Context context, int id) { ContentValues values = new ContentValues(); values.put(DbContract.Positions.COLUMN_SYNCED, "1"); db.update(DbContract.Positions.TABLE_NAME, Loading Loading @@ -300,7 +304,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return Count */ public static int countUnsynced(Context context) { public static int countUnsynced(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.countUnsynced(); } Loading @@ -322,7 +326,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return Count */ public static int countImages(Context context) { public static int countImages(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.countImages(); } Loading @@ -345,7 +349,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return True if synchronization needed, false otherwise */ public static boolean needsSync(Context context) { public static boolean needsSync(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.needsSync(); } Loading Loading @@ -395,7 +399,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return UTC timestamp in seconds */ public static long getLastTimestamp(Context context) { public static long getLastTimestamp(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.getLastTimestamp(); } Loading Loading @@ -445,7 +449,8 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return Track name, null if no track in database */ public static String getTrackName(Context context) { @Nullable public static String getTrackName(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.getTrackName(); } Loading @@ -457,7 +462,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @return Track id, zero if no track with valid id in database */ public static int getTrackId(Context context) { public static int getTrackId(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { return dbAccess.getTrackId(); } Loading @@ -480,7 +485,7 @@ public class DbAccess implements AutoCloseable { * * @param name New track name */ private void newTrack(String name) { private void newTrack(@NonNull String name) { clear(); ContentValues values = new ContentValues(); values.put(DbContract.Track.COLUMN_NAME, name); Loading @@ -494,7 +499,7 @@ public class DbAccess implements AutoCloseable { * @param context Context * @param name New track name */ public static void newTrack(Context context, String name) { public static void newTrack(@NonNull Context context, @NonNull String name) { try (DbAccess dbAccess = getOpenInstance(context)) { ImageHelper.clearTrackImages(context); dbAccess.newTrack(name); Loading @@ -515,7 +520,7 @@ public class DbAccess implements AutoCloseable { * * @param context Context */ public static void clearTrack(Context context) { public static void clearTrack(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context)) { ImageHelper.clearTrackImages(context); dbAccess.clear(); Loading @@ -529,7 +534,7 @@ public class DbAccess implements AutoCloseable { * * @param context Context */ public static void newAutoTrack(Context context) { public static void newAutoTrack(@NonNull Context context) { if (getTrackName(context) == null) { newTrack(context, AutoNamePreference.getAutoTrackName(context)); } Loading @@ -541,7 +546,7 @@ public class DbAccess implements AutoCloseable { * @return TrackSummary object, null if no positions */ @Nullable public static TrackSummary getTrackSummary(Context context) { public static TrackSummary getTrackSummary(@NonNull Context context) { try (DbAccess dbAccess = getOpenInstance(context); Cursor positions = dbAccess.getPositions()) { TrackSummary summary = null; Loading Loading @@ -614,7 +619,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String accuracy */ public static String getAccuracy(Cursor cursor) { @Nullable public static String getAccuracy(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_ACCURACY); } Loading @@ -624,7 +630,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has accuracy data */ public static boolean hasAccuracy(Cursor cursor) { public static boolean hasAccuracy(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_ACCURACY); } Loading @@ -634,7 +640,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String speed */ public static String getSpeed(Cursor cursor) { @Nullable public static String getSpeed(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_SPEED); } Loading @@ -644,7 +651,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has speed data */ public static boolean hasSpeed(Cursor cursor) { public static boolean hasSpeed(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_SPEED); } Loading @@ -654,7 +661,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String bearing */ public static String getBearing(Cursor cursor) { @Nullable public static String getBearing(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_BEARING); } Loading @@ -664,7 +672,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has bearing data */ public static boolean hasBearing(Cursor cursor) { public static boolean hasBearing(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_BEARING); } Loading @@ -674,7 +682,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String altitude */ public static String getAltitude(Cursor cursor) { @Nullable public static String getAltitude(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_ALTITUDE); } Loading @@ -684,7 +693,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has altitude data */ public static boolean hasAltitude(Cursor cursor) { public static boolean hasAltitude(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_ALTITUDE); } Loading @@ -694,7 +703,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String provider */ public static String getProvider(Cursor cursor) { @Nullable public static String getProvider(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_PROVIDER); } Loading @@ -704,7 +714,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has provider data */ public static boolean hasProvider(Cursor cursor) { public static boolean hasProvider(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_PROVIDER); } Loading @@ -714,7 +724,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String comment */ public static String getComment(Cursor cursor) { @Nullable public static String getComment(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_COMMENT); } Loading @@ -724,7 +735,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has image URI */ public static boolean hasImageUri(Cursor cursor) { public static boolean hasImageUri(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_IMAGE_URI); } Loading @@ -734,7 +745,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String URI */ public static String getImageUri(Cursor cursor) { @Nullable public static String getImageUri(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_IMAGE_URI); } Loading @@ -744,7 +756,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return True if has comment data */ public static boolean hasComment(Cursor cursor) { public static boolean hasComment(@NonNull Cursor cursor) { return isColumnNotNull(cursor, DbContract.Positions.COLUMN_COMMENT); } Loading @@ -754,7 +766,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String latitude */ public static String getLatitude(Cursor cursor) { @Nullable public static String getLatitude(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_LATITUDE); } Loading @@ -764,7 +777,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String longitude */ public static String getLongitude(Cursor cursor) { @Nullable public static String getLongitude(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_LONGITUDE); } Loading @@ -774,7 +788,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return Longitude */ private static double getLongitudeAsDouble(Cursor cursor) { private static double getLongitudeAsDouble(@NonNull Cursor cursor) { return getColumnAsDouble(cursor, DbContract.Positions.COLUMN_LONGITUDE); } Loading @@ -784,7 +798,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return Longitude */ private static double getLatitudeAsDouble(Cursor cursor) { private static double getLatitudeAsDouble(@NonNull Cursor cursor) { return getColumnAsDouble(cursor, DbContract.Positions.COLUMN_LATITUDE); } Loading @@ -794,7 +808,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String time */ public static String getTime(Cursor cursor) { @Nullable public static String getTime(@NonNull Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions.COLUMN_TIME); } Loading @@ -804,7 +819,8 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String time */ public static String getTimeISO8601(Cursor cursor) { @NonNull public static String getTimeISO8601(@NonNull Cursor cursor) { long timestamp = cursor.getLong(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); return getTimeISO8601(timestamp); } Loading @@ -815,7 +831,7 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return Time */ private static long getTimeAsLong(Cursor cursor) { private static long getTimeAsLong(@NonNull Cursor cursor) { return cursor.getLong(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); } Loading @@ -825,8 +841,10 @@ public class DbAccess implements AutoCloseable { * @param cursor Cursor * @return String ID */ public static String getID(Cursor cursor) { return getColumnAsString(cursor, DbContract.Positions._ID); @NonNull public static String getID(@NonNull Cursor cursor) { String id = getColumnAsString(cursor, DbContract.Positions._ID); return id == null ? "0" : id; } /** Loading @@ -835,6 +853,7 @@ public class DbAccess implements AutoCloseable { * @param timestamp Timestamp * @return Formatted time */ @NonNull public static String getTimeISO8601(long timestamp) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); df.setTimeZone(TimeZone.getTimeZone("UTC")); Loading @@ -848,7 +867,7 @@ public class DbAccess implements AutoCloseable { * @param column Column name * @return Column value */ private static double getColumnAsDouble(Cursor cursor, String column) { private static double getColumnAsDouble(@NonNull Cursor cursor, @NonNull String column) { return cursor.getDouble(cursor.getColumnIndexOrThrow(column)); } Loading @@ -859,7 +878,8 @@ public class DbAccess implements AutoCloseable { * @param column Column name * @return Column value */ private static String getColumnAsString(Cursor cursor, String column) { @Nullable private static String getColumnAsString(@NonNull Cursor cursor, @NonNull String column) { return cursor.getString(cursor.getColumnIndexOrThrow(column)); } Loading @@ -870,7 +890,7 @@ public class DbAccess implements AutoCloseable { * @param column Column name * @return True if not null */ private static boolean isColumnNotNull(Cursor cursor, String column) { private static boolean isColumnNotNull(@NonNull Cursor cursor, @NonNull String column) { return !cursor.isNull(cursor.getColumnIndexOrThrow(column)); } }
app/src/main/java/net/fabiszewski/ulogger/db/DbHelper.java +11 −8 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import androidx.annotation.NonNull; import net.fabiszewski.ulogger.Logger; /** Loading Loading @@ -123,7 +125,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param context Context */ private DbHelper(Context context) { private DbHelper(@NonNull Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } Loading @@ -133,7 +135,8 @@ class DbHelper extends SQLiteOpenHelper { * @param context Context * @return DbHelper instance */ static DbHelper getInstance(Context context) { @NonNull static DbHelper getInstance(@NonNull Context context) { if (instance == null) { instance = new DbHelper(context.getApplicationContext()); Loading @@ -146,7 +149,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param db Database handle */ public void onCreate(SQLiteDatabase db) { public void onCreate(@NonNull SQLiteDatabase db) { db.execSQL(SQL_CREATE_POSITIONS); db.execSQL(SQL_POS_CREATE_INDEX_TIME); db.execSQL(SQL_POS_CREATE_INDEX_SYNCED); Loading @@ -160,7 +163,7 @@ class DbHelper extends SQLiteOpenHelper { * @param oldVersion Old version number * @param newVersion New version number */ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onUpgrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion) { if (Logger.DEBUG) { Log.d(TAG, "[onUpgrade: from " + oldVersion + " to " + newVersion + "]"); } switch (oldVersion) { case 1: Loading @@ -179,7 +182,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param db Database handle */ private void dropAndCreate(SQLiteDatabase db) { private void dropAndCreate(@NonNull SQLiteDatabase db) { db.execSQL(SQL_DROP_POSITIONS); db.execSQL(SQL_DROP_TRACK); onCreate(db); Loading @@ -190,7 +193,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param db Database handle */ private void migrateToVersion2(SQLiteDatabase db) { private void migrateToVersion2(@NonNull SQLiteDatabase db) { if (Logger.DEBUG) { Log.d(TAG, "[migrateToVersion2]"); } // only affects positions schema Loading @@ -204,7 +207,7 @@ class DbHelper extends SQLiteOpenHelper { * * @param db Database handle */ private void migrateToVersion3(SQLiteDatabase db) { private void migrateToVersion3(@NonNull SQLiteDatabase db) { if (Logger.DEBUG) { Log.d(TAG, "[migrateToVersion3]"); } // migrate track Loading @@ -231,7 +234,7 @@ class DbHelper extends SQLiteOpenHelper { * @param oldVersion Old version number * @param newVersion New version number */ public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onDowngrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion) { if (Logger.DEBUG) { Log.d(TAG, "[onDowngrade: from " + oldVersion + " to " + newVersion + "]"); } dropAndCreate(db); } Loading