Skip to content

Commit e6a1720

Browse files
committed
add a broadcast receiver to update phone is_dual_sim when the phone state changes.
1 parent 4992445 commit e6a1720

3 files changed

Lines changed: 54 additions & 0 deletions

File tree

android/app/src/main/AndroidManifest.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,15 @@
6969
</intent-filter>
7070
</receiver>
7171

72+
<receiver android:enabled="true"
73+
android:name=".receivers.SimChangeReceiver"
74+
android:exported="true"
75+
android:permission="android.permission.READ_PHONE_STATE">
76+
<intent-filter>
77+
<action android:name="android.intent.action.SIM_STATE_CHANGED"/>
78+
</intent-filter>
79+
</receiver>
80+
7281

7382
<meta-data
7483
android:name="com.google.firebase.messaging.default_notification_channel_id"

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.app.NotificationChannel
55
import android.app.NotificationManager
66
import android.content.Context
77
import android.content.Intent
8+
import android.content.IntentFilter
89
import android.content.pm.PackageManager
910
import android.os.Build
1011
import android.os.Bundle
@@ -25,6 +26,7 @@ import com.google.android.material.button.MaterialButton
2526
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2627
import com.google.android.material.progressindicator.LinearProgressIndicator
2728
import com.google.android.material.switchmaterial.SwitchMaterial
29+
import com.httpsms.receivers.SimChangeReceiver
2830
import com.httpsms.services.StickyNotificationService
2931
import com.httpsms.worker.HeartbeatWorker
3032
import okhttp3.internal.format
@@ -63,6 +65,7 @@ class MainActivity : AppCompatActivity() {
6365
setLastHeartbeatTimestamp(this)
6466
setVersion()
6567
setHeartbeatListener(this)
68+
registerReceivers()
6669
}
6770

6871
override fun onResume() {
@@ -172,6 +175,9 @@ class MainActivity : AppCompatActivity() {
172175
findViewById<MaterialButton>(R.id.mainLogoutButton).setOnClickListener { onLogoutClick() }
173176
}
174177

178+
private fun registerReceivers() {
179+
registerReceiver(SimChangeReceiver(), IntentFilter("android.intent.action.SIM_STATE_CHANGED"))
180+
}
175181
private fun onLogoutClick() {
176182
Timber.d("logout button clicked")
177183
MaterialAlertDialogBuilder(this)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.httpsms.receivers
2+
3+
import android.content.BroadcastReceiver
4+
import android.content.Context
5+
import android.content.Intent
6+
import com.httpsms.HttpSmsApiService
7+
import com.httpsms.Settings
8+
import com.httpsms.SmsManagerService
9+
import timber.log.Timber
10+
11+
12+
class SimChangeReceiver : BroadcastReceiver() {
13+
private var lastDualSIMState: Boolean = false
14+
override fun onReceive(context: Context, intent: Intent) {
15+
Timber.d("SIM state changed")
16+
17+
Thread {
18+
val currentTimeStamp = System.currentTimeMillis()
19+
val isDualSIM = SmsManagerService.isDualSIM(context)
20+
if (isDualSIM == lastDualSIMState) {
21+
return@Thread
22+
}
23+
val updated = HttpSmsApiService.create(context).updatePhone(
24+
Settings.getOwnerOrDefault(context),
25+
Settings.getFcmToken(context) ?: "",
26+
isDualSIM
27+
)
28+
29+
if (updated) {
30+
lastDualSIMState = isDualSIM
31+
Settings.setFcmTokenLastUpdateTimestampAsync(context, currentTimeStamp)
32+
Timber.i("fcm token uploaded successfully")
33+
return@Thread
34+
}
35+
36+
Timber.e("could not update fcm token")
37+
}.start()
38+
}
39+
}

0 commit comments

Comments
 (0)