Skip to content

Commit 2c195a1

Browse files
committed
Add more support for dual sim phones
1 parent db942bf commit 2c195a1

File tree

17 files changed

+289
-215
lines changed

17 files changed

+289
-215
lines changed

android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,13 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
123123
return Result.failure()
124124
}
125125

126-
if (!Settings.getActiveStatus(applicationContext)) {
127-
Timber.w("user is not active, stopping processing")
126+
val message = getMessage(applicationContext, messageID) ?: return Result.failure()
127+
if (!Settings.getActiveStatus(applicationContext, message.sim)) {
128+
Timber.w("[${message.sim}] SIM is not active, stopping processing")
128129
handleFailed(applicationContext, messageID)
129130
return Result.failure()
130131
}
131132

132-
val message = getMessage(applicationContext, messageID) ?: return Result.failure()
133133
val parts = getMessageParts(applicationContext, message)
134134
if (parts.size == 1) {
135135
return handleSingleMessage(applicationContext, message)

android/app/src/main/java/com/httpsms/HttpSmsApiService.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,15 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) {
6969
sendEvent(messageId, "FAILED", timestamp, reason)
7070
}
7171

72-
fun receive(from: String, to: String, content: String, timestamp: ZonedDateTime) {
72+
fun receive(sim: String, from: String, to: String, content: String, timestamp: ZonedDateTime) {
7373
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'000000'ZZZZZ")
7474
val timestampString = formatter.format(timestamp).replace("+", "Z")
7575

7676

7777
val body = """
7878
{
7979
"content": "${StringEscapeUtils.escapeJson(content)}",
80+
"sim": "$sim",
8081
"from": "$from",
8182
"timestamp": "$timestampString",
8283
"to": "$to"

android/app/src/main/java/com/httpsms/LoginActivity.kt

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import android.annotation.SuppressLint
55
import android.content.Context
66
import android.content.Intent
77
import android.content.pm.PackageManager
8+
import android.os.Build
89
import android.os.Bundle
910
import android.telephony.PhoneNumberUtils
1011
import android.telephony.TelephonyManager
1112
import android.view.View
1213
import android.webkit.URLUtil
1314
import android.widget.LinearLayout
15+
import androidx.activity.result.contract.ActivityResultContracts
1416
import androidx.appcompat.app.AppCompatActivity
1517
import androidx.core.app.ActivityCompat
1618
import androidx.lifecycle.MutableLiveData
@@ -32,15 +34,28 @@ class LoginActivity : AppCompatActivity() {
3234
setServerURL()
3335
}
3436

37+
override fun onStart() {
38+
super.onStart()
39+
Timber.i("on start")
40+
requestPermissions()
41+
}
42+
43+
override fun onResume() {
44+
super.onResume()
45+
}
46+
3547
private fun registerListeners() {
3648
loginButton().setOnClickListener { onLoginClick() }
3749
}
3850

3951
private fun disableSim2() {
4052
if (SmsManagerService.isDualSIM(this)) {
4153
Timber.d("dual sim detected")
54+
val sim2Layout = findViewById<LinearLayout>(R.id.loginPhoneNumberLayoutSIM2)
55+
sim2Layout.visibility = LinearLayout.VISIBLE
4256
return
4357
}
58+
Timber.e("is dual sim ${SmsManagerService.isDualSIM(this)}")
4459
val sim2Layout = findViewById<LinearLayout>(R.id.loginPhoneNumberLayoutSIM2)
4560
sim2Layout.visibility = View.GONE
4661
}
@@ -54,7 +69,7 @@ class LoginActivity : AppCompatActivity() {
5469

5570
val phoneInput = findViewById<TextInputEditText>(R.id.loginPhoneNumberInputSIM1)
5671
phoneInput.setText(phoneNumber)
57-
Timber.d("phone number [$phoneNumber] set successfully")
72+
Timber.d("[SIM1] phone number [$phoneNumber] set successfully")
5873
}
5974

6075
private fun setServerURL() {
@@ -88,6 +103,31 @@ class LoginActivity : AppCompatActivity() {
88103
return telephonyManager.line1Number
89104
}
90105

106+
private fun requestPermissions() {
107+
Timber.d("requesting permissions")
108+
val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
109+
permissions.entries.forEach {
110+
Timber.d("${it.key} = ${it.value}")
111+
}
112+
}
113+
114+
var permissions = arrayOf(
115+
Manifest.permission.SEND_SMS,
116+
Manifest.permission.RECEIVE_SMS,
117+
Manifest.permission.READ_PHONE_NUMBERS,
118+
Manifest.permission.READ_SMS,
119+
Manifest.permission.READ_PHONE_STATE
120+
)
121+
122+
if(Build.VERSION.SDK_INT >= 33) {
123+
permissions += Manifest.permission.POST_NOTIFICATIONS
124+
}
125+
126+
requestPermissionLauncher.launch(permissions)
127+
128+
Timber.d("creating permissions launcher")
129+
}
130+
91131

92132
private fun onLoginClick() {
93133
Timber.d("login button clicked")
@@ -132,7 +172,7 @@ class LoginActivity : AppCompatActivity() {
132172
!PhoneNumberUtils.isWellFormedSmsAddress(phoneNumber.text.toString()) ||
133173
!PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber.text.toString())
134174
) {
135-
Timber.e("phone number [${phoneNumber.text.toString()}] is not valid")
175+
Timber.e("[SIM1] phone number [${phoneNumber.text.toString()}] is not valid")
136176
resetView()
137177
phoneNumberLayout.error = "Invalid E.164 phone number"
138178
return
@@ -144,7 +184,7 @@ class LoginActivity : AppCompatActivity() {
144184
!PhoneNumberUtils.isGlobalPhoneNumber(phoneNumberSIM2.text.toString())
145185
)
146186
) {
147-
Timber.e("phone number [${phoneNumberSIM2.text.toString()}] is not valid")
187+
Timber.e("[SIM2] phone number [${phoneNumberSIM2.text.toString()}] is not valid")
148188
resetView()
149189
phoneNumberLayoutSIM2.error = "Invalid E.164 phone number"
150190
return

0 commit comments

Comments
 (0)