Skip to content

Commit a329968

Browse files
Do not call Core SDK onAppCreate() method
Add the initialization ContentProvider. MOB-4198
1 parent 5605ce0 commit a329968

File tree

10 files changed

+93
-21
lines changed

10 files changed

+93
-21
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,10 @@
5454
<meta-data
5555
android:name="com.google.firebase.messaging.default_notification_icon"
5656
android:resource="@drawable/ic_notification" />
57+
58+
<provider
59+
android:name=".InitializationProvider"
60+
android:authorities="${applicationId}.InitializationProvider"
61+
android:exported="false"/>
5762
</application>
5863
</manifest>

app/src/main/java/com/glia/exampleapp/Application.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ public void onCreate() {
1414
super.onCreate();
1515
initFirebase();
1616

17-
GliaWidgets.onAppCreate(this);
1817
GliaWidgets.setCustomCardAdapter(new ExampleCustomCardAdapter());
1918
}
2019

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.glia.exampleapp
2+
3+
import android.widget.Toast
4+
5+
class InitializationProvider : com.glia.widgets.InitializationProvider() {
6+
override fun onCreate(): Boolean {
7+
val startTimestamp = System.currentTimeMillis()
8+
super.onCreate()
9+
val endTimestamp = System.currentTimeMillis()
10+
11+
context?.let {
12+
Toast.makeText(it, "onAppCreate time is ${endTimestamp - startTimestamp} ms", Toast.LENGTH_LONG).show()
13+
}
14+
return true
15+
}
16+
}

widgetssdk/src/main/java/com/glia/widgets/GliaWidgets.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ public class GliaWidgets {
4444
* @param application the application where it is initialized
4545
*/
4646
public synchronized static void onAppCreate(Application application) {
47-
Dependencies.glia().onAppCreate(application);
4847
Dependencies.onAppCreate(application);
4948
setupRxErrorHandler();
5049
Logger.d(TAG, "onAppCreate");

widgetssdk/src/main/java/com/glia/widgets/GliaWidgetsConfig.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,14 @@ class GliaWidgetsConfig private constructor(builder: Builder) {
4747
val manualLocaleOverride: String?
4848

4949
init {
50+
// The Context can be an Activity that has its life cycle.
51+
// To prevent storing the link to an Activity that can be destroyed, we need to take the Application Context.
52+
// An Application object lives all the time when the application is active, so it is safe to store it.
53+
val applicationContext = builder.context?.applicationContext
54+
5055
siteApiKey = builder.siteApiKey
5156
siteId = builder.siteId
52-
context = builder.context
57+
context = applicationContext
5358
region = builder.region
5459
baseDomain = builder.baseDomain
5560
requestCode = builder.requestCode
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.glia.widgets
2+
3+
import android.app.Application
4+
import android.content.ContentProvider
5+
import android.content.ContentValues
6+
import android.database.Cursor
7+
import android.net.Uri
8+
9+
/**
10+
* @hide
11+
*/
12+
open class InitializationProvider : ContentProvider() {
13+
override fun onCreate(): Boolean {
14+
(context as? Application)?.let { GliaWidgets.onAppCreate(it) }
15+
return true
16+
}
17+
18+
override fun query(
19+
uri: Uri,
20+
projection: Array<out String>?,
21+
selection: String?,
22+
selectionArgs: Array<out String>?,
23+
sortOrder: String?
24+
): Cursor? {
25+
return null
26+
}
27+
28+
override fun getType(uri: Uri): String? {
29+
return null
30+
}
31+
32+
override fun insert(
33+
uri: Uri,
34+
values: ContentValues?
35+
): Uri? {
36+
return null
37+
}
38+
39+
override fun delete(
40+
uri: Uri,
41+
selection: String?,
42+
selectionArgs:
43+
Array<out String>?
44+
): Int {
45+
return 0
46+
}
47+
48+
override fun update(
49+
uri: Uri,
50+
values: ContentValues?,
51+
selection: String?,
52+
selectionArgs: Array<out String>?
53+
): Int {
54+
return 0
55+
}
56+
}

widgetssdk/src/main/java/com/glia/widgets/di/Dependencies.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.core.content.ContextCompat
77
import androidx.lifecycle.Lifecycle
88
import com.glia.androidsdk.Glia
99
import com.glia.androidsdk.GliaConfig
10+
import com.glia.androidsdk.GliaException
1011
import com.glia.widgets.GliaWidgetsConfig
1112
import com.glia.widgets.StringProvider
1213
import com.glia.widgets.callvisualizer.CallVisualizerActivityWatcher
@@ -108,8 +109,13 @@ internal object Dependencies {
108109
lateinit var repositoryFactory: RepositoryFactory
109110
@VisibleForTesting set
110111

112+
@Synchronized
111113
@JvmStatic
112114
fun onAppCreate(application: Application) {
115+
if (this::resourceProvider.isInitialized) {
116+
return
117+
}
118+
113119
resourceProvider = ResourceProvider(application.baseContext)
114120
localeProvider = LocaleProvider(resourceProvider)
115121
notificationManager = NotificationManager(application)

widgetssdk/src/main/java/com/glia/widgets/di/GliaCore.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ internal interface GliaCore {
3333
val secureConversations: SecureConversations
3434
@Throws(GliaException::class)
3535
fun init(config: GliaConfig)
36-
@Throws(GliaException::class)
37-
fun onAppCreate(application: Application)
3836
fun getVisitorInfo(visitorCallback: RequestCallback<VisitorInfo?>)
3937
fun updateVisitorInfo(visitorInfoUpdateRequest: VisitorInfoUpdateRequest, visitorCallback: Consumer<GliaException?>)
4038
fun <T> on(event: OmnicoreEvent<T>, listener: Consumer<T>)

widgetssdk/src/main/java/com/glia/widgets/di/GliaCoreImpl.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,6 @@ internal class GliaCoreImpl : GliaCore {
4848
Glia.init(config)
4949
}
5050

51-
@Synchronized
52-
@Throws(GliaException::class)
53-
override fun onAppCreate(application: Application) {
54-
Glia.onAppCreate(application)
55-
}
56-
5751
override fun getVisitorInfo(visitorCallback: RequestCallback<VisitorInfo?>) {
5852
Glia.getVisitorInfo(visitorCallback)
5953
}

widgetssdk/src/test/java/com/glia/widgets/GliaWidgetsTest.kt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,9 @@ import org.junit.runner.RunWith
2121
import org.mockito.Mockito.mock
2222
import org.mockito.kotlin.argumentCaptor
2323
import org.mockito.kotlin.doReturn
24-
import org.mockito.kotlin.eq
2524
import org.mockito.kotlin.verify
2625
import org.mockito.kotlin.whenever
2726
import org.robolectric.RobolectricTestRunner
28-
import org.robolectric.RuntimeEnvironment
2927

3028
@get:ClassRule
3129
val rule: TestRule = InstantTaskExecutorRule()
@@ -48,19 +46,15 @@ class GliaWidgetsTest {
4846
Dependencies.localeProvider = mock()
4947
}
5048

51-
@Test
52-
fun onAppCreate_setApplicationToGliaCore_whenCalled() {
53-
val application = RuntimeEnvironment.getApplication()
54-
GliaWidgets.onAppCreate(application)
55-
verify(gliaCore).onAppCreate(eq(application))
56-
}
57-
5849
@Test
5950
fun onSdkInit_setConfigToGliaCore_whenCalled() {
6051
val siteApiKey = SiteApiKey("SiteApiId", "SiteApiSecret")
6152
val siteId = "SiteId"
6253
val region = "Region"
54+
val applicationContext = mock<Context>()
55+
whenever(applicationContext.applicationContext).thenReturn(applicationContext)
6356
val context = mock<Context>()
57+
whenever(context.applicationContext).thenReturn(applicationContext)
6458
val widgetsConfig = GliaWidgetsConfig.Builder()
6559
.setSiteApiKey(siteApiKey)
6660
.setSiteId(siteId)
@@ -83,7 +77,7 @@ class GliaWidgetsTest {
8377
Assert.assertEquals(siteApiKey, gliaConfig.siteApiKey)
8478
Assert.assertEquals(siteId, gliaConfig.siteId)
8579
Assert.assertEquals(region, gliaConfig.region)
86-
Assert.assertEquals(context, gliaConfig.context)
80+
Assert.assertEquals(applicationContext, gliaConfig.context)
8781
}
8882

8983
}

0 commit comments

Comments
 (0)