Skip to content

Commit 5d375dd

Browse files
committed
Add shared settings
1 parent 3ec953d commit 5d375dd

7 files changed

Lines changed: 108 additions & 44 deletions

File tree

android/app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ dependencies {
3939
implementation 'com.google.firebase:firebase-analytics-ktx'
4040
implementation 'com.google.firebase:firebase-messaging-ktx'
4141
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
42+
implementation 'androidx.preference:preference:1.2.0'
4243
implementation 'androidx.work:work-runtime-ktx:2.7.1'
4344
implementation 'androidx.core:core-ktx:1.8.0'
4445
implementation "androidx.cardview:cardview:1.0.0"

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ package com.httpsms
22

33
class Constants {
44
companion object {
5-
const val KEY_MESSAGE_ID = "MESSAGE_ID"
5+
const val KEY_MESSAGE_ID = "KEY_MESSAGE_ID"
66
}
7-
}
7+
}

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

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.content.Context
55
import android.content.Intent
66
import android.content.IntentFilter
77
import android.util.Log
8+
import androidx.preference.PreferenceManager
89
import androidx.work.OneTimeWorkRequest
910
import androidx.work.WorkManager
1011
import androidx.work.Worker
@@ -17,19 +18,8 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
1718

1819
// [START receive_message]
1920
override fun onMessageReceived(remoteMessage: RemoteMessage) {
20-
// TODO(developer): Handle FCM messages here.
21-
// Not getting messages here? See why this may be: https://goo.gl/39bRNJ
22-
Log.d(TAG, "From: ${remoteMessage.from}")
23-
21+
Log.d(TAG, MyFirebaseMessagingService::onMessageReceived.name)
2422
scheduleJob()
25-
26-
// Check if message contains a notification payload.
27-
remoteMessage.notification?.let {
28-
Log.d(TAG, "Message Notification Body: ${it.body}")
29-
}
30-
31-
// Also if you intend on generating your own notifications as a result of a received FCM
32-
// message, here is where that should be initiated. See sendNotification method below.
3323
}
3424
// [END receive_message]
3525

@@ -61,7 +51,6 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
6151
// [END dispatch_job]
6252
}
6353
private fun sendRegistrationToServer(token: String?) {
64-
// TODO: Implement this method to send token to your app server.
6554
Log.d(TAG, "sendRegistrationTokenToServer($token)")
6655
}
6756

@@ -71,7 +60,8 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
7160

7261
internal class SendSmsWorker(appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams) {
7362
override fun doWork(): Result {
74-
val message = getMessage() ?: return Result.failure()
63+
val owner = Settings.getOwner(applicationContext) ?: return Result.failure()
64+
val message = getMessage(owner) ?: return Result.failure()
7565

7666
registerReceivers()
7767

@@ -84,12 +74,12 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
8474
return Result.success()
8575
}
8676

87-
private fun getMessage(): Message? {
88-
Log.i(TAG, "fetching message")
89-
val messages = HttpSmsApiService().getOutstandingMessages()
77+
private fun getMessage(owner: String): Message? {
78+
Log.d(TAG, "fetching message")
79+
val messages = HttpSmsApiService().getOutstandingMessages(owner)
9080

9181
if (messages.isNotEmpty()) {
92-
Log.i(TAG, "fetched message with ID [${messages.first().id}]")
82+
Log.d(TAG, "fetched message with ID [${messages.first().id}]")
9383
return messages.first()
9484
}
9585

@@ -98,9 +88,9 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
9888
}
9989

10090
private fun sendMessage(message: Message, sentIntent: PendingIntent, deliveredIntent: PendingIntent) {
101-
Log.i(TAG, "sending SMS for message with ID [${message.id}]")
91+
Log.d(TAG, "sending SMS for message with ID [${message.id}]")
10292
SmsManagerService().sendMessage(this.applicationContext, message, sentIntent, deliveredIntent)
103-
Log.i(TAG, "sent SMS for message with ID [${message.id}]")
93+
Log.d(TAG, "sent SMS for message with ID [${message.id}]")
10494
}
10595

10696

@@ -120,8 +110,6 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
120110
val intent = Intent(action)
121111
intent.putExtra(Constants.KEY_MESSAGE_ID, message.id)
122112

123-
Log.w(TAG, "message id = [${intent.getStringExtra(Constants.KEY_MESSAGE_ID)}]")
124-
125113
return PendingIntent.getBroadcast(
126114
this.applicationContext,
127115
0,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ class HttpSmsApiService {
2020
getLogger(OkHttpClient::class.java.name).level = Level.FINE
2121
}
2222

23-
fun getOutstandingMessages(): List<Message> {
23+
fun getOutstandingMessages(owner: String): List<Message> {
2424
val client = OkHttpClient()
2525

2626
val request: Request = Request.Builder()
27-
.url(baseURL.resolve("/v1/messages/outstanding").toURL())
27+
.url(baseURL.resolve("/v1/messages/outstanding?owner=${owner}").toURL())
2828
.build()
2929

3030
val response = client.newCall(request).execute()

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

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@ import android.annotation.SuppressLint
66
import android.app.NotificationChannel
77
import android.app.NotificationManager
88
import android.content.Context
9-
import android.content.Intent
109
import android.content.pm.PackageManager
1110
import android.os.Bundle
1211
import android.telephony.PhoneNumberUtils
1312
import android.telephony.TelephonyManager
14-
import android.util.Log
1513
import android.widget.TextView
1614
import android.widget.Toast
1715
import androidx.activity.result.contract.ActivityResultContracts
1816
import androidx.appcompat.app.AppCompatActivity
1917
import androidx.core.app.ActivityCompat
18+
import com.google.android.material.switchmaterial.SwitchMaterial
2019
import java.util.*
2120

2221

@@ -29,16 +28,6 @@ class MainActivity : AppCompatActivity() {
2928
super.onCreate(savedInstanceState)
3029
setContentView(R.layout.activity_main)
3130

32-
val intent = Intent("testing")
33-
intent.putExtra(Constants.KEY_MESSAGE_ID, "123")
34-
35-
Log.w(TAG, "message id = [${intent.getStringExtra(Constants.KEY_MESSAGE_ID)}]")
36-
37-
val phoneNumber = getPhoneNumber(this)
38-
39-
val titleText = findViewById<TextView>(R.id.cardPhoneNumber)
40-
titleText.text = PhoneNumberUtils.formatNumber(phoneNumber, Locale.getDefault().country)
41-
4231
createChannel()
4332

4433
requestPermission(this, Manifest.permission.SEND_SMS)
@@ -47,8 +36,22 @@ class MainActivity : AppCompatActivity() {
4736
requestPermission(this, Manifest.permission.READ_PHONE_STATE)
4837
requestPermission(this, Manifest.permission.RECEIVE_SMS)
4938

39+
setOwner(getPhoneNumber(this))
40+
setActiveStatus(this)
41+
}
42+
43+
private fun setActiveStatus(context: Context) {
44+
val switch = findViewById<SwitchMaterial>(R.id.cardSwitch)
45+
switch.isChecked = Settings.getActiveStatus(context)
46+
switch.setOnCheckedChangeListener{
47+
_, isChecked -> Settings.setActiveStatusAsync(context, isChecked)
48+
}
5049
}
5150

51+
private fun setOwner(phoneNumber: String) {
52+
val titleText = findViewById<TextView>(R.id.cardPhoneNumber)
53+
titleText.text = PhoneNumberUtils.formatNumber(phoneNumber, Locale.getDefault().country)
54+
}
5255

5356
private fun createChannel() {
5457
// Create the NotificationChannel
@@ -77,9 +80,14 @@ class MainActivity : AppCompatActivity() {
7780
Manifest.permission.READ_PHONE_STATE
7881
) != PackageManager.PERMISSION_GRANTED
7982
) {
80-
return "NO_PHONE_NUMBER";
83+
return "NO_PHONE_NUMBER"
84+
}
85+
86+
if (telephonyManager.line1Number != null) {
87+
Settings.setOwnerAsync(context, telephonyManager.line1Number)
8188
}
82-
return telephonyManager.line1Number ?: "NO_PHONE_NUMBER"
89+
90+
return telephonyManager.line1Number ?: "NO_PHONE_NUMBER"
8391
}
8492

8593
private fun requestPermission(context: Context, permission: String) {
@@ -99,7 +107,11 @@ class MainActivity : AppCompatActivity() {
99107
toast.show()
100108
}
101109
}
102-
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
110+
if (ActivityCompat.checkSelfPermission(
111+
context,
112+
permission
113+
) != PackageManager.PERMISSION_GRANTED
114+
) {
103115
// You can directly ask for the permission.
104116
// The registered ActivityResultCallback gets the result of this request.
105117
requestPermissionLauncher.launch(permission)

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,18 @@ class ReceivedReceiver: BroadcastReceiver()
2828
smsBody += smsMessage.messageBody
2929
}
3030

31-
handleMessageReceived(smsSender, "+37259139660" ,smsBody)
31+
handleMessageReceived(
32+
smsSender,
33+
Settings.getOwner(context) ?: Settings.DEFAULT_PHONE_NUMBER,
34+
smsBody
35+
)
3236
}
3337

3438
private fun handleMessageReceived(from: String, to : String, content: String) {
3539
val timestamp = ZonedDateTime.now(ZoneOffset.UTC)
3640
Thread {
37-
Log.i(TAG, "sending received message from [${from}]")
41+
Log.i(TAG, "forwarding received message from [${from}]")
3842
HttpSmsApiService().receive(from, to, content, timestamp)
3943
}.start()
4044
}
41-
}
45+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.httpsms
2+
3+
import android.content.Context
4+
import android.util.Log
5+
import androidx.preference.PreferenceManager
6+
7+
object Settings {
8+
const val DEFAULT_PHONE_NUMBER = "NO_PHONE_NUMBER"
9+
10+
private const val SETTINGS_OWNER = "SETTINGS_OWNER"
11+
private const val SETTINGS_ACTIVE = "SETTINGS_ACTIVE_STATUS"
12+
13+
fun getOwner(context: Context): String? {
14+
Log.d(TAG, Settings::getOwner.name)
15+
16+
val owner = PreferenceManager
17+
.getDefaultSharedPreferences(context)
18+
.getString(this.SETTINGS_OWNER, null)
19+
20+
if (owner == null) {
21+
Log.e(TAG, "cannot get owner from preference [${this.SETTINGS_OWNER}]")
22+
return null
23+
}
24+
25+
Log.d(TAG, "owner: [$owner]")
26+
return owner
27+
}
28+
29+
fun setOwnerAsync(context: Context, owner: String) {
30+
Log.d(TAG, Settings::getOwner.name)
31+
32+
PreferenceManager.getDefaultSharedPreferences(context)
33+
.edit()
34+
.putString(this.SETTINGS_OWNER, owner)
35+
.apply()
36+
}
37+
38+
fun getActiveStatus(context: Context): Boolean {
39+
Log.d(TAG, Settings::getActiveStatus.name)
40+
41+
val activeStatus = PreferenceManager
42+
.getDefaultSharedPreferences(context)
43+
.getBoolean(this.SETTINGS_ACTIVE,false)
44+
45+
Log.d(TAG, "active status: [$activeStatus]")
46+
return activeStatus
47+
}
48+
49+
fun setActiveStatusAsync(context: Context, status: Boolean) {
50+
Log.d(TAG, Settings::setActiveStatusAsync.name)
51+
52+
PreferenceManager.getDefaultSharedPreferences(context)
53+
.edit()
54+
.putBoolean(this.SETTINGS_ACTIVE, status)
55+
.apply()
56+
}
57+
58+
private val TAG = Settings::class.simpleName
59+
}

0 commit comments

Comments
 (0)