diff --git a/android/app/build.gradle b/android/app/build.gradle index 9bf8284..dbf4ff3 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -14,6 +14,12 @@ android { versionName "2.2.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + javaCompileOptions { + annotationProcessorOptions { + arguments["room.schemaLocation"] = "$projectDir/schemas" + } + } } buildTypes { @@ -46,4 +52,9 @@ dependencies { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.journeyapps:zxing-android-embedded:4.1.0' -} \ No newline at end of file + + 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/java/com/vernu/sms/database/local/AppDatabase.java b/android/app/src/main/java/com/vernu/sms/database/local/AppDatabase.java new file mode 100644 index 0000000..af83306 --- /dev/null +++ b/android/app/src/main/java/com/vernu/sms/database/local/AppDatabase.java @@ -0,0 +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 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 new file mode 100644 index 0000000..aa68080 --- /dev/null +++ b/android/app/src/main/java/com/vernu/sms/database/local/DateConverter.java @@ -0,0 +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 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 new file mode 100644 index 0000000..6104ef4 --- /dev/null +++ b/android/app/src/main/java/com/vernu/sms/database/local/SMS.java @@ -0,0 +1,114 @@ +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 { + + @PrimaryKey(autoGenerate = true) + private int id; + + @ColumnInfo(name = "message") + private String message = ""; + + @ColumnInfo(name = "sender") + private String sender; + + @ColumnInfo(name = "received_at") + private Date receivedAt; + + @NonNull + @ColumnInfo(name = "type") + private String type; + + + @ColumnInfo(name = "server_acknowledged_at") + private Date serverAcknowledgedAt; + + public SMS() { + type = null; + } + + 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 getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public Date getServerAcknowledgedAt() { + return serverAcknowledgedAt; + } + + public void setServerAcknowledgedAt(Date serverAcknowledgedAt) { + this.serverAcknowledgedAt = serverAcknowledgedAt; + } + + 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 new file mode 100644 index 0000000..f377cc4 --- /dev/null +++ b/android/app/src/main/java/com/vernu/sms/database/local/SMSDao.java @@ -0,0 +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 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 new file mode 100644 index 0000000..b09b7d0 --- /dev/null +++ b/android/app/src/main/java/com/vernu/sms/dtos/SMSDTO.java @@ -0,0 +1,42 @@ +package com.vernu.sms.dtos; + +import java.util.Date; + +public class SMSDTO { + private String sender; + private String message; + private Date receivedAt; + + public SMSDTO() { + } + + public SMSDTO(String sender, String message, Date receivedAt) { + this.sender = sender; + this.message = message; + this.receivedAt = receivedAt; + } + + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Date getReceivedAt() { + return receivedAt; + } + + public void setReceivedAt(Date receivedAt) { + this.receivedAt = receivedAt; + } +}