File tree Expand file tree Collapse file tree
demo-app/src/main/java/com/gravatar/demoapp Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -13,7 +13,7 @@ class MainActivity : ComponentActivity() {
1313 super .onCreate(savedInstanceState)
1414
1515 // Initialize the Gravatar SDK with the API key if it is available
16- BuildConfig .DEMO_GRAVATAR_API_KEY ?.let { Gravatar .initialize (it) }
16+ BuildConfig .DEMO_GRAVATAR_API_KEY ?.let { Gravatar .apiKey (it).context(applicationContext ) }
1717
1818 setContent {
1919 DemoGravatarApp ()
Original file line number Diff line number Diff line change @@ -63,7 +63,8 @@ android {
6363Then you can access the API key in your app's code like this:
6464
6565``` kotlin
66- Gravatar .initialize(BuildConfig .GRAVATAR_API_KEY )
66+ Gravatar .apiKey(BuildConfig .GRAVATAR_API_KEY )
67+ .context(appContext) // Optional but highly encouraged.
6768```
6869
6970# Usage
Original file line number Diff line number Diff line change @@ -136,7 +136,8 @@ public final class com/gravatar/DefaultAvatarOption$Wavatar : com/gravatar/Defau
136136
137137public final class com/gravatar/Gravatar {
138138 public static final field INSTANCE Lcom/gravatar/Gravatar;
139- public final fun initialize (Ljava/lang/String;)V
139+ public final fun apiKey (Ljava/lang/String;)Lcom/gravatar/Gravatar;
140+ public final fun context (Landroid/content/Context;)Lcom/gravatar/Gravatar;
140141}
141142
142143public final class com/gravatar/GravatarConstants {
Original file line number Diff line number Diff line change 11package com.gravatar
22
3+ import android.content.Context
4+ import android.content.pm.PackageManager
35import com.gravatar.di.container.GravatarSdkContainer
46
57/* *
@@ -9,9 +11,29 @@ public object Gravatar {
911 /* *
1012 * Initializes the Gravatar SDK with the given API key.
1113 *
12- * @param gravatarApiKey The API key to use when making requests to the Gravatar backend.
14+ * @param apiKey The API key to use when making requests to the Gravatar backend.
1315 */
14- public fun initialize (gravatarApiKey : String ) {
15- GravatarSdkContainer .instance.apiKey = gravatarApiKey
16+ public fun apiKey (apiKey : String ): Gravatar {
17+ GravatarSdkContainer .instance.apiKey = apiKey
18+ return this
19+ }
20+
21+ /* *
22+ * Initializes the Gravatar SDK with the given context.
23+ * The context is used to get the application name.
24+ *
25+ * @param context The context from the app.
26+ */
27+ public fun context (context : Context ): Gravatar {
28+ GravatarSdkContainer .instance.appName = getApplicationName(context)
29+ return this
30+ }
31+
32+ private fun getApplicationName (context : Context ): String {
33+ val applicationInfo = context.packageManager.getApplicationInfo(
34+ context.packageName,
35+ PackageManager .GET_META_DATA ,
36+ )
37+ return context.packageManager.getApplicationLabel(applicationInfo).toString()
1638 }
1739}
Original file line number Diff line number Diff line change @@ -33,6 +33,7 @@ internal class GravatarSdkContainer private constructor() {
3333 val dispatcherIO = Dispatchers .IO
3434
3535 var apiKey: String? = null
36+ var appName: String? = null
3637
3738 fun getGravatarV3Service (okHttpClient : OkHttpClient ? = null, oauthToken : String? = null): GravatarApi {
3839 return getRetrofitApiV3Builder().apply {
Original file line number Diff line number Diff line change 11package com.gravatar.services.interceptors
22
33import com.gravatar.BuildConfig
4+ import com.gravatar.di.container.GravatarSdkContainer
45import okhttp3.Interceptor
56import okhttp3.Response
67
78internal class SdkVersionInterceptor : Interceptor {
89 override fun intercept (chain : Interceptor .Chain ): Response {
910 return chain.proceed(
10- chain.request().newBuilder()
11- .addHeader(" X-Platform" , " Android" )
12- .addHeader(" X-SDK-Version" , BuildConfig .SDK_VERSION )
13- .build(),
11+ chain.request().newBuilder().apply {
12+ addHeader(" X-Platform" , " Android" )
13+ addHeader(" X-SDK-Version" , BuildConfig .SDK_VERSION )
14+ GravatarSdkContainer .instance.appName?.let { addHeader(" X-Source" , it) }
15+ }.build(),
1416 )
1517 }
1618}
Original file line number Diff line number Diff line change 11package com.gravatar
22
3+ import android.content.Context
4+ import android.content.pm.ApplicationInfo
5+ import android.content.pm.PackageManager
36import io.mockk.coVerify
7+ import io.mockk.every
8+ import io.mockk.mockk
49import org.junit.Rule
510import org.junit.Test
611
@@ -12,8 +17,26 @@ class GravatarTest {
1217 fun `given an api key when initialize method is invoked with it then it should be set internally` () {
1318 val apiKey = " API_KEY"
1419
15- Gravatar .initialize (apiKey)
20+ Gravatar .apiKey (apiKey)
1621
1722 coVerify(exactly = 1 ) { containerRule.gravatarSdkContainerMock.apiKey = apiKey }
1823 }
24+
25+ @Test
26+ fun `given a context when initialize method is invoked then the app name is extracted` () {
27+ val appName = " Gravatar APP"
28+ val packageName = " com.gravatar"
29+ val context = mockk<Context >()
30+ val packageManager = mockk<PackageManager >()
31+ val applicationInfo = mockk<ApplicationInfo >()
32+
33+ every { context.packageManager } returns packageManager
34+ every { context.packageName } returns packageName
35+ every { packageManager.getApplicationInfo(packageName, PackageManager .GET_META_DATA ) } returns applicationInfo
36+ every { packageManager.getApplicationLabel(applicationInfo) } returns appName
37+
38+ Gravatar .context(context)
39+
40+ coVerify(exactly = 1 ) { containerRule.gravatarSdkContainerMock.appName = appName }
41+ }
1942}
You can’t perform that action at this time.
0 commit comments