diff --git a/android/app/build.gradle b/android/app/build.gradle
index a9fa6c1..31e978b 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -10,8 +10,8 @@ android {
applicationId "com.vernu.sms"
minSdk 24
targetSdk 32
- versionCode 7
- versionName "2.0"
+ versionCode 8
+ versionName "2.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index c9cfaa5..a84989d 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.vernu.sms">
+
{
+ RadioButton radioButton = new RadioButton(mContext);
+ radioButton.setText(subscriptionInfo.getDisplayName().toString());
+ radioButton.setId(subscriptionInfo.getSubscriptionId());
+ radioButton.setOnClickListener(view -> {
+ SharedPreferenceHelper.setSharedPreferenceInt(mContext, "PREFERED_SIM", subscriptionInfo.getSubscriptionId());
+ });
+ radioButton.setChecked(subscriptionInfo.getSubscriptionId() == SharedPreferenceHelper.getSharedPreferenceInt(mContext, "PREFERED_SIM", 0));
+ defaultSimSlotRadioGroup.addView(radioButton);
+ });
+
deviceIdTxt.setText(deviceId);
deviceBrandAndModelTxt.setText(Build.BRAND + " " + Build.MODEL);
- if(deviceId == null || deviceId.isEmpty()) {
+ if (deviceId == null || deviceId.isEmpty()) {
registerDeviceBtn.setText("Register");
} else {
registerDeviceBtn.setText("Update");
}
- if (isSMSPermissionGranted(mContext)) {
+ if (isSMSPermissionGranted(mContext) && isReadPhoneStatePermissionGranted(mContext)) {
grantSMSPermissionBtn.setEnabled(false);
grantSMSPermissionBtn.setText("SMS Permission Granted");
} else {
@@ -157,6 +179,7 @@ public class MainActivity extends AppCompatActivity {
intentIntegrator.initiateScan();
});
+ getAvailableSimSlots();
}
@@ -236,17 +259,14 @@ public class MainActivity extends AppCompatActivity {
}
private void handleSMSRequestPermission(View view) {
- if (isSMSPermissionGranted(mContext)) {
+ if (isSMSPermissionGranted(mContext) && isReadPhoneStatePermissionGranted(mContext)) {
Snackbar.make(view, "Already got permissions", Snackbar.LENGTH_SHORT).show();
} else {
- if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.SEND_SMS)) {
- Snackbar.make(view, "PERMISSION DENIED, Pls grant SMS Permission in app settings", Snackbar.LENGTH_SHORT).show();
- } else {
- Snackbar.make(view, "Grant SMS Permissions to continue", Snackbar.LENGTH_SHORT).show();
- ActivityCompat.requestPermissions(MainActivity.this,
- new String[]{Manifest.permission.SEND_SMS},
- SEND_SMS_PERMISSION_REQUEST_CODE);
- }
+ Snackbar.make(view, "Grant SMS Permissions to continue", Snackbar.LENGTH_SHORT).show();
+ ActivityCompat.requestPermissions(MainActivity.this,
+ new String[]{Manifest.permission.SEND_SMS, Manifest.permission.READ_PHONE_STATE
+ }, SEND_SMS_PERMISSION_REQUEST_CODE);
+
}
}
@@ -272,4 +292,19 @@ public class MainActivity extends AppCompatActivity {
private boolean isSMSPermissionGranted(Context context) {
return ContextCompat.checkSelfPermission(context, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED;
}
+
+ private boolean isReadPhoneStatePermissionGranted(Context context) {
+ return ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED;
+ }
+
+ private List getAvailableSimSlots() {
+
+ SubscriptionManager subscriptionManager = SubscriptionManager.from(mContext);
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
+ return new ArrayList<>();
+ }
+
+ return subscriptionManager.getActiveSubscriptionInfoList();
+
+ }
}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/vernu/sms/helpers/SMSHelper.java b/android/app/src/main/java/com/vernu/sms/helpers/SMSHelper.java
index 0cfa2f3..88c4c26 100644
--- a/android/app/src/main/java/com/vernu/sms/helpers/SMSHelper.java
+++ b/android/app/src/main/java/com/vernu/sms/helpers/SMSHelper.java
@@ -17,4 +17,9 @@ public class SMSHelper {
}
}
+
+ public static void sendSMSFromSpecificSim(String phoneNo, String message, int simSlot) {
+ SmsManager smsManager = SmsManager.getSmsManagerForSubscriptionId(simSlot);
+ smsManager.sendMultipartTextMessage(phoneNo, null, smsManager.divideMessage(message), null, null);
+ }
}
diff --git a/android/app/src/main/java/com/vernu/sms/models/SMSPayload.java b/android/app/src/main/java/com/vernu/sms/models/SMSPayload.java
index b1af10a..4e5417a 100644
--- a/android/app/src/main/java/com/vernu/sms/models/SMSPayload.java
+++ b/android/app/src/main/java/com/vernu/sms/models/SMSPayload.java
@@ -1,11 +1,27 @@
package com.vernu.sms.models;
public class SMSPayload {
- public String[] receivers;
- public String smsBody;
+ private String[] receivers;
+ private String smsBody;
public SMSPayload(String[] receivers, String smsBody) {
this.receivers = receivers;
this.smsBody = smsBody;
}
+
+ public String[] getReceivers() {
+ return receivers;
+ }
+
+ public void setReceivers(String[] receivers) {
+ this.receivers = receivers;
+ }
+
+ public String getSmsBody() {
+ return smsBody;
+ }
+
+ public void setSmsBody(String smsBody) {
+ this.smsBody = smsBody;
+ }
}
diff --git a/android/app/src/main/java/com/vernu/sms/services/FCMService.java b/android/app/src/main/java/com/vernu/sms/services/FCMService.java
index 00c24ea..1cbae80 100644
--- a/android/app/src/main/java/com/vernu/sms/services/FCMService.java
+++ b/android/app/src/main/java/com/vernu/sms/services/FCMService.java
@@ -18,6 +18,7 @@ import com.google.gson.Gson;
import com.vernu.sms.R;
import com.vernu.sms.activities.MainActivity;
import com.vernu.sms.helpers.SMSHelper;
+import com.vernu.sms.helpers.SharedPreferenceHelper;
import com.vernu.sms.models.SMSPayload;
@@ -36,16 +37,19 @@ public class FCMService extends FirebaseMessagingService {
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
- // sendNotification("data msg received ", remoteMessage.getData().toString());
- int len = smsPayload.receivers.length;
- if (len > 0) {
- for (int i = 0; i < len; i++) {
- SMSHelper.sendSMS(smsPayload.receivers[i], smsPayload.smsBody);
+
+ for (String receiver : smsPayload.getReceivers()) {
+ int preferedSim = SharedPreferenceHelper.getSharedPreferenceInt(this, "PREFERED_SIM", 0);
+ try {
+ SMSHelper.sendSMSFromSpecificSim(receiver, smsPayload.getSmsBody(), preferedSim);
+ } catch(Exception e) {
+ Log.d("SMS_SEND_ERROR", e.getMessage());
+ SMSHelper.sendSMS(receiver, smsPayload.getSmsBody());
}
}
}
- // Check if message contains a notification payload.
+ // TODO: Handle FCM Notification Messages
if (remoteMessage.getNotification() != null) {
// sendNotification("notif msg", "msg body");
}
diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml
index 11c26d1..a65d865 100644
--- a/android/app/src/main/res/layout/activity_main.xml
+++ b/android/app/src/main/res/layout/activity_main.xml
@@ -35,6 +35,24 @@
android:layout_height="wrap_content"
android:text="Grant SMS Permission"
android:visibility="visible" />
+
+
+
+
+
+