diff --git a/build.gradle b/build.gradle
index 02bc627..d9431f5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,25 +1,25 @@
buildscript {
- ext.kotlin_version = '1.8.10'
+ ext.kotlin_version = '2.0.20'
if (!project.hasProperty('version') || project.version.equals('unspecified')) {
project.version = '+'
}
repositories {
+ google()
mavenLocal()
mavenCentral()
- google()
}
+
dependencies {
- classpath 'com.android.tools.build:gradle:7.4.1'
+ classpath 'com.android.tools.build:gradle:8.1.4'
classpath 'com.mparticle:android-kit-plugin:' + project.version
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-
}
}
plugins {
id "org.sonarqube" version "3.5.0.2730"
- id "org.jlleitschuh.gradle.ktlint" version "11.2.0"
+ id "org.jlleitschuh.gradle.ktlint" version "13.0.0"
}
sonarqube {
@@ -31,8 +31,8 @@ sonarqube {
}
apply plugin: 'org.jlleitschuh.gradle.ktlint'
-apply plugin: 'com.mparticle.kit'
apply plugin: 'kotlin-android'
+apply plugin: 'com.mparticle.kit'
repositories {
maven {
@@ -41,6 +41,28 @@ repositories {
mavenCentral()
}
+android {
+ namespace 'com.mparticle.kits.singular'
+ buildFeatures {
+ buildConfig = true
+ }
+ defaultConfig {
+ minSdkVersion 16
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_17
+ targetCompatibility JavaVersion.VERSION_17
+ }
+ kotlinOptions {
+ jvmTarget = '17'
+ }
+ testOptions {
+ unitTests.all {
+ jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED']
+ }
+ }
+}
+
dependencies {
api 'com.singular.sdk:singular_sdk:12.5.4'
@@ -53,9 +75,3 @@ dependencies {
testImplementation "org.robolectric:robolectric:4.3.1"
testImplementation 'org.json:json:20220320'
}
-
-android {
- defaultConfig {
- minSdkVersion 16
- }
-}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index ae04661..e1bef7e 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 96412ec..c4e6c98 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -1,2 +1 @@
-
-
+
diff --git a/src/main/kotlin/com/mparticle/kits/SingularKit.kt b/src/main/kotlin/com/mparticle/kits/SingularKit.kt
index f0fddad..280fd6a 100644
--- a/src/main/kotlin/com/mparticle/kits/SingularKit.kt
+++ b/src/main/kotlin/com/mparticle/kits/SingularKit.kt
@@ -30,11 +30,17 @@ import org.json.JSONException
import org.json.JSONObject
import java.math.BigDecimal
-open class SingularKit : KitIntegration(), ActivityListener, EventListener,
- PushListener, CommerceListener, ApplicationStateListener, UserAttributeListener,
+open class SingularKit :
+ KitIntegration(),
+ ActivityListener,
+ EventListener,
+ PushListener,
+ CommerceListener,
+ ApplicationStateListener,
+ UserAttributeListener,
AttributeListener {
-
interface DeviceAttributionCallback : SingularDeviceAttributionHandler
+
interface SdidAccessorHandler : SDIDAccessorHandler
private val logger = SingularLog.getLogger(Singular::class.java.simpleName)
@@ -45,7 +51,7 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
//region Kit Integration Implementation
override fun onKitCreate(
settings: Map,
- context: Context
+ context: Context,
): List {
// Returning the reporting message to state that the method was successful and
// Preventing from the mParticle Kit to retry to activate to method.
@@ -54,14 +60,15 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
ReportingMessage(
this,
ReportingMessage.MessageType.APP_STATE_TRANSITION,
- System.currentTimeMillis(), null
- )
+ System.currentTimeMillis(),
+ null,
+ ),
)
return messages
}
- fun buildSingularConfig(settings: Map?): SingularConfig? {
- return try {
+ fun buildSingularConfig(settings: Map?): SingularConfig? =
+ try {
val singularKey = settings?.get(API_KEY)
val singularSecret = settings?.get(API_SECRET)
@@ -90,12 +97,14 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
linkParams.put(PASSTHROUGH, singularLinkParams.passthrough)
linkParams.put(IS_DEFERRED, singularLinkParams.isDeferred)
if (singularLinkParams.urlParameters != null) {
- linkParams.put(QUERY_PARAMS,
+ linkParams.put(
+ QUERY_PARAMS,
(singularLinkParams.urlParameters as Map<*, *>?)?.let {
JSONObject(
- it
+ it,
)
- })
+ },
+ )
}
attributionResult.parameters = linkParams
} catch (e: JSONException) {
@@ -111,9 +120,9 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
config.withLogLevel(Log.DEBUG)
}
- config.deviceAttributionHandler = deviceAttributionCallback;
+ config.deviceAttributionHandler = deviceAttributionCallback
- config.withCustomSdid(customSdid, sdidAccessorHandler);
+ config.withCustomSdid(customSdid, sdidAccessorHandler)
Singular.setWrapperNameAndVersion(MPARTICLE_WRAPPER_NAME, MPARTICLE_WRAPPER_VERSION)
config
@@ -121,13 +130,10 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
logger.error(CANT_BUILD_SINGULAR_CONFIG_MESSAGE, ex)
null
}
- }
override fun setOptOut(b: Boolean): List = emptyList()
- override fun getName(): String {
- return KIT_NAME
- }
+ override fun getName(): String = KIT_NAME
override fun setInstallReferrer(intent: Intent) {}
@@ -144,7 +150,10 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
}
//region Unimplemented (Empty Methods)
- override fun onActivityCreated(activity: Activity, bundle: Bundle?): List {
+ override fun onActivityCreated(
+ activity: Activity,
+ bundle: Bundle?,
+ ): List {
initializeSingular()
return emptyList()
}
@@ -155,12 +164,11 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
override fun onActivitySaveInstanceState(
activity: Activity,
- bundle: Bundle?
+ bundle: Bundle?,
): List = emptyList()
override fun onActivityDestroyed(activity: Activity): List = emptyList()
-
//endregion
//endregion
//region Event Listener Implementation
@@ -171,11 +179,12 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
val eventInfo = mpEvent.customAttributes
// Logging the event with the Singular API
- val eventStatus: Boolean = if (!eventInfo.isNullOrEmpty()) {
- Singular.eventJSON(eventName, JSONObject(eventInfo))
- } else {
- Singular.event(eventName)
- }
+ val eventStatus: Boolean =
+ if (!eventInfo.isNullOrEmpty()) {
+ Singular.eventJSON(eventName, JSONObject(eventInfo))
+ } else {
+ Singular.event(eventName)
+ }
// If the Singular event logging was successful, return the message to the mParticle Kit
// So it won't retry the event
@@ -189,22 +198,29 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
//region Unimplemented (Empty Methods)
override fun leaveBreadcrumb(s: String): List = emptyList()
-
- override fun logError(s: String, map: Map): List = emptyList()
+ override fun logError(
+ s: String,
+ map: Map,
+ ): List = emptyList()
override fun logException(
e: Exception,
map: Map,
- s: String
+ s: String,
): List = emptyList()
- override fun logScreen(s: String, map: Map): List =
- emptyList()
+ override fun logScreen(
+ s: String,
+ map: Map,
+ ): List = emptyList()
//endregion
//endregion
//region Push Listener Implementation
- override fun onPushRegistration(deviceToken: String, senderId: String): Boolean {
+ override fun onPushRegistration(
+ deviceToken: String,
+ senderId: String,
+ ): Boolean {
// Saving the registration token to determine when the user uninstalls the app.
this.deviceToken = deviceToken
executeIfSingularInitialized({
@@ -218,7 +234,7 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
private fun executeIfSingularInitialized(
operation: () -> Unit,
forceInitSingular: Boolean = false,
- operationName: String
+ operationName: String,
) {
if (isInitialized) {
operation.invoke()
@@ -251,7 +267,10 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
//region Unimplemented (Empty Methods)
override fun willHandlePushMessage(intent: Intent): Boolean = false
- override fun onPushMessageReceived(context: Context, intent: Intent) {}
+ override fun onPushMessageReceived(
+ context: Context,
+ intent: Intent,
+ ) {}
//endregion
//endregion
@@ -279,7 +298,7 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
product.name,
product.category,
product.quantity.toInt(),
- product.unitPrice
+ product.unitPrice,
)
}
}
@@ -313,13 +332,16 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
bigDecimal: BigDecimal,
bigDecimal1: BigDecimal,
s: String,
- map: Map
+ map: Map,
): List = emptyList()
//endregion
//endregion
//region Deprecated Attribute Listener
- override fun setUserAttribute(key: String, value: String) {
+ override fun setUserAttribute(
+ key: String,
+ value: String,
+ ) {
// TODO: Debug these lines to understand the code
val map = HashMap()
if (MParticle.UserAttributes.AGE == key) {
@@ -335,64 +357,80 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
executeIfSingularInitialized(
{
Singular.eventJSON("UserAttribute", (map as Map<*, *>?)?.let { JSONObject(it) })
- }, forceInitSingular = false, "setUserAttribute"
+ },
+ forceInitSingular = false,
+ "setUserAttribute",
)
}
}
- override fun setUserAttributeList(s: String, list: List) {}
+ override fun setUserAttributeList(
+ s: String,
+ list: List,
+ ) {}
override fun onIncrementUserAttribute(
key: String?,
incrementedBy: Number?,
value: String?,
- user: FilteredMParticleUser?
+ user: FilteredMParticleUser?,
) {
}
+ override fun onRemoveUserAttribute(
+ s: String,
+ filteredMParticleUser: FilteredMParticleUser,
+ ) {}
- override fun onRemoveUserAttribute(s: String, filteredMParticleUser: FilteredMParticleUser) {}
override fun onSetUserAttribute(
s: String,
o: Any,
- filteredMParticleUser: FilteredMParticleUser
+ filteredMParticleUser: FilteredMParticleUser,
) {
}
- override fun onSetUserTag(s: String, filteredMParticleUser: FilteredMParticleUser) {}
+ override fun onSetUserTag(
+ s: String,
+ filteredMParticleUser: FilteredMParticleUser,
+ ) {}
+
override fun onSetUserAttributeList(
s: String,
list: List,
- filteredMParticleUser: FilteredMParticleUser
+ filteredMParticleUser: FilteredMParticleUser,
) {
}
override fun onSetAllUserAttributes(
map: Map,
map1: Map>,
- filteredMParticleUser: FilteredMParticleUser
+ filteredMParticleUser: FilteredMParticleUser,
) {
}
- override fun supportsAttributeLists(): Boolean {
- return false
- }
+ override fun supportsAttributeLists(): Boolean = false
override fun onConsentStateUpdated(
consentState: ConsentState,
consentState1: ConsentState,
- filteredMParticleUser: FilteredMParticleUser
+ filteredMParticleUser: FilteredMParticleUser,
) {
-
executeIfSingularInitialized({
consentState.ccpaConsentState?.let { Singular.limitDataSharing(it.isConsented) }
}, forceInitSingular = false, "onConsentStateUpdated")
-
}
- override fun setAllUserAttributes(map: Map, map1: Map>) {}
+ override fun setAllUserAttributes(
+ map: Map,
+ map1: Map>,
+ ) {}
+
override fun removeUserAttribute(s: String) {}
- override fun setUserIdentity(identityType: IdentityType, s: String) {
+
+ override fun setUserIdentity(
+ identityType: IdentityType,
+ s: String,
+ ) {
if (identityType == IdentityType.CustomerId) {
executeIfSingularInitialized({
Singular.setCustomUserId(s)
@@ -450,18 +488,20 @@ open class SingularKit : KitIntegration(), ActivityListener, EventListener,
"Can't build Singular Config in the mParticle Kit"
private var singularSettings: Map? = null
- private var deviceAttributionCallback: DeviceAttributionCallback? = null;
- private var customSdid: String? = null;
- private var sdidAccessorHandler: SdidAccessorHandler? = null;
+ private var deviceAttributionCallback: DeviceAttributionCallback? = null
+ private var customSdid: String? = null
+ private var sdidAccessorHandler: SdidAccessorHandler? = null
@JvmStatic fun setDeviceAttributionCallback(deviceAttributionCallback: DeviceAttributionCallback?) {
- this.deviceAttributionCallback = deviceAttributionCallback;
+ this.deviceAttributionCallback = deviceAttributionCallback
}
- @JvmStatic fun setCustomSDID(customSDID: String?, sdidAccessorHandler: SdidAccessorHandler?) {
+ @JvmStatic fun setCustomSDID(
+ customSDID: String?,
+ sdidAccessorHandler: SdidAccessorHandler?,
+ ) {
this.customSdid = customSDID
this.sdidAccessorHandler = sdidAccessorHandler
}
-
}
}
diff --git a/src/test/kotlin/com/mparticle/kits/SingularKitTest.kt b/src/test/kotlin/com/mparticle/kits/KitTests.kt
similarity index 82%
rename from src/test/kotlin/com/mparticle/kits/SingularKitTest.kt
rename to src/test/kotlin/com/mparticle/kits/KitTests.kt
index 4009618..880425c 100644
--- a/src/test/kotlin/com/mparticle/kits/SingularKitTest.kt
+++ b/src/test/kotlin/com/mparticle/kits/KitTests.kt
@@ -35,7 +35,7 @@ class KitTests {
@Before
fun setUp() {
- //MockitoAnnotations.initMocks(this);
+ // MockitoAnnotations.initMocks(this);
kit = MockSingularKit()
settings = HashMap()
settings[API_KEY] = "Test"
@@ -76,8 +76,8 @@ class KitTests {
Assert.fail(
String.format(
"logEventWithInfo failed with exception message:%s",
- e.message
- )
+ e.message,
+ ),
)
} finally {
Assert.assertTrue(!result.isNullOrEmpty())
@@ -105,8 +105,8 @@ class KitTests {
Assert.fail(
String.format(
"logEventWithInfo failed with exception message:%s",
- e.message
- )
+ e.message,
+ ),
)
} finally {
Assert.assertTrue(!result.isNullOrEmpty())
@@ -128,22 +128,25 @@ class KitTests {
fun logCommercePurchaseEvents() {
var result: List? = null
try {
- val commerceEvent = CommerceEvent.Builder(
- Product.PURCHASE, Product.Builder("Testing", "Unknown", 2.0)
- .quantity(1.0)
- .category("Category")
+ val commerceEvent =
+ CommerceEvent
+ .Builder(
+ Product.PURCHASE,
+ Product
+ .Builder("Testing", "Unknown", 2.0)
+ .quantity(1.0)
+ .category("Category")
+ .build(),
+ ).addProduct(Product.Builder("Unknown", "b", 1.0).build())
.build()
- )
- .addProduct(Product.Builder("Unknown", "b", 1.0).build())
- .build()
result = kit?.logEvent(commerceEvent)
} catch (e: Exception) {
e.printStackTrace()
Assert.fail(
String.format(
"logCommercePurchaseEvents failed with exception message:%s",
- e.message
- )
+ e.message,
+ ),
)
} finally {
Assert.assertTrue(!result.isNullOrEmpty())
@@ -154,22 +157,25 @@ class KitTests {
fun logCommerceNonPurchaseEvents() {
var result: List? = null
try {
- val commerceEvent = CommerceEvent.Builder(
- Product.DETAIL, Product.Builder("Testing", "Unknown", 2.0)
- .quantity(1.0)
- .category("Category")
+ val commerceEvent =
+ CommerceEvent
+ .Builder(
+ Product.DETAIL,
+ Product
+ .Builder("Testing", "Unknown", 2.0)
+ .quantity(1.0)
+ .category("Category")
+ .build(),
+ ).addProduct(Product.Builder("Unknown", "b", 1.0).build())
.build()
- )
- .addProduct(Product.Builder("Unknown", "b", 1.0).build())
- .build()
result = kit?.logEvent(commerceEvent)
} catch (e: Exception) {
e.printStackTrace()
Assert.fail(
String.format(
"logCommerceNonPurchaseEvents failed with exception message:%s",
- e.message
- )
+ e.message,
+ ),
)
} finally {
Assert.assertTrue(!result.isNullOrEmpty())
@@ -199,4 +205,4 @@ class KitTests {
private const val API_SECRET = "secret"
private const val DDL_TIME_OUT = "ddlTimeout"
}
-}
\ No newline at end of file
+}
diff --git a/src/test/kotlin/com/mparticle/kits/MockSingularKit.kt b/src/test/kotlin/com/mparticle/kits/MockSingularKit.kt
index b0f940c..d96f8d5 100644
--- a/src/test/kotlin/com/mparticle/kits/MockSingularKit.kt
+++ b/src/test/kotlin/com/mparticle/kits/MockSingularKit.kt
@@ -7,35 +7,33 @@ import org.json.JSONException
import org.json.JSONObject
class MockSingularKit : SingularKit() {
- override fun logEvent(commerceEvent: CommerceEvent): List {
- return mutableListOf(
+ override fun logEvent(commerceEvent: CommerceEvent): List =
+ mutableListOf(
ReportingMessage(
this,
commerceEvent.eventName,
System.currentTimeMillis(),
- HashMap()
- )
+ HashMap(),
+ ),
)
- }
- override fun logEvent(mpEvent: MPEvent): List {
- return mutableListOf(
+ override fun logEvent(mpEvent: MPEvent): List =
+ mutableListOf(
ReportingMessage(
this,
mpEvent.eventType.toString(),
System.currentTimeMillis(),
- HashMap()
- )
+ HashMap(),
+ ),
)
- }
override fun getConfiguration(): KitConfiguration? {
try {
return KitConfiguration.createKitConfiguration(
JSONObject().put(
"id",
- MParticle.ServiceProviders.SINGULAR
- )
+ MParticle.ServiceProviders.SINGULAR,
+ ),
)
} catch (e: JSONException) {
e.printStackTrace()
diff --git a/src/test/kotlin/com/singular/sdk/Singular.kt b/src/test/kotlin/com/singular/sdk/Singular.kt
index 85d08ae..ce69bed 100644
--- a/src/test/kotlin/com/singular/sdk/Singular.kt
+++ b/src/test/kotlin/com/singular/sdk/Singular.kt
@@ -1,8 +1,6 @@
package com.singular.sdk
-import org.json.JSONObject
-
object Singular {
- var acceptEventJson = false
- var acceptEvent = false
-}
\ No newline at end of file
+ var acceptEventJson = false
+ var acceptEvent = false
+}