diff --git a/android/app/src/main/java/com/vernu/sms/activities/MainActivity.java b/android/app/src/main/java/com/vernu/sms/activities/MainActivity.java index 11690ce..719658c 100644 --- a/android/app/src/main/java/com/vernu/sms/activities/MainActivity.java +++ b/android/app/src/main/java/com/vernu/sms/activities/MainActivity.java @@ -27,16 +27,12 @@ import com.vernu.sms.ApiManager; import com.vernu.sms.AppConstants; import com.vernu.sms.BuildConfig; import com.vernu.sms.TextBeeUtils; -import com.vernu.sms.database.local.AppDatabase; -import com.vernu.sms.database.local.SMS; import com.vernu.sms.R; import com.vernu.sms.dtos.RegisterDeviceInputDTO; import com.vernu.sms.dtos.RegisterDeviceResponseDTO; import com.vernu.sms.helpers.SharedPreferenceHelper; import java.util.Arrays; -import java.util.List; import java.util.Objects; -import java.util.concurrent.Executors; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -44,7 +40,7 @@ import retrofit2.Response; public class MainActivity extends AppCompatActivity { private Context mContext; - private Switch gatewaySwitch; + private Switch gatewaySwitch, receiveSMSSwitch; private EditText apiKeyEditText, fcmTokenEditText; private Button registerDeviceBtn, grantSMSPermissionBtn, scanQRBtn; private ImageButton copyDeviceIdImgBtn; @@ -63,6 +59,7 @@ public class MainActivity extends AppCompatActivity { deviceId = SharedPreferenceHelper.getSharedPreferenceString(mContext, AppConstants.SHARED_PREFS_DEVICE_ID_KEY, ""); setContentView(R.layout.activity_main); gatewaySwitch = findViewById(R.id.gatewaySwitch); + receiveSMSSwitch = findViewById(R.id.receiveSMSSwitch); apiKeyEditText = findViewById(R.id.apiKeyEditText); fcmTokenEditText = findViewById(R.id.fcmTokenEditText); registerDeviceBtn = findViewById(R.id.registerDeviceBtn); @@ -85,7 +82,7 @@ public class MainActivity extends AppCompatActivity { String[] missingPermissions = Arrays.stream(AppConstants.requiredPermissions).filter(permission -> !TextBeeUtils.isPermissionGranted(mContext, permission)).toArray(String[]::new); if (missingPermissions.length == 0) { grantSMSPermissionBtn.setEnabled(false); - grantSMSPermissionBtn.setText("SMS Permission Granted"); + grantSMSPermissionBtn.setText("Permission Granted"); renderAvailableSimOptions(); } else { Snackbar.make(grantSMSPermissionBtn, "Please Grant Required Permissions to continue: " + Arrays.toString(missingPermissions), Snackbar.LENGTH_SHORT).show(); @@ -142,6 +139,15 @@ public class MainActivity extends AppCompatActivity { } }); }); + + receiveSMSSwitch.setChecked(SharedPreferenceHelper.getSharedPreferenceBoolean(mContext, AppConstants.SHARED_PREFS_RECEIVE_SMS_ENABLED_KEY, false)); + receiveSMSSwitch.setOnCheckedChangeListener((compoundButton, isCheked) -> { + View view = compoundButton.getRootView(); + SharedPreferenceHelper.setSharedPreferenceBoolean(mContext, AppConstants.SHARED_PREFS_RECEIVE_SMS_ENABLED_KEY, isCheked); + compoundButton.setChecked(isCheked); + Snackbar.make(view, "Receive SMS " + (isCheked ? "enabled" : "disabled"), Snackbar.LENGTH_LONG).show(); + }); + // TODO: check gateway status/api key/device validity and update UI accordingly registerDeviceBtn.setOnClickListener(view -> handleRegisterDevice()); scanQRBtn.setOnClickListener(view -> { 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 6104ef4..fdaffaa 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 @@ -12,15 +12,41 @@ import java.util.Date; @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; @@ -28,14 +54,9 @@ public class SMS { @ColumnInfo(name = "type") private String type; - @ColumnInfo(name = "server_acknowledged_at") private Date serverAcknowledgedAt; - public SMS() { - type = null; - } - public boolean hasServerAcknowledged() { return serverAcknowledgedAt != null; } @@ -54,6 +75,14 @@ public class SMS { this.id = id; } + public String get_id() { + return _id; + } + + public void set_id(String _id) { + this._id = _id; + } + public String getMessage() { return message; } @@ -62,6 +91,22 @@ public class SMS { 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; } @@ -70,6 +115,14 @@ public class SMS { this.sender = sender; } + public String getRecipient() { + return recipient; + } + + public void setRecipient(String recipient) { + this.recipient = recipient; + } + public Date getServerAcknowledgedAt() { return serverAcknowledgedAt; } @@ -78,6 +131,32 @@ public class SMS { 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; } diff --git a/android/app/src/main/java/com/vernu/sms/services/GatewayApiService.java b/android/app/src/main/java/com/vernu/sms/services/GatewayApiService.java index 7d78ba7..b1fffec 100644 --- a/android/app/src/main/java/com/vernu/sms/services/GatewayApiService.java +++ b/android/app/src/main/java/com/vernu/sms/services/GatewayApiService.java @@ -19,6 +19,6 @@ public interface GatewayApiService { @PATCH("gateway/devices/{deviceId}") Call updateDevice(@Path("deviceId") String deviceId, @Header("x-api-key") String apiKey, @Body() RegisterDeviceInputDTO body); - @POST("gateway/devices/{deviceId}/receivedSMS") + @POST("gateway/devices/{deviceId}/receiveSMS") Call sendReceivedSMS(@Path("deviceId") String deviceId, @Header("x-api-key") String apiKey, @Body() SMSDTO body); } \ No newline at end of file