Skip to content

Commit a6078c9

Browse files
cmonfortepkarlenDimla
authored andcommitted
Move RMF jsonAdapter to lazy (#6112)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1202552961248957/task/1210331622687071?focus=true ### Description Moves creation of RMF JsonAdapter to lazy so it inits on background thread ### Steps to test this PR _Feature 1_ - [ ] Put a `Thread.sleep(20_000)` in RMFMapperModule L59 (first line in `provideMoshiAdapter`) - [ ] Update RemoteMessagingService endpoint to `https://www.jsonblob.com/api/1374757173657264128` - [ ] Install the app - [ ] Run the app - [ ] Should not freeze, you can interact with the app - [ ] in 20 seconds RMF will appear ### UI changes | Before | After | | ------ | ----- | !(Upload before screenshot)|(Upload after screenshot)|
1 parent 629b4df commit a6078c9

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/di/RMFMapperModule.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import com.squareup.moshi.JsonAdapter
3434
import com.squareup.moshi.Moshi
3535
import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
3636
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
37+
import dagger.Lazy
3738
import dagger.Module
3839
import dagger.Provides
3940
import dagger.SingleInstanceIn
@@ -45,7 +46,7 @@ object RMFMapperModule {
4546
@Provides
4647
@SingleInstanceIn(AppScope::class)
4748
fun providesMessageMapper(
48-
messageAdapter: JsonAdapter<RemoteMessage>,
49+
messageAdapter: Lazy<JsonAdapter<RemoteMessage>>,
4950
): MessageMapper {
5051
return MessageMapper(messageAdapter)
5152
}

remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/mappers/MessageMapper.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,19 @@ package com.duckduckgo.remote.messaging.impl.mappers
1818

1919
import com.duckduckgo.remote.messaging.api.RemoteMessage
2020
import com.squareup.moshi.JsonAdapter
21+
import dagger.Lazy
2122

2223
class MessageMapper(
23-
private val messageAdapter: JsonAdapter<RemoteMessage>,
24+
private val messageAdapter: Lazy<JsonAdapter<RemoteMessage>>,
2425
) {
2526

2627
fun toString(sitePayload: RemoteMessage): String {
27-
return messageAdapter.toJson(sitePayload)
28+
return messageAdapter.get().toJson(sitePayload)
2829
}
2930

3031
fun fromMessage(payload: String): RemoteMessage? {
3132
return runCatching {
32-
messageAdapter.fromJson(payload)
33+
messageAdapter.get().fromJson(payload)
3334
}.getOrNull()
3435
}
3536
}

remote-messaging/remote-messaging-impl/src/test/java/com/duckduckgo/remote/messaging/fixtures/TestMessageMapper.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,18 @@
1616

1717
package com.duckduckgo.remote.messaging.fixtures
1818

19+
import com.duckduckgo.remote.messaging.api.RemoteMessage
1920
import com.duckduckgo.remote.messaging.impl.di.RMFMapperModule
2021
import com.duckduckgo.remote.messaging.impl.mappers.MessageMapper
22+
import com.squareup.moshi.JsonAdapter
23+
import dagger.Lazy
2124

22-
fun getMessageMapper() = MessageMapper(RMFMapperModule.provideMoshiAdapter(messageActionPlugins))
25+
fun getMessageMapper(): MessageMapper {
26+
val lazyAdapter = object : Lazy<JsonAdapter<RemoteMessage>> {
27+
override fun get(): JsonAdapter<RemoteMessage> {
28+
return RMFMapperModule.provideMoshiAdapter(messageActionPlugins)
29+
}
30+
}
31+
32+
return MessageMapper(lazyAdapter)
33+
}

0 commit comments

Comments
 (0)