diff --git a/android/app/build.gradle b/android/app/build.gradle index dbf4ff3..4c0bdd4 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -15,11 +15,11 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - javaCompileOptions { - annotationProcessorOptions { - arguments["room.schemaLocation"] = "$projectDir/schemas" - } - } +// javaCompileOptions { +// annotationProcessorOptions { +// arguments["room.schemaLocation"] = "$projectDir/schemas" +// } +// } } buildTypes { @@ -53,8 +53,8 @@ dependencies { implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.journeyapps:zxing-android-embedded:4.1.0' - def room_version = "2.4.2" - implementation "androidx.room:room-runtime:$room_version" - annotationProcessor "androidx.room:room-compiler:$room_version" +// def room_version = "2.4.2" +// implementation "androidx.room:room-runtime:$room_version" +// annotationProcessor "androidx.room:room-compiler:$room_version" } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 9d66b3c..a09b74d 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -45,7 +45,7 @@ diff --git a/android/app/src/main/java/com/vernu/sms/AppConstants.java b/android/app/src/main/java/com/vernu/sms/AppConstants.java index ed6b47c..612c6a5 100644 --- a/android/app/src/main/java/com/vernu/sms/AppConstants.java +++ b/android/app/src/main/java/com/vernu/sms/AppConstants.java @@ -14,6 +14,6 @@ public class AppConstants { public static final String SHARED_PREFS_API_KEY_KEY = "API_KEY"; public static final String SHARED_PREFS_GATEWAY_ENABLED_KEY = "GATEWAY_ENABLED"; public static final String SHARED_PREFS_PREFERRED_SIM_KEY = "PREFERRED_SIM"; - public static final String SHARED_PREFS_RECEIVE_SMS_ENABLED_KEY = "RECEIVE_SMS_ENABLED"; + public static final String SHARED_PREFS_TRACK_SENT_SMS_STATUS_KEY = "TRACK_SENT_SMS_STATUS"; } diff --git a/android/app/src/main/java/com/vernu/sms/database/local/AppDatabase.java b/android/app/src/main/java/com/vernu/sms/database/local/AppDatabase.java index af83306..8ae2586 100644 --- a/android/app/src/main/java/com/vernu/sms/database/local/AppDatabase.java +++ b/android/app/src/main/java/com/vernu/sms/database/local/AppDatabase.java @@ -1,25 +1,25 @@ -package com.vernu.sms.database.local; - -import android.content.Context; -import androidx.room.Database; -import androidx.room.Room; -import androidx.room.RoomDatabase; - -@Database(entities = {SMS.class}, version = 2) -public abstract class AppDatabase extends RoomDatabase { - private static volatile AppDatabase INSTANCE; - - public static AppDatabase getInstance(Context context) { - if (INSTANCE == null) { - synchronized (AppDatabase.class) { - if (INSTANCE == null) { - INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "db1") - .build(); - } - } - } - return INSTANCE; - } - - public abstract SMSDao localReceivedSMSDao(); -} \ No newline at end of file +//package com.vernu.sms.database.local; +// +//import android.content.Context; +//import androidx.room.Database; +//import androidx.room.Room; +//import androidx.room.RoomDatabase; +// +//@Database(entities = {SMS.class}, version = 2) +//public abstract class AppDatabase extends RoomDatabase { +// private static volatile AppDatabase INSTANCE; +// +// public static AppDatabase getInstance(Context context) { +// if (INSTANCE == null) { +// synchronized (AppDatabase.class) { +// if (INSTANCE == null) { +// INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "db1") +// .build(); +// } +// } +// } +// return INSTANCE; +// } +// +// public abstract SMSDao localReceivedSMSDao(); +//} \ No newline at end of file diff --git a/android/app/src/main/java/com/vernu/sms/database/local/DateConverter.java b/android/app/src/main/java/com/vernu/sms/database/local/DateConverter.java index aa68080..e540f0b 100644 --- a/android/app/src/main/java/com/vernu/sms/database/local/DateConverter.java +++ b/android/app/src/main/java/com/vernu/sms/database/local/DateConverter.java @@ -1,17 +1,17 @@ -package com.vernu.sms.database.local; - -import androidx.room.TypeConverter; - -import java.util.Date; - -public class DateConverter { - @TypeConverter - public static Date toDate(Long dateLong) { - return dateLong == null ? null : new Date(dateLong); - } - - @TypeConverter - public static Long fromDate(Date date) { - return date == null ? null : date.getTime(); - } -} \ No newline at end of file +//package com.vernu.sms.database.local; +// +//import androidx.room.TypeConverter; +// +//import java.util.Date; +// +//public class DateConverter { +// @TypeConverter +// public static Date toDate(Long dateLong) { +// return dateLong == null ? null : new Date(dateLong); +// } +// +// @TypeConverter +// public static Long fromDate(Date date) { +// return date == null ? null : date.getTime(); +// } +//} \ No newline at end of file diff --git a/android/app/src/main/java/com/vernu/sms/database/local/SMS.java b/android/app/src/main/java/com/vernu/sms/database/local/SMS.java index fdaffaa..297417c 100644 --- a/android/app/src/main/java/com/vernu/sms/database/local/SMS.java +++ b/android/app/src/main/java/com/vernu/sms/database/local/SMS.java @@ -1,193 +1,193 @@ -package com.vernu.sms.database.local; - -import androidx.annotation.NonNull; -import androidx.room.ColumnInfo; -import androidx.room.Entity; -import androidx.room.PrimaryKey; -import androidx.room.TypeConverters; - -import java.util.Date; - -@Entity(tableName = "sms") -@TypeConverters(DateConverter.class) -public class SMS { - - public SMS() { - type = null; - } - - @PrimaryKey(autoGenerate = true) - private int id; - - // This is the ID of the SMS in the server - @ColumnInfo(name = "_id") - private String _id; - - @ColumnInfo(name = "message") - private String message = ""; - - @ColumnInfo(name = "encrypted_message") - private String encryptedMessage = ""; - - @ColumnInfo(name = "is_encrypted", defaultValue = "0") - private boolean isEncrypted = false; - - @ColumnInfo(name = "sender") - private String sender; - - @ColumnInfo(name = "recipient") - private String recipient; - - @ColumnInfo(name = "requested_at") - private Date requestedAt; - - @ColumnInfo(name = "sent_at") - private Date sentAt; - - @ColumnInfo(name = "delivered_at") - private Date deliveredAt; - - @ColumnInfo(name = "received_at") - private Date receivedAt; - - @NonNull - @ColumnInfo(name = "type") - private String type; - - @ColumnInfo(name = "server_acknowledged_at") - private Date serverAcknowledgedAt; - - public boolean hasServerAcknowledged() { - return serverAcknowledgedAt != null; - } - - @ColumnInfo(name = "last_acknowledged_request_at") - private Date lastAcknowledgedRequestAt; - - @ColumnInfo(name = "retry_count", defaultValue = "0") - private int retryCount = 0; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String get_id() { - return _id; - } - - public void set_id(String _id) { - this._id = _id; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public String getEncryptedMessage() { - return encryptedMessage; - } - - public void setEncryptedMessage(String encryptedMessage) { - this.encryptedMessage = encryptedMessage; - } - - public boolean getIsEncrypted() { - return isEncrypted; - } - - public void setIsEncrypted(boolean isEncrypted) { - this.isEncrypted = isEncrypted; - } - - public String getSender() { - return sender; - } - - public void setSender(String sender) { - this.sender = sender; - } - - public String getRecipient() { - return recipient; - } - - public void setRecipient(String recipient) { - this.recipient = recipient; - } - - public Date getServerAcknowledgedAt() { - return serverAcknowledgedAt; - } - - public void setServerAcknowledgedAt(Date serverAcknowledgedAt) { - this.serverAcknowledgedAt = serverAcknowledgedAt; - } - - - - public Date getRequestedAt() { - return requestedAt; - } - - public void setRequestedAt(Date requestedAt) { - this.requestedAt = requestedAt; - } - - public Date getSentAt() { - return sentAt; - } - - public void setSentAt(Date sentAt) { - this.sentAt = sentAt; - } - - public Date getDeliveredAt() { - return deliveredAt; - } - - public void setDeliveredAt(Date deliveredAt) { - this.deliveredAt = deliveredAt; - } - - public Date getReceivedAt() { - return receivedAt; - } - - public void setReceivedAt(Date receivedAt) { - this.receivedAt = receivedAt; - } - - @NonNull - public String getType() { - return type; - } - - public void setType(@NonNull String type) { - this.type = type; - } - - - public Date getLastAcknowledgedRequestAt() { - return lastAcknowledgedRequestAt; - } - - public void setLastAcknowledgedRequestAt(Date lastAcknowledgedRequestAt) { - this.lastAcknowledgedRequestAt = lastAcknowledgedRequestAt; - } - - public int getRetryCount() { - return retryCount; - } - - public void setRetryCount(int retryCount) { - this.retryCount = retryCount; - } -} \ No newline at end of file +//package com.vernu.sms.database.local; +// +//import androidx.annotation.NonNull; +//import androidx.room.ColumnInfo; +//import androidx.room.Entity; +//import androidx.room.PrimaryKey; +//import androidx.room.TypeConverters; +// +//import java.util.Date; +// +//@Entity(tableName = "sms") +//@TypeConverters(DateConverter.class) +//public class SMS { +// +// public SMS() { +// type = null; +// } +// +// @PrimaryKey(autoGenerate = true) +// private int id; +// +// // This is the ID of the SMS in the server +// @ColumnInfo(name = "_id") +// private String _id; +// +// @ColumnInfo(name = "message") +// private String message = ""; +// +// @ColumnInfo(name = "encrypted_message") +// private String encryptedMessage = ""; +// +// @ColumnInfo(name = "is_encrypted", defaultValue = "0") +// private boolean isEncrypted = false; +// +// @ColumnInfo(name = "sender") +// private String sender; +// +// @ColumnInfo(name = "recipient") +// private String recipient; +// +// @ColumnInfo(name = "requested_at") +// private Date requestedAt; +// +// @ColumnInfo(name = "sent_at") +// private Date sentAt; +// +// @ColumnInfo(name = "delivered_at") +// private Date deliveredAt; +// +// @ColumnInfo(name = "received_at") +// private Date receivedAt; +// +// @NonNull +// @ColumnInfo(name = "type") +// private String type; +// +// @ColumnInfo(name = "server_acknowledged_at") +// private Date serverAcknowledgedAt; +// +// public boolean hasServerAcknowledged() { +// return serverAcknowledgedAt != null; +// } +// +// @ColumnInfo(name = "last_acknowledged_request_at") +// private Date lastAcknowledgedRequestAt; +// +// @ColumnInfo(name = "retry_count", defaultValue = "0") +// private int retryCount = 0; +// +// public int getId() { +// return id; +// } +// +// public void setId(int id) { +// this.id = id; +// } +// +// public String get_id() { +// return _id; +// } +// +// public void set_id(String _id) { +// this._id = _id; +// } +// +// public String getMessage() { +// return message; +// } +// +// public void setMessage(String message) { +// this.message = message; +// } +// +// public String getEncryptedMessage() { +// return encryptedMessage; +// } +// +// public void setEncryptedMessage(String encryptedMessage) { +// this.encryptedMessage = encryptedMessage; +// } +// +// public boolean getIsEncrypted() { +// return isEncrypted; +// } +// +// public void setIsEncrypted(boolean isEncrypted) { +// this.isEncrypted = isEncrypted; +// } +// +// public String getSender() { +// return sender; +// } +// +// public void setSender(String sender) { +// this.sender = sender; +// } +// +// public String getRecipient() { +// return recipient; +// } +// +// public void setRecipient(String recipient) { +// this.recipient = recipient; +// } +// +// public Date getServerAcknowledgedAt() { +// return serverAcknowledgedAt; +// } +// +// public void setServerAcknowledgedAt(Date serverAcknowledgedAt) { +// this.serverAcknowledgedAt = serverAcknowledgedAt; +// } +// +// +// +// public Date getRequestedAt() { +// return requestedAt; +// } +// +// public void setRequestedAt(Date requestedAt) { +// this.requestedAt = requestedAt; +// } +// +// public Date getSentAt() { +// return sentAt; +// } +// +// public void setSentAt(Date sentAt) { +// this.sentAt = sentAt; +// } +// +// public Date getDeliveredAt() { +// return deliveredAt; +// } +// +// public void setDeliveredAt(Date deliveredAt) { +// this.deliveredAt = deliveredAt; +// } +// +// public Date getReceivedAt() { +// return receivedAt; +// } +// +// public void setReceivedAt(Date receivedAt) { +// this.receivedAt = receivedAt; +// } +// +// @NonNull +// public String getType() { +// return type; +// } +// +// public void setType(@NonNull String type) { +// this.type = type; +// } +// +// +// public Date getLastAcknowledgedRequestAt() { +// return lastAcknowledgedRequestAt; +// } +// +// public void setLastAcknowledgedRequestAt(Date lastAcknowledgedRequestAt) { +// this.lastAcknowledgedRequestAt = lastAcknowledgedRequestAt; +// } +// +// public int getRetryCount() { +// return retryCount; +// } +// +// public void setRetryCount(int retryCount) { +// this.retryCount = retryCount; +// } +//} \ No newline at end of file diff --git a/android/app/src/main/java/com/vernu/sms/database/local/SMSDao.java b/android/app/src/main/java/com/vernu/sms/database/local/SMSDao.java index f377cc4..541ba1e 100644 --- a/android/app/src/main/java/com/vernu/sms/database/local/SMSDao.java +++ b/android/app/src/main/java/com/vernu/sms/database/local/SMSDao.java @@ -1,27 +1,27 @@ -package com.vernu.sms.database.local; - -import androidx.room.Dao; -import androidx.room.Delete; -import androidx.room.Insert; -import androidx.room.OnConflictStrategy; -import androidx.room.Query; - -import java.util.List; - -@Dao -public interface SMSDao { - - @Query("SELECT * FROM sms") - List getAll(); - - @Query("SELECT * FROM sms WHERE id IN (:smsIds)") - List loadAllByIds(int[] smsIds); - - @Insert(onConflict = OnConflictStrategy.REPLACE) - void insertAll(SMS... sms); - - - @Delete - void delete(SMS sms); - -} \ No newline at end of file +//package com.vernu.sms.database.local; +// +//import androidx.room.Dao; +//import androidx.room.Delete; +//import androidx.room.Insert; +//import androidx.room.OnConflictStrategy; +//import androidx.room.Query; +// +//import java.util.List; +// +//@Dao +//public interface SMSDao { +// +// @Query("SELECT * FROM sms") +// List getAll(); +// +// @Query("SELECT * FROM sms WHERE id IN (:smsIds)") +// List loadAllByIds(int[] smsIds); +// +// @Insert(onConflict = OnConflictStrategy.REPLACE) +// void insertAll(SMS... sms); +// +// +// @Delete +// void delete(SMS sms); +// +//} \ No newline at end of file diff --git a/android/app/src/main/java/com/vernu/sms/dtos/SMSDTO.java b/android/app/src/main/java/com/vernu/sms/dtos/SMSDTO.java index b09b7d0..c73fc18 100644 --- a/android/app/src/main/java/com/vernu/sms/dtos/SMSDTO.java +++ b/android/app/src/main/java/com/vernu/sms/dtos/SMSDTO.java @@ -4,7 +4,7 @@ import java.util.Date; public class SMSDTO { private String sender; - private String message; + private String message = ""; private Date receivedAt; public SMSDTO() { diff --git a/android/app/src/main/java/com/vernu/sms/receivers/SMSBroadcastReceiver.java b/android/app/src/main/java/com/vernu/sms/receivers/SMSBroadcastReceiver.java index 24cc63a..2e7ab55 100644 --- a/android/app/src/main/java/com/vernu/sms/receivers/SMSBroadcastReceiver.java +++ b/android/app/src/main/java/com/vernu/sms/receivers/SMSBroadcastReceiver.java @@ -8,15 +8,12 @@ import android.telephony.SmsMessage; import android.util.Log; import com.vernu.sms.ApiManager; import com.vernu.sms.AppConstants; -import com.vernu.sms.database.local.AppDatabase; -import com.vernu.sms.database.local.SMS; import com.vernu.sms.dtos.SMSDTO; import com.vernu.sms.dtos.SMSForwardResponseDTO; import com.vernu.sms.helpers.SharedPreferenceHelper; import java.util.Date; import java.util.Objects; -import java.util.concurrent.Executors; import retrofit2.Call; import retrofit2.Response; @@ -48,52 +45,57 @@ public class SMSBroadcastReceiver extends BroadcastReceiver { return; } - SMS localReceivedSMS = new SMS(); - localReceivedSMS.setType("RECEIVED"); - for (SmsMessage message : messages) { - localReceivedSMS.setMessage(localReceivedSMS.getMessage() + message.getMessageBody()); - localReceivedSMS.setSender(message.getOriginatingAddress()); - localReceivedSMS.setReceivedAt(new Date(message.getTimestampMillis())); - } +// SMS receivedSMS = new SMS(); +// receivedSMS.setType("RECEIVED"); +// for (SmsMessage message : messages) { +// receivedSMS.setMessage(receivedSMS.getMessage() + message.getMessageBody()); +// receivedSMS.setSender(message.getOriginatingAddress()); +// receivedSMS.setReceivedAt(new Date(message.getTimestampMillis())); +// } SMSDTO receivedSMSDTO = new SMSDTO(); - receivedSMSDTO.setSender(localReceivedSMS.getSender()); - receivedSMSDTO.setMessage(localReceivedSMS.getMessage()); - receivedSMSDTO.setReceivedAt(localReceivedSMS.getReceivedAt()); + + for (SmsMessage message : messages) { + receivedSMSDTO.setMessage(receivedSMSDTO.getMessage() + message.getMessageBody()); + receivedSMSDTO.setSender(message.getOriginatingAddress()); + receivedSMSDTO.setReceivedAt(new Date(message.getTimestampMillis())); + } +// receivedSMSDTO.setSender(receivedSMS.getSender()); +// receivedSMSDTO.setMessage(receivedSMS.getMessage()); +// receivedSMSDTO.setReceivedAt(receivedSMS.getReceivedAt()); Call apiCall = ApiManager.getApiService().sendReceivedSMS(deviceId, apiKey, receivedSMSDTO); apiCall.enqueue(new retrofit2.Callback() { @Override public void onResponse(Call call, Response response) { - Date now = new Date(); +// Date now = new Date(); if (response.isSuccessful()) { Log.d(TAG, "SMS sent to server successfully"); - localReceivedSMS.setLastAcknowledgedRequestAt(now); - localReceivedSMS.setServerAcknowledgedAt(now); - updateLocalReceivedSMS(localReceivedSMS, context); +// receivedSMS.setLastAcknowledgedRequestAt(now); +// receivedSMS.setServerAcknowledgedAt(now); +// updateLocalReceivedSMS(receivedSMS, context); } else { Log.e(TAG, "Failed to send SMS to server"); - localReceivedSMS.setServerAcknowledgedAt(null); - localReceivedSMS.setLastAcknowledgedRequestAt(now); - // localReceivedSMS.setRetryCount(localReceivedSMS.getRetryCount() + 1); - updateLocalReceivedSMS(localReceivedSMS, context); +// receivedSMS.setServerAcknowledgedAt(null); +// receivedSMS.setLastAcknowledgedRequestAt(now); +// receivedSMS.setRetryCount(localReceivedSMS.getRetryCount() + 1); +// updateLocalReceivedSMS(receivedSMS, context); } } @Override public void onFailure(Call call, Throwable t) { Log.e(TAG, "Failed to send SMS to server", t); - localReceivedSMS.setServerAcknowledgedAt(null); - localReceivedSMS.setLastAcknowledgedRequestAt(new Date()); - updateLocalReceivedSMS(localReceivedSMS, context); +// receivedSMS.setServerAcknowledgedAt(null); +// receivedSMS.setLastAcknowledgedRequestAt(new Date()); +// updateLocalReceivedSMS(receivedSMS, context); } }); } - private void updateLocalReceivedSMS(SMS localReceivedSMS, Context context) { - Executors.newSingleThreadExecutor().execute(() -> { - AppDatabase appDatabase = AppDatabase.getInstance(context); - appDatabase.localReceivedSMSDao().insertAll(localReceivedSMS); - }); - - } +// private void updateLocalReceivedSMS(SMS localReceivedSMS, Context context) { +// Executors.newSingleThreadExecutor().execute(() -> { +// AppDatabase appDatabase = AppDatabase.getInstance(context); +// appDatabase.localReceivedSMSDao().insertAll(localReceivedSMS); +// }); +// } } \ No newline at end of file