Skip to content

Commit 7830e78

Browse files
Al-TaieAl-Taie
authored andcommitted
NP-1197 fix listener & token issue
1 parent 6711101 commit 7830e78

File tree

10 files changed

+61
-35
lines changed

10 files changed

+61
-35
lines changed

app/src/main/java/com/gateway/gms/MainActivity.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.gateway.gms
22

3-
import androidx.appcompat.app.AppCompatActivity
43
import android.os.Bundle
4+
import androidx.appcompat.app.AppCompatActivity
55
import com.gateway.gms.domain.interfaces.CloudMessagingServiceListener
66
import com.google.firebase.messaging.RemoteMessage
77
import kotlinx.coroutines.CoroutineScope
@@ -13,15 +13,17 @@ class MainActivity : AppCompatActivity(), CloudMessagingServiceListener {
1313
override fun onCreate(savedInstanceState: Bundle?) {
1414
super.onCreate(savedInstanceState)
1515
setContentView(R.layout.activity_main)
16-
val gmsManager = GMSManager(this, this)
16+
17+
val gmsManager = GMSManager(context = this, listener = null)
18+
1719
CoroutineScope(Dispatchers.IO).launch{
1820
with(gmsManager) {
1921
this.subscribeToTopic("Technology").collect {
2022
Timber.d(it.toString().substringAfter('$'))
2123
}
2224
}
2325
}
24-
Timber.d(gmsManager.token)
26+
gmsManager.setListener(this)
2527
}
2628

2729
override fun onMessageReceived(message: RemoteMessage) {

gms/src/main/java/com/gateway/gms/GMSManager.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
package com.gateway.gms
22

33
import android.content.Context
4+
import com.gateway.gms.data.GMSConfigurations
45
import com.gateway.gms.di.GMSInitializer
56
import com.gateway.gms.domain.interfaces.CloudMessagingRepository
67
import com.gateway.gms.domain.interfaces.CloudMessagingServiceListener
78

89
class GMSManager(
910
context: Context,
10-
var listener: CloudMessagingServiceListener? = null
11+
listener: CloudMessagingServiceListener? = null
1112
) : CloudMessagingRepository {
13+
1214
private val gms: GMSInitializer = GMSInitializer(context, listener)
1315

16+
fun setListener(listener: CloudMessagingServiceListener? = null) {
17+
GMSConfigurations.listener = listener
18+
}
19+
1420
override fun subscribeToTopic(topic: String) =
1521
gms.repository.subscribeToTopic(topic)
1622

gms/src/main/java/com/gateway/gms/data/CloudMessagingRepositoryImpl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import com.gateway.gms.domain.models.Resource
66
import kotlinx.coroutines.flow.Flow
77
import kotlinx.coroutines.flow.flow
88

9-
internal class CloudMessagingRepositoryImpl(private val service: CloudMessagingService) :
9+
internal class CloudMessagingRepositoryImpl(val service: CloudMessagingService) :
1010
CloudMessagingRepository {
11+
1112
override fun subscribeToTopic(topic: String): Flow<Resource<Void>> =
1213
wrapWithFlow { service.subscribeToTopic(topic = topic) }
1314

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.gateway.gms.data
2+
3+
import android.content.SharedPreferences
4+
import com.gateway.gms.domain.interfaces.CloudMessagingServiceListener
5+
6+
internal object GMSConfigurations {
7+
var listener: CloudMessagingServiceListener? = null
8+
var sharedPreferences: SharedPreferences? = null
9+
}

gms/src/main/java/com/gateway/gms/data/GoogleService.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ import com.gateway.gms.utils.Constants
88
import com.google.firebase.messaging.FirebaseMessaging
99
import com.google.firebase.messaging.FirebaseMessagingService
1010
import com.google.firebase.messaging.RemoteMessage
11-
import timber.log.Timber
1211

1312
class GoogleService : CloudMessagingService, FirebaseMessagingService() {
1413
lateinit var messaging: FirebaseMessaging
15-
override var listener: CloudMessagingServiceListener? = null
16-
var sharedPreferences: SharedPreferences? = null
14+
private val listener: CloudMessagingServiceListener?
15+
get() = GMSConfigurations.listener
16+
17+
private val sharedPreferences: SharedPreferences?
18+
get() = GMSConfigurations.sharedPreferences
1719

1820
override fun subscribeToTopic(topic: String) =
1921
safeTaskCall { MessagingTask.Google(messaging.subscribeToTopic(topic)) }
@@ -29,15 +31,14 @@ class GoogleService : CloudMessagingService, FirebaseMessagingService() {
2931
override fun onMessageReceived(message: RemoteMessage) {
3032
super.onMessageReceived(message)
3133
listener?.onMessageReceived(message = message)
32-
Timber.d(message.toString())
3334
}
3435

3536
override fun onNewToken(token: String) {
3637
super.onNewToken(token)
3738
listener?.onNewToken(token = token)
38-
Timber.d(token)
39-
with(sharedPreferences?.edit()) {
40-
this?.putString(Constants.SharedPref.TOKEN, token)
39+
sharedPreferences?.edit()?.run {
40+
putString(Constants.SharedPref.TOKEN, token)
41+
apply()
4142
}
4243
}
4344
}

gms/src/main/java/com/gateway/gms/data/HuaweiService.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,12 @@ import com.huawei.hms.push.RemoteMessage
1313

1414
class HuaweiService : CloudMessagingService, HmsMessageService() {
1515
lateinit var messaging: HmsMessaging
16-
override var listener: CloudMessagingServiceListener? = null
17-
var sharedPreferences: SharedPreferences? = null
16+
17+
private val listener: CloudMessagingServiceListener?
18+
get() = GMSConfigurations.listener
19+
20+
private val sharedPreferences: SharedPreferences?
21+
get() = GMSConfigurations.sharedPreferences
1822

1923
override fun subscribeToTopic(topic: String) =
2024
safeTaskCall { MessagingTask.Huawei(messaging.subscribe(topic)) }
@@ -36,8 +40,9 @@ class HuaweiService : CloudMessagingService, HmsMessageService() {
3640
override fun onNewToken(p0: String?) {
3741
super.onNewToken(p0)
3842
listener?.onNewToken(token = p0.toString())
39-
with(sharedPreferences?.edit()) {
40-
this?.putString(Constants.SharedPref.TOKEN, p0)
43+
sharedPreferences?.edit()?.run {
44+
putString(Constants.SharedPref.TOKEN, p0)
45+
apply()
4146
}
4247
}
4348
}

gms/src/main/java/com/gateway/gms/data/NoneService.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package com.gateway.gms.data
22

3-
import com.gateway.gms.domain.models.Resource
43
import com.gateway.gms.domain.interfaces.CloudMessagingService
5-
import com.gateway.gms.domain.interfaces.CloudMessagingServiceListener
4+
import com.gateway.gms.domain.models.Resource
65
import com.gateway.gms.domain.models.ServiceFailure
76

87

@@ -18,5 +17,4 @@ class NoneService : CloudMessagingService {
1817
override fun deleteToken(): Resource<Void> =
1918
Resource.Fail(error = ServiceFailure.ServiceNotDetected())
2019

21-
override var listener: CloudMessagingServiceListener? = null
2220
}

gms/src/main/java/com/gateway/gms/di/GMSInitializer.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,22 @@ import com.google.android.gms.common.ConnectionResult
99
import com.google.firebase.FirebaseApp
1010
import timber.log.Timber
1111

12-
internal class GMSInitializer(private val context: Context, private val listener: CloudMessagingServiceListener? = null) {
12+
internal class GMSInitializer(
13+
context: Context,
14+
listener: CloudMessagingServiceListener? = null
15+
) {
1316
var serviceProvider: Services = Services.None
1417
var isServicesAvailable: Boolean = false
1518
private var module: GMSModule
1619
val repository: CloudMessagingRepository
1720

1821
init {
19-
module = GMSModule(context = context)
20-
prepareAvailability(module = module)
21-
repository = provideCloudMessagingRepository(module)
22+
module = GMSModule(context = context, listener = listener)
23+
prepareAvailability(module = module, context = context)
24+
repository = provideCloudMessagingRepository(module = module)
2225
}
2326

24-
private fun prepareAvailability(module: GMSModule) {
27+
private fun prepareAvailability(module: GMSModule, context: Context) {
2528
isServicesAvailable = with(module) {
2629
when (ConnectionResult.SUCCESS) {
2730
googleApiAvailability.isGooglePlayServicesAvailable(context) -> {
@@ -48,13 +51,9 @@ internal class GMSInitializer(private val context: Context, private val listener
4851
service = when (serviceProvider) {
4952
is Services.Google -> GoogleService().apply {
5053
messaging = module.googleService
51-
listener = this@GMSInitializer.listener
52-
sharedPreferences = module.sharedPreferences
53-
}
54+
}
5455
is Services.Huawei -> HuaweiService().apply {
5556
messaging = module.huaweiService
56-
listener = this@GMSInitializer.listener
57-
sharedPreferences = module.sharedPreferences
5857
}
5958
else -> NoneService()
6059
}
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
11
package com.gateway.gms.di
22

33
import android.content.Context
4-
import android.content.SharedPreferences
4+
import com.gateway.gms.data.GMSConfigurations
5+
import com.gateway.gms.domain.interfaces.CloudMessagingServiceListener
56
import com.gateway.gms.utils.Constants
67
import com.google.android.gms.common.GoogleApiAvailability
78
import com.google.firebase.messaging.FirebaseMessaging
89
import com.huawei.hms.api.HuaweiApiAvailability
910
import com.huawei.hms.push.HmsMessaging
1011

11-
internal class GMSModule(private val context: Context) {
12+
internal class GMSModule(context: Context, listener: CloudMessagingServiceListener?) {
1213
val googleService: FirebaseMessaging by lazy { FirebaseMessaging.getInstance() }
1314
val huaweiService: HmsMessaging by lazy { HmsMessaging.getInstance(context) }
1415
val googleApiAvailability: GoogleApiAvailability by lazy { provideGoogleApiAvailability() }
1516
val huaweiApiAvailability: HuaweiApiAvailability by lazy { provideHuaweiApiAvailability() }
16-
val sharedPreferences: SharedPreferences by lazy { provideSharedPref() }
17+
18+
init {
19+
GMSConfigurations.apply {
20+
this.listener = listener
21+
this.sharedPreferences = provideSharedPref(context)
22+
}
23+
}
1724

1825
private fun provideGoogleApiAvailability() = GoogleApiAvailability.getInstance()
1926
private fun provideHuaweiApiAvailability() = HuaweiApiAvailability.getInstance()
2027

21-
private fun provideSharedPref() =
28+
private fun provideSharedPref(context: Context) =
2229
context.getSharedPreferences(Constants.SharedPref.FILE_KEY, Context.MODE_PRIVATE)
2330
}

gms/src/main/java/com/gateway/gms/domain/interfaces/CloudMessagingService.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ interface CloudMessagingService {
1313
fun getToken(): String?
1414
fun deleteToken(): Resource<Void>
1515

16-
var listener: CloudMessagingServiceListener?
17-
1816
fun <T> safeTaskCall(block: () -> MessagingTask<T>) = catchTaskError(block())
1917

2018
private fun <T> catchTaskError(block: MessagingTask<T>) =

0 commit comments

Comments
 (0)