Skip to content

Commit

Permalink
add managed context
Browse files Browse the repository at this point in the history
  • Loading branch information
vahidlazio committed Mar 28, 2024
1 parent f1919a2 commit 16a2e72
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.spotify.confidence

import android.content.Context
import android.os.Build
import com.spotify.confidence.Constants.APP_BUILD_KEY
import com.spotify.confidence.Constants.APP_NAMESPACE_KEY
import com.spotify.confidence.Constants.APP_NAME_KEY
import com.spotify.confidence.Constants.APP_VERSION_KEY
import com.spotify.confidence.Constants.DEVICE_MANUFACTURER_KEY
import com.spotify.confidence.Constants.DEVICE_MODEL_KEY
import com.spotify.confidence.Constants.DEVICE_NAME_KEY
import com.spotify.confidence.Constants.DEVICE_TYPE_KEY
import com.spotify.confidence.Constants.OS_NAME_KEY
import com.spotify.confidence.Constants.OS_VERSION_KEY
import com.spotify.confidence.Constants.SCREEN_DENSITY_KEY
import com.spotify.confidence.Constants.SCREEN_HEIGHT_KEY
import com.spotify.confidence.Constants.SCREEN_WIDTH_KEY

fun Confidence.addCommonContext(context: Context): Confidence {
val newContext = withContext(mapOf())
with(newContext) {
// OS and OS Version
putContext(OS_NAME_KEY, ConfidenceValue.String("Android"))
putContext(OS_VERSION_KEY, ConfidenceValue.String(Build.VERSION.RELEASE))
// Screen
val displayMetrics = context.resources.displayMetrics
putContext(SCREEN_DENSITY_KEY, ConfidenceValue.Double(displayMetrics.density.toDouble()))
putContext(SCREEN_HEIGHT_KEY, ConfidenceValue.Double(displayMetrics.heightPixels.toDouble()))
putContext(SCREEN_WIDTH_KEY, ConfidenceValue.Integer(displayMetrics.widthPixels))
// Package
val packageManager = context.packageManager
val packageInfo = packageManager.getPackageInfo(context.packageName, 0)
putContext(
APP_NAME_KEY,
ConfidenceValue.String(packageInfo.applicationInfo.loadLabel(packageManager).toString())
)
putContext(APP_VERSION_KEY, ConfidenceValue.String(packageInfo.versionName))
putContext(APP_NAMESPACE_KEY, ConfidenceValue.String(packageInfo.packageName))

val appBuild = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
packageInfo.longVersionCode.toString()
} else {
@Suppress("DEPRECATION")
packageInfo.versionCode.toString()
}
putContext(APP_BUILD_KEY, ConfidenceValue.String(appBuild))

// Device ID
putContext(DEVICE_MANUFACTURER_KEY, ConfidenceValue.String(Build.MANUFACTURER))
putContext(DEVICE_MODEL_KEY, ConfidenceValue.String(Build.MODEL))
putContext(DEVICE_NAME_KEY, ConfidenceValue.String(Build.DEVICE))
putContext(DEVICE_TYPE_KEY, ConfidenceValue.String("android"))
}

return newContext
}
38 changes: 38 additions & 0 deletions Provider/src/main/java/com/spotify/confidence/CommonContextKeys.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.spotify.confidence
object CommonContextKeys {
const val LOCALE_KEY = "locale"
const val USER_AGENT_KEY = "userAgent"
const val TIMEZONE_KEY = "timezone"

// App
const val APP_KEY = "app"
const val APP_NAME_KEY = "name"
const val APP_VERSION_KEY = "version"
const val APP_NAMESPACE_KEY = "namespace"
const val APP_BUILD_KEY = "build"

// Device
const val DEVICE_KEY = "device"
const val DEVICE_ID_KEY = "id"
const val DEVICE_MANUFACTURER_KEY = "manufacturer"
const val DEVICE_MODEL_KEY = "model"
const val DEVICE_NAME_KEY = "name"
const val DEVICE_TYPE_KEY = "type"

// Network
const val NETWORK_KEY = "network"
const val NETWORK_BLUETOOTH_KEY = "bluetooth"
const val NETWORK_CELLULAR_KEY = "cellular"
const val NETWORK_WIFI_KEY = "wifi"

// OS
const val OS_KEY = "os"
const val OS_NAME_KEY = "name"
const val OS_VERSION_KEY = "version"

// Screen
const val SCREEN_KEY = "screen"
const val SCREEN_DENSITY_KEY = "density"
const val SCREEN_HEIGHT_KEY = "height"
const val SCREEN_WIDTH_KEY = "width"
}
18 changes: 7 additions & 11 deletions Provider/src/main/java/com/spotify/confidence/Confidence.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Confidence private constructor(
private val clientSecret: String,
private val dispatcher: CoroutineDispatcher,
private val eventSenderEngine: EventSenderEngine,
private val root: ConfidenceContextProvider,
private val root: ConfidenceContextProvider? = null,
private val region: ConfidenceRegion = ConfidenceRegion.GLOBAL,
private val flagApplier: FlagApplierWithRetries
) : Contextual, EventSender {
Expand Down Expand Up @@ -68,7 +68,9 @@ class Confidence private constructor(
}

override fun getContext(): Map<String, ConfidenceValue> =
this.root.getContext().filterKeys { removedKeys.contains(it) } + contextMap
this.root?.let {
getContext().filterKeys { removedKeys.contains(it) } + contextMap
} ?: contextMap

override fun withContext(context: Map<String, ConfidenceValue>) = Confidence(
clientSecret,
Expand Down Expand Up @@ -115,11 +117,6 @@ class Confidence private constructor(
flushPolicies = listOf(confidenceSizeFlushPolicy),
dispatcher = dispatcher
)
val confidenceContext = object : ConfidenceContextProvider {
override fun getContext(): Map<String, ConfidenceValue> {
return emptyMap()
}
}
val flagApplierClient = FlagApplierClientImpl(
clientSecret,
SdkMetadata(SDK_ID, BuildConfig.SDK_VERSION),
Expand All @@ -135,10 +132,9 @@ class Confidence private constructor(
clientSecret,
dispatcher,
engine,
confidenceContext,
region,
flagApplier
)
region = region,
flagApplier = flagApplier
).addCommonContext(context)
}
}
}

0 comments on commit 16a2e72

Please sign in to comment.