Skip to content

Commit d6ae47d

Browse files
committed
Fix app on local
1 parent fb6c05b commit d6ae47d

File tree

7 files changed

+124
-20
lines changed

7 files changed

+124
-20
lines changed

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

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.httpsms
33
import android.app.PendingIntent
44
import android.content.Context
55
import android.content.Intent
6+
import android.content.IntentFilter
67
import androidx.work.OneTimeWorkRequest
78
import androidx.work.WorkManager
89
import androidx.work.Worker
@@ -13,9 +14,11 @@ import timber.log.Timber
1314

1415

1516
class MyFirebaseMessagingService : FirebaseMessagingService() {
17+
private val timberInit = false
1618

1719
// [START receive_message]
1820
override fun onMessageReceived(remoteMessage: RemoteMessage) {
21+
initTimber()
1922
Timber.d(MyFirebaseMessagingService::onMessageReceived.name)
2023
scheduleJob()
2124
}
@@ -28,6 +31,7 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
2831
* FCM registration token is initially generated so this is where you would retrieve the token.
2932
*/
3033
override fun onNewToken(token: String) {
34+
initTimber()
3135
Timber.d("Refreshed token: $token")
3236

3337
// If you want to send messages to this application instance or
@@ -59,6 +63,18 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
5963

6064
}
6165

66+
private fun initTimber() {
67+
if (Timber.treeCount > 1) {
68+
Timber.d("timber is already initialized with count [${Timber.treeCount}]")
69+
return
70+
}
71+
72+
if (BuildConfig.DEBUG) {
73+
Timber.plant(Timber.DebugTree())
74+
Timber.plant(LogtailTree())
75+
}
76+
}
77+
6278
internal class SendSmsWorker(appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams) {
6379
override fun doWork(): Result {
6480
if (!Settings.isLoggedIn(applicationContext)) {
@@ -74,15 +90,28 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
7490
val owner = Settings.getOwner(applicationContext) ?: return Result.failure()
7591
val message = getMessage(applicationContext, owner) ?: return Result.failure()
7692

93+
registerReceivers(applicationContext, message.id)
94+
7795
sendMessage(
7896
message,
79-
createPendingIntent(message, SmsManagerService.ACTION_SMS_SENT),
80-
createPendingIntent(message, SmsManagerService.ACTION_SMS_DELIVERED)
97+
createPendingIntent(message, SmsManagerService.sentAction(message.id)),
98+
createPendingIntent(message, SmsManagerService.deliveredAction(message.id))
8199
)
82100

83101
return Result.success()
84102
}
85103

104+
private fun registerReceivers(context: Context, messageID: String) {
105+
context.registerReceiver(
106+
SentReceiver(),
107+
IntentFilter(SmsManagerService.sentAction(messageID))
108+
)
109+
context.registerReceiver(
110+
DeliveredReceiver(),
111+
IntentFilter(SmsManagerService.deliveredAction(messageID))
112+
)
113+
}
114+
86115
private fun getMessage(context: Context, owner: String): Message? {
87116
Timber.d("fetching message")
88117
val messages = HttpSmsApiService(Settings.getApiKeyOrDefault(context)).getOutstandingMessages(owner)

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

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import android.app.NotificationChannel
77
import android.app.NotificationManager
88
import android.content.Context
99
import android.content.Intent
10-
import android.content.IntentFilter
1110
import android.content.pm.PackageManager
1211
import android.os.Bundle
1312
import android.telephony.PhoneNumberUtils
@@ -44,8 +43,6 @@ class MainActivity : AppCompatActivity() {
4443
setActiveStatus(this)
4544
registerListeners()
4645
refreshToken(this)
47-
48-
registerReceivers(this)
4946
}
5047

5148
override fun onResume() {
@@ -55,18 +52,6 @@ class MainActivity : AppCompatActivity() {
5552
refreshToken(this)
5653
}
5754

58-
private fun registerReceivers(context: Context) {
59-
context.registerReceiver(
60-
this.sentReceiver,
61-
IntentFilter(SmsManagerService.ACTION_SMS_SENT)
62-
)
63-
context.registerReceiver(
64-
this.deliveredReceiver,
65-
IntentFilter(SmsManagerService.ACTION_SMS_DELIVERED)
66-
)
67-
Settings.setReceiverRegistered(context, true)
68-
}
69-
7055
private fun refreshToken(context: Context) {
7156
if(!Settings.isLoggedIn(context)) {
7257
Timber.w("cannot refresh token because owner is not logged in")
@@ -107,6 +92,11 @@ class MainActivity : AppCompatActivity() {
10792
}
10893

10994
private fun initTimber() {
95+
if (Timber.treeCount > 1) {
96+
Timber.d("timber is already initialized with count [${Timber.treeCount}]")
97+
return
98+
}
99+
110100
if (BuildConfig.DEBUG) {
111101
Timber.plant(Timber.DebugTree())
112102
Timber.plant(LogtailTree())

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,16 @@ import android.telephony.SmsManager
77

88
class SmsManagerService {
99
companion object {
10-
const val ACTION_SMS_SENT = "SMS_SENT"
11-
const val ACTION_SMS_DELIVERED = "SMS_DELIVERED"
10+
private const val ACTION_SMS_SENT = "SMS_SENT"
11+
private const val ACTION_SMS_DELIVERED = "SMS_DELIVERED"
12+
13+
fun sentAction(messageID: String): String {
14+
return "$ACTION_SMS_SENT.$messageID"
15+
}
16+
17+
fun deliveredAction(messageID: String): String {
18+
return "$ACTION_SMS_DELIVERED.$messageID"
19+
}
1220
}
1321

1422
fun sendMessage(context: Context, message: Message, sentIntent:PendingIntent, deliveryIntent: PendingIntent) {

web/.env.production

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ APP_NAME="Http SMS"
55
APP_GITHUB_URL=https://github.com/NdoleStudio/httpsms
66
APP_DOCUMENTATION_URL=https://api.httpsms.com
77
APP_DOWNLOAD_URL=https://github.com/NdoleStudio/httpsms
8+
APP_ENV=production

web/layouts/default.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
<template>
22
<v-app>
3+
<v-divider v-if="$store.getters.isLocal" class="py-1 warning"></v-divider>
34
<v-navigation-drawer
45
v-if="$vuetify.breakpoint.lgAndUp && hasDrawer"
56
:width="400"
67
fixed
78
app
89
>
910
<template #prepend>
11+
<v-divider
12+
v-if="$store.getters.isLocal"
13+
class="py-1 warning"
14+
></v-divider>
1015
<message-thread-header></message-thread-header>
1116
<message-thread></message-thread>
1217
</template>

web/pages/settings/index.vue

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</v-app-bar>
1010
<v-container>
1111
<v-row>
12-
<v-col cols="12" md="8" offset-md="2" xl="6" offset-xl="3">
12+
<v-col cols="12" md="9" offset-md="1" xl="8" offset-xl="2">
1313
<h5 class="text-h4 mb-3 mt-3">API Key</h5>
1414
<p>
1515
Use your API Key in the <code>X-API-Key</code> HTTP Header when
@@ -42,6 +42,60 @@
4242
copy-text="Copy API Key"
4343
notification-text="API Key copied successfully"
4444
></copy-button>
45+
<h5 class="text-h4 mb-3 mt-12">Phones</h5>
46+
<p>
47+
List of mobile phones which are registered for sending and
48+
receiving SMS messages.
49+
</p>
50+
<v-simple-table>
51+
<template #default>
52+
<thead>
53+
<tr class="text-uppercase">
54+
<th v-if="$vuetify.breakpoint.lgAndUp" class="text-left">
55+
ID
56+
</th>
57+
<th class="text-left">Phone Number</th>
58+
<th class="text-center">Fcm Token</th>
59+
<th class="text-center">Updated At</th>
60+
<th class="text-center">Action</th>
61+
</tr>
62+
</thead>
63+
<tbody>
64+
<tr v-for="phone in $store.getters.getPhones" :key="phone.id">
65+
<td v-if="$vuetify.breakpoint.lgAndUp" class="text-left">
66+
{{ phone.id }}
67+
</td>
68+
<td>{{ phone.phone_number | phoneNumber }}</td>
69+
<td>
70+
<div class="d-flex justify-center">
71+
<v-checkbox
72+
readonly
73+
class="mx-auto"
74+
:input-value="true"
75+
color="success"
76+
></v-checkbox>
77+
</div>
78+
</td>
79+
<td class="text-center">
80+
{{ phone.updated_at | timestamp }}
81+
</td>
82+
<td class="text-center">
83+
<v-btn
84+
:icon="$vuetify.breakpoint.mdAndDown"
85+
small
86+
color="error"
87+
@click.prevent="deletePhone(phone.id)"
88+
>
89+
<v-icon small>mdi-delete</v-icon>
90+
<span v-if="!$vuetify.breakpoint.mdAndDown">
91+
Delete
92+
</span>
93+
</v-btn>
94+
</td>
95+
</tr>
96+
</tbody>
97+
</template>
98+
</v-simple-table>
4599
</v-col>
46100
</v-row>
47101
</v-container>
@@ -74,5 +128,11 @@ export default {
74128
}
75129
this.$store.dispatch('loadUser')
76130
},
131+
132+
methods: {
133+
deletePhone(phoneId) {
134+
this.$store.dispatch('deletePhone', phoneId)
135+
},
136+
},
77137
}
78138
</script>

web/store/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export const state = (): State => ({
6868
export type AppData = {
6969
url: string
7070
name: string
71+
env: string
7172
appDownloadUrl: string
7273
documentationUrl: string
7374
githubUrl: string
@@ -85,6 +86,7 @@ export const getters = {
8586
}
8687
return {
8788
url,
89+
env: process.env.APP_ENV as string,
8890
appDownloadUrl: process.env.APP_DOWNLOAD_URL as string,
8991
documentationUrl: process.env.APP_DOCUMENTATION_URL as string,
9092
githubUrl: process.env.APP_GITHUB_URL as string,
@@ -100,6 +102,10 @@ export const getters = {
100102
return state.authUser
101103
},
102104

105+
isLocal(): boolean {
106+
return process.env.APP_ENV === 'local'
107+
},
108+
103109
getUser(state: State): User | null {
104110
return state.user
105111
},
@@ -270,6 +276,11 @@ export const actions = {
270276
context.commit('setUser', response.data.data)
271277
},
272278

279+
async deletePhone(context: ActionContext<State, State>, phoneID: string) {
280+
await axios.delete(`/v1/phones/${phoneID}`)
281+
await context.dispatch('loadPhones', true)
282+
},
283+
273284
resetState(context: ActionContext<State, State>) {
274285
context.commit('resetState', false)
275286
},

0 commit comments

Comments
 (0)