From 790dc0583f48aa8516ab314fc03005c9f0d8478a Mon Sep 17 00:00:00 2001 From: denischilik Date: Fri, 6 Mar 2026 10:45:06 -0500 Subject: [PATCH 01/61] feat: migrate appsflyer-kit from submodule to regular directory (#650) * feat: migrate appsflyer-kit from submodule to regular directory * feat: relocate appsflyer-kit to kits/appsflyer/appsflyer-6 and update settings-kits.gradle * Add kit lint/ktlint to PR workflow; ignore appsflyer-6 in Trunk Made-with: Cursor * Fix Trunk ignore: use glob patterns for appsflyer-6 and gradlew Made-with: Cursor * feat: remove .gitignore --- .github/workflows/pull-request.yml | 8 + .gitmodules | 3 - .trunk/trunk.yaml | 3 +- kits/appsflyer-kit | 1 - kits/appsflyer/appsflyer-6/README.md | 31 + kits/appsflyer/appsflyer-6/build.gradle | 69 ++ .../appsflyer-6/consumer-proguard.pro | 0 kits/appsflyer/appsflyer-6/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/appsflyer/appsflyer-6/gradlew | 234 +++++ kits/appsflyer/appsflyer-6/gradlew.bat | 89 ++ kits/appsflyer/appsflyer-6/libs/java-json.jar | Bin 0 -> 84697 bytes .../appsflyer/appsflyer-6/libs/test-utils.aar | Bin 0 -> 104495 bytes kits/appsflyer/appsflyer-6/libs/testutils.aar | Bin 0 -> 47713 bytes .../appsflyer/appsflyer-6/settings.gradle.kts | 2 + .../appsflyer-6/src/main/AndroidManifest.xml | 5 + .../kotlin/com/mparticle/kits/AppsFlyerKit.kt | 649 ++++++++++++++ .../kotlin/com/appsflyer/AppsFlyerConsent.kt | 8 + .../test/kotlin/com/appsflyer/AppsFlyerLib.kt | 47 + .../com/mparticle/kits/AppsflyerKitTests.kt | 843 ++++++++++++++++++ settings-kits.gradle | 2 +- 22 files changed, 1997 insertions(+), 6 deletions(-) delete mode 160000 kits/appsflyer-kit create mode 100644 kits/appsflyer/appsflyer-6/README.md create mode 100644 kits/appsflyer/appsflyer-6/build.gradle create mode 100644 kits/appsflyer/appsflyer-6/consumer-proguard.pro create mode 100644 kits/appsflyer/appsflyer-6/gradle.properties create mode 100644 kits/appsflyer/appsflyer-6/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/appsflyer/appsflyer-6/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/appsflyer/appsflyer-6/gradlew create mode 100644 kits/appsflyer/appsflyer-6/gradlew.bat create mode 100755 kits/appsflyer/appsflyer-6/libs/java-json.jar create mode 100644 kits/appsflyer/appsflyer-6/libs/test-utils.aar create mode 100644 kits/appsflyer/appsflyer-6/libs/testutils.aar create mode 100644 kits/appsflyer/appsflyer-6/settings.gradle.kts create mode 100644 kits/appsflyer/appsflyer-6/src/main/AndroidManifest.xml create mode 100644 kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt create mode 100644 kits/appsflyer/appsflyer-6/src/test/kotlin/com/appsflyer/AppsFlyerConsent.kt create mode 100644 kits/appsflyer/appsflyer-6/src/test/kotlin/com/appsflyer/AppsFlyerLib.kt create mode 100644 kits/appsflyer/appsflyer-6/src/test/kotlin/com/mparticle/kits/AppsflyerKitTests.kt diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 81b0da6d0..2c09afd7b 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -195,6 +195,10 @@ jobs: java-version: "17" - name: "Run Android Core SDK Lint" run: ./gradlew lint + - name: "Setup Android Kit Lint" + run: ./gradlew publishReleaseLocal + - name: "Run Android Kit Lint" + run: ./gradlew -c settings-kits.gradle lint - name: "Archive Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -218,6 +222,10 @@ jobs: java-version: "17" - name: "Run Android Core SDK Kotlin Lint" run: ./gradlew ktlintCheck + - name: "Setup Android Kit Kotlin Lint" + run: ./gradlew publishReleaseLocal + - name: "Run Android Kit Kotlin Lint" + run: ./gradlew -c settings-kits.gradle ktlintCheck - name: "Archive Kotlin Lint Test Results" uses: actions/upload-artifact@v7 if: always() diff --git a/.gitmodules b/.gitmodules index 361869aac..a88a368ca 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,9 +10,6 @@ [submodule "kits/appboy-kit"] path = kits/appboy-kit url = git@github.com:mParticle-integrations/mparticle-android-integration-appboy.git -[submodule "kits/appsflyer-kit"] - path = kits/appsflyer-kit - url = git@github.com:mParticle-integrations/mparticle-android-integration-appsflyer.git [submodule "kits/apptentive-kit"] path = kits/apptentive-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-apptentive.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index ece881dd8..2dae4e6e8 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -65,8 +65,9 @@ lint: ignore: - linters: [ALL] paths: - - gradlew + - "**/gradlew" - scripts/install-start-emulator.sh + - kits/appsflyer/appsflyer-6/** actions: enabled: - trunk-announce diff --git a/kits/appsflyer-kit b/kits/appsflyer-kit deleted file mode 160000 index 541195a3c..000000000 --- a/kits/appsflyer-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 541195a3c0b4a3f3a712486080211564589ac986 diff --git a/kits/appsflyer/appsflyer-6/README.md b/kits/appsflyer/appsflyer-6/README.md new file mode 100644 index 000000000..e9f40d75c --- /dev/null +++ b/kits/appsflyer/appsflyer-6/README.md @@ -0,0 +1,31 @@ +## AppsFlyer Kit Integration + +This repository contains the [AppsFlyer](https://www.appsflyer.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-appsflyer-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"AppsFlyer detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. +4. If you wish to utilize Appsflyers InstallReferrer capabilities, add a dependency for Play Install Referrer library in you app's build.gradle. For more information visit the [Appsflyer SDK's documentation page](https://support.appsflyer.com/hc/en-us/articles/207032066#attribution) on the subject: + + ```groovy + dependencies { + implementation "com.android.installreferrer:installreferrer:2.2" + } + ``` + + +### Documentation + +[AppsFlyer integration](http://docs.mparticle.com/integrations/appsflyer/event/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) \ No newline at end of file diff --git a/kits/appsflyer/appsflyer-6/build.gradle b/kits/appsflyer/appsflyer-6/build.gradle new file mode 100644 index 000000000..4829dd8ea --- /dev/null +++ b/kits/appsflyer/appsflyer-6/build.gradle @@ -0,0 +1,69 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-appsflyer" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.appsflyer' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 19 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } + testOptions { + unitTests.all { + jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] + } + } +} + +ktlint { + android.set(true) +} + +dependencies { + api 'com.appsflyer:af-android-sdk:6.17.3' + testImplementation files('libs/java-json.jar') + testImplementation files('libs/testutils.aar') +} +repositories { + mavenCentral() +} diff --git a/kits/appsflyer/appsflyer-6/consumer-proguard.pro b/kits/appsflyer/appsflyer-6/consumer-proguard.pro new file mode 100644 index 000000000..e69de29bb diff --git a/kits/appsflyer/appsflyer-6/gradle.properties b/kits/appsflyer/appsflyer-6/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/appsflyer/appsflyer-6/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/appsflyer/appsflyer-6/gradle/wrapper/gradle-wrapper.jar b/kits/appsflyer/appsflyer-6/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/appsflyer/appsflyer-6/gradle/wrapper/gradle-wrapper.properties b/kits/appsflyer/appsflyer-6/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/appsflyer/appsflyer-6/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/appsflyer/appsflyer-6/gradlew b/kits/appsflyer/appsflyer-6/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/appsflyer/appsflyer-6/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/appsflyer/appsflyer-6/gradlew.bat b/kits/appsflyer/appsflyer-6/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/appsflyer/appsflyer-6/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/appsflyer/appsflyer-6/libs/java-json.jar b/kits/appsflyer/appsflyer-6/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 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%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M 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%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/appsflyer/appsflyer-6/libs/test-utils.aar b/kits/appsflyer/appsflyer-6/libs/test-utils.aar new file mode 100644 index 0000000000000000000000000000000000000000..a13382c7d880d4b793c0ca38bdd359e4f4179f69 GIT binary patch literal 104495 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 z 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

5a_^i>gI1 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 le<@PWyj%{{x-|yYK)2 literal 0 HcmV?d00001 diff --git a/kits/appsflyer/appsflyer-6/settings.gradle.kts b/kits/appsflyer/appsflyer-6/settings.gradle.kts new file mode 100644 index 000000000..64ca48ba7 --- /dev/null +++ b/kits/appsflyer/appsflyer-6/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-appsflyer-kit" +include(":") diff --git a/kits/appsflyer/appsflyer-6/src/main/AndroidManifest.xml b/kits/appsflyer/appsflyer-6/src/main/AndroidManifest.xml new file mode 100644 index 000000000..ec4a76765 --- /dev/null +++ b/kits/appsflyer/appsflyer-6/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt new file mode 100644 index 000000000..f0b6d0c04 --- /dev/null +++ b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt @@ -0,0 +1,649 @@ +package com.mparticle.kits + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.location.Location +import android.os.Bundle +import com.appsflyer.AFInAppEventParameterName.CONTENT_ID +import com.appsflyer.AFInAppEventParameterName.CONTENT_TYPE +import com.appsflyer.AFInAppEventParameterName.CURRENCY +import com.appsflyer.AFInAppEventParameterName.PRICE +import com.appsflyer.AFInAppEventParameterName.QUANTITY +import com.appsflyer.AFInAppEventParameterName.REVENUE +import com.appsflyer.AFInAppEventType +import com.appsflyer.AFInAppEventType.ADD_TO_CART +import com.appsflyer.AFInAppEventType.ADD_TO_WISH_LIST +import com.appsflyer.AFInAppEventType.INITIATED_CHECKOUT +import com.appsflyer.AFInAppEventType.PURCHASE +import com.appsflyer.AppsFlyerConsent +import com.appsflyer.AppsFlyerConversionListener +import com.appsflyer.AppsFlyerLib +import com.appsflyer.AppsFlyerProperties +import com.appsflyer.deeplink.DeepLinkListener +import com.appsflyer.deeplink.DeepLinkResult +import com.mparticle.AttributionError +import com.mparticle.AttributionResult +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.consent.ConsentState +import com.mparticle.internal.Logger +import com.mparticle.internal.MPUtility +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import java.math.BigDecimal +import java.util.LinkedList + +/** + * mParticle Kit wrapper for the AppsFlyer SDK + */ +class AppsFlyerKit : + KitIntegration(), + KitIntegration.EventListener, + KitIntegration.AttributeListener, + KitIntegration.CommerceListener, + AppsFlyerConversionListener, + KitIntegration.ActivityListener, + KitIntegration.UserAttributeListener { + override fun getInstance(): AppsFlyerLib = AppsFlyerLib.getInstance() + + override fun getName() = NAME + + public override fun onKitCreate( + setting: Map?, + context: Context, + ): List { + AppsFlyerLib + .getInstance() + .setDebugLog( + MParticle.getInstance()?.environment == MParticle.Environment.Development, + ) + settings[DEV_KEY]?.let { AppsFlyerLib.getInstance().init(it, this, context) } + setting?.get(SHARING_FILTER_FOR_PARTNERS)?.let { + applySharingFilterForPartners(it) + } + val userConsentState = currentUser?.consentState + setConsent(userConsentState) + AppsFlyerLib.getInstance().start(context.applicationContext) + AppsFlyerLib.getInstance().setCollectAndroidID(MParticle.isAndroidIdEnabled()) + val integrationAttributes = HashMap(1) + integrationAttributes[APPSFLYERID_INTEGRATION_KEY] = + AppsFlyerLib.getInstance().getAppsFlyerUID(context) + setIntegrationAttributes(integrationAttributes) + AppsFlyerLib.getInstance().subscribeForDeepLink(deepLinkListener()) + + val messages: MutableList = ArrayList() + messages.add( + ReportingMessage( + this, + ReportingMessage.MessageType.APP_STATE_TRANSITION, + System.currentTimeMillis(), + null, + ), + ) + return messages + } + + override fun leaveBreadcrumb(breadcrumb: String): List = emptyList() + + override fun logError( + message: String, + eventData: Map, + ): List = emptyList() + + override fun logException( + exception: Exception, + eventData: Map, + message: String, + ): List = emptyList() + + override fun logLtvIncrease( + valueIncreased: BigDecimal, + valueTotal: BigDecimal, + eventName: String, + contextInfo: Map, + ): List = emptyList() + + override fun logEvent(event: CommerceEvent): List { + val messages: MutableList = LinkedList() + val eventValues: MutableMap = HashMap() + val productList = event.products + + if (isSalesEvent(event)) { + logSalesEvent(event, eventValues, productList, messages) + } else { + logNotSalesEvent(event, messages) + } + return messages + } + + private fun logNotSalesEvent( + event: CommerceEvent, + messages: MutableList, + ) { + val eventList = CommerceEventUtils.expand(event) + if (eventList.isNotEmpty()) { + for (e in eventList) { + try { + logEvent(e) + messages.add(ReportingMessage.fromEvent(this, event)) + } catch (e: Exception) { + Logger.warning("Failed to call logCustomEvent to AppsFlyer kit: $e") + } + } + } + } + + private fun logSalesEvent( + event: CommerceEvent, + eventValues: MutableMap, + productList: MutableList?, + messages: MutableList, + ) { + event.customAttributes?.let { eventValues.putAll(it) } + + if (!KitUtils.isEmpty(event.currency)) { + eventValues[CURRENCY] = event.currency + } + + if (event.productAction == Product.ADD_TO_CART || + event.productAction == Product.ADD_TO_WISHLIST + ) { + val eventName = + if (event.productAction == Product.ADD_TO_CART) { + ADD_TO_CART + } else { + ADD_TO_WISH_LIST + } + + productList?.iterator()?.forEach { product -> + val productEventValues: MutableMap = hashMapOf() + productEventValues.putAll(eventValues) + with(product) { + productEventValues[PRICE] = unitPrice + productEventValues[QUANTITY] = quantity + if (!KitUtils.isEmpty(sku)) { + productEventValues[CONTENT_ID] = sku + } + if (!KitUtils.isEmpty(category)) { + productEventValues[CONTENT_TYPE] = category + } + } + instance.logEvent(context, eventName, productEventValues) + messages.add(ReportingMessage.fromEvent(this, event)) + } + } else { + val eventName = + if (event.productAction == Product.CHECKOUT) { + INITIATED_CHECKOUT + } else { + PURCHASE + } + eventValues[CONTENT_ID] = generateProductIdList(event) + + if (!productList.isNullOrEmpty()) { + var totalQuantity = 0.0 + for (product in productList) { + totalQuantity += product.quantity + } + eventValues[QUANTITY] = totalQuantity + } + + val transactionAttributes = event.transactionAttributes + if ((transactionAttributes != null) && (transactionAttributes.revenue != 0.0)) { + val revenue = transactionAttributes.revenue + if (event.productAction == Product.PURCHASE) { + eventValues[REVENUE] = revenue + if (!MPUtility.isEmpty(transactionAttributes.id)) { + eventValues[AFInAppEventType.ORDER_ID] = transactionAttributes.id + } + } else { + eventValues[PRICE] = revenue + } + } + instance.logEvent(context, eventName, eventValues) + messages.add(ReportingMessage.fromEvent(this, event)) + } + } + + private fun isSalesEvent(event: CommerceEvent) = + event.productAction == Product.ADD_TO_CART || + event.productAction == Product.ADD_TO_WISHLIST || + event.productAction == Product.CHECKOUT || + event.productAction == Product.PURCHASE + + override fun logEvent(event: MPEvent): List { + var hashMap: HashMap? = hashMapOf() + if (event.customAttributes?.isNotEmpty() == true) { + hashMap = event.customAttributes?.let { HashMap(it) } + } + instance.logEvent(context, event.eventName, hashMap) + val messages: MutableList = LinkedList() + messages.add(ReportingMessage.fromEvent(this, event)) + return messages + } + + override fun logScreen( + screenName: String, + eventAttributes: Map, + ): List = emptyList() + + override fun setOptOut(optOutStatus: Boolean): List { + instance.anonymizeUser(optOutStatus) + val messageList: MutableList = LinkedList() + messageList.add( + ReportingMessage( + this, + ReportingMessage.MessageType.OPT_OUT, + System.currentTimeMillis(), + null, + ).setOptOut(optOutStatus), + ) + return messageList + } + + override fun setUserAttribute( + attributeKey: String, + attributeValue: String, + ) {} + + override fun setUserAttributeList( + s: String, + list: List, + ) {} + + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onRemoveUserAttribute( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserAttribute( + key: String?, + value: Any?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserAttributeList( + attributeKey: String?, + attributeValueList: MutableList?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetAllUserAttributes( + userAttributes: MutableMap?, + userAttributeLists: MutableMap>?, + user: FilteredMParticleUser?, + ) { + } + + override fun supportsAttributeLists(): Boolean = true + + override fun setAllUserAttributes( + map: Map, + map1: Map>, + ) {} + + override fun removeUserAttribute(key: String) {} + + override fun removeUserIdentity(identityType: MParticle.IdentityType) { + with(instance) { + if (MParticle.IdentityType.CustomerId == identityType) { + setCustomerUserId("") + } else if (MParticle.IdentityType.Email == identityType) { + setUserEmails(AppsFlyerProperties.EmailsCryptType.NONE, "") + } + } + } + + override fun setUserIdentity( + identityType: MParticle.IdentityType, + identity: String, + ) { + with(instance) { + if (MParticle.IdentityType.CustomerId == identityType) { + setCustomerUserId(identity) + } else if (MParticle.IdentityType.Email == identityType) { + setUserEmails(AppsFlyerProperties.EmailsCryptType.NONE, identity) + } + } + } + + override fun logout(): List = emptyList() + + private fun parseToNestedMap(jsonString: String): Map { + val topLevelMap = mutableMapOf() + try { + if (jsonString.isNullOrEmpty()) { + return topLevelMap + } + val jsonObject = JSONObject(jsonString) + + for (key in jsonObject.keys()) { + val value = jsonObject.get(key) + if (value is JSONObject) { + topLevelMap[key] = parseToNestedMap(value.toString()) + } else { + topLevelMap[key] = value + } + } + } catch (e: Exception) { + Logger.error( + e, + "The AppsFlyer kit was unable to parse the user's ConsentState, consent may not be set correctly on the AppsFlyer SDK", + ) + } + return topLevelMap + } + + private fun searchKeyInNestedMap( + map: Map<*, *>, + key: Any, + ): Any? { + if (map.isNullOrEmpty()) { + return null + } + try { + for ((mapKey, mapValue) in map) { + if (mapKey.toString().equals(key.toString(), ignoreCase = true)) { + return mapValue + } + if (mapValue is Map<*, *>) { + val foundValue = searchKeyInNestedMap(mapValue, key) + if (foundValue != null) { + return foundValue + } + } + } + } catch (e: Exception) { + Logger.error( + e, + "The AppsFlyer kit threw an exception while searching for the configured consent purpose mapping in the current user's consent status.", + ) + } + return null + } + + override fun onConsentStateUpdated( + consentState: ConsentState, + consentState1: ConsentState, + filteredMParticleUser: FilteredMParticleUser, + ) { + setConsent(consentState1) + } + + private fun setConsent(consentState: ConsentState?) { + if (settings[GDPR_APPLIES].isNullOrEmpty()) { + return + } + val appsFlyerGDPRUser: AppsFlyerConsent + if (!settings[GDPR_APPLIES].toBoolean()) { + appsFlyerGDPRUser = AppsFlyerConsent(false, null, null, null) + } else { + var adStorageConsentValue: Boolean? = null + when (settings[DEFAULT_AD_STORAGE_CONSENT]) { + AppsFlyerConsentValues.GRANTED.consentValue -> adStorageConsentValue = true + AppsFlyerConsentValues.DENIED.consentValue -> adStorageConsentValue = false + } + + var adUserDataConsentValue: Boolean? = null + when (settings[DEFAULT_AD_USER_DATA_CONSENT]) { + AppsFlyerConsentValues.GRANTED.consentValue -> adUserDataConsentValue = true + AppsFlyerConsentValues.DENIED.consentValue -> adUserDataConsentValue = false + } + + var adPersonalizationConsentValue: Boolean? = null + when (settings[DEFAULT_AD_PERSONALIZATION_CONSENT]) { + AppsFlyerConsentValues.GRANTED.consentValue -> adPersonalizationConsentValue = true + AppsFlyerConsentValues.DENIED.consentValue -> adPersonalizationConsentValue = false + } + + val clientConsentSettings = parseToNestedMap(consentState.toString()) + + parseConsentMapping(settings[CONSENT_MAPPING]).iterator().forEach { currentConsent -> + + val isConsentAvailable = + searchKeyInNestedMap(clientConsentSettings, key = currentConsent.key) + + if (isConsentAvailable != null) { + val isConsentGranted: Boolean = + JSONObject(isConsentAvailable.toString()).opt("consented") as Boolean + + when (currentConsent.value) { + "ad_storage" -> adStorageConsentValue = isConsentGranted + + "ad_user_data" -> adUserDataConsentValue = isConsentGranted + + "ad_personalization" -> adPersonalizationConsentValue = isConsentGranted + } + } + } + appsFlyerGDPRUser = AppsFlyerConsent(true, adUserDataConsentValue, adPersonalizationConsentValue, adStorageConsentValue) + } + AppsFlyerLib.getInstance().setConsentData(appsFlyerGDPRUser) + } + + private fun parseConsentMapping(json: String?): Map { + if (json.isNullOrEmpty()) { + return emptyMap() + } + val jsonWithFormat = json.replace("\\", "") + + return try { + JSONArray(jsonWithFormat) + .let { jsonArray -> + (0 until jsonArray.length()) + .associate { + val jsonObject = jsonArray.getJSONObject(it) + val map = jsonObject.getString("map") + val value = jsonObject.getString("value") + map to value + } + } + } catch (jse: JSONException) { + Logger.error( + jse, + "The AppsFlyer kit threw an exception while searching for the configured consent purpose mapping in the current user's consent status.", + ) + emptyMap() + } + } + + override fun onConversionDataSuccess(conversionDataN: MutableMap?) { + var conversionData = conversionDataN + val jsonResult = JSONObject() + + if (conversionData == null) { + conversionData = hashMapOf() + } + + conversionData[INSTALL_CONVERSION_RESULT] = "true" + + for ((key, value) in conversionData) { + try { + jsonResult.put(key, value) + } catch (e: JSONException) { + } + } + + val result = + AttributionResult() + .setParameters(jsonResult) + .setServiceProviderId(configuration.kitId) + kitManager.onResult(result) + } + + override fun onConversionDataFail(conversionFailure: String) { + if (!KitUtils.isEmpty(conversionFailure)) { + val error = + AttributionError() + .setMessage(conversionFailure) + .setServiceProviderId(configuration.kitId) + kitManager.onError(error) + } + } + + fun deepLinkListener() = + DeepLinkListener { deepLinkResult -> + val deepLinkObj = deepLinkResult.deepLink + + when (deepLinkResult.status) { + DeepLinkResult.Status.FOUND -> { + try { + deepLinkObj.clickEvent.put(APP_OPEN_ATTRIBUTION_RESULT, true.toString()) + val result = + AttributionResult() + .setParameters(deepLinkObj.clickEvent) + .setServiceProviderId(configuration.kitId) + kitManager.onResult(result) + } catch (e: Exception) { + return@DeepLinkListener + } + } + DeepLinkResult.Status.NOT_FOUND -> { + return@DeepLinkListener + } + else -> { + val dlError = deepLinkResult.error + if (!KitUtils.isEmpty(dlError.toString())) { + val error = + AttributionError() + .setMessage(dlError.toString()) + .setServiceProviderId(configuration.kitId) + kitManager.onError(error) + } + return@DeepLinkListener + } + } + } + + override fun onAppOpenAttribution(attributionDataN: MutableMap?) { + // do nothing, Appsflyer new UDL implementation will use new deep linking method with both + // custom URI and appsflyer's Onelink + } + + override fun onAttributionFailure(attributionFailure: String) { + // do nothing, Appsflyer new UDL implementation will use new deep linking method with both + // custom URI and appsflyer's Onelink + } + + override fun setInstallReferrer(intent: Intent) { + // do nothing, Appsflyer will fetch the install referrer data internally, + // as long as the proper Play Install Referrer dependency is present. + } + + override fun setLocation(location: Location) { + instance.logLocation(context, location.latitude, location.longitude) + } + + override fun onActivityCreated( + activity: Activity, + bundle: Bundle?, + ): List { + instance.start(activity) + return emptyList() + } + + override fun onActivityStarted(activity: Activity): List = emptyList() + + override fun onActivityResumed(activity: Activity): List = emptyList() + + override fun onActivityPaused(activity: Activity): List = emptyList() + + override fun onActivityStopped(activity: Activity): List = emptyList() + + override fun onActivitySaveInstanceState( + activity: Activity, + bundle: Bundle?, + ): List = emptyList() + + override fun onActivityDestroyed(activity: Activity): List = emptyList() + + override fun onSettingsUpdated(settings: Map) { + settings[SHARING_FILTER_FOR_PARTNERS]?.let { applySharingFilterForPartners(it) } + } + + private fun applySharingFilterForPartners(jsonValue: String) { + val partners = parseSharingFilterForPartners(jsonValue) + if (!partners.isNullOrEmpty()) { + instance.setSharingFilterForPartners(*partners.toTypedArray()) + } + } + + private fun parseSharingFilterForPartners(json: String?): List? { + if (json.isNullOrEmpty()) return null + return try { + val jsonWithFormat = json.replace("\\", "") + val array = JSONArray(jsonWithFormat) + List(array.length()) { i -> array.getString(i) } + } catch (e: JSONException) { + Logger.warning( + "AppsFlyer kit: failed to parse sharingFilterForPartners, " + + "consent filter for partners will not be applied. Error: ${e.message}", + ) + null + } + } + + companion object { + const val DEV_KEY = "devKey" + const val APPSFLYERID_INTEGRATION_KEY = "appsflyer_id_integration_setting" + const val NAME = "AppsFlyer" + const val COMMA = "," + + /** + * This key will be present when returning a result from AppsFlyer's onInstallConversionDataLoaded API + */ + const val INSTALL_CONVERSION_RESULT = "MPARTICLE_APPSFLYER_INSTALL_CONVERSION_RESULT" + + /** + * This key will be present when returning a result from AppsFlyer's onAppOpenAttribution API + */ + const val APP_OPEN_ATTRIBUTION_RESULT = + "MPARTICLE_APPSFLYER_APP_OPEN_ATTRIBUTION_RESULT" + + fun generateProductIdList(event: CommerceEvent?): List? = + event?.products?.filter { !KitUtils.isEmpty(it.sku) }?.let { + if (it.isNotEmpty()) { + it.map { it.sku.replace(COMMA, "%2C") } + } else { + null + } + } + + private const val SHARING_FILTER_FOR_PARTNERS = "sharingFilterForPartners" + private const val CONSENT_MAPPING = "consentMapping" + + @Suppress("ktlint:standard:property-naming") + enum class AppsFlyerConsentValues( + val consentValue: String, + ) { + GRANTED("Granted"), + DENIED("Denied"), + } + + const val GDPR_APPLIES = "gdprApplies" + const val DEFAULT_AD_STORAGE_CONSENT = "defaultAdStorageConsent" + const val DEFAULT_AD_USER_DATA_CONSENT = "defaultAdUserDataConsent" + const val DEFAULT_AD_PERSONALIZATION_CONSENT = "defaultAdPersonalizationConsent" + } +} diff --git a/kits/appsflyer/appsflyer-6/src/test/kotlin/com/appsflyer/AppsFlyerConsent.kt b/kits/appsflyer/appsflyer-6/src/test/kotlin/com/appsflyer/AppsFlyerConsent.kt new file mode 100644 index 000000000..eb5cf5e49 --- /dev/null +++ b/kits/appsflyer/appsflyer-6/src/test/kotlin/com/appsflyer/AppsFlyerConsent.kt @@ -0,0 +1,8 @@ +package com.appsflyer + +class AppsFlyerConsent( + val isUserSubjectToGDPR: Boolean?, + val hasConsentForDataUsage: Boolean?, + val hasConsentForAdsPersonalization: Boolean?, + val hasConsentForAdStorage: Boolean?, +) diff --git a/kits/appsflyer/appsflyer-6/src/test/kotlin/com/appsflyer/AppsFlyerLib.kt b/kits/appsflyer/appsflyer-6/src/test/kotlin/com/appsflyer/AppsFlyerLib.kt new file mode 100644 index 000000000..0ce8e82e8 --- /dev/null +++ b/kits/appsflyer/appsflyer-6/src/test/kotlin/com/appsflyer/AppsFlyerLib.kt @@ -0,0 +1,47 @@ +package com.appsflyer + +import android.content.Context + +class AppsFlyerLib { + private var consentData: AppsFlyerConsent? = null + + fun setConsentData(consent: AppsFlyerConsent) { + consentData = consent + } + + fun getConsentData(): AppsFlyerConsent? = consentData + + fun getConsentState(): MutableMap { + val stateMap = mutableMapOf() + consentData?.let { consent -> + // Use property names directly instead of getter methods + consent.isUserSubjectToGDPR?.let { stateMap["isUserSubjectToGDPR"] = it } + consent.hasConsentForDataUsage?.let { stateMap["hasConsentForDataUsage"] = it } + consent.hasConsentForAdsPersonalization?.let { stateMap["hasConsentForAdsPersonalization"] = it } + consent.hasConsentForAdStorage?.let { stateMap["hasConsentForAdStorage"] = it } + } + return stateMap + } + + companion object { + private var _instance: AppsFlyerLib? = null + + @JvmStatic + fun getInstance(): AppsFlyerLib? { + if (_instance == null) { + _instance = AppsFlyerLib() + } + return _instance + } + + @JvmStatic + fun getInstance(context: Context?): AppsFlyerLib? = getInstance() + + /** + * Access Methods + */ + fun clearInstance() { + _instance = null + } + } +} diff --git a/kits/appsflyer/appsflyer-6/src/test/kotlin/com/mparticle/kits/AppsflyerKitTests.kt b/kits/appsflyer/appsflyer-6/src/test/kotlin/com/mparticle/kits/AppsflyerKitTests.kt new file mode 100644 index 000000000..f83866d2b --- /dev/null +++ b/kits/appsflyer/appsflyer-6/src/test/kotlin/com/mparticle/kits/AppsflyerKitTests.kt @@ -0,0 +1,843 @@ +package com.mparticle.kits + +import android.app.Activity +import android.content.Context +import android.net.Uri +import com.appsflyer.AppsFlyerLib +import com.mparticle.MParticle +import com.mparticle.MParticleOptions +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.commerce.TransactionAttributes +import com.mparticle.consent.ConsentState +import com.mparticle.consent.GDPRConsent +import com.mparticle.identity.IdentityApi +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.CoreCallbacks +import com.mparticle.internal.CoreCallbacks.KitListener +import junit.framework.Assert.assertEquals +import junit.framework.TestCase +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.Mockito.mock +import org.mockito.MockitoAnnotations +import java.lang.ref.WeakReference +import java.lang.reflect.Method + +class AppsflyerKitTests { + private var kit = AppsFlyerKit() + private var appsflyer = AppsFlyerLib() + + @Mock + lateinit var filteredMParticleUser: FilteredMParticleUser + + @Mock + lateinit var user: MParticleUser + + @Before + @Throws(JSONException::class) + fun before() { + AppsFlyerLib.clearInstance() + kit = AppsFlyerKit() + MockitoAnnotations.initMocks(this) + MParticle.setInstance(mock(MParticle::class.java)) + Mockito + .`when`(MParticle.getInstance()?.Identity()) + .thenReturn( + mock( + IdentityApi::class.java, + ), + ) + val kitManager = + KitManagerImpl( + mock( + Context::class.java, + ), + null, + emptyCoreCallbacks, + mock(MParticleOptions::class.java), + ) + kit.kitManager = kitManager + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("id", "-1")) + appsflyer = AppsFlyerLib.getInstance(null)!! + } + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(name.isNotEmpty()) + } + + @Test + @Throws(Exception::class) + fun testParseSharingFilterForPartners_returnsListForValidJson() { + val method = + AppsFlyerKit::class.java.getDeclaredMethod( + "parseSharingFilterForPartners", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, """["partner_1", "partner_2"]""") + Assert.assertEquals(listOf("partner_1", "partner_2"), result) + } + + @Test + @Throws(Exception::class) + fun testParseSharingFilterForPartners_returnsNullForEmptyInput() { + val method = + AppsFlyerKit::class.java.getDeclaredMethod( + "parseSharingFilterForPartners", + String::class.java, + ) + method.isAccessible = true + Assert.assertNull(method.invoke(kit, "")) + Assert.assertNull(method.invoke(kit, null)) + } + + @Test + @Throws(Exception::class) + fun testParseSharingFilterForPartners_returnsNullForInvalidJson() { + val method = + AppsFlyerKit::class.java.getDeclaredMethod( + "parseSharingFilterForPartners", + String::class.java, + ) + method.isAccessible = true + Assert.assertNull(method.invoke(kit, "not a json array")) + } + + @Test + @Throws(Exception::class) + fun testParseSharingFilterForPartners_stripsBackslashes() { + val method = + AppsFlyerKit::class.java.getDeclaredMethod( + "parseSharingFilterForPartners", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, """[\"test_1\", \"test_2\"]""") + Assert.assertEquals(listOf("test_1", "test_2"), result) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Throwable? = null + try { + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings as Map, mock(Context::class.java)) + } catch (ex: Throwable) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + @Test + @Throws(Exception::class) + fun testGenerateSkuString() { + MParticle.setInstance(mock(MParticle::class.java)) + Mockito + .`when`(MParticle.getInstance()?.environment) + .thenReturn(MParticle.Environment.Production) + Assert.assertNull(AppsFlyerKit.generateProductIdList(null)) + val product = Product.Builder("foo-name", "foo-sku", 50.0).build() + val event = + CommerceEvent + .Builder(Product.PURCHASE, product) + .transactionAttributes(TransactionAttributes("foo")) + .build() + assertEquals(mutableListOf("foo-sku"), AppsFlyerKit.generateProductIdList(event)) + val product2 = Product.Builder("foo-name-2", "foo-sku-2", 50.0).build() + val event2 = + CommerceEvent + .Builder(Product.PURCHASE, product) + .addProduct(product2) + .transactionAttributes(TransactionAttributes("foo")) + .build() + assertEquals( + mutableListOf("foo-sku", "foo-sku-2"), + AppsFlyerKit.generateProductIdList(event2), + ) + val product3 = Product.Builder("foo-name-3", "foo-sku-,3", 50.0).build() + val event3 = + CommerceEvent + .Builder(Product.PURCHASE, product) + .addProduct(product2) + .addProduct(product3) + .transactionAttributes(TransactionAttributes("foo")) + .build() + assertEquals( + mutableListOf("foo-sku", "foo-sku-2", "foo-sku-%2C3"), + AppsFlyerKit.generateProductIdList(event3), + ) + } + + @Test + @Throws(Exception::class) + fun testConsentWhenGDPRNotApplied() { + val map = HashMap() + map["defaultAdStorageConsent"] = "Granted" + map["gdprApplies"] = "false" + map["consentMapping"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsent"] = "Denied" + map["defaultAdPersonalizationConsent"] = "Denied" + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + + val afConsentResults = appsflyer.getConsentState() + val expectedConsentValue = + afConsentResults + .getValue("isUserSubjectToGDPR") + TestCase.assertEquals(false, expectedConsentValue) + + val notExpectedConsentKey = + afConsentResults.containsKey("hasConsentForDataUsage") + TestCase.assertEquals(false, notExpectedConsentKey) + + val notExpectedConsentKey2 = + afConsentResults.containsKey("hasConsentForAdsPersonalization") + TestCase.assertEquals(false, notExpectedConsentKey2) + + val notExpectedConsentKey3 = + afConsentResults.containsKey("hasConsentForAdStorage") + TestCase.assertEquals(false, notExpectedConsentKey3) + } + + @Test + @Throws(Exception::class) + fun testConsentWhenGDPRAppliedWithoutConsentDefaults() { + val map = HashMap() + map["defaultAdStorageConsent"] = "Unspecified" + map["gdprApplies"] = "true" + map["consentMapping"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsent"] = "Unspecified" + map["defaultAdPersonalizationConsent"] = "Unspecified" + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("test1", marketingConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + + val afConsentResults = appsflyer.getConsentState() + val expectedConsentValue = + afConsentResults + .getValue("isUserSubjectToGDPR") + TestCase.assertEquals(true, expectedConsentValue) + + val notExpectedConsentKey = + afConsentResults.containsKey("hasConsentForDataUsage") + TestCase.assertEquals(false, notExpectedConsentKey) + + val notExpectedConsentKey2 = + afConsentResults.containsKey("hasConsentForAdsPersonalization") + TestCase.assertEquals(false, notExpectedConsentKey2) + + val notExpectedConsentKey3 = + afConsentResults.containsKey("hasConsentForAdStorage") + TestCase.assertEquals(false, notExpectedConsentKey3) + } + + @Test + @Throws(Exception::class) + fun testConsentWhenGDPRAppliedWithConsentDefaults() { + val map = HashMap() + map["defaultAdStorageConsent"] = "Granted" + map["gdprApplies"] = "true" + map["consentMapping"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsent"] = "Denied" + map["defaultAdPersonalizationConsent"] = "Granted" + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("test1", marketingConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + + val afConsentResults = appsflyer.getConsentState() + val expectedConsentValue = + afConsentResults + .getValue("isUserSubjectToGDPR") + TestCase.assertEquals(true, expectedConsentValue) + + val expectedConsentValue2 = + afConsentResults + .getValue("hasConsentForDataUsage") + TestCase.assertEquals(false, expectedConsentValue2) + + val expectedConsentValue3 = + afConsentResults + .getValue("hasConsentForAdsPersonalization") + TestCase.assertEquals(true, expectedConsentValue3) + + val expectedConsentValue4 = + afConsentResults + .getValue("hasConsentForAdStorage") + TestCase.assertEquals(true, expectedConsentValue4) + } + + @Test + @Throws(Exception::class) + fun testConsentMapping() { + val map = HashMap() + map["defaultAdStorageConsent"] = "Granted" + map["gdprApplies"] = "true" + map["consentMapping"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsent"] = "Denied" + map["defaultAdPersonalizationConsent"] = "Granted" + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val performanceConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val marketingConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val testConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Performance", performanceConsent) + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("testconsent", testConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + + val afConsentResults = appsflyer.getConsentState() + val expectedConsentValue = + afConsentResults + .getValue("isUserSubjectToGDPR") + TestCase.assertEquals(true, expectedConsentValue) + + val expectedConsentValue2 = + afConsentResults + .getValue("hasConsentForDataUsage") + TestCase.assertEquals(true, expectedConsentValue2) + + val expectedConsentValue3 = + afConsentResults + .getValue("hasConsentForAdsPersonalization") + TestCase.assertEquals(false, expectedConsentValue3) + + val expectedConsentValue4 = + afConsentResults + .getValue("hasConsentForAdStorage") + TestCase.assertEquals(false, expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTestPerformance_And_Marketing_are_true() { + val map = HashMap() + map["defaultAdStorageConsent"] = "Granted" + map["gdprApplies"] = "true" + map["consentMapping"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsent"] = "Denied" + map["defaultAdPersonalizationConsent"] = "Granted" + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val performanceConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Performance", performanceConsent) + .addGDPRConsentState("Marketing", marketingConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + + val afConsentResults = appsflyer.getConsentState() + val expectedConsentValue = + afConsentResults + .getValue("isUserSubjectToGDPR") + TestCase.assertEquals(true, expectedConsentValue) + + val expectedConsentValue2 = + afConsentResults + .getValue("hasConsentForDataUsage") + TestCase.assertEquals(true, expectedConsentValue2) + + val expectedConsentValue3 = + afConsentResults + .getValue("hasConsentForAdsPersonalization") + TestCase.assertEquals(true, expectedConsentValue3) + + val expectedConsentValue4 = + afConsentResults + .getValue("hasConsentForAdStorage") + TestCase.assertEquals(true, expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_No_Defaults_Values() { + val map = HashMap() + map["gdprApplies"] = "true" + map["consentMapping"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + val afConsentResults = appsflyer.getConsentState() + val expectedConsentValue = + afConsentResults + .getValue("isUserSubjectToGDPR") + TestCase.assertEquals(true, expectedConsentValue) + + val expectedConsentValue2 = + afConsentResults + .getValue("hasConsentForDataUsage") + TestCase.assertEquals(true, expectedConsentValue2) + + val expectedConsentValue3 = + afConsentResults + .getValue("hasConsentForAdsPersonalization") + TestCase.assertEquals(true, expectedConsentValue3) + + val notExpectedConsentKey = + afConsentResults.containsKey("hasConsentForAdStorage") + TestCase.assertEquals(false, notExpectedConsentKey) + } + + @Test + fun onConsentStateUpdatedTest_When_No_DATA_From_Server() { + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + + TestCase.assertEquals(0, appsflyer.getConsentState().size) + } + + @Test + fun onConsentStateUpdatedTest_No_consentMappingSDK() { + val map = HashMap() + map["gdprApplies"] = "true" + map["defaultAdStorageConsent"] = "Granted" + map["defaultAdUserDataConsent"] = "Denied" + map["defaultAdPersonalizationConsent"] = "Denied" + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + + val afConsentResults = appsflyer.getConsentState() + val expectedConsentValue = + afConsentResults + .getValue("isUserSubjectToGDPR") + TestCase.assertEquals(true, expectedConsentValue) + + val expectedConsentValue2 = + afConsentResults + .getValue("hasConsentForDataUsage") + TestCase.assertEquals(false, expectedConsentValue2) + + val expectedConsentValue3 = + afConsentResults + .getValue("hasConsentForAdsPersonalization") + TestCase.assertEquals(false, expectedConsentValue3) + + val expectedConsentValue4 = + afConsentResults + .getValue("hasConsentForAdStorage") + TestCase.assertEquals(true, expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_default_is_Unspecified_And_No_consentMappingSDK_And_GDPR_Not_Applied() { + val map = HashMap() + map["gdprApplies"] = "false" + map["defaultAdStorageConsent"] = "Unspecified" + map["defaultAdUserDataConsent"] = "Unspecified" + map["defaultAdPersonalizationConsent"] = "Unspecified" + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + + TestCase.assertEquals(1, appsflyer.getConsentState().size) + val afConsentResults = appsflyer.getConsentState() + val expectedConsentValue = + afConsentResults + .getValue("isUserSubjectToGDPR") + TestCase.assertEquals(false, expectedConsentValue) + } + + @Test + fun testParseToNestedMap_When_JSON_Is_INVALID() { + var jsonInput = + "{'GDPR':{'marketing':'{:false,'timestamp':1711038269644:'Test consent','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}','performance':'{'consented':true,'timestamp':1711038269644,'document':'parental_consent_agreement_v2','location':'17 Cherry Tree Lan 3','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'},'CCPA':'{'consented':true,'timestamp':1711038269644,'document':'ccpa_consent_agreement_v3','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}" + + val method: Method = + AppsFlyerKit::class.java.getDeclaredMethod( + "parseToNestedMap", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, jsonInput) + Assert.assertEquals(mutableMapOf(), result) + } + + @Test + fun testParseToNestedMap_When_JSON_Is_Empty() { + var jsonInput = "" + + val method: Method = + AppsFlyerKit::class.java.getDeclaredMethod( + "parseToNestedMap", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, jsonInput) + Assert.assertEquals(mutableMapOf(), result) + } + + @Test + fun testSearchKeyInNestedMap_When_Input_Key_Is_Empty_String() { + val map = + mapOf( + "GDPR" to true, + "marketing" to + mapOf( + "consented" to false, + "document" to + mapOf( + "timestamp" to 1711038269644, + ), + ), + ) + val method: Method = + AppsFlyerKit::class.java.getDeclaredMethod( + "searchKeyInNestedMap", + Map::class.java, + Any::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, map, "") + Assert.assertEquals(null, result) + } + + @Test + fun testSearchKeyInNestedMap_When_Input_Is_Empty_Map() { + val emptyMap: Map = emptyMap() + val method: Method = + AppsFlyerKit::class.java.getDeclaredMethod( + "searchKeyInNestedMap", + Map::class.java, + Any::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, emptyMap, "1") + Assert.assertEquals(null, result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_Empty_Json() { + val emptyJson = "" + val method: Method = + AppsFlyerKit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, emptyJson) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_Invalid_Json() { + var jsonInput = + "{'GDPR':{'marketing':'{:false,'timestamp':1711038269644:'Test consent','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}','performance':'{'consented':true,'timestamp':1711038269644,'document':'parental_consent_agreement_v2','location':'17 Cherry Tree Lan 3','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'},'CCPA':'{'consented':true,'timestamp':1711038269644,'document':'ccpa_consent_agreement_v3','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}" + val method: Method = + AppsFlyerKit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, jsonInput) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_NULL() { + val method: Method = + AppsFlyerKit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, null) + Assert.assertEquals(emptyMap(), result) + } + + private var emptyCoreCallbacks: CoreCallbacks = + object : CoreCallbacks { + var activity = Activity() + + override fun isBackgrounded(): Boolean = false + + override fun getUserBucket(): Int = 0 + + override fun isEnabled(): Boolean = false + + override fun setIntegrationAttributes( + i: Int, + map: Map, + ) {} + + override fun getIntegrationAttributes(i: Int): Map? = null + + override fun getCurrentActivity(): WeakReference = WeakReference(activity) + + override fun getLatestKitConfiguration(): JSONArray? = null + + override fun getDataplanOptions(): MParticleOptions.DataplanOptions? = null + + override fun isPushEnabled(): Boolean = false + + override fun getPushSenderId(): String? = null + + override fun getPushInstanceId(): String? = null + + override fun getLaunchUri(): Uri? = null + + override fun getLaunchAction(): String? = null + + override fun getKitListener(): KitListener = + object : KitListener { + override fun kitFound(kitId: Int) {} + + override fun kitConfigReceived( + kitId: Int, + configuration: String?, + ) {} + + override fun kitExcluded( + kitId: Int, + reason: String?, + ) {} + + override fun kitStarted(kitId: Int) {} + + override fun onKitApiCalled( + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) {} + + override fun onKitApiCalled( + methodName: String?, + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) { + } + } + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 5ace41a07..411e538b2 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -5,7 +5,7 @@ include ( ':kits:adobe-kit', ':kits:adobemedia-kit', ':kits:appboy-kit', - ':kits:appsflyer-kit', + ':kits:appsflyer:appsflyer-6', ':kits:apptentive-kit', ':kits:apptimize-kit', ':kits:apteligent-kit', From 52cf9631761e593d6d71e9f87f2dfd86653eae4c Mon Sep 17 00:00:00 2001 From: denischilik Date: Fri, 6 Mar 2026 13:15:08 -0500 Subject: [PATCH 02/61] feat: Braze 38 Kit Migrate (#651) * feat: migrate appboy-kit from submodule to regular directory * feat: relocate appboy-kit to kits/braze/braze-38 and update settings-kits.gradle Made-with: Cursor * fix: add braze-38 to settings-kits.gradle (alphabetical order) Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/appboy-kit | 1 - kits/braze/braze-38/README.md | 71 + kits/braze/braze-38/build.gradle | 72 + kits/braze/braze-38/consumer-proguard.pro | 8 + kits/braze/braze-38/example/build.gradle | 66 + .../example/src/main/AndroidManifest.xml | 43 + .../kits/braze/example/MainActivity.java | 13 + .../drawable-v24/ic_launcher_foreground.xml | 34 + .../res/drawable/ic_launcher_background.xml | 170 ++ .../src/main/res/layout/activity_main.xml | 18 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2963 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4905 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2783 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4490 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6895 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes .../example/src/main/res/values/appboy.xml | 4 + .../example/src/main/res/values/colors.xml | 6 + .../example/src/main/res/values/strings.xml | 3 + .../example/src/main/res/values/styles.xml | 11 + kits/braze/braze-38/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/braze/braze-38/gradlew | 234 +++ kits/braze/braze-38/gradlew.bat | 89 + kits/braze/braze-38/libs/java-json.jar | Bin 0 -> 84697 bytes kits/braze/braze-38/settings.gradle.kts | 2 + .../braze-38/src/main/AndroidManifest.xml | 1 + .../kotlin/com/mparticle/kits/AppboyKit.kt | 1396 +++++++++++++++ .../src/test/kotlin/com/braze/Braze.kt | 63 + .../src/test/kotlin/com/braze/BrazeUser.kt | 95 + .../braze/models/outgoing/BrazeProperties.kt | 55 + .../com/mparticle/kits/AppboyKitTests.kt | 1557 +++++++++++++++++ .../com/mparticle/kits/BrazePurchase.kt | 12 + .../com/mparticle/kits/TypeDetectionTests.kt | 91 + .../com/mparticle/kits/mocks/MockAppboyKit.kt | 29 + .../mparticle/kits/mocks/MockApplication.kt | 39 + .../com/mparticle/kits/mocks/MockContext.kt | 500 ++++++ .../kits/mocks/MockContextApplication.kt | 19 + .../mparticle/kits/mocks/MockCoreCallbacks.kt | 70 + .../kits/mocks/MockKitConfiguration.kt | 84 + .../kits/mocks/MockKitManagerImpl.kt | 71 + .../com/mparticle/kits/mocks/MockResources.kt | 40 + .../kits/mocks/MockSharedPreferences.kt | 88 + .../com/mparticle/kits/mocks/MockUser.kt | 53 + settings-kits.gradle | 2 +- 54 files changed, 5128 insertions(+), 5 deletions(-) delete mode 160000 kits/appboy-kit create mode 100644 kits/braze/braze-38/README.md create mode 100644 kits/braze/braze-38/build.gradle create mode 100644 kits/braze/braze-38/consumer-proguard.pro create mode 100644 kits/braze/braze-38/example/build.gradle create mode 100644 kits/braze/braze-38/example/src/main/AndroidManifest.xml create mode 100644 kits/braze/braze-38/example/src/main/java/com/mparticle/kits/braze/example/MainActivity.java create mode 100644 kits/braze/braze-38/example/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 kits/braze/braze-38/example/src/main/res/drawable/ic_launcher_background.xml create mode 100644 kits/braze/braze-38/example/src/main/res/layout/activity_main.xml create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 kits/braze/braze-38/example/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 kits/braze/braze-38/example/src/main/res/values/appboy.xml create mode 100644 kits/braze/braze-38/example/src/main/res/values/colors.xml create mode 100644 kits/braze/braze-38/example/src/main/res/values/strings.xml create mode 100644 kits/braze/braze-38/example/src/main/res/values/styles.xml create mode 100644 kits/braze/braze-38/gradle.properties create mode 100644 kits/braze/braze-38/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/braze/braze-38/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/braze/braze-38/gradlew create mode 100644 kits/braze/braze-38/gradlew.bat create mode 100755 kits/braze/braze-38/libs/java-json.jar create mode 100644 kits/braze/braze-38/settings.gradle.kts create mode 100644 kits/braze/braze-38/src/main/AndroidManifest.xml create mode 100644 kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/braze/Braze.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/braze/BrazeUser.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/braze/models/outgoing/BrazeProperties.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/AppboyKitTests.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/BrazePurchase.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/TypeDetectionTests.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockAppboyKit.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockApplication.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockContext.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockContextApplication.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockCoreCallbacks.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockKitManagerImpl.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockResources.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockSharedPreferences.kt create mode 100644 kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockUser.kt diff --git a/.gitmodules b/.gitmodules index a88a368ca..3b02ca9b1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,9 +7,6 @@ [submodule "kits/adobemedia-kit"] path = kits/adobemedia-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-adobe-media.git -[submodule "kits/appboy-kit"] - path = kits/appboy-kit - url = git@github.com:mParticle-integrations/mparticle-android-integration-appboy.git [submodule "kits/apptentive-kit"] path = kits/apptentive-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-apptentive.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 2dae4e6e8..f9a54434f 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -68,6 +68,7 @@ lint: - "**/gradlew" - scripts/install-start-emulator.sh - kits/appsflyer/appsflyer-6/** + - kits/braze/braze-38/** actions: enabled: - trunk-announce diff --git a/kits/appboy-kit b/kits/appboy-kit deleted file mode 160000 index 84f7f64fb..000000000 --- a/kits/appboy-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 84f7f64fb24902ee0717053d0cdb1ca4e31599d6 diff --git a/kits/braze/braze-38/README.md b/kits/braze/braze-38/README.md new file mode 100644 index 000000000..bc6503834 --- /dev/null +++ b/kits/braze/braze-38/README.md @@ -0,0 +1,71 @@ +## Braze (formerly Appboy) Kit Integration + +This repository contains the [Braze](https://www.braze.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Example App + +This repository contains an [example app](https://github.com/mparticle-integrations/mparticle-android-integration-appboy/tree/master/example) showing how to implement mParticle, Braze, and Firebase Cloud Messaging. The key changes you need to make to your app are below, and please also reference mParticle and Braze's documentation: + +- [Instrumenting Push](https://docs.mparticle.com/developers/sdk/android/push-notifications) +- [Braze Documentation](https://docs.mparticle.com/integrations/braze/event) + +### 1. Adding the integration + +[See a full build.gradle example here](https://github.com/mparticle-integrations/mparticle-android-integration-appboy/blob/master/example/build.gradle) + +1. The Braze Kit requires that you add Braze's Maven server to your buildscript: + + ``` + repositories { + maven { url "https://appboy.github.io/appboy-android-sdk/sdk" } + //Braze's library depends on the Google Support Library + google() + ... + } + ``` + +2. Add the kit dependency to your app's `build.gradle`: + + ```groovy + dependencies { + implementation 'com.mparticle:android-appboy-kit:5+' + } + ``` + +### 2. Registering for Push + +mParticle's SDK takes care of registering for push notifications and passing tokens or instance IDs to the Braze SDK. [Follow the mParticle push notification documentation](https://docs.mparticle.com/developers/sdk/android/push-notifications#register-for-push-notifications) to instrument the SDK for push registration. You can skip over [this section of Braze's documentation](https://www.braze.com/docs/developer_guide/platform_integration_guides/android/push_notifications/integration/#registering-for-push). + +### 3. Displaying Push + +[See a full example of an AndroidManifest.xml here](https://github.com/mparticle-integrations/mparticle-android-integration-appboy/blob/master/example/src/main/AndroidManifest.xml). + +mParticle's SDK also takes care of capturing incoming push notifications and passing the resulting `Intent` to Braze's `BrazePushReceiver`. Follow the [mParticle push notification documentation](https://docs.mparticle.com/developers/sdk/android/push-notifications#display-push-notifications) to ensure you add the correct services and receivers to your app's AndroidManifest.xml. + +### 4. Reacting to Push and Deeplinking + +There are a wide variety of implementation options available in Braze to deeplink a user when they tap a notification. There are **two specific requirements** to ensure automatic deeplinking works as intended. + +- `BrazePushReceiver` + + Whereas up until now you should have nothing Braze-specific in your `AndroidManifest.xml`, using Braze's automatic deeplinking does require you to add their `BrazePushReceiver`. Note that you do not need to specify any Intent filters (for example to receive push tokens, since mParticle takes care of that). You just need to add the following: + + + +- `braze.xml` + + For automatic deep-linking, you need to add a boolean resource named `com_braze_handle_push_deep_links_automatically`. This can be in any resource file, or you can name it `braze.xml`: + + ```xml + + + true + + ``` + + +From here you should be able to successfully test push via Braze! Braze offers many client-side configurable options via xml resources and otherwise. Please see review the rest of [their documentation here](https://www.braze.com/docs/developer_guide/platform_integration_guides/android/push_notifications/integration/#step-3-add-deep-links) for more information. + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/braze/braze-38/build.gradle b/kits/braze/braze-38/build.gradle new file mode 100644 index 000000000..b00ecfc9d --- /dev/null +++ b/kits/braze/braze-38/build.gradle @@ -0,0 +1,72 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-appboy" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.appboy' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 21 + } + lint { + // Workaround for lint internal crash + abortOnError false + // Ignore obsolete custom lint checks from older fragment library + disable 'ObsoleteLintCustomCheck' + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } + testOptions { + unitTests.all { + jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] + } + } +} + +repositories { + mavenCentral() +} + +dependencies { + compileOnly 'com.google.firebase:firebase-messaging:[10.2.1, )' + api 'com.braze:android-sdk-ui:37.0.0' + testImplementation files('libs/java-json.jar') +} diff --git a/kits/braze/braze-38/consumer-proguard.pro b/kits/braze/braze-38/consumer-proguard.pro new file mode 100644 index 000000000..84babb199 --- /dev/null +++ b/kits/braze/braze-38/consumer-proguard.pro @@ -0,0 +1,8 @@ +# These are the proguard rules specified by the Appboy SDK's documentation + +-dontwarn com.amazon.device.messaging.** +-dontwarn bo.app.** +-dontwarn com.braze.ui.** +-dontwarn com.google.android.gms.** +-keep class bo.app.** { *; } +-keep class com.braze.** { *; } \ No newline at end of file diff --git a/kits/braze/braze-38/example/build.gradle b/kits/braze/braze-38/example/build.gradle new file mode 100644 index 000000000..b52ca8d32 --- /dev/null +++ b/kits/braze/braze-38/example/build.gradle @@ -0,0 +1,66 @@ +/** + * + * Example app build.gradle for using mParticle + Braze + Firebase Cloud Messaging + * Please see the inline comments below. + * + */ + + +apply plugin: 'com.android.application' + +android { + compileSdk 31 + + defaultConfig { + applicationId "com.mparticle.com.mparticle.kits.braze.example" + minSdk 16 + targetSdk 31 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + + buildTypes { + release { + minifyEnabled false + } + } +} + +repositories { + mavenCentral() + maven { url "https://appboy.github.io/appboy-android-sdk/sdk" } //REQUIRED: Braze isn't available in jCenter or Maven Central - so you need to add their Maven Server + google() +} + +buildscript { + repositories { + //REQUIRED: com.google.gms:google-services requires both jCenter and Google's Maven :rollseyes: + mavenCentral() + google() + } + dependencies { + classpath 'com.google.gms:google-services:4.2.0' //REQUIRED for Firebase + } +} +dependencies { + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:support-v4:28.0.0' + implementation 'com.android.support:support-media-compat:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + + // REQUIRED: Add the Braze (formerly Appboy) kit here + // this will also pull in mParticle's Core SDK (com.mparticle:android-core) as a transitive dependency + implementation 'com.mparticle:android-appboy-kit:5.6.5' + + // REQUIRED for Firebase + implementation 'com.google.firebase:firebase-messaging:17.3.4' + + // Not strictly required but strongly recommended so that mParticle and Braze can query for the Android Advertising ID + implementation 'com.google.android.gms:play-services-ads-identifier:16.0.0' + +} + +apply plugin: 'com.google.gms.google-services' //REQUIRED for Firebase diff --git a/kits/braze/braze-38/example/src/main/AndroidManifest.xml b/kits/braze/braze-38/example/src/main/AndroidManifest.xml new file mode 100644 index 000000000..f17e78da8 --- /dev/null +++ b/kits/braze/braze-38/example/src/main/AndroidManifest.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kits/braze/braze-38/example/src/main/java/com/mparticle/kits/braze/example/MainActivity.java b/kits/braze/braze-38/example/src/main/java/com/mparticle/kits/braze/example/MainActivity.java new file mode 100644 index 000000000..e6254cd12 --- /dev/null +++ b/kits/braze/braze-38/example/src/main/java/com/mparticle/kits/braze/example/MainActivity.java @@ -0,0 +1,13 @@ +package com.mparticle.kits.braze.example; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + } +} diff --git a/kits/braze/braze-38/example/src/main/res/drawable-v24/ic_launcher_foreground.xml b/kits/braze/braze-38/example/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 000000000..1f6bb2906 --- /dev/null +++ b/kits/braze/braze-38/example/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/kits/braze/braze-38/example/src/main/res/drawable/ic_launcher_background.xml b/kits/braze/braze-38/example/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000..0d025f9bf --- /dev/null +++ b/kits/braze/braze-38/example/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kits/braze/braze-38/example/src/main/res/layout/activity_main.xml b/kits/braze/braze-38/example/src/main/res/layout/activity_main.xml new file mode 100644 index 000000000..73ddbe136 --- /dev/null +++ b/kits/braze/braze-38/example/src/main/res/layout/activity_main.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/kits/braze/braze-38/example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/kits/braze/braze-38/example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..eca70cfe5 --- /dev/null +++ b/kits/braze/braze-38/example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kits/braze/braze-38/example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/kits/braze/braze-38/example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..eca70cfe5 --- /dev/null +++ b/kits/braze/braze-38/example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kits/braze/braze-38/example/src/main/res/mipmap-hdpi/ic_launcher.png b/kits/braze/braze-38/example/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..898f3ed59ac9f3248734a00e5902736c9367d455 GIT binary patch literal 2963 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 JPDHLkV1g@XpTGbB literal 0 HcmV?d00001 diff --git a/kits/braze/braze-38/example/src/main/res/mipmap-hdpi/ic_launcher_round.png b/kits/braze/braze-38/example/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..dffca3601eba7bf5f409bdd520820e2eb5122c75 GIT binary patch literal 4905 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 lV%Z2*hu);6rydA(}wUDXPCF_W1vnaRBK zeoR6LNsxyaZGA2++G?*?dRwg0Dq5+E#aFEgnub(`IsNLD^CGWJ)s74L)DOcaT_gD&woh@MDDT7paS^E*rkp>8F->o#K*x;hPkb-{g{@G1-RXg&d5PhrJUf$gT>-Kc2+T~(?$>*Yu zT4h`0W>J$pZ%Azsi;{nVW%G=At*)awy8+_t6`#e`RGh(2zZ43)n*13}cE8;I5R%*` z|5tXk`=>gMs>q*$@(4m8?`JI1Q?{ zRHAd+JgRmHP9yV))rP7q3IO??4XSoJ$5!Su*=~JDub(K$fM<8yf*a-K*Qz zPelO^(`|+V_|-0Wk_vz*qdO0>?1mS)wM$Y29FC;)bEP-uAW0uG0ct9EO#m6#%K0RZ z39?+K6Wk5gE*|+^5I8uFyX{ALNYa2Nz%T`Hn@(}pU9*C57Xtylz}>iUsV2Z#2;ejg zaNoZ2a>iW@1kiDtzFVLPa8^~&DQ^ARm5e)008Ic*fO8jsh19y~Ki*W3-Qpae2p0nv zo(NXL_4n_CukY&uHM^BPt?*wD_pyjn&Gy=Rcfp3fUR68tMLx;5n(a64-U;9T#U52V zit5Q{QE!`~T|s99zY=X$w0cfmaNYW#0DU9B1CnnlE=a4Z9-s@!Y^>p_bSr_8-_-*O#n>*O#n>*O#n>*O#n@Ra~B|fQ*l9(%QQf9xcJEvaY~>ll!7d& zeMy*!>i>NLUU=_aXnXb`eD~hF-~w+IsQDzK^0wEj+D$`WSMKSA3v0K*aIW*wzx){v z|Lq;P{lJ5=b}1e+^O;s(t?biT$yLHOtC&t(07^{x))^Qyf&6nz%;wDIf6##eu8#&sKFHx$9)9f0Z%(CUS$4kJ%h zh7xEzhK3iU_R;u@KbYx|2=~79C&+BFEBd6;PpcBt&P}D2M4-D$&W5VeCtg1)xQ^3! z9dwsT*;DBzpVRTKQar!Iz)wS)Y_}P!pfNfWp?4YK(O3Tre#~%m=I?&-Fr?${tJVhS z>=lrTBvW+|8iS#2`i=IfwE<-R;44R%@X>{!`|u$=e(U6DgfD8a!sD+U6_7w8>_2iC zX4F|kjj91=H`?IFhx(x5cTdB<7oUfx-gpfTz4Im<`TO4(Xq$f9`@-{Je(C_+`S?TZ z4vcpQ8~0gw-iMFABs?!xhr3^RjtMxadO=JCss=`ts28z5FLd@+WjRbPjd{sS);z$b0hGtE^P}he^1i z7>H-yd;^|7eoS~C1QmcUcehUNIDmRU&%AkT#6+Jh?!%J56dPSF5W|cS2~^FD7Wvd} zT-c21)vi6B=%lT`_GJe6+|LDhTUPB z>Kqr7@|jIF1GGeZq0h@xpIiwP1yjb9Y*zKO!2wZMbhJU|{xvrEbS+BPy11i`MdHh_ zU@6%x@Ok(Gv{}~ZjMb!kP=K2@70hm|8K6>-+veseAW{OYUZ4qdx&3t8|MsoFVo&7r zBR|p`^0RB9Ym&QOBA13Klxzr>w7U5`YSn4T7nW@sCeFfg|s|3n!5j{|JLH@6H|aVdjq+q(_^fRXaK3P8tZdo9e@(iRu< zt#-^$ANe`N*~%uK05m~D0gxI2h64{X!b14LJ-fp52WMNa-_Ungz>n!?42H)aRu9tf zZn@BbcY(EZVhL~!%>xXh%jx{h69NHlePI7Nbyew@+aBx-lTRSu!x_l?#;y+Fs_qPn zFzyAQVd36CK07Sp-tGSwzO%a%W;so;wyOnR9>!fGhokSm2Wxk>z$}*;zO!cs^F5s7 zdN4|kx0C?4Z8H;L+zUX*9sl^`u!*Ba_}GaL;N;-QdrRble38%L9&`MolaSM3!@FQJ z6G4Z0_?!g@Oi9v1(0V6LNg6>3G$lEgO-Tm6-~7mZF&SDOz2J<8TOPaz5~@oX5^WXm zRgCN}thFfSJHcV(r^j|mGB%U)4;_7J+>jr_V@F?x)tyaH)Y%AYx|-ou6lC4*?Vr!2 zJS|H}beRSgvSlfiJk7T%A+RjP#kOg-=>Ybx$D05Lj~|1XcHQh<^OqD2_9kucVwoaqihgiFwGD}j~1T8KAq z9 z0*J_$7eGipRXI8<3eY7Ipjr$(pS5fpOv=;6o~r=0)r#cH3Lrr~6QEWsz)#GN7h+$5Xou}0dN}v_c^boY%{;YZ{WV+0(M1QNN9kM;!AOnLO zA!aO<$`pxu4!x90Kzr3RkuIy=J+gW&=9H=qA z_U>+&-|S@9p4AWyTLkr1J{JXz;e*%scI*>vDKlk)jL}tnO0kitDO+6 z?2}J&RYIn-a{R1}qm0E@ZB`_oFkdWy1o&B&jg?@V^{!r@`-SP05aqg;X(mq$fxs-TLGNGl11do^z)ej zbyh|4sl+n@Iva%o$n^8W0w|C#6u>A?ev|-N<5GZdoFLuJoL?^%Ksv}8B7j1W6%fFy zNPbv=Zjk_D@+X75dvA_6E6 zFN6iKm8nL!k^)EsSvqW^!UD*VZ;KXSB0MP{62Yt>fJB5F5ujW(!es*ZyvoB1VF6kp z*=dv~|NIJ2T%dOv2k0&0@pc1G%QTb_ih|Yb=$T%62%3bDw82d2XhH;WDF$Wp8)|TS zO9Yk>O2SA)vS<#MrV(i-iw4q$z#0HWxD;ejKcAgz2+A3z)@+3bosdkEd0g z;D&1#CpZiz#?%|L1R`t^3D6uAKsmytNfdzqGC|f*0VK$e7Qk*e$z8qXvXKiA`1=hV zmpdyx!B&1`%>9K46G0ec(a5T#01`o#KmdgZm-_e-0c6Mz|AmPOGO9|Ba#>%@WZZ2W z>Ho;wdKvvm*|hl5+kCX*InGgW8c#HK{=|ok`9yjeW-XboyKLmQg9WCdk*LNJcD!Wm8!M{^|rzMI;*ms)i5}x+Az2Z&!25I4rWwWL}BX? zEOKufEUd2?%)sM9ARn2w5R42L+weM@-Ge!fsOt>oIm=qnPh6z`_Ydz*&dt4=I7*o{ zE1hu`!$e9>O-f74pc5eSr(Br2T9<$6_jJqiuh$jk6-OgwWnppRih^SC?_wkr78Flg zxdOMJdh#qTEon9)Lx{AD zp})x??JVrlV(c?%q&{ae4u}ilB*0A^Hwr0^^>G9BT>K=*lpq(QLcEr=q$MqBNlRMN c(!@yr22-Ey)4s~&`~Uy|07*qoM6N<$g6%nSQUCw| literal 0 HcmV?d00001 diff --git a/kits/braze/braze-38/example/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/kits/braze/braze-38/example/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..14ed0af35023e4f1901cf03487b6c524257b8483 GIT binary patch literal 6895 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 literal 0 HcmV?d00001 diff --git a/kits/braze/braze-38/example/src/main/res/mipmap-xxhdpi/ic_launcher.png b/kits/braze/braze-38/example/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b0907cac3bfd8fbfdc46e1108247f0a1055387ec GIT binary patch literal 6387 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 literal 0 HcmV?d00001 diff --git a/kits/braze/braze-38/example/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/kits/braze/braze-38/example/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ae03154975f397f8ed1b84f2d4bf9783ecfa26 GIT binary patch literal 10413 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 XdJ+W}DiIkV00000NkvXXu0mjfKBlg6 literal 0 HcmV?d00001 diff --git a/kits/braze/braze-38/example/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/kits/braze/braze-38/example/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2c18de9e66108411737e910f5c1972476f03ddbf GIT binary patch literal 9128 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 I20H400LcNok^lez literal 0 HcmV?d00001 diff --git a/kits/braze/braze-38/example/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/kits/braze/braze-38/example/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..beed3cdd2c32af5114a7dc70b9ef5b698eb8797e GIT binary patch literal 15132 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 literal 0 HcmV?d00001 diff --git a/kits/braze/braze-38/example/src/main/res/values/appboy.xml b/kits/braze/braze-38/example/src/main/res/values/appboy.xml new file mode 100644 index 000000000..21ef222fa --- /dev/null +++ b/kits/braze/braze-38/example/src/main/res/values/appboy.xml @@ -0,0 +1,4 @@ + + + true + \ No newline at end of file diff --git a/kits/braze/braze-38/example/src/main/res/values/colors.xml b/kits/braze/braze-38/example/src/main/res/values/colors.xml new file mode 100644 index 000000000..69b22338c --- /dev/null +++ b/kits/braze/braze-38/example/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #008577 + #00574B + #D81B60 + diff --git a/kits/braze/braze-38/example/src/main/res/values/strings.xml b/kits/braze/braze-38/example/src/main/res/values/strings.xml new file mode 100644 index 000000000..b6c2f04cd --- /dev/null +++ b/kits/braze/braze-38/example/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Braze Example + diff --git a/kits/braze/braze-38/example/src/main/res/values/styles.xml b/kits/braze/braze-38/example/src/main/res/values/styles.xml new file mode 100644 index 000000000..5885930df --- /dev/null +++ b/kits/braze/braze-38/example/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/kits/braze/braze-38/gradle.properties b/kits/braze/braze-38/gradle.properties new file mode 100644 index 000000000..56fb79f85 --- /dev/null +++ b/kits/braze/braze-38/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true + diff --git a/kits/braze/braze-38/gradle/wrapper/gradle-wrapper.jar b/kits/braze/braze-38/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/braze/braze-38/gradle/wrapper/gradle-wrapper.properties b/kits/braze/braze-38/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/braze/braze-38/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/braze/braze-38/gradlew b/kits/braze/braze-38/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/braze/braze-38/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/braze/braze-38/gradlew.bat b/kits/braze/braze-38/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/braze/braze-38/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/braze/braze-38/libs/java-json.jar b/kits/braze/braze-38/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 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%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M z2-IyZRfl{8UdLhHDGb??R57|yJubJDC`9kp?#BODv$ef> zgG;M5GQn*35<4UFaTCdUupX1}7XZ+!mO5Rk`qLvxq=^> zl>D14-M1S*#YM7k#(Gk&P;N_TTOrl5HX4UWjHsq(_=7D%^D6g1(SQW$>QTnr_m~$! zfLTw$W~gKjZU*br{g&}qj#RSYcoE(h;=r~fifsX*_5rJ#pb4n_CIIjm!e(+15|c%>Av})+D(zDBoyLOxL!--gGT;x)6mxnz*0_jkg&v=lTI zW547!YaRSZ;M`%zb zBgMXtJJl|DR;LY+oUt*tWq`Lzl83>ywBxiw8D%R}IYeD6>5IKaUMa=%COg8~ZQKRE zJ*m}Zn!YJ=H7TmcYXMeZ>G#N3P_GeblfZS_vQa5*8$SLJNDkVWDl26Uliw*ieNNi7 zD3xK6CoZSONRvgoc5iKqxv67i3zmL~QYXo!lA+auONsI!iN|AYPAN8e*cE|kH|s#M zPOH^jsj9m77aiKcH_g$3YYo!Z^Y4XG{oU4!8SVl zS6#KXsI&?^UGT-l?ByeU;Nk5ZQ}@Nu*D@*fcC5<9%2`rz4{qA-L?lm@{nD1&6eT#K zd-`5ak11J(R1b{T4o?Q#i(r-FCG_k9X)ZEhui;lXUh$E3F9dG~o2 zIkD%U=C!`DVF*QFwEoiLH$lWRnG?QNMjjohjH*|T5f_5B9_k0ofjdrOY?yW5QX3oiMeUhV&` zt1$jgUG-n!wf|_VX*F&63o!)W*rXqZXqTkmcMQ05WyA%>aKP4Z-1TDxJoXtfO^2?U zRkFN@pPlrl5l5inb8T9ZF6X!7hKK0H#>4Pxjxi%seyVg`7w+wuGs#xwgg0wKwF@M$ zafF%KnVJ1oid$P2l0-~;HX%wvW(25}uDu6!4OANHw}C*@encn8@eEXIJ3-0-)7rQP zAYuQkR2dT@ZNMOqK^JZdtr|q}anp8FQ1J^;hGG*U44?ravgJ^7QfkUQr6QgFJRRp# z(UC&-B}KHX;_a9*|0Hf)8`1U@RY*{EQ$i%5dI1wjEn14mY%Wx6L!r3N8a-ET2yIH5 zK&55_Vss+T(HsYiP8Z7SZWLdx<% zQM`Hv8=zYf;l#lK{eRFbuN*IgP;^FLzOEQ?s#9*^B38 z?xecw=uSYdN(#{wX$#*25o7W`wiq#(JYk?eRJ#KL*WiPUX;LLccym~@oImA7U9!oG z&-oY8$U5b&Mz|QcLPShRbfL)4|KaxhwE4FBpf3@#ZfQpzSJW2H@LPA0ui>X?ykcTAD4(mTPh2}%&$UC*DzCowL_SEy^ ztWW&d`HYfelBG6??OkJ#Cj2Lsyw{Z40e;Kqgkm`>v;1V=2=-@ki1_?!%#!w_1P7pYr{b z~h#s&Vby7S1+G;D|IXK~aKz=`u(XmP2U)pGo?;&~*w!Ugga^w1~x zT+6HNkJa^!BGwZ&;s>);tCw}!HdgEpW%C(3hO|Q^l~IW(OEX0A_i}(4Y{uJq(=I3( zl_5Hhyrz=yOHb7*??)OFhYdb*zTvpJ%KNNMxEu7Y!<)h7Pd2GDrSc4ubDySegUa1X z+GUUM`|XfE>c$?y!e&25I?s7&&3X27g%(}Bk(C|CN(vlb9y)0Ks?3|0+ppB1DV5Gn z!F1@f9AX3=LIUGAJQjLW&A8_Hf^#wF`cWtxoUu(g;nB9J(CuRP@}}STz}UfBxo&s` zFuhsmy!>P5@Hd?GTK$8rPaMDn)>QG1czM&D8z`vffvr2mDoHT*6FH#|2g!Oh;v8jC*Y1%A+v2mU=km zi8rgtV4<#?>8kFT#uzPKK|(7`eb=<76UR4J6h5hX;(gX9?|h84qQlK*4`4$}%O z(_}>wn~E6z6ts`!1s*DdIbxL}Ls151eDTJeQyx-quD~0T3GfyuP+|@ff-Fdgy~z}D zEmb+-kP9j5%7ZS0p^8^4T407VtnWrDA50G8@(y`XIm@Oia77ZMEfjG?C-@Ah(bOb* zps7=(b>He;-3Z#$?15x%6s6+~8-G(n%^trogfBNq7N(iPJ4Xu-hs8^zL+9X(MI)97%yO1>KqVd|hLvYke;^GOIOY^9P(hW%i>yIqyAv(=3_KdAliUY% zN1AX&tW&yBx4Y;&{N(*>$&;kuql^m z^$c*+Ot#(8-|UWzK;hGg?n82uaJeJ?K7G}kdH6a1lHKpmO1&3_tV3JJoK^xI8sSp6$t&-$9!l zceC_6diMnk4#q;*ZuUy|UE!Zgww{3??abJlKRTAqW;Wc##%`nip8qVF(&UBT<96kR ze@(aCX8(Q&@aAP?jPiM)es#>1Tjo+r=X0{MgC_#;OIi&}oLwz0pK&ysuU5dt(^_K6 zDzr}*+kP27ji>!~z#_?}J2+0F^zOxgcnqaRmk<<&w;W~YKUr%_K*-)*n5<$ED{eRN z0kA0@kM=wj#1jZh`}12})OG3$oI;*?RI&+f+W_Q%im&t81sv?JtVD5U(ki&J{n zKn8%B%TUcUrzFxLqo28@4p4N-hQ_Gc(yJ2kFocQnR3gMM08r+FX?vX|PgFjV{zzHh zz_uTSo#?8N`eoU@MsO{l1Yl$%50vmb8*D0R48xqf$xY9P7jQKxRG_{EUJ{Cd1Ce1Q zrxN+*m>=}|(dys1fDUkS6=GR&mnmj@tMY_4dJ?q=5(BQRhPh9EE*ZqE!U; ze_S=kv{$ zp@`8Ss+eq_M#RG_q$@V*QWVYUBNl{HlGRga_o`9@Le8Iq+sn=Uom0~hAi0xp&j&Vm zbK;ki^YRf>O%@h*b9V5#4bLxg;Le1f`^_S=3o|Rf8#TL(WsV^WI*@rTLuQTv9EO-{ zGh{|V#EFbO-b`b?dAJeDwwlpdRnt9l>3Y18ag=o)as`GfvnACy0wGSOB$;+08u8l$ z?7UehQvihCCPEve;*6PhAbzW;$!&56&h4(gK^l4(%jUC;f;Qe zF+_TszY8-|-4V6k-X%ihA*+1!T~Zlhk-Te#{aU!Wj#gWm?n6;I?-@0eb>ZvSiEIGN z+@#aJL_J1}%3_hKqXhtnCk(^yj>M520sgOR$D^0%1OfD3uLuG$XEb7iqeeXgwq&Ac zxG>#;6EuY!;mM--KoLD~rD??YveU=P(vx}AcLgYG2^&o)-qJM^v_-E^y?UNvbY&j# z4V5OtOA5Z)v*zOBc9lk!!8N0a?3{JA+9$>o_f1XaDM)@4TwCYJcK_l002&HPw8yC| z!>JQB<>AaaC#~@;ImZU%Tr-D0IXg9~c7o->Frt=5#jnYXNq7Ux>$XD`_;!(>@=*^BG$bktei3}VZk4N$De@F#&#@umEPXm z5DPd$QZYjBj%Hq`4%2%zl>Em{@6m{ru-eqwUMwi`uoKD;;f6smGoIp1fj!eC^G_?C z$DNIn?a~!pzgT^bT8ScMa=nCIm6vA%>BdKsC6x_vUuVKIbFTu$Ck(O7B>Gx`}U( zkFlYOGAM|)Cm6r)H`sqJeMa7#)n;%20DScSzuD}+J_=!ZtL!cw(atr_%`jWbGJJsq8eT*W>2{V_V@{L}@Ea;St* zG@-~d=4n?Yjd)j!5>Nv3BswHsblirBgoAW7A!5+-a#<6?NKVouBH2bj^-h2oMdnV) zCVzLaa7L1cc~}&dd0zFI9Ay&%QsM{21C`O963W)d?_idI zKFyh^-#tz{WoDsG=9vzq!?l1F-Mh-UP#u%(Oun!me&Riru*Yrp=`bU%(cJSfc z8l-V8J0=%lH2FTqUmb)~;MJGUO$5uW_={29qLApV+SfdbJ(#ep%5?`a1Oz70bI^ak zV;S}k3qW)~yV2WmorLHQGPXkdA+Xv@ARwhsK;G>@2cJrUYy+VEt>o z0?{1oDIKj~cY3+$;j(gApGLKjgE{iVEW0a0$R3PG5HXuR+_pD1KO|W^Q7|`It39!9 z*itg|r&Gqag>YCUTMT~1!kHLkDN2U+pQp&_C$JJd?!=Fbh*vo;>g)ORygt6&FCN+3 zfX_NjC`&nKNs3!uD}ScCBIZb8^P4XXGH7&<_>&C-4#*e}ARi1Crn$R+>kIH}u9&%` zDq2rFdz`xIbuT?W8*D0~YP{t#kyqe1j(D_Qgj7y^4J3 zy`DyHjb{}CcB;&oZNkzQSZ~?ESDw#uxMwzbUyg|KYbN0Tv_Pdy7_d4jk0{gf7`eH1isuIZ$#7j{*OJt{kUZ$&tGEh z;IF^*fA^Mt54ZohZuXztyr7elq33@son7%-yJLx`t?58bW~nB#4{BiPTu@<5hJ>rc=+s*Mj;P1((efw8_ z^^(acFnE^B2G7x-&HQ>GoX#_hl+ZblRr?MiuhAicLvIf>b;^*Az*1n+1km8XA!myN zF>HkSc*yb83$D+&aZWasMuT-Eq|318~s&9JTWH6L0nY5;-{GwnY=C~?4$CS`*CjAXeL`X6@dAw8Et-L1UL<P3`MTdU$JZ@b*l}q8)F9$8JytYims80;YiT`1KbRp<5fqXFK&4E@ zy=s?(Pp)jc3C14iGuMa%kqACHfyeCKI#m>ezHgdtfPSn<5a{uY|H0pGSYZX6zKQqM zoY0q#6q@z8@TXOVH-OjE0 zvwqONWZ2Ws$5)%5?~K^Lk-f{Wvpo1&u)%+e@Z>@J+Rs?;u;R#WTpZXk0H-EH2>Bqa zr@6#+jo+`YxIS0icv)~{y>3|cV2OkSKFnB+c;36%@?fL*a^A+z--EATr(N);@&K0( z3_i?YG+&M14hx`Fw^2`i0rZ!jx;Kv~imYDv{_l(nqcP$)ez@>EJ(+dxg^P)NJU-jt z6JE9QA3&%u=dVrd92a$oJDNAPxn9u#6Kw(0Ag-7HI{Em7e0X1X?@So54j5v@2gfmb z+zgWbg$^w(rrmtKTy_m}xy+@n@ZDt>Q|j!Ao%@IPnoHDKSh!&mHF ziN-g!?3O~7!SeEhTGM#C!?^Wt6Y+U*0{lkz#Yk&svQRmP?6EJk3EoJ|KG6ig4X`17gjDsF#6d#kfO!=TtJDS>4tAAUVl6@N z(uK`k}jDQ6+f5FgWM)^fbk0T9J?!3pPb2Z$`i%QuTi<;4C4Jr@PDOrtC1nQ-MG_dE>~ za3o603|qzZ1)zqLUDLH{B?3Dr>w5|GP)2u&2nE}%?Up=m)U?>@yHnjKi zhX45}rbsL4T;b!?SW$dv#*Nftd#EB#sS8|8FpG6P1J1RAf?Q@AJ4B{S1e;vt((My5c zNZm4vfZ{Xro)anPRhORxpX|%(<;Yo}SV4|OK5*#;l|ML;sF~;^ynoL>j2&7|IHFAm zxS}1n8V5-%E=@KdPDBP6(4@DNFkfhwUI0HSaD?zJ1Ma*SF_{>^R;UrSZ494TC(kl1 z&eNHYWZiCpUeI48j981xB<&f|?M`FOvWEQ>Y=Z(gwi*ZkV&&n^xyy;5#s#Gfw!7NH z{{eC|M1VXH=o=F3D{{MD{xXo)ytf{`YEZA9_!++>`6%zh@D-Ekdo~Lc1>%57N+GwN zQ5GEFk4v;tfJZF}T*mD5T*5pv_~3~d0VPEmZJvG=1_g09gXa8$1gsczE%;~>Ez zt$6GK7#Yqj>&4Evd+YK7nb?q6eoP!U1aiZuyT`{Lyo119v!W^j#Rogsy4m@WyG8yi z6dc(kS<*X95#|h+Pmk9@_+9+(lb0~Ru+dp;mR_fRFGD(uL){-M0Fu|jB$%JzR%ey# zFfl4veRnPbeu#%m5OZ3J_1Qh&j)ouScXw3J)jrpfM2Qw1Y)DhUvwA0Al*W`wlkELT zK{Vibdu>|`kVHR@hjXkn0Z(AxM8$b4e8tU9SrClNba4iI6nL_Ia~Qt}jA!_zO480` z%PODh-HEi=S{J(+Fz5Xnic%Fqe{n?&Tg<|MfbAAdN{38ntD-}-lPcFuSON?j;|Xw_ zk4IKAgmAT z-}YRbaXeSUwm2?FHwTy7f=fs8pSFxd^rNgH{`lTxm^(Z2P#NNDA3iGL2O|07Mx`XC zBU((Q^6O`NbpnN`@iB-fT>rB6fHQYa)}GDN@`xBBxW%!f6%nDwgdL%t(cYYl1|>VG zvw*b13OXV#A1YaOA3k{%uoB{sbBTad@WwS6Z#t>{zYD5(aV1{6b~1-@3D8el7#;S5 zAI&DaQ?WNBxm9-YsZo`?5@#rxzv&@s3jjiCFEw%;UhmKqi#%}h@b+l`TNzYk3^m6* zzm>X+adn^x<}`Uhxb=b3?GR*m!LQ&(ii`=fpDVf$V-3( zRSTHJ6q4#c+AQ?Ph>{nm2p~uqqF6>+tL9EU8s`X}-7WwmT|AvY-fpD(LA%mN5r0O3 zfB2w`mq&tOgT${V#UTEob;FSiPv$BTN=<6g-?UrS(9s(7Vc+pL1 zGgYKDiz5p5Brxmt)l`$SNnC5|Xcm!pZJ$(OnZgvs_tLxgS=ZeY{C4Y)LDO@}1e3{K z5*&eSi-Fbdvm=0vbpZ=$ic`j^%#crlWsyu0$pU0EY{nw8v)rIbprq1Ucx0qcW1$2P zWm@p6NGzC*-+m3EQqTHqqL zNO_QWE|?RHDuOnOY{yZRvz6_1#LciUBR+(OCI@wr(M?XEn8cz=MkBpPUtHtipI|`_ zgQa4Hz)RrgNtXi(UxtD--b-bWS&+b)Tdj)Goas_N?f~ayxp4HB(utImloMnfiGE;Q zYP4~B)@c7*o{pt0nq_MWJ5|J*c$>pYNv*jGF}RLmFOEAPD`a65zj7pm9vY|_^(Q3x2snvJsz zIcM*B#UCAcW9bE7aErsR#gQ`{F_+{(?%4Lyp{3sUU|9In8j9s#t4OXkj*4nX6`lHY z1@lRxB7d=x2NBx`36I3#vEHmkLh9ynO{SEdqbpK15y@BsH)4)r(z8&Xm)tD0w~M1&act{Lj* zHkuYQK(V=mmjD7XXD3j{q~2RKTQkt(9U5^zuup2_S;^_OCjdrJQ<)~JbXtj6<0HZP zdU0v~u&>KNt$dk6RcM%2*6A4wyoI0g4Xr5N*eq6?x0ks5;0#vx+6{h(iSMUYz{c9P zjFIhW+GUqc8Hge)MGfLcxqx%}1faeD?RTd?)+XzLFuI9Qx8tG8= ztsu&$$&#sWsZ^R42I6R2C@wcjuQBRPX6jowB7bgdUIIzP!cqV8Z_AX@LIQ_c!zBM+ zZ(0vj(%F;Q+cbaAvD^5mLUmawA<4p#@~odIdE2)oHPj959Ilf6r&JjK4zevpf0+{6 zw_$o_-X2}^)9-aN5rX^R?GKRw*$F>6h*qU=GL|tK?X5*40GV8EInvk4f~fj(^I0~X z;n0dv6o)irPIz(*2>fh>P#AVbhH>fw{Q+GUFlr;y;!3rIa|Ub5=)=NB zm?`?e>7r_YmDWL!#;)Q`MO4GginF(=4xV~|17+)$StK9=Q)H+H(Hvg2lu4$>(cF+# zGI|@LyAhswBtLk4#fSW=M~F~JRB-*1lfr{c@%_W`AtJnqhJZ}WzI4Euc_-Ls;QD4U zG>phpGLL62+4?Y22x!8kO3j~^9mQ?tgJD+a97p&5l}3dK$C2?8SSZcJ08ax?yb4#V z_<~3>?t7Vwc+L2YOe{?S*UW|D!G<>e(LvT1HGbr`m8S`0O@@TX_y!1)cQYJTr;p%K zi-Mgg>6PmA`A~&jWhg;4=e1NAnYb5|A~1y#Kc~p^!6tf!hUsp~T)_Jr;8}vC=q#if zZ&+{m7%LM!2<3zFnJm@h$Ut@PTUjirWaWg$De&_U*DV|KX^OQ#SUTzX=^*cl+6d8# zpQFtn13`<0-$z5I7e#)|>J3it-+|$P?%2z~l2O z9eaij5Khu{Q24mMNIE68`vktA^rU=ct0H$Ui>uuIW3WP`!82q_`E;)DVWtXPl2-49=0Xr@C}b^o zXiq6#Ms(-S_ku0qmAK=ve%uk^bes2CqZzx_Ggp+c&0DHYk+B_z;kTbx zs-#4w|2U`DJop6E8`!U&*|!0{**{|U;YNJIQ~ytB+FXfEHoW~ zRw4#uqdsmhh;s!48FKfcsdVsI-z4@jvgO!pfYO&y(3$gYHf-k+c*Bv?< z&h}}=W7CzMw-Q8U(>tSac+7}D1c;T%wt4_il4H$pZuJn)?m)=!?O1~eIPA;N426G0 z8RK@Mb|wE4E#U#d1+{#pSye|!Y?D+|D(*^<>C~Pi1ZzWHh0zRyA8nwDlz-=c@~VVtUL2EB7>;4__Nc+p1bTQ)KxHKZaI9 zRX8ERtn5acdwW_wlf(|kqca4?djqlS0hPlBI8)&jfeY5s$?6t+X+Kb)F*?-?)s=#m zea8w)SnVdZdcw6sb9u)?6VO689Xo9_h%1VUs4r=7wVYnDTz>tisOwH!>=k{j3zAqB-7m2LvWs-TNoQ*P=A{DYco=Y7DGq9IB?qy~!T}Cl8;{U_fIq=vPXkE5! z+qP}nwr$(Cb<4JG+qz}jcGWF*z3xsYUpjfeVV~@M)>?DSQEX5~JUJsjk@4xC8(R2tU%W%T6}iCsF3kyxvB zn*)(=w_BZ$=->mI>YaVJ_gGpd@|PaC7hXfNxCm}m`?Iu;=3B}MJ!$3TvgxmR($n#3 zT(%MT_{baD$ElY9O_`4+AttZ7t&%*UN2GW5TbUX$CxRe?&ws&NAGo(>1l@a(rK)0< zhnGuD(yEZaNK{vK5TF(9bo?U zE3P}6DNUHqv-=Ku@UCMJ8cgLI#E#sinGNr-6WU0QN|BYda>J5|;NBS~y~{mv({Uv5m8Zb;*`G#>3I$IB4Fud12nU{&4$ zyMbVT5pGKar(rvQ-S{u)>ZUyj@^mxQI=Nj9CO3oP82Fnj=Uq zQ1s#aBj!P{=@iIWC50$meIO zfq`@|Uc7m#tuZ|e!Rb?HY{s|owl(X~oB+a=G?ICdNQ%k-rNEi#E_e{pzh>7vYD&2D@^)SSOb?q~?#d$X*qS1pnL}Q5Ap@dj)N}#7ZdB~p~ zz{!6rJ{s8F^7#X&?$1`ge<|_U9T0zZuDgcY-1u4@fe1(YGryp}luu!Kd-`AdlHl39 zbYrt7Kt&DPeeF0;xHy;a@!;y@U;CIi`FubNA-A z<@{$|d0a1+ySPZRi+?e^9M-YBz7DGd?P1c?52yYP3qFuXxUJ#m#wA8M@55}JH*aNfd#iA>(;622NAz{iQF<&AzdIit^t2P1=n$KxDTyR$fuP;M>V=dbpi^-JCs zx}QX-5)U)ALdrOSy2UP>#tnpsf zA}u-c?;}bNLJYx#CD0o+kqCjC@i=#u#S-jDCsw5EVtGK` zD)e1Q!?A#|fN1x0GqcIwWxspf`vDGjyG~@}u{Xom83`J3&HvlL6o5|%{N5cTjW(j= z;5c_ejRI;*Ag1YfU`&|JuqmQW|6w^n)EXe3fbYaPydS3T(NBz&3)kJ8!J#91w2#pd zv`GXd<{|GG-M)_M^%ILjsIF_^WB#ZC6Q*P%g~kcvPGd}j?9OBiX&M7Wze5$p&@Vh_ zCrLa2MI0j}j$ix~U>L>gr zCSc$|Ba_^%26m-HVI)QDpooREk7?v2=f^qCvG$j1U;Sv|fG37Cy6LB$4GXYfmwcaD z5vDo99k_~xW5zxw2tq2r5{WNTk|?Tjc_5+o-GY|4J-p8JIuS3#$Ik)1Vrv6KU^;Zw z&~%u=fpdLR7xcCrx|=(E?7$oWnE%f<4hScN0gT^#Fg_eJ-cwpQrW&q>OFnZmtgD8R z`uMvsd%uHYj9RSOmenowcHwmk%DA`F$W8z96m3<#28ML&lEx)?iUDt&_})*^6I>W8#bs~-i*E$O-IeZFYceAZJ^^% z@)5uN1_``Wge+>fWTj)E$YLygw7i%^lTa!j*$E{!`4Br{zDE^s^2conJNI~cis%~m z$^=*xNw2a?ErW3I7V+l9uF0$`BS3-8n(#c>ND#kU1l@*peu~OOffBsq2}>RmRR*gu zq1&(a(4eU%vkPfn_xl$0q*Cqht@!i>%l2&_eB8DzHJ!m5#*>?gW?4|vy}C<>R4Ob; zs!Df8Wt}VbTHUygWpv3tGidAdq}7T+^7tAg^xdtGC1xy|iN^OKs(lagcg3g<0=b!B zT;jUii5D7nVu-v33&v-GcU7FLPd=O3t}VVEzWN7ABmCY5cy!w}9v z26fznRWVB3e305}8tO74=_`?Z3ktfsGuwycz}|=q2V`c@$cud9=;2Qs)rgv}FSj^X zWf4@yatN~p3e$8VgTxN>`3krTRJ|738Cf_Lqdl&JD`{3xr`;!=z#xQhvZn(o!wd(~ zGRij(x9nk%Ehe?z@TJPVczy!@LqmmZxFJgW=9$X!3uVeB#$2RA?@9(%Ell_aKtgmx zD#uj~QB)gBD(*fA+NFmtpe?K)u+TmY8Lkm1Q}z|bIz$9tlXQdJHm&Lt50crGEkvh; zRT#TBYDCN9tCF5LlYwjM4yhrvH6Vf8$II= zHMDJ4j_Q+Op9M{tWbzE<`-o0=js2u&@_sF0U3aERE#W-cBK2oAE6##qE07r}&p%D3 zr0FGcxX@tPS(3$Ihjl|kQ*~6` z)!J@bbN_4{8EkrL)I{5w|NcC5Ko-lPVpLbElZ17>)K9hE04R%1Z6_V>ieyYGRu*bZ zv#0Da_@ZV4jJKZx!1?lS7h1?S+@P7$&(c7*4jre7{J%vgxAIy=4+R>FxUjHP-HNEO zvH!@zI;68F(;~Ql@P|dv6VsFcIclO?>zJXBz@LFcSBU^G#26Fj>fX8* z_$R|n!`N_9j^Spe%C4m=LoAzwi&4cP8+y zArlui?C*jZ4wsG4MJ*I+@77hEd7xnPN;W?rL~xzc7&;(Vj5?W-(OY_sqorPWVC3X5 za3fHoC$_J?uv9l(8civemt?1`r?E^hWZ#WrkP|PXkCbwDHW+LqXl%1#U$Z7jygk6$<((=yQ zxP*?G#^x8pv0f`;sCT#g#oj}c9n(5nz)^D~YUjEoy3Hus6)!}0bwzp2_ zRxGUkNk=y`mXRy+wBRj{X80s`80ZfdDIEU$gD{+#CgpfC_Ukttn?XQGR`RtfL~*0 z#~?DgT8V8MSE@e4iKntuo{7X-l$r3Fs%OAk=TxdRo{aWPu$kd-$dEtPFvR;llVuMovdae%g#su4~jgpl)E=a z>?LS|PxriRO@o7db}}^`#m>}3rT$$Ik|GDyo`eKa>&wop0tk!rtKxcffjCh!SmQrG z+*~tbX{w;x78epS=Y@7UFR;!H#;k*L;NMKV6}r}H8TNGa>i(0YT=Kc(PfBT-{d@EM zKZiFxP6xR~uwZXau-Hgp%HRiGN6gU$cn*sV7f_dx)Vvn`*j0F~N2t!Ni5f>d*LBl= z%|Drm)Ub!Pm(*&9szYeKmdDw8#?)PBFK5RSR>W?QY9h7nw7nSdoN&#lpazr<%NIRl z#mkji3oDCM{|HqWB`{pCS7m0Djx7CLA3+a{P|HB&eHEj6MV>9xh_FH}1e$~g5zNmHV zdVEmp{X_{Kp3|pNb;iFuD3K0TL!&V&Q)zswpcV$#(+Sv6tMeZz=~%g0qR0U{3(8r} zMQBEhMyOLk`#e5~-qvWS73=BMQa;JpN&=3We?$pA)gdtWN@qwVd1-cF4$(@3^r4ga zw=z_GKg;}Biab9@$i`NyRIh&-%c*aWT5a6vchOZ;#nRlzMMu@Je-`t%ZoHfRdBlD-)doKv2_Z zi_Jow28h{P&-=yug{JU6{ESCU(~r+b-{gEKHuf5yE!Qmil83X8Le;;!#BXE$pXArr z`Tbu6DO;QFs7FsF6v@=eVg+PrMRS9?Wt}JmBUEEPauGo;(VsrG-ygvSOl9|P)R7%DcCcsju=m4eTrN?6w@dbAxqN0hh$q;)Ll5Bdjhs`lkHujm*2SU$N z(HhTkC1Uo`SQ*2AZHOgN{TB0<#)`YgQ%fcf3#XGA2QkV?aOYByuY$jMq)#H71C}k1 zM!*1c(HMZPP6cL~B$-D1jj>jYI5SB{Mg(M$KzOxM?;88l4mn1&7~-yJ)J1u+Yym<* z-erwjdWx9VoM2oJNN*nG5OEn>NkLmV+Xs#+J%MOS#XO<{ZA%oovy@<^@IN9`5 z>hC03l%r|NUMh!hoIcD*z-VM{K)kZ6^c!Iiz_nCA(k5W0`qtFT#^&aBu5zxbf|Z{y zj^0*-%|GT;>~B&0UcoMA2G*kwSIwcMvafJ+zJzi4f477`3jX{YUTg{jeQ_>;0qp^=|Tbd;$4i zb8&F+vcHV$??3mhAPo8V`4qh`mUkxB2NqYuy~!_@FO${B%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/braze/braze-38/settings.gradle.kts b/kits/braze/braze-38/settings.gradle.kts new file mode 100644 index 000000000..f49fd9f1b --- /dev/null +++ b/kits/braze/braze-38/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-appboy-kit" +include(":") diff --git a/kits/braze/braze-38/src/main/AndroidManifest.xml b/kits/braze/braze-38/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c4e6c98d7 --- /dev/null +++ b/kits/braze/braze-38/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt new file mode 100644 index 000000000..c44edcf3b --- /dev/null +++ b/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -0,0 +1,1396 @@ +package com.mparticle.kits + +import android.app.Application +import android.app.Application.ActivityLifecycleCallbacks +import android.content.Context +import android.content.Intent +import android.os.Handler +import com.braze.Braze +import com.braze.BrazeActivityLifecycleCallbackListener +import com.braze.BrazeUser +import com.braze.configuration.BrazeConfig +import com.braze.enums.BrazeSdkMetadata +import com.braze.enums.Gender +import com.braze.enums.Month +import com.braze.enums.NotificationSubscriptionType +import com.braze.enums.SdkFlavor +import com.braze.events.IValueCallback +import com.braze.models.outgoing.BrazeProperties +import com.braze.push.BrazeFirebaseMessagingService +import com.braze.push.BrazeNotificationUtils.isBrazePushMessage +import com.google.firebase.messaging.RemoteMessage +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.MParticle.UserAttributes +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Impression +import com.mparticle.commerce.Product +import com.mparticle.commerce.Promotion +import com.mparticle.consent.ConsentState +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.Logger +import com.mparticle.kits.CommerceEventUtils.OnAttributeExtracted +import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.PushListener +import com.mparticle.kits.KitIntegration.UserAttributeListener +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import java.math.BigDecimal +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Date +import java.util.EnumSet +import java.util.LinkedList +import kotlin.collections.HashMap + +/** + * mParticle client-side Appboy integration + */ +open class AppboyKit : + KitIntegration(), + AttributeListener, + CommerceListener, + KitIntegration.EventListener, + PushListener, + IdentityListener, + KitIntegration.UserAttributeListener { + var enableTypeDetection = false + var bundleCommerceEvents = false + var isMpidIdentityType = false + var identityType: IdentityType? = null + var subscriptionGroupIds: MutableMap? = mutableMapOf() + private val dataFlushHandler = Handler() + private var dataFlushRunnable: Runnable? = null + private var forwardScreenViews = false + private lateinit var updatedInstanceId: String + + override fun getName() = NAME + + public override fun onKitCreate( + settings: Map, + context: Context, + ): List? { + val key = settings[APPBOY_KEY] + require(!KitUtils.isEmpty(key)) { "Braze key is empty." } + + // try to get endpoint from the host setting + val authority = settings[HOST] + if (!KitUtils.isEmpty(authority)) { + setAuthority(authority) + } + val enableDetectionType = settings[ENABLE_TYPE_DETECTION] + if (!KitUtils.isEmpty(enableDetectionType)) { + try { + enableTypeDetection = enableDetectionType.toBoolean() + } catch (e: Exception) { + Logger.warning("Braze, unable to parse \"enableDetectionType\"") + } + } + val bundleCommerce = settings[BUNDLE_COMMERCE_EVENTS] + if (!KitUtils.isEmpty(bundleCommerce)) { + try { + bundleCommerceEvents = bundleCommerce.toBoolean() + } catch (e: Exception) { + bundleCommerceEvents = false + } + } + forwardScreenViews = settings[FORWARD_SCREEN_VIEWS].toBoolean() + subscriptionGroupIds = + settings[SUBSCRIPTION_GROUP_MAPPING] + ?.let { + getSubscriptionGroupIds(it) + } + if (key != null) { + val config = + BrazeConfig + .Builder() + .setApiKey(key) + .setSdkFlavor(SdkFlavor.MPARTICLE) + .setSdkMetadata(EnumSet.of(BrazeSdkMetadata.MPARTICLE)) + .build() + Braze.configure(context, config) + } + dataFlushRunnable = + Runnable { + if (kitManager.isBackgrounded) { + Braze.getInstance(getContext()).requestImmediateDataFlush() + } + } + queueDataFlush() + if (setDefaultAppboyLifecycleCallbackListener) { + (context.applicationContext as Application).registerActivityLifecycleCallbacks( + BrazeActivityLifecycleCallbackListener() as ActivityLifecycleCallbacks, + ) + } + setIdentityType(settings) + + val user = MParticle.getInstance()?.Identity()?.currentUser + if (user != null) { + updateUser(user) + } + val userConsentState = currentUser?.consentState + userConsentState?.let { + setConsent(currentUser.consentState) + } + return null + } + + fun setIdentityType(settings: Map) { + val userIdentificationType = settings[USER_IDENTIFICATION_TYPE] + if (!KitUtils.isEmpty(userIdentificationType)) { + if (userIdentificationType == "MPID") { + isMpidIdentityType = true + } else { + identityType = userIdentificationType?.let { IdentityType.valueOf(it) } + } + } + } + + override fun setOptOut(optedOut: Boolean): List = emptyList() + + override fun leaveBreadcrumb(breadcrumb: String): List = emptyList() + + override fun logError( + message: String, + errorAttributes: Map, + ): List = emptyList() + + override fun logException( + exception: Exception, + exceptionAttributes: Map, + message: String, + ): List = emptyList() + + override fun logEvent(event: MPEvent): List { + val newAttributes: MutableMap = HashMap() + if (event.customAttributes == null) { + Braze.getInstance(context).logCustomEvent(event.eventName) + } else { + val properties = BrazeProperties() + val brazePropertiesSetter = BrazePropertiesSetter(properties, enableTypeDetection) + event.customAttributeStrings?.let { it -> + for ((key, value) in it) { + newAttributes[key] = brazePropertiesSetter.parseValue(key, value) + } + } + Braze.getInstance(context).logCustomEvent(event.eventName, properties) + Braze + .getInstance(context) + .getCurrentUser( + object : IValueCallback { + override fun onSuccess(value: BrazeUser) { + val userAttributeSetter = UserAttributeSetter(value, enableTypeDetection) + event.customAttributeStrings?.let { it -> + for ((key, attributeValue) in it) { + val hashedKey = + KitUtils.hashForFiltering(event.eventType.value.toString() + event.eventName + key) + + configuration.eventAttributesAddToUser?.get(hashedKey)?.let { + value.addToCustomAttributeArray(it, attributeValue) + } + configuration.eventAttributesRemoveFromUser?.get(hashedKey)?.let { + value.removeFromCustomAttributeArray(it, attributeValue) + } + configuration.eventAttributesSingleItemUser?.get(hashedKey)?.let { + userAttributeSetter.parseValue(it, attributeValue) + } + } + } + } + + override fun onError() { + Logger.warning("unable to acquire user to add or remove custom user attributes from events") + } + }, + ) + } + queueDataFlush() + return listOf(ReportingMessage.fromEvent(this, event).setAttributes(newAttributes)) + } + + override fun logScreen( + screenName: String, + screenAttributes: Map?, + ): List = + if (forwardScreenViews) { + if (screenAttributes == null) { + Braze.getInstance(context).logCustomEvent(screenName) + } else { + val properties = BrazeProperties() + val propertyParser = BrazePropertiesSetter(properties, enableTypeDetection) + for ((key, value) in screenAttributes) { + propertyParser.parseValue(key, value) + } + Braze.getInstance(context).logCustomEvent(screenName, properties) + } + queueDataFlush() + val messages: MutableList = LinkedList() + messages.add( + ReportingMessage( + this, + ReportingMessage.MessageType.SCREEN_VIEW, + System.currentTimeMillis(), + screenAttributes, + ), + ) + messages + } else { + emptyList() + } + + override fun logLtvIncrease( + valueIncreased: BigDecimal, + valueTotal: BigDecimal, + eventName: String, + contextInfo: Map, + ): List = emptyList() + + override fun logEvent(event: CommerceEvent): List { + val messages: MutableList = LinkedList() + if (!KitUtils.isEmpty(event.productAction) && + event.productAction.equals( + Product.PURCHASE, + true, + ) && + !event.products.isNullOrEmpty() + ) { + if (bundleCommerceEvents) { + logOrderLevelTransaction(event) + messages.add(ReportingMessage.fromEvent(this, event)) + } else { + val productList = event.products + productList?.let { + for (product in productList) { + logTransaction(event, product) + } + } + } + messages.add(ReportingMessage.fromEvent(this, event)) + } else { + if (bundleCommerceEvents) { + logOrderLevelTransaction(event) + messages.add(ReportingMessage.fromEvent(this, event)) + } else { + val eventList = CommerceEventUtils.expand(event) + if (eventList != null) { + for (i in eventList.indices) { + try { + val e = eventList[i] + val map = mutableMapOf() + event.customAttributeStrings?.let { map.putAll(it) } + for (pair in map) { + e.customAttributes?.put(pair.key, pair.value) + } + logEvent(e) + messages.add(ReportingMessage.fromEvent(this, event)) + } catch (e: Exception) { + Logger.warning("Failed to call logCustomEvent to Appboy kit: $e") + } + } + } + } + } + queueDataFlush() + return messages + } + + override fun setUserAttribute( + keyIn: String, + attributeValue: String, + ) { + var key = keyIn + Braze + .getInstance(context) + .getCurrentUser( + object : IValueCallback { + override fun onSuccess(value: BrazeUser) { + val userAttributeSetter = UserAttributeSetter(value, enableTypeDetection) + + when (key) { + UserAttributes.CITY -> value.setHomeCity(attributeValue) + UserAttributes.COUNTRY -> value.setCountry(attributeValue) + UserAttributes.FIRSTNAME -> value.setFirstName(attributeValue) + UserAttributes.LASTNAME -> value.setLastName(attributeValue) + UserAttributes.MOBILE_NUMBER -> value.setPhoneNumber(attributeValue) + UserAttributes.ZIPCODE -> value.setCustomUserAttribute("Zip", attributeValue) + UserAttributes.AGE -> { + val calendar = getCalendarMinusYears(attributeValue) + if (calendar != null) { + value.setDateOfBirth(calendar[Calendar.YEAR], Month.JANUARY, 1) + } else { + Logger.warning("unable to set DateOfBirth for " + UserAttributes.AGE + " = " + value) + } + } + EMAIL_SUBSCRIBE -> { + when (attributeValue) { + OPTED_IN -> value.setEmailNotificationSubscriptionType(NotificationSubscriptionType.OPTED_IN) + UNSUBSCRIBED -> value.setEmailNotificationSubscriptionType(NotificationSubscriptionType.UNSUBSCRIBED) + SUBSCRIBED -> value.setEmailNotificationSubscriptionType(NotificationSubscriptionType.SUBSCRIBED) + else -> { + Logger.warning("unable to set email_subscribe with invalid value: " + value) + } + } + } + PUSH_SUBSCRIBE -> { + when (attributeValue) { + OPTED_IN -> value.setPushNotificationSubscriptionType(NotificationSubscriptionType.OPTED_IN) + UNSUBSCRIBED -> value.setPushNotificationSubscriptionType(NotificationSubscriptionType.UNSUBSCRIBED) + SUBSCRIBED -> value.setPushNotificationSubscriptionType(NotificationSubscriptionType.SUBSCRIBED) + else -> { + Logger.warning("unable to set push_subscribe with invalid value: " + value) + } + } + } + DOB -> useDobString(attributeValue, value) + UserAttributes.GENDER -> { + if (attributeValue.contains("fe")) { + value.setGender(Gender.FEMALE) + } else { + value.setGender(Gender.MALE) + } + } + else -> { + if (subscriptionGroupIds?.containsKey(key) == true) { + val groupId = subscriptionGroupIds?.get(key) + when (attributeValue.lowercase()) { + "true" -> { + groupId?.let { value.addToSubscriptionGroup(it) } + } + + "false" -> { + groupId?.let { value.removeFromSubscriptionGroup(it) } + } + + else -> { + Logger.warning( + "Unable to set Subscription Group ID for user attribute: $key due to invalid value data type. Expected Boolean.", + ) + } + } + } else { + if (key.startsWith("$")) { + key = key.substring(1) + } + userAttributeSetter?.parseValue(key, attributeValue) + } + } + } + queueDataFlush() + } + + override fun onError() { + Logger.warning("unable to set key: " + key + " with value: " + attributeValue) + } + }, + ) + } + + // Expected Date Format @"yyyy'-'MM'-'dd" + private fun useDobString( + value: String, + user: BrazeUser, + ) { + val dateFormat = SimpleDateFormat("yyyy-MM-dd") + try { + val calendar = Calendar.getInstance() + calendar.time = dateFormat.parse(value) as Date + val year = calendar[Calendar.YEAR] + val monthNum = calendar[Calendar.MONTH] + val month = Month.values()[monthNum] // + val day = calendar[Calendar.DAY_OF_MONTH] + user.setDateOfBirth(year, month, day) + } catch (e: Exception) { + Logger.warning("unable to set DateOfBirth for \"dob\" = " + value + ". Exception: " + e.message) + } + } + + override fun setUserAttributeList( + key: String, + list: List, + ) { + Braze + .getInstance(context) + .getCurrentUser( + object : IValueCallback { + override fun onSuccess(value: BrazeUser) { + val array = list.toTypedArray() + value.setCustomAttributeArray(key, array) + queueDataFlush() + } + + override fun onError() { + Logger.warning("unable to set key: " + key + " with User Attribute List: " + list) + } + }, + ) + } + + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onRemoveUserAttribute( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserAttribute( + key: String?, + value: Any?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserAttributeList( + attributeKey: String?, + attributeValueList: MutableList?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetAllUserAttributes( + userAttributes: MutableMap?, + userAttributeLists: MutableMap>?, + user: FilteredMParticleUser?, + ) { + } + + override fun supportsAttributeLists(): Boolean = true + + override fun onConsentStateUpdated( + oldState: ConsentState, + newState: ConsentState, + user: FilteredMParticleUser, + ) { + setConsent(newState) + } + + private fun setConsent(consentState: ConsentState) { + val clientConsentSettings = parseToNestedMap(consentState.toString()) + + parseConsentMapping(settings[CONSENT_MAPPING_SDK]).iterator().forEach { currentConsent -> + val isConsentAvailable = + searchKeyInNestedMap(clientConsentSettings, key = currentConsent.key) + + if (isConsentAvailable != null) { + val isConsentGranted: Boolean = + JSONObject(isConsentAvailable.toString()).opt("consented") as Boolean + + when (currentConsent.value) { + "google_ad_user_data" -> + setConsentValueToBraze( + KEY_GOOGLE_AD_USER_DATA, + isConsentGranted, + ) + + "google_ad_personalization" -> + setConsentValueToBraze( + KEY_GOOGLE_AD_PERSONALIZATION, + isConsentGranted, + ) + } + } + } + } + + private fun setConsentValueToBraze( + key: String, + value: Boolean, + ) { + Braze + .getInstance(context) + .getCurrentUser( + object : IValueCallback { + override fun onSuccess(brazeUser: BrazeUser) { + brazeUser.setCustomUserAttribute(key, value) + } + + override fun onError() { + super.onError() + } + }, + ) + } + + private fun parseConsentMapping(json: String?): Map { + if (json.isNullOrEmpty()) { + return emptyMap() + } + val jsonWithFormat = json.replace("\\", "") + + return try { + JSONArray(jsonWithFormat) + .let { jsonArray -> + (0 until jsonArray.length()) + .associate { + val jsonObject = jsonArray.getJSONObject(it) + val map = jsonObject.getString("map") + val value = jsonObject.getString("value") + map to value + } + } + } catch (jse: JSONException) { + Logger.warning( + jse, + "The Braze kit threw an exception while searching for the configured consent purpose mapping in the current user's consent status.", + ) + emptyMap() + } + } + + private fun parseToNestedMap(jsonString: String): Map { + val topLevelMap = mutableMapOf() + try { + val jsonObject = JSONObject(jsonString) + + for (key in jsonObject.keys()) { + val value = jsonObject.get(key) + if (value is JSONObject) { + topLevelMap[key] = parseToNestedMap(value.toString()) + } else { + topLevelMap[key] = value + } + } + } catch (e: Exception) { + Logger.error(e, "The Braze kit was unable to parse the user's ConsentState, consent may not be set correctly on the Braze SDK") + } + return topLevelMap + } + + private fun searchKeyInNestedMap( + map: Map<*, *>, + key: Any, + ): Any? { + if (map.isNullOrEmpty()) { + return null + } + try { + for ((mapKey, mapValue) in map) { + if (mapKey.toString().equals(key.toString(), ignoreCase = true)) { + return mapValue + } + if (mapValue is Map<*, *>) { + val foundValue = searchKeyInNestedMap(mapValue, key) + if (foundValue != null) { + return foundValue + } + } + } + } catch (e: Exception) { + Logger.error( + e, + "The Braze kit threw an exception while searching for the configured consent purpose mapping in the current user's consent status.", + ) + } + return null + } + + protected open fun queueDataFlush() { + dataFlushRunnable?.let { dataFlushHandler.removeCallbacks(it) } + dataFlushRunnable?.let { dataFlushHandler.postDelayed(it, FLUSH_DELAY.toLong()) } + } + + /** + * This is called when the Kit is added to the mParticle SDK, typically on app-startup. + */ + override fun setAllUserAttributes( + attributes: Map, + attributeLists: Map>, + ) { + if (!kitPreferences.getBoolean(PREF_KEY_HAS_SYNCED_ATTRIBUTES, false)) { + for ((key, value) in attributes) { + setUserAttribute(key, value) + } + for ((key, value) in attributeLists) { + setUserAttributeList(key, value) + } + kitPreferences.edit().putBoolean(PREF_KEY_HAS_SYNCED_ATTRIBUTES, true).apply() + } + } + + override fun removeUserAttribute(keyIn: String) { + var key = keyIn + Braze + .getInstance(context) + .getCurrentUser( + object : IValueCallback { + override fun onSuccess(value: BrazeUser) { + if (UserAttributes.CITY == key) { + value.setHomeCity(null) + } else if (UserAttributes.COUNTRY == key) { + value.setCountry(null) + } else if (UserAttributes.FIRSTNAME == key) { + value.setFirstName(null) + } else if (UserAttributes.LASTNAME == key) { + value.setLastName(null) + } else if (UserAttributes.MOBILE_NUMBER == key) { + value.setPhoneNumber(null) + } else { + if (key.startsWith("$")) { + key = key.substring(1) + } + value.unsetCustomUserAttribute(key) + } + queueDataFlush() + } + + override fun onError() { + Logger.warning("unable to remove User Attribute with key: " + key) + } + }, + ) + } + + override fun setUserIdentity( + identityType: IdentityType, + identity: String, + ) {} + + override fun removeUserIdentity(identityType: IdentityType) {} + + override fun logout(): List = emptyList() + + fun logTransaction( + event: CommerceEvent?, + product: Product, + ) { + val purchaseProperties = BrazeProperties() + val currency = arrayOfNulls(1) + val commerceTypeParser: StringTypeParser = + BrazePropertiesSetter( + purchaseProperties, + enableTypeDetection, + ) + val onAttributeExtracted: OnAttributeExtracted = + object : OnAttributeExtracted { + override fun onAttributeExtracted( + key: String, + value: String, + ) { + if (!checkCurrency(key, value)) { + commerceTypeParser.parseValue(key, value) + } + } + + override fun onAttributeExtracted( + key: String, + value: Double, + ) { + if (!checkCurrency(key, value)) { + purchaseProperties.addProperty(key, value) + } + } + + override fun onAttributeExtracted( + key: String, + value: Int, + ) { + purchaseProperties.addProperty(key, value) + } + + override fun onAttributeExtracted(attributes: Map) { + for ((key, value) in attributes) { + if (!checkCurrency(key, value)) { + commerceTypeParser.parseValue(key, value) + } + } + } + + private fun checkCurrency( + key: String, + value: Any?, + ): Boolean = + if (CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE == + key + ) { + currency[0] = value?.toString() + true + } else { + false + } + } + CommerceEventUtils.extractActionAttributes(event, onAttributeExtracted) + var currencyValue = currency[0] + if (KitUtils.isEmpty(currencyValue)) { + currencyValue = CommerceEventUtils.Constants.DEFAULT_CURRENCY_CODE + } + + event?.customAttributes?.let { + for ((key, value) in it) { + purchaseProperties.addProperty(key, value) + } + } + + product.couponCode?.let { + purchaseProperties.addProperty( + CommerceEventUtils.Constants.ATT_PRODUCT_COUPON_CODE, + it, + ) + } + product.brand?.let { + purchaseProperties.addProperty(CommerceEventUtils.Constants.ATT_PRODUCT_BRAND, it) + } + product.category?.let { + purchaseProperties.addProperty(CommerceEventUtils.Constants.ATT_PRODUCT_CATEGORY, it) + } + product.name.let { + purchaseProperties.addProperty(CommerceEventUtils.Constants.ATT_PRODUCT_NAME, it) + } + product.variant?.let { + purchaseProperties.addProperty(CommerceEventUtils.Constants.ATT_PRODUCT_VARIANT, it) + } + product.position?.let { + purchaseProperties.addProperty(CommerceEventUtils.Constants.ATT_PRODUCT_POSITION, it) + } + product.customAttributes?.let { + for ((key, value) in it) { + purchaseProperties.addProperty(key, value) + } + } + + var sanitizedProductName: String = product.sku + try { + if (settings[REPLACE_SKU_AS_PRODUCT_NAME] == "True") { + sanitizedProductName = product.name + } + } catch (e: Exception) { + Logger.error(e, "The Braze kit threw an exception while searching for forward sku as product name flag.") + } + + Braze.Companion.getInstance(context).logPurchase( + sanitizedProductName, + currencyValue, + BigDecimal(product.unitPrice), + product.quantity.toInt(), + purchaseProperties, + ) + } + + fun logOrderLevelTransaction(event: CommerceEvent?) { + val properties = BrazeProperties() + val currency = arrayOfNulls(1) + val commerceTypeParser: StringTypeParser = + BrazePropertiesSetter( + properties, + enableTypeDetection, + ) + val onAttributeExtracted: OnAttributeExtracted = + object : OnAttributeExtracted { + override fun onAttributeExtracted( + key: String, + value: String, + ) { + if (!checkCurrency(key, value)) { + commerceTypeParser.parseValue(key, value) + } + } + + override fun onAttributeExtracted( + key: String, + value: Double, + ) { + if (!checkCurrency(key, value)) { + properties.addProperty(key, value) + } + } + + override fun onAttributeExtracted( + key: String, + value: Int, + ) { + properties.addProperty(key, value) + } + + override fun onAttributeExtracted(attributes: Map) { + for ((key, value) in attributes) { + if (!checkCurrency(key, value)) { + commerceTypeParser.parseValue(key, value) + } + } + } + + private fun checkCurrency( + key: String, + value: Any?, + ): Boolean = + if (CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE == + key + ) { + currency[0] = value?.toString() + true + } else { + false + } + } + CommerceEventUtils.extractActionAttributes(event, onAttributeExtracted) + var currencyValue = currency[0] + if (KitUtils.isEmpty(currencyValue)) { + currencyValue = CommerceEventUtils.Constants.DEFAULT_CURRENCY_CODE + } + + event?.customAttributes?.let { + properties.addProperty(CUSTOM_ATTRIBUTES_KEY, it) + } + + val productList = event?.products + productList?.let { + val productArray = getProductListParameters(it) + properties.addProperty(PRODUCT_KEY, productArray) + } + + val promotionList = event?.promotions + promotionList?.let { + val promotionArray = getPromotionListParameters(it) + properties.addProperty(PROMOTION_KEY, promotionArray) + } + + val impressionList = event?.impressions + impressionList?.let { + val impressionArray = getImpressionListParameters(it) + properties.addProperty(IMPRESSION_KEY, impressionArray) + } + + val eventName = "eCommerce - %s" + if (!KitUtils.isEmpty(event?.productAction) && + event?.productAction.equals(Product.PURCHASE, true) + ) { + Braze.Companion.getInstance(context).logPurchase( + String.format(eventName, event?.productAction), + currencyValue, + event?.transactionAttributes?.revenue?.let { BigDecimal(it) } ?: BigDecimal(0), + 1, + properties, + ) + } else { + if (!KitUtils.isEmpty(event?.productAction)) { + Braze + .getInstance(context) + .logCustomEvent( + String.format(eventName, event?.productAction), + properties, + ) + } else if (!KitUtils.isEmpty(event?.promotionAction)) { + Braze + .getInstance(context) + .logCustomEvent( + String.format(eventName, event?.promotionAction), + properties, + ) + } else { + Braze + .getInstance(context) + .logCustomEvent( + String.format(eventName, "Impression"), + properties, + ) + } + } + } + + override fun willHandlePushMessage(intent: Intent): Boolean = + if (!(settings[PUSH_ENABLED].toBoolean())) { + false + } else { + intent.isBrazePushMessage() + } + + override fun onPushMessageReceived( + context: Context, + pushIntent: Intent, + ) { + if (settings[PUSH_ENABLED].toBoolean()) { + BrazeFirebaseMessagingService.handleBrazeRemoteMessage( + context, + RemoteMessage(pushIntent.extras), + ) + } + } + + override fun onPushRegistration( + instanceId: String, + senderId: String, + ): Boolean = + if (settings[PUSH_ENABLED].toBoolean()) { + updatedInstanceId = instanceId + Braze.getInstance(context).registeredPushToken = instanceId + queueDataFlush() + true + } else { + false + } + + protected open fun setAuthority(authority: String?) { + Braze.setEndpointProvider { appboyEndpoint -> + appboyEndpoint + .buildUpon() + .authority(authority) + .build() + } + } + + override fun onIdentifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest?, + ) { + updateUser(mParticleUser) + } + + override fun onLoginCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest?, + ) { + updateUser(mParticleUser) + } + + override fun onLogoutCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest?, + ) { + updateUser(mParticleUser) + } + + override fun onModifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest?, + ) { + updateUser(mParticleUser) + } + + private fun updateUser(mParticleUser: MParticleUser) { + val identity = getIdentity(isMpidIdentityType, identityType, mParticleUser) + val email = mParticleUser.userIdentities[IdentityType.Email] + identity?.let { setId(it) } + email?.let { setEmail(it) } + } + + fun getIdentity( + isMpidIdentityType: Boolean, + identityType: IdentityType?, + mParticleUser: MParticleUser?, + ): String? { + var identity: String? = null + if (isMpidIdentityType && mParticleUser != null) { + identity = mParticleUser.id.toString() + } else if (identityType != null && mParticleUser != null) { + identity = mParticleUser.userIdentities[identityType] + } + return identity + } + + protected open fun setId(customerId: String) { + Braze + .getInstance(context) + .getCurrentUser( + object : IValueCallback { + override fun onSuccess(value: BrazeUser) { + if (value.userId != customerId) { + Braze.getInstance(context).changeUser(customerId) + queueDataFlush() + } + } + + override fun onError() { + Logger.warning("unable to change user to customer ID: " + customerId) + } + }, + ) + } + + protected open fun setEmail(email: String) { + if (email != kitPreferences.getString(PREF_KEY_CURRENT_EMAIL, null)) { + Braze + .getInstance(context) + .getCurrentUser( + object : IValueCallback { + override fun onSuccess(value: BrazeUser) { + value.setEmail(email) + queueDataFlush() + kitPreferences + .edit() + .putString(PREF_KEY_CURRENT_EMAIL, email) + .apply() + } + + override fun onError() { + Logger.warning("unable to set email with value: " + email) + } + }, + ) + } + } + + override fun onUserIdentified(mParticleUser: MParticleUser) { + if (updatedInstanceId.isNotEmpty()) { + Braze.getInstance(context).registeredPushToken = updatedInstanceId + } + } + + fun addToProperties( + properties: BrazeProperties, + key: String, + value: String, + ) { + try { + if ("true".equals(value, true) || + "false".equals( + value, + true, + ) + ) { + properties.addProperty(key, (value).toBoolean()) + } else { + val doubleValue = value.toDouble() + if (doubleValue % 1 == 0.0) { + properties.addProperty(key, value.toInt()) + } else { + properties.addProperty(key, doubleValue) + } + } + } catch (e: Exception) { + properties.addProperty(key, value) + } + } + + fun getCalendarMinusYears(yearsString: String): Calendar? { + try { + val years = yearsString.toInt() + return getCalendarMinusYears(years) + } catch (ignored: NumberFormatException) { + try { + val years = yearsString.toDouble() + return getCalendarMinusYears(years.toInt()) + } catch (ignoredToo: NumberFormatException) { + } + } + return null + } + + fun getCalendarMinusYears(years: Int): Calendar? = + if (years >= 0) { + val calendar = Calendar.getInstance() + calendar[Calendar.YEAR] = calendar[Calendar.YEAR] - years + calendar + } else { + null + } + + fun getProductListParameters(productList: List): JSONArray { + val productArray = JSONArray() + for ((i, product) in productList.withIndex()) { + val productProperties = JSONObject() + + product.customAttributes?.let { + productProperties.put(CUSTOM_ATTRIBUTES_KEY, it) + } + product.couponCode?.let { + productProperties.put( + CommerceEventUtils.Constants.ATT_PRODUCT_COUPON_CODE, + it, + ) + } + product.brand?.let { + productProperties.put(CommerceEventUtils.Constants.ATT_PRODUCT_BRAND, it) + } + product.category?.let { + productProperties.put(CommerceEventUtils.Constants.ATT_PRODUCT_CATEGORY, it) + } + product.name?.let { + productProperties.put(CommerceEventUtils.Constants.ATT_PRODUCT_NAME, it) + } + product.sku?.let { + productProperties.put(CommerceEventUtils.Constants.ATT_PRODUCT_ID, it) + } + product.variant?.let { + productProperties.put(CommerceEventUtils.Constants.ATT_PRODUCT_VARIANT, it) + } + product.position?.let { + productProperties.put(CommerceEventUtils.Constants.ATT_PRODUCT_POSITION, it) + } + productProperties.put( + CommerceEventUtils.Constants.ATT_PRODUCT_PRICE, + product.unitPrice, + ) + productProperties.put( + CommerceEventUtils.Constants.ATT_PRODUCT_QUANTITY, + product.quantity, + ) + productProperties.put( + CommerceEventUtils.Constants.ATT_PRODUCT_TOTAL_AMOUNT, + product.totalAmount, + ) + + productArray.put(productProperties) + } + return productArray + } + + fun getPromotionListParameters(promotionList: List): JSONArray { + val promotionArray = JSONArray() + for ((i, promotion) in promotionList.withIndex()) { + val promotionProperties = JSONObject() + promotion.creative?.let { + promotionProperties.put( + CommerceEventUtils.Constants.ATT_PROMOTION_CREATIVE, + it, + ) + } + promotion.id?.let { + promotionProperties.put(CommerceEventUtils.Constants.ATT_PROMOTION_ID, it) + } + promotion.name?.let { + promotionProperties.put(CommerceEventUtils.Constants.ATT_PROMOTION_NAME, it) + } + promotion.position?.let { + promotionProperties.put( + CommerceEventUtils.Constants.ATT_PROMOTION_POSITION, + it, + ) + } + promotionArray.put(promotionProperties) + } + return promotionArray + } + + private fun getSubscriptionGroupIds(subscriptionGroupMap: String): MutableMap { + val subscriptionGroupIds = mutableMapOf() + + if (subscriptionGroupMap.isEmpty()) { + return subscriptionGroupIds + } + + val subscriptionGroupsArray = JSONArray(subscriptionGroupMap) + + return try { + for (i in 0 until subscriptionGroupsArray.length()) { + val subscriptionGroup = subscriptionGroupsArray.getJSONObject(i) + val key = subscriptionGroup.getString("map") + val value = subscriptionGroup.getString("value") + subscriptionGroupIds[key] = value + } + subscriptionGroupIds + } catch (e: JSONException) { + Logger.warning("Braze, unable to parse \"subscriptionGroup\"") + mutableMapOf() + } + } + + fun getImpressionListParameters(impressionList: List): JSONArray { + val impressionArray = JSONArray() + for ((i, impression) in impressionList.withIndex()) { + val impressionProperties = JSONObject() + impression.listName?.let { + impressionProperties.put("Product Impression List", it) + } + impression.products?.let { + val productArray = getProductListParameters(it) + impressionProperties.put(PRODUCT_KEY, productArray) + } + impressionArray.put(impressionProperties) + } + return impressionArray + } + + internal abstract class StringTypeParser( + var enableTypeDetection: Boolean, + ) { + fun parseValue( + key: String, + value: String, + ): Any { + if (!enableTypeDetection) { + toString(key, value) + return value + } + return if ( + true.toString().equals(value, true) || + false.toString().equals( + value, + true, + ) + ) { + val newBool = (value).toBoolean() + toBoolean(key, newBool) + newBool + } else { + try { + if (value.contains(".")) { + val doubleValue = value.toDouble() + toDouble(key, doubleValue) + doubleValue + } else { + val newLong = value.toLong() + if (newLong <= Int.MAX_VALUE && newLong >= Int.MIN_VALUE) { + val newInt = newLong.toInt() + toInt(key, newInt) + newInt + } else { + toLong(key, newLong) + newLong + } + } + } catch (nfe: NumberFormatException) { + toString(key, value) + value + } + } + } + + abstract fun toInt( + key: String, + value: Int, + ) + + abstract fun toLong( + key: String, + value: Long, + ) + + abstract fun toDouble( + key: String, + value: Double, + ) + + abstract fun toBoolean( + key: String, + value: Boolean, + ) + + abstract fun toString( + key: String, + value: String, + ) + } + + internal inner class BrazePropertiesSetter( + private var properties: BrazeProperties, + enableTypeDetection: Boolean, + ) : StringTypeParser(enableTypeDetection) { + override fun toInt( + key: String, + value: Int, + ) { + properties.addProperty(key, value) + } + + override fun toLong( + key: String, + value: Long, + ) { + properties.addProperty(key, value) + } + + override fun toDouble( + key: String, + value: Double, + ) { + properties.addProperty(key, value) + } + + override fun toBoolean( + key: String, + value: Boolean, + ) { + properties.addProperty(key, value) + } + + override fun toString( + key: String, + value: String, + ) { + properties.addProperty(key, value) + } + } + + internal inner class UserAttributeSetter( + private var brazeUser: BrazeUser, + enableTypeDetection: Boolean, + ) : StringTypeParser(enableTypeDetection) { + override fun toInt( + key: String, + value: Int, + ) { + brazeUser.setCustomUserAttribute(key, value) + } + + override fun toLong( + key: String, + value: Long, + ) { + brazeUser.setCustomUserAttribute(key, value) + } + + override fun toDouble( + key: String, + value: Double, + ) { + brazeUser.setCustomUserAttribute(key, value) + } + + override fun toBoolean( + key: String, + value: Boolean, + ) { + brazeUser.setCustomUserAttribute(key, value) + } + + override fun toString( + key: String, + value: String, + ) { + brazeUser.setCustomUserAttribute(key, value) + } + } + + companion object { + const val APPBOY_KEY = "apiKey" + const val FORWARD_SCREEN_VIEWS = "forwardScreenViews" + const val USER_IDENTIFICATION_TYPE = "userIdentificationType" + const val ENABLE_TYPE_DETECTION = "enableTypeDetection" + const val BUNDLE_COMMERCE_EVENTS = "bundleCommerceEventData" + const val SUBSCRIPTION_GROUP_MAPPING = "subscriptionGroupMapping" + const val HOST = "host" + const val PUSH_ENABLED = "push_enabled" + const val NAME = "Appboy" + + // if this flag is true, kit will send Product name as sku + const val REPLACE_SKU_AS_PRODUCT_NAME = "replaceSkuWithProductName" + private const val PREF_KEY_HAS_SYNCED_ATTRIBUTES = "appboy::has_synced_attributes" + private const val PREF_KEY_CURRENT_EMAIL = "appboy::current_email" + private const val FLUSH_DELAY = 5000 + var setDefaultAppboyLifecycleCallbackListener = true + + private const val EMAIL_SUBSCRIBE = "email_subscribe" + private const val PUSH_SUBSCRIBE = "push_subscribe" + private const val DOB = "dob" + + private const val OPTED_IN = "opted_in" + private const val UNSUBSCRIBED = "unsubscribed" + private const val SUBSCRIBED = "subscribed" + + // Constants for Read Consent + private const val CONSENT_MAPPING_SDK = "consentMappingSDK" + private const val KEY_GOOGLE_AD_USER_DATA = "\$google_ad_user_data" + private const val KEY_GOOGLE_AD_PERSONALIZATION = "\$google_ad_personalization" + + const val CUSTOM_ATTRIBUTES_KEY = "Attributes" + const val PRODUCT_KEY = "products" + const val PROMOTION_KEY = "promotions" + const val IMPRESSION_KEY = "impressions" + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/braze/Braze.kt b/kits/braze/braze-38/src/test/kotlin/com/braze/Braze.kt new file mode 100644 index 000000000..f2ebeffe7 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/braze/Braze.kt @@ -0,0 +1,63 @@ +package com.braze + +import android.content.Context +import com.braze.configuration.BrazeConfig +import com.braze.events.IValueCallback +import com.braze.models.outgoing.BrazeProperties +import com.mparticle.kits.BrazePurchase +import java.math.BigDecimal + +class Braze { + fun getCurrentUser(): BrazeUser = Companion.currentUser + + fun getCustomAttributeArray(): java.util.HashMap> = Companion.currentUser.getCustomAttribute() + + fun getCurrentUser(callback: IValueCallback) { + callback.onSuccess(currentUser) + } + + fun logCustomEvent( + key: String, + brazeProperties: BrazeProperties, + ) { + events[key] = brazeProperties + } + + fun logCustomEvent(key: String) { + events[key] = BrazeProperties() + } + + fun logPurchase( + sku: String, + currency: String, + unitPrice: BigDecimal, + quantity: Int, + purchaseProperties: BrazeProperties, + ) { + purchases.add(BrazePurchase(sku, currency, unitPrice, quantity, purchaseProperties)) + } + + companion object { + val purchases: MutableList = ArrayList() + val events: MutableMap = HashMap() + + fun clearPurchases() { + purchases.clear() + } + + fun clearEvents() { + events.clear() + } + + val currentUser = BrazeUser() + + @JvmStatic + fun configure( + context: Context?, + config: BrazeConfig?, + ) = true + + @JvmStatic + fun getInstance(context: Context?): Braze = Braze() + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/braze/BrazeUser.kt b/kits/braze/braze-38/src/test/kotlin/com/braze/BrazeUser.kt new file mode 100644 index 000000000..13983911e --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/braze/BrazeUser.kt @@ -0,0 +1,95 @@ +package com.braze + +import com.braze.enums.Month + +class BrazeUser { + var dobYear = -1 + var dobMonth: Month? = null + var dobDay = -1 + + fun setDateOfBirth( + year: Int, + month: Month?, + day: Int, + ): Boolean { + dobYear = year + dobMonth = month + dobDay = day + return true + } + + val customAttributeArray = HashMap>() + val customUserAttributes = HashMap() + + fun addToCustomAttributeArray( + key: String, + value: String, + ): Boolean { + var customArray = customAttributeArray[key] + if (customArray == null) { + customArray = ArrayList() + } + customArray.add(value) + customAttributeArray[key] = customArray + return true + } + + fun removeFromCustomAttributeArray( + key: String, + value: String, + ): Boolean = + try { + if (customAttributeArray.containsKey(key)) { + customAttributeArray.remove(key) + } + true + } catch (npe: NullPointerException) { + false + } + + fun setCustomUserAttribute( + key: String, + value: String, + ): Boolean { + customUserAttributes[key] = value + return true + } + + fun setCustomUserAttribute( + key: String, + value: Boolean, + ): Boolean { + customUserAttributes[key] = value + return true + } + + fun setCustomUserAttribute( + key: String, + value: Int, + ): Boolean { + customUserAttributes[key] = value + return true + } + + fun setCustomUserAttribute( + key: String, + value: Double, + ): Boolean { + customUserAttributes[key] = value + return true + } + + fun addToSubscriptionGroup(key: String): Boolean { + customUserAttributes[key] = true + return true + } + + fun removeFromSubscriptionGroup(key: String): Boolean { + customUserAttributes[key] = false + return true + } + + fun getCustomAttribute(): HashMap> = customAttributeArray + + fun getCustomUserAttribute(): HashMap = customUserAttributes +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/braze/models/outgoing/BrazeProperties.kt b/kits/braze/braze-38/src/test/kotlin/com/braze/models/outgoing/BrazeProperties.kt new file mode 100644 index 000000000..e36de6578 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/braze/models/outgoing/BrazeProperties.kt @@ -0,0 +1,55 @@ +package com.braze.models.outgoing + +import java.util.HashMap + +class BrazeProperties { + val properties = HashMap() + + fun addProperty( + key: String, + value: Long, + ): BrazeProperties { + properties[key] = value + return this + } + + fun addProperty( + key: String, + value: Int, + ): BrazeProperties { + properties[key] = value + return this + } + + fun addProperty( + key: String, + value: String, + ): BrazeProperties { + properties[key] = value + return this + } + + fun addProperty( + key: String, + value: Double, + ): BrazeProperties { + properties[key] = value + return this + } + + fun addProperty( + key: String, + value: Boolean, + ): BrazeProperties { + properties[key] = value + return this + } + + fun addProperty( + key: String, + value: Any, + ): BrazeProperties { + properties[key] = value + return this + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/AppboyKitTests.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/AppboyKitTests.kt new file mode 100644 index 000000000..d0f6800aa --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/AppboyKitTests.kt @@ -0,0 +1,1557 @@ +package com.mparticle.kits + +import android.util.SparseBooleanArray +import com.braze.Braze +import com.braze.models.outgoing.BrazeProperties +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.MParticleOptions +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Impression +import com.mparticle.commerce.Product +import com.mparticle.commerce.Promotion +import com.mparticle.commerce.TransactionAttributes +import com.mparticle.consent.ConsentState +import com.mparticle.consent.GDPRConsent +import com.mparticle.identity.IdentityApi +import com.mparticle.identity.MParticleUser +import com.mparticle.kits.mocks.MockAppboyKit +import com.mparticle.kits.mocks.MockContextApplication +import com.mparticle.kits.mocks.MockKitConfiguration +import com.mparticle.kits.mocks.MockUser +import junit.framework.TestCase +import org.json.JSONArray +import org.json.JSONObject +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.MockitoAnnotations +import java.lang.reflect.Method +import java.math.BigDecimal +import java.util.Calendar +import java.util.Locale +import java.util.Random + +class AppboyKitTests { + private var random = Random() + + private lateinit var braze: Braze.Companion + + @Mock + private val mTypeFilters: SparseBooleanArray? = null + + @Mock + lateinit var filteredMParticleUser: FilteredMParticleUser + + @Mock + lateinit var user: MParticleUser + + private val kit: AppboyKit + get() = AppboyKit() + + @Before + fun setup() { + MockitoAnnotations.initMocks(this) + Braze.clearPurchases() + Braze.clearEvents() + Braze.currentUser.customUserAttributes.clear() + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + Mockito.`when`(MParticle.getInstance()!!.Identity()).thenReturn( + Mockito.mock( + IdentityApi::class.java, + ), + ) + braze = Braze + } + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(name.isNotEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit: KitIntegration = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, MockContextApplication()) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + private var hostName = "aRandomHost" + + @Test + @Throws(Exception::class) + fun testHostSetting() { + val settings = HashMap() + settings[AppboyKit.HOST] = hostName + settings[AppboyKit.APPBOY_KEY] = "key" + val kit = MockAppboyKit() + kit.onKitCreate(settings, MockContextApplication()) + Assert.assertTrue(kit.calledAuthority[0] == hostName) + } + + @Test + @Throws(Exception::class) + fun testHostSettingNull() { + // test that the key is set when it is passed in by the settings map + val missingSettings = HashMap() + missingSettings[AppboyKit.APPBOY_KEY] = "key" + val kit = MockAppboyKit() + try { + kit.onKitCreate(missingSettings, MockContextApplication()) + } catch (e: Exception) { + } + Assert.assertTrue(kit.calledAuthority[0] == null) + } + + @Test + @Throws(Exception::class) + fun testHostSettingEmpty() { + var nullSettings = HashMap() + nullSettings[AppboyKit.HOST] = null + nullSettings[AppboyKit.APPBOY_KEY] = "key" + var kit = MockAppboyKit() + try { + kit.onKitCreate(nullSettings, MockContextApplication()) + } catch (e: Exception) { + } + Assert.assertTrue(kit.calledAuthority[0] == null) + nullSettings = HashMap() + nullSettings[AppboyKit.HOST] = "" + nullSettings[AppboyKit.APPBOY_KEY] = "key" + kit = MockAppboyKit() + try { + kit.onKitCreate(nullSettings, MockContextApplication()) + } catch (e: Exception) { + } + Assert.assertTrue(kit.calledAuthority[0] == null) + } + + @Test + fun testOnModify() { + // make sure it doesn't crash if there is no email or customerId + var e: Exception? = null + try { + AppboyKit().onModifyCompleted(MockUser(HashMap()), null) + } catch (ex: Exception) { + e = ex + } + Assert.assertNull(e) + for (i in 0..3) { + val values = arrayOfNulls(2) + val mockEmail = "mockEmail$i" + val mockCustomerId = "12345$i" + val kit: AppboyKit = + object : AppboyKit() { + override fun setId(customerId: String) { + values[0] = customerId + } + + override fun setEmail(email: String) { + if (values[0] == null) { + Assert.fail("customerId should have been set first") + } + values[1] = email + } + } + kit.identityType = IdentityType.CustomerId + val map = HashMap() + map[IdentityType.Email] = mockEmail + map[IdentityType.Alias] = "alias" + map[IdentityType.Facebook] = "facebook" + map[IdentityType.Facebook] = "fb" + map[IdentityType.CustomerId] = mockCustomerId + when (i) { + 0 -> { + kit.onModifyCompleted(MockUser(map), null) + kit.onIdentifyCompleted(MockUser(map), null) + kit.onLoginCompleted(MockUser(map), null) + kit.onLogoutCompleted(MockUser(map), null) + } + 1 -> { + kit.onIdentifyCompleted(MockUser(map), null) + kit.onLoginCompleted(MockUser(map), null) + kit.onLogoutCompleted(MockUser(map), null) + } + 2 -> { + kit.onLoginCompleted(MockUser(map), null) + kit.onLogoutCompleted(MockUser(map), null) + } + 3 -> kit.onLogoutCompleted(MockUser(map), null) + } + Assert.assertEquals(mockCustomerId, values[0]) + Assert.assertEquals(mockEmail, values[1]) + } + } + + @Test + fun testAgeToDob() { + val kit: AppboyKit = MockAppboyKit() + val currentYear = Calendar.getInstance()[Calendar.YEAR] + var calendar = kit.getCalendarMinusYears("5") + calendar + ?.get(Calendar.YEAR) + ?.let { Assert.assertEquals((currentYear - 5).toLong(), it.toLong()) } + calendar = kit.getCalendarMinusYears(22) + calendar + ?.get(Calendar.YEAR) + ?.let { Assert.assertEquals((currentYear - 22).toLong(), it.toLong()) } + +// round down doubles + calendar = kit.getCalendarMinusYears("5.001") + calendar + ?.get(Calendar.YEAR) + ?.let { Assert.assertEquals((currentYear - 5).toLong(), it.toLong()) } + calendar = kit.getCalendarMinusYears("5.9") + calendar + ?.get(Calendar.YEAR) + ?.let { Assert.assertEquals((currentYear - 5).toLong(), it.toLong()) } + + // invalid ages (negative, non numeric), don't get set + Assert.assertNull(kit.getCalendarMinusYears("asdv")) + Assert.assertNull(kit.getCalendarMinusYears(-1)) + } + + @Test + fun testSetSubscriptionGroupIds() { + val settings = HashMap() + settings[AppboyKit.APPBOY_KEY] = "key" + settings[AppboyKit.HOST] = hostName + settings["subscriptionGroupMapping"] = + "[{\"jsmap\":null,\"map\":\"test1\",\"maptype\":\"UserAttributeClass.Name\"," + + "\"value\":\"00000000-0000-0000-0000-000000000000\"}," + + "{\"jsmap\":null,\"map\":\"test2\",\"maptype\":\"UserAttributeClass.Name\"," + + "\"value\":\"00000000-0000-0000-0000-000000000001\"}," + + "{\"jsmap\":null,\"map\":\"test3\",\"maptype\":\"UserAttributeClass.Name\"," + + "\"value\":\"00000000-0000-0000-0000-000000000002\"}]" + val kit = MockAppboyKit() + val currentUser = braze.currentUser + + kit.onKitCreate(settings, MockContextApplication()) + kit.setUserAttribute("test1", "true") + kit.setUserAttribute("test2", "false") + kit.setUserAttribute("test3", "notABoolean") + Assert.assertEquals(2, currentUser.getCustomUserAttribute().size.toLong()) + } + +// @Test +// fun testSetUserAttributeAge() { +// val currentYear = Calendar.getInstance()[Calendar.YEAR] +// val kit: AppboyKit = MockAppboyKit() +// val currentUser = Braze.currentUser +// Assert.assertEquals(-1, currentUser.dobDay.toLong()) +// Assert.assertEquals(-1, currentUser.dobYear.toLong()) +// Assert.assertNull(currentUser.dobMonth) +// kit.setUserAttribute(MParticle.UserAttributes.AGE, "100") +// Assert.assertEquals((currentYear - 100).toLong(), currentUser.dobYear.toLong()) +// Assert.assertEquals(1, currentUser.dobDay.toLong()) +// Assert.assertEquals(Month.JANUARY, currentUser.dobMonth) +// } + +// @Test +// fun testSetUserDoB() { +// val kit = MockAppboyKit() +// val currentUser = Braze.currentUser +// val errorMessage = arrayOfNulls(1) +// Logger.setLogHandler(object : DefaultLogHandler() { +// override fun log(priority: LogLevel, error: Throwable?, messages: String) { +// if (priority == LogLevel.WARNING) { +// errorMessage[0] = messages +// } +// } +// }) +// +// //valid +// kit.setUserAttribute("dob", "1999-11-05") +// Assert.assertEquals(1999, currentUser.dobYear.toLong()) +// Assert.assertEquals(5, currentUser.dobDay.toLong()) +// Assert.assertEquals(Month.NOVEMBER, currentUser.dobMonth) +// Assert.assertNull(errorMessage[0]) +// +// //future +// kit.setUserAttribute("dob", "2999-2-15") +// Assert.assertEquals(2999, currentUser.dobYear.toLong()) +// Assert.assertEquals(15, currentUser.dobDay.toLong()) +// Assert.assertEquals(Month.FEBRUARY, currentUser.dobMonth) +// Assert.assertNull(errorMessage[0]) +// +// +// //bad format (shouldn't crash, but should message) +// var ex: Exception? = null +// try { +// kit.setUserAttribute("dob", "2kjb.21h045") +// Assert.assertEquals(2999, currentUser.dobYear.toLong()) +// Assert.assertEquals(15, currentUser.dobDay.toLong()) +// Assert.assertEquals(Month.FEBRUARY, currentUser.dobMonth) +// Assert.assertNotNull(errorMessage[0]) +// } catch (e: Exception) { +// ex = e +// } +// Assert.assertNull(ex) +// } + + @Test + fun setIdentityType() { + val possibleValues = + arrayOf( + "Other", + "CustomerId", + "Facebook", + "Twitter", + "Google", + "Microsoft", + "Yahoo", + "Email", + "Alias", + ) + val mpid = "MPID" + for (`val` in possibleValues) { + val kit = kit + val settings = HashMap() + settings[AppboyKit.USER_IDENTIFICATION_TYPE] = `val` + kit.setIdentityType(settings) + Assert.assertNotNull(kit.identityType) + Assert.assertEquals( + `val`.lowercase(Locale.getDefault()), + kit.identityType?.name?.lowercase(Locale.getDefault()), + ) + Assert.assertFalse(kit.isMpidIdentityType) + } + val settings = HashMap() + settings[AppboyKit.USER_IDENTIFICATION_TYPE] = mpid + val kit = kit + kit.setIdentityType(settings) + Assert.assertNull(kit.identityType) + Assert.assertTrue(kit.isMpidIdentityType) + } + + @Test + fun setId() { + val userIdentities = HashMap() + val user = Mockito.mock(MParticleUser::class.java) + Mockito.`when`(user.userIdentities).thenReturn(userIdentities) + val mockId = random.nextLong() + Mockito.`when`(user.id).thenReturn(mockId) + Assert.assertEquals(mockId.toString(), kit.getIdentity(true, null, user)) + for (identityType in IdentityType.values()) { + val identityValue = random.nextLong().toString() + userIdentities[identityType] = identityValue + Assert.assertEquals(identityValue, kit.getIdentity(false, identityType, user)) + } + Assert.assertNull(kit.getIdentity(false, null, null)) + } + +// @Test +// fun addRemoveAttributeFromEventTest() { +// val kit = MockAppboyKit() +// val currentUser = Braze.currentUser +// kit.configuration = object : MockKitConfiguration() { +// +// override fun getEventAttributesAddToUser(): Map { +// val map = HashMap() +// map[KitUtils.hashForFiltering( +// MParticle.EventType.Navigation.toString() + "Navigation Event" + "key1" +// )] = "output" +// return map +// } +// +// override fun getEventAttributesRemoveFromUser(): Map { +// val map = HashMap() +// map[KitUtils.hashForFiltering( +// MParticle.EventType.Location.toString() + "location event" + "key1" +// )] = "output" +// return map +// } +// +// } +// val customAttributes = HashMap() +// customAttributes["key1"] = "value1" +// kit.logEvent( +// MPEvent.Builder("Navigation Event", MParticle.EventType.Navigation) +// .customAttributes(customAttributes) +// .build() +// ) +// var attributes = currentUser.customAttributeArray["output"] +// if (attributes != null) { +// Assert.assertEquals(1, attributes.size) +// Assert.assertEquals("value1", attributes[0]) +// } +// kit.logEvent( +// MPEvent.Builder("location event", MParticle.EventType.Location) +// .customAttributes(customAttributes) +// .build() +// ) +// attributes = currentUser.customAttributeArray["output"] +// +// if (attributes != null) { +// Assert.assertEquals(0, attributes.size) +// } +// } + + @Test + fun testPurchaseCurrency() { + val kit = MockAppboyKit() + val product = + Product + .Builder("product name", "sku1", 4.5) + .build() + val commerceEvent = + CommerceEvent + .Builder(Product.CHECKOUT, product) + .currency("Moon Dollars") + .build() + kit.logTransaction(commerceEvent, product) + val braze = Braze + val purchases = braze.purchases + Assert.assertEquals(1, purchases.size.toLong()) + val purchase = purchases[0] + Assert.assertEquals("Moon Dollars", purchase.currency) + Assert.assertNull( + purchase.purchaseProperties.properties[CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE], + ) + } + + @Test + fun testPurchaseDefaultCurrency() { + val kit = MockAppboyKit() + val product = + Product + .Builder("product name", "sku1", 4.5) + .build() + val commerceEvent = + CommerceEvent + .Builder(Product.CHECKOUT, product) + .build() + kit.logTransaction(commerceEvent, product) + val braze = Braze + val purchases = braze.purchases + Assert.assertEquals(1, purchases.size.toLong()) + val purchase = purchases[0] + Assert.assertEquals(CommerceEventUtils.Constants.DEFAULT_CURRENCY_CODE, purchase.currency) + Assert.assertNull( + purchase.purchaseProperties.properties[CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE], + ) + } + + @Test + fun testPurchase() { + val kit = MockAppboyKit() + val customAttributes = HashMap() + customAttributes["key1"] = "value1" + customAttributes["key #2"] = "value #3" + val productCustomAttributes = HashMap() + productCustomAttributes["productKey1"] = "value1" + productCustomAttributes["productKey2"] = "value2" + val transactionAttributes = + TransactionAttributes("the id") + .setTax(100.0) + .setShipping(12.0) + .setRevenue(99.0) + .setCouponCode("coupon code") + .setAffiliation("the affiliation") + val product = + Product + .Builder("product name", "sku1", 4.5) + .quantity(5.0) + .brand("testBrand") + .variant("testVariant") + .position(1) + .category("testCategory") + .customAttributes(productCustomAttributes) + .build() + val commerceEvent = + CommerceEvent + .Builder(Product.PURCHASE, product) + .currency("Moon Dollars") + .productListName("product list name") + .productListSource("the source") + .customAttributes(customAttributes) + .transactionAttributes(transactionAttributes) + .build() + kit.logTransaction(commerceEvent, product) + val braze = Braze + val purchases = braze.purchases + Assert.assertEquals(1, purchases.size.toLong()) + val purchase = purchases[0] + Assert.assertEquals("Moon Dollars", purchase.currency) + Assert.assertEquals(5.0, purchase.quantity.toDouble(), 0.01) + Assert.assertEquals("sku1", purchase.sku) + Assert.assertEquals(BigDecimal(4.5), purchase.unitPrice) + Assert.assertNotNull(purchase.purchaseProperties) + val properties = purchase.purchaseProperties.properties + Assert.assertEquals(properties.remove(CommerceEventUtils.Constants.ATT_SHIPPING), 12.0) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_ACTION_PRODUCT_LIST_SOURCE), + "the source", + ) + Assert.assertEquals(properties.remove(CommerceEventUtils.Constants.ATT_TAX), 100.0) + Assert.assertEquals(properties.remove(CommerceEventUtils.Constants.ATT_TOTAL), 99.0) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_ACTION_PRODUCT_ACTION_LIST), + "product list name", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_COUPON_CODE), + "coupon code", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_TRANSACTION_ID), + "the id", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_AFFILIATION), + "the affiliation", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_NAME), + "product name", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_CATEGORY), + "testCategory", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_BRAND), + "testBrand", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_POSITION), + 1, + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_VARIANT), + "testVariant", + ) + + // Custom Attributes + Assert.assertEquals(properties.remove("key1"), "value1") + Assert.assertEquals(properties.remove("key #2"), "value #3") + + // Product Custom Attributes + Assert.assertEquals(properties.remove("productKey1"), "value1") + Assert.assertEquals(properties.remove("productKey2"), "value2") + + val emptyAttributes = HashMap() + Assert.assertEquals(emptyAttributes, properties) + } + + @Test + fun testEnhancedPurchase() { + val emptyAttributes = HashMap() + val kit = MockAppboyKit() + val customAttributes = HashMap() + customAttributes["key1"] = "value1" + customAttributes["key #2"] = "value #3" + val transactionAttributes = + TransactionAttributes("the id") + .setTax(100.0) + .setShipping(12.0) + .setRevenue(99.0) + .setCouponCode("coupon code") + .setAffiliation("the affiliation") + val product = + Product + .Builder("product name", "sku1", 4.5) + .quantity(5.0) + .build() + val commerceEvent = + CommerceEvent + .Builder(Product.PURCHASE, product) + .currency("Moon Dollars") + .productListName("product list name") + .productListSource("the source") + .customAttributes(customAttributes) + .transactionAttributes(transactionAttributes) + .build() + kit.logOrderLevelTransaction(commerceEvent) + val braze = Braze + val purchases = braze.purchases + Assert.assertEquals(1, purchases.size.toLong()) + val purchase = purchases[0] + Assert.assertEquals("Moon Dollars", purchase.currency) + Assert.assertEquals(1.0, purchase.quantity.toDouble(), 0.01) + Assert.assertEquals("eCommerce - purchase", purchase.sku) + Assert.assertEquals(BigDecimal(99.0), purchase.unitPrice) + Assert.assertNotNull(purchase.purchaseProperties) + val properties = purchase.purchaseProperties.properties + val productArray = properties.remove(AppboyKit.PRODUCT_KEY) + Assert.assertTrue(productArray is JSONArray) + if (productArray is Array<*>) { + Assert.assertEquals(1, productArray.size.toLong()) + val productBrazeProperties = productArray[0] + if (productBrazeProperties is BrazeProperties) { + val productProperties = productBrazeProperties.properties + Assert.assertEquals( + productProperties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_TOTAL_AMOUNT), + 22.5, + ) + Assert.assertEquals( + productProperties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_PRICE), + 4.5, + ) + Assert.assertEquals( + productProperties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_QUANTITY), + 5.0, + ) + Assert.assertEquals( + productProperties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_ID), + "sku1", + ) + Assert.assertEquals( + productProperties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_NAME), + "product name", + ) + Assert.assertEquals(emptyAttributes, productProperties) + } + } + Assert.assertEquals(properties.remove(CommerceEventUtils.Constants.ATT_SHIPPING), 12.0) + Assert.assertEquals(properties.remove(CommerceEventUtils.Constants.ATT_TAX), 100.0) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_COUPON_CODE), + "coupon code", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_AFFILIATION), + "the affiliation", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_ACTION_PRODUCT_LIST_SOURCE), + "the source", + ) + Assert.assertEquals(properties.remove(CommerceEventUtils.Constants.ATT_TOTAL), 99.0) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_ACTION_PRODUCT_ACTION_LIST), + "product list name", + ) + Assert.assertEquals( + properties.remove(CommerceEventUtils.Constants.ATT_TRANSACTION_ID), + "the id", + ) + + val brazeCustomAttributesDictionary = properties.remove(AppboyKit.CUSTOM_ATTRIBUTES_KEY) + if (brazeCustomAttributesDictionary is BrazeProperties) { + val customAttributesDictionary = brazeCustomAttributesDictionary.properties + Assert.assertEquals(customAttributesDictionary.remove("key1"), "value1") + Assert.assertEquals(customAttributesDictionary.remove("key #2"), "value #3") + Assert.assertEquals(emptyAttributes, customAttributesDictionary) + } + Assert.assertEquals(emptyAttributes, properties) + } + +// @Test +// fun testPromotion() { +// val emptyAttributes = HashMap() +// val kit = MockAppboyKit() +// kit.configuration = MockKitConfiguration() +// val customAttributes = HashMap() +// customAttributes["key1"] = "value1" +// customAttributes["key #2"] = "value #3" +// val promotion = Promotion().apply { +// id = "my_promo_1" +// creative = "sale_banner_1" +// name = "App-wide 50% off sale" +// position ="dashboard_bottom" +// } +// val commerceEvent = CommerceEvent.Builder(Promotion.VIEW, promotion) +// .customAttributes(customAttributes) +// .build() +// kit.logEvent(commerceEvent) +// +// val braze = Braze +// val events = braze.events +// Assert.assertEquals(1, events.size.toLong()) +// val event = events.values.iterator().next() +// Assert.assertNotNull(event.properties) +// val properties = event.properties +// +// Assert.assertEquals(properties.remove("Id"), "my_promo_1") +// Assert.assertEquals(properties.remove("Name"), "App-wide 50% off sale") +// Assert.assertEquals(properties.remove("Position"), "dashboard_bottom") +// Assert.assertEquals(properties.remove("Creative"), "sale_banner_1") +// Assert.assertEquals(properties.remove("key1"), "value1") +// Assert.assertEquals(properties.remove("key #2"), "value #3") +// +// Assert.assertEquals(emptyAttributes, properties) +// } + + @Test + fun testEnhancedPromotion() { + val emptyAttributes = HashMap() + val kit = MockAppboyKit() + kit.configuration = MockKitConfiguration() + val customAttributes = HashMap() + customAttributes["key1"] = "value1" + customAttributes["key #2"] = "value #3" + val promotion = + Promotion().apply { + id = "my_promo_1" + creative = "sale_banner_1" + name = "App-wide 50% off sale" + position = "dashboard_bottom" + } + val commerceEvent = + CommerceEvent + .Builder(Promotion.VIEW, promotion) + .customAttributes(customAttributes) + .build() + kit.logOrderLevelTransaction(commerceEvent) + val braze = Braze + val events = braze.events + Assert.assertEquals(1, events.size.toLong()) + val event = events.values.iterator().next() + Assert.assertNotNull(event.properties) + val properties = event.properties + + val promotionArray = properties.remove(AppboyKit.PROMOTION_KEY) + Assert.assertTrue(promotionArray is JSONArray) + if (promotionArray is Array<*>) { + Assert.assertEquals(1, promotionArray.size.toLong()) + val promotionBrazeProperties = promotionArray[0] + if (promotionBrazeProperties is BrazeProperties) { + val promotionProperties = promotionBrazeProperties.properties + Assert.assertEquals( + promotionProperties.remove(CommerceEventUtils.Constants.ATT_PROMOTION_ID), + "my_promo_1", + ) + Assert.assertEquals( + promotionProperties.remove(CommerceEventUtils.Constants.ATT_PROMOTION_NAME), + "App-wide 50% off sale", + ) + Assert.assertEquals( + promotionProperties.remove(CommerceEventUtils.Constants.ATT_PROMOTION_POSITION), + "dashboard_bottom", + ) + Assert.assertEquals( + promotionProperties.remove(CommerceEventUtils.Constants.ATT_PROMOTION_CREATIVE), + "sale_banner_1", + ) + Assert.assertEquals(emptyAttributes, promotionProperties) + } + } + + val brazeCustomAttributesDictionary = properties.remove(AppboyKit.CUSTOM_ATTRIBUTES_KEY) + if (brazeCustomAttributesDictionary is BrazeProperties) { + val customAttributesDictionary = brazeCustomAttributesDictionary.properties + Assert.assertEquals(customAttributesDictionary.remove("key1"), "value1") + Assert.assertEquals(customAttributesDictionary.remove("key #2"), "value #3") + Assert.assertEquals(emptyAttributes, customAttributesDictionary) + } + + Assert.assertEquals(properties.remove(CommerceEventUtils.Constants.ATT_TOTAL), 0.0) + + Assert.assertEquals(emptyAttributes, properties) + } + +// @Test +// fun testImpression() { +// val kit = MockAppboyKit() +// kit.configuration = MockKitConfiguration() +// val customAttributes = HashMap() +// customAttributes["key1"] = "value1" +// customAttributes["key #2"] = "value #3" +// val product = Product.Builder("product name", "sku1", 4.5) +// .quantity(5.0) +// .build() +// val impression = Impression("Suggested Products List", product).let { +// CommerceEvent.Builder(it).build() +// } +// val commerceEvent = CommerceEvent.Builder(impression) +// .customAttributes(customAttributes) +// .build() +// +// kit.logEvent(commerceEvent) +// +// val braze = Braze +// val events = braze.events +// Assert.assertEquals(1, events.size.toLong()) +// val event = events.values.iterator().next() +// Assert.assertNotNull(event.properties) +// val properties = event.properties +// +// Assert.assertEquals( +// properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_TOTAL_AMOUNT), "22.5" +// ) +// Assert.assertEquals( +// properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_NAME), "product name" +// ) +// Assert.assertEquals( +// properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_QUANTITY), "5.0" +// ) +// Assert.assertEquals(properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_ID), "sku1") +// Assert.assertEquals( +// properties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_PRICE), "4.5" +// ) +// Assert.assertEquals( +// properties.remove("Product Impression List"), "Suggested Products List" +// ) +// Assert.assertEquals(properties.remove("key1"), "value1") +// Assert.assertEquals(properties.remove("key #2"), "value #3") +// +// val emptyAttributes = HashMap() +// Assert.assertEquals(emptyAttributes, properties) +// } + + @Test + fun testEnhancedImpression() { + val emptyAttributes = HashMap() + val kit = MockAppboyKit() + kit.configuration = MockKitConfiguration() + val customAttributes = HashMap() + customAttributes["key1"] = "value1" + customAttributes["key #2"] = "value #3" + val product = + Product + .Builder("product name", "sku1", 4.5) + .quantity(5.0) + .customAttributes(customAttributes) + .build() + val impression = + Impression("Suggested Products List", product).let { + CommerceEvent.Builder(it).build() + } + val commerceEvent = + CommerceEvent + .Builder(impression) + .customAttributes(customAttributes) + .build() + kit.logOrderLevelTransaction(commerceEvent) + val braze = Braze + val events = braze.events + Assert.assertEquals(1, events.size.toLong()) + val event = events.values.iterator().next() + Assert.assertNotNull(event.properties) + val properties = event.properties + + val impressionArray = properties.remove(AppboyKit.IMPRESSION_KEY) + Assert.assertTrue(impressionArray is JSONArray) + if (impressionArray is Array<*>) { + Assert.assertEquals(1, impressionArray.size.toLong()) + val impressionBrazeProperties = impressionArray[0] + if (impressionBrazeProperties is BrazeProperties) { + val impressionProperties = impressionBrazeProperties.properties + Assert.assertEquals( + impressionProperties.remove("Product Impression List"), + "Suggested Products List", + ) + val productArray = impressionProperties.remove(AppboyKit.PRODUCT_KEY) + Assert.assertTrue(productArray is Array<*>) + if (productArray is Array<*>) { + Assert.assertEquals(1, productArray.size.toLong()) + val productBrazeProperties = productArray[0] + if (productBrazeProperties is BrazeProperties) { + val productProperties = productBrazeProperties.properties + Assert.assertEquals( + productProperties.remove( + CommerceEventUtils.Constants.ATT_PRODUCT_TOTAL_AMOUNT, + ), + 22.5, + ) + Assert.assertEquals( + productProperties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_NAME), + "product name", + ) + Assert.assertEquals( + productProperties.remove( + CommerceEventUtils.Constants.ATT_PRODUCT_QUANTITY, + ), + 5.0, + ) + Assert.assertEquals( + productProperties.remove(CommerceEventUtils.Constants.ATT_PRODUCT_ID), + "sku1", + ) + Assert.assertEquals( + productProperties.remove( + CommerceEventUtils.Constants.ATT_PRODUCT_PRICE, + ), + 4.5, + ) + val brazeProductCustomAttributesDictionary = + productProperties.remove(AppboyKit.CUSTOM_ATTRIBUTES_KEY) + if (brazeProductCustomAttributesDictionary is BrazeProperties) { + val customProductAttributesDictionary = + brazeProductCustomAttributesDictionary.properties + Assert.assertEquals( + customProductAttributesDictionary.remove("key1"), + "value1", + ) + Assert.assertEquals( + customProductAttributesDictionary.remove("key #2"), + "value #3", + ) + Assert.assertEquals(emptyAttributes, customProductAttributesDictionary) + } + Assert.assertEquals(emptyAttributes, productProperties) + } + Assert.assertEquals(emptyAttributes, impressionProperties) + } + } + } + + val brazeCustomAttributesDictionary = properties.remove(AppboyKit.CUSTOM_ATTRIBUTES_KEY) + if (brazeCustomAttributesDictionary is BrazeProperties) { + val customAttributesDictionary = brazeCustomAttributesDictionary.properties + Assert.assertEquals(customAttributesDictionary.remove("key1"), "value1") + Assert.assertEquals(customAttributesDictionary.remove("key #2"), "value #3") + Assert.assertEquals(emptyAttributes, customAttributesDictionary) + } + + Assert.assertEquals(properties.remove(CommerceEventUtils.Constants.ATT_TOTAL), 0.0) + + Assert.assertEquals(emptyAttributes, properties) + } + +// @Test +// fun setUserAttributeTyped() { +// val kit = MockAppboyKit() +// kit.enableTypeDetection = true +// val currentUser = Braze.currentUser +// kit.setUserAttribute("foo", "true") +// Assert.assertTrue(currentUser.customUserAttributes["foo"] is Boolean) +// Assert.assertEquals(currentUser.customUserAttributes["foo"], true) +// kit.setUserAttribute("foo", "1") +// Assert.assertTrue(currentUser.customUserAttributes["foo"] is Int) +// Assert.assertEquals(currentUser.customUserAttributes["foo"], 1) +// kit.setUserAttribute("foo", "1.1") +// Assert.assertTrue(currentUser.customUserAttributes["foo"] is Double) +// Assert.assertEquals(currentUser.customUserAttributes["foo"], 1.1) +// kit.setUserAttribute("foo", "bar") +// Assert.assertTrue(currentUser.customUserAttributes["foo"] is String) +// Assert.assertEquals(currentUser.customUserAttributes["foo"], "bar") +// } + +// @Test +// fun testEventStringType() { +// val kit = MockAppboyKit() +// kit.configuration = MockKitConfiguration() +// val customAttributes = HashMap() +// customAttributes["foo"] = "false" +// customAttributes["bar"] = "1" +// customAttributes["baz"] = "1.5" +// customAttributes["fuzz?"] = "foobar" +// val customEvent = MPEvent.Builder("testEvent", MParticle.EventType.Location) +// .customAttributes(customAttributes) +// .build() +// kit.enableTypeDetection = true +// kit.logEvent(customEvent) +// val braze = Braze +// val events = braze.events +// Assert.assertEquals(1, events.values.size.toLong()) +// val event = events.values.iterator().next() +// val properties = event.properties +// Assert.assertEquals(properties.remove("foo"), false) +// Assert.assertEquals(properties.remove("bar"), 1) +// Assert.assertEquals(properties.remove("baz"), 1.5) +// Assert.assertEquals(properties.remove("fuzz?"), "foobar") +// Assert.assertEquals(0, properties.size.toLong()) +// } + +// @Test +// fun testLogCommerceEvent() { +// val kit = MockAppboyKit() +// +// val product: Product = Product.Builder("La Enchilada", "13061043670", 12.5) +// .quantity(1.0) +// .build() +// +// val txAttributes = TransactionAttributes() +// .setRevenue(product.getTotalAmount()) +// +// kit.configuration = MockKitConfiguration() +// val customAttributes: MutableMap = HashMap() +// customAttributes["currentLocationLongitude"] = "2.1811267" +// customAttributes["country"] = "ES" +// customAttributes["deliveryLocationLatitude"] = "41.4035798" +// customAttributes["appVersion"] = "5.201.0" +// customAttributes["city"] = "BCN" +// customAttributes["deviceId"] = "1104442582" +// customAttributes["platform"] = "android" +// customAttributes["isAuthorized"] = "true" +// customAttributes["productSelectionOrigin"] = "Catalogue" +// customAttributes["currentLocationLatitude"] = "41.4035798" +// customAttributes["collectionId"] = "1180889389" +// customAttributes["multiplatformVersion"] = "1.0.288" +// customAttributes["deliveryLocationTimestamp"] = "1675344636685" +// customAttributes["productId"] = "13061043670" +// customAttributes["storeAddressId"] = "300482" +// customAttributes["currentLocationAccuracy"] = "19.278" +// customAttributes["productAddedOrigin"] = "Item Detail Add to Order" +// customAttributes["deliveryLocationLongitude"] = "2.1811267" +// customAttributes["currentLocationTimestamp"] = "1675344636685" +// customAttributes["dynamicSessionId"] = "67f8fb8d-8d14-4f0e-bf1a-73fb8e6eed95" +// customAttributes["deliveryLocationAccuracy"] = "19.278" +// customAttributes["categoryId"] = "1" +// customAttributes["isSponsored"] = "false" +// +// val commerceEvent: CommerceEvent = CommerceEvent.Builder(Product.ADD_TO_CART, product) +// .currency("EUR") +// .customAttributes(customAttributes) +// .transactionAttributes(txAttributes) +// .build() +// kit.logEvent(commerceEvent) +// +// val braze = Braze +// val events = braze.events +// Assert.assertEquals(1, events.size.toLong()) +// val event = events.values.iterator().next() +// Assert.assertNotNull(event.properties) +// val properties = event.properties +// +// Assert.assertEquals(properties.remove("Name"), "La Enchilada") +// Assert.assertEquals(properties.remove("Total Product Amount"), "12.5") +// Assert.assertEquals(properties.remove("Id"), "13061043670") +// for (item in customAttributes) { +// Assert.assertTrue(properties.containsKey(item.key)) +// Assert.assertTrue(properties.containsValue(item.value)) +// } +// } + +// @Test +// fun testEventStringTypeNotEnabled() { +// val kit = MockAppboyKit() +// kit.configuration = MockKitConfiguration() +// val customAttributes = HashMap() +// customAttributes["foo"] = "false" +// customAttributes["bar"] = "1" +// customAttributes["baz"] = "1.5" +// customAttributes["fuzz?"] = "foobar" +// val customEvent = MPEvent.Builder("testEvent", MParticle.EventType.Location) +// .customAttributes(customAttributes) +// .build() +// kit.enableTypeDetection = false +// kit.logEvent(customEvent) +// val braze = Braze +// val events = braze.events +// Assert.assertEquals(1, events.values.size.toLong()) +// val event = events.values.iterator().next() +// val properties = event.properties +// Assert.assertEquals(properties.remove("foo"), "false") +// Assert.assertEquals(properties.remove("bar"), "1") +// Assert.assertEquals(properties.remove("baz"), "1.5") +// Assert.assertEquals(properties.remove("fuzz?"), "foobar") +// Assert.assertEquals(0, properties.size.toLong()) +// } + + @Test + fun testCustomAttributes_log_add_attribute_event() { + val kit = MockAppboyKit() + val currentUser = braze.currentUser + + kit.configuration = MockKitConfiguration() + + val jsonObject = JSONObject() + val mapValue = JSONObject() + // this is hash for event attribute i.e combination of eventType + eventName + attribute key + mapValue.put("888169310", "testEvent") + val eaaObject = JSONObject() + eaaObject.put("eaa", mapValue) + jsonObject.put("hs", eaaObject) + + Mockito.`when`(mTypeFilters!!.size()).thenReturn(0) + + var kitConfiguration = MockKitConfiguration.createKitConfiguration(jsonObject) + kit.configuration = kitConfiguration + val customAttributes: MutableMap = HashMap() + customAttributes["destination"] = "Shop" + val event = + MPEvent + .Builder("AndroidTEST", MParticle.EventType.Navigation) + .customAttributes(customAttributes) + .build() + val instance = MParticle.getInstance() + instance?.logEvent(event) + kit.logEvent(event) + Assert.assertEquals(1, braze.events.size.toLong()) + Assert.assertEquals(1, currentUser.getCustomAttribute().size.toLong()) + var outputKey = "" + for (keys in currentUser.getCustomAttribute().keys) { + outputKey = keys + break + } + Assert.assertEquals("testEvent", outputKey) + } + + @Test + fun testCustomAttributes_log_remove_attribute_event() { + val kit = MockAppboyKit() + val currentUser = braze.currentUser + + kit.configuration = MockKitConfiguration() + + val jsonObject = JSONObject() + val mapValue = JSONObject() + // this is hash for event attribute i.e combination of eventType + eventName + attribute key + mapValue.put("888169310", "testEvent") + val eaaObject = JSONObject() + eaaObject.put("eaa", mapValue) + eaaObject.put("ear", mapValue) + jsonObject.put("hs", eaaObject) + + Mockito.`when`(mTypeFilters!!.size()).thenReturn(0) + + var kitConfiguration = MockKitConfiguration.createKitConfiguration(jsonObject) + kit.configuration = kitConfiguration + val customAttributes: MutableMap = HashMap() + customAttributes["destination"] = "Shop" + val event = + MPEvent + .Builder("AndroidTEST", MParticle.EventType.Navigation) + .customAttributes(customAttributes) + .build() + val instance = MParticle.getInstance() + instance?.logEvent(event) + kit.logEvent(event) + Assert.assertEquals(1, braze.events.size.toLong()) + Assert.assertEquals(0, currentUser.getCustomAttribute().size.toLong()) + } + + @Test + fun testCustomAttributes_log_add_customUserAttribute_event() { + val kit = MockAppboyKit() + val currentUser = braze.currentUser + + kit.configuration = MockKitConfiguration() + + val jsonObject = JSONObject() + val mapValue = JSONObject() + // this is hash for event attribute i.e combination of eventType + eventName + attribute key + mapValue.put("888169310", "testEvent") + val eaaObject = JSONObject() + eaaObject.put("eas", mapValue) + jsonObject.put("hs", eaaObject) + + Mockito.`when`(mTypeFilters!!.size()).thenReturn(0) + + var kitConfiguration = MockKitConfiguration.createKitConfiguration(jsonObject) + kit.configuration = kitConfiguration + val customAttributes: MutableMap = HashMap() + customAttributes["destination"] = "Shop" + val event = + MPEvent + .Builder("AndroidTEST", MParticle.EventType.Navigation) + .customAttributes(customAttributes) + .build() + val instance = MParticle.getInstance() + instance?.logEvent(event) + kit.logEvent(event) + Assert.assertEquals(1, braze.events.size.toLong()) + Assert.assertEquals(1, currentUser.getCustomUserAttribute().size.toLong()) + var outputKey = "" + for (keys in currentUser.getCustomUserAttribute().keys) { + outputKey = keys + break + } + Assert.assertEquals("testEvent", outputKey) + } + + @Test + fun testParseToNestedMap_When_JSON_Is_INVALID() { + val kit = MockAppboyKit() + var jsonInput = + "{'GDPR':{'marketing':'{:false,'timestamp':1711038269644:'Test consent'," + + "'location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}," + + "'performance':'{'consented':true,'timestamp':1711038269644," + + "'document':'parental_consent_agreement_v2','location':'17 Cherry Tree Lan 3'," + + "'hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}," + + "'CCPA':'{'consented':true,'timestamp':1711038269644," + + "'document':'ccpa_consent_agreement_v3','location':'17 Cherry Tree Lane'," + + "'hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}" + + val method: Method = + AppboyKit::class.java.getDeclaredMethod( + "parseToNestedMap", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, jsonInput) + Assert.assertEquals(mutableMapOf(), result) + } + + @Test + fun testParseToNestedMap_When_JSON_Is_Empty() { + val kit = MockAppboyKit() + var jsonInput = "" + + val method: Method = + AppboyKit::class.java.getDeclaredMethod( + "parseToNestedMap", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, jsonInput) + Assert.assertEquals(mutableMapOf(), result) + } + + @Test + fun testSearchKeyInNestedMap_When_Input_Key_Is_Empty_String() { + val kit = MockAppboyKit() + val map = + mapOf( + "FeatureEnabled" to true, + "settings" to + mapOf( + "darkMode" to false, + "notifications" to + mapOf( + "email" to false, + "push" to true, + "lastUpdated" to 1633046400000L, + ), + ), + ) + val method: Method = + AppboyKit::class.java.getDeclaredMethod( + "searchKeyInNestedMap", + Map::class.java, + Any::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, map, "") + Assert.assertEquals(null, result) + } + + @Test + fun testSearchKeyInNestedMap_When_Input_Is_Empty_Map() { + val kit = MockAppboyKit() + val emptyMap: Map = emptyMap() + val method: Method = + AppboyKit::class.java.getDeclaredMethod( + "searchKeyInNestedMap", + Map::class.java, + Any::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, emptyMap, "1") + Assert.assertEquals(null, result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_Empty_Json() { + val kit = MockAppboyKit() + val emptyJson = "" + val method: Method = + AppboyKit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, emptyJson) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_Invalid_Json() { + val kit = MockAppboyKit() + var jsonInput = + "{'GDPR':{'marketing':'{:false,'timestamp':1711038269644:'Test consent'," + + "'location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}," + + "'performance':'{'consented':true,'timestamp':1711038269644," + + "'document':'parental_consent_agreement_v2','location':'17 Cherry Tree Lan 3'," + + "'hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}," + + "'CCPA':'{'consented':true,'timestamp':1711038269644," + + "'document':'ccpa_consent_agreement_v3','location':'17 Cherry Tree Lane'," + + "'hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}" + val method: Method = + AppboyKit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, jsonInput) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_NULL() { + val kit = MockAppboyKit() + val method: Method = + AppboyKit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kit, null) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun onConsentStateUpdatedTest() { + val kit = MockAppboyKit() + val currentUser = braze.currentUser + kit.configuration = MockKitConfiguration() + val map = java.util.HashMap() + + map["consentMappingSDK"] = + " [{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\"," + + "\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"google_ad_user_data\\\"}," + + "{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\"," + + "\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"google_ad_personalization\\\"}]" + + var kitConfiguration = + MockKitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + kit.configuration = kitConfiguration + + val marketingConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + TestCase.assertEquals( + false, + currentUser.getCustomUserAttribute()["\$google_ad_personalization"], + ) + } + + @Test + fun onConsentStateUpdatedTest_When_Both_The_consents_Are_True() { + val kit = MockAppboyKit() + val currentUser = braze.currentUser + kit.configuration = MockKitConfiguration() + val map = java.util.HashMap() + + map["consentMappingSDK"] = + " [{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\"," + + "\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"google_ad_user_data\\\"}," + + "{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\"," + + "\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"google_ad_personalization\\\"}]" + + var kitConfiguration = + MockKitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + kit.configuration = kitConfiguration + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + TestCase.assertEquals(true, currentUser.getCustomUserAttribute()["\$google_ad_user_data"]) + TestCase.assertEquals( + true, + currentUser.getCustomUserAttribute()["\$google_ad_personalization"], + ) + } + + @Test + fun onConsentStateUpdatedTest_When_No_DATA_From_Server() { + val kit = MockAppboyKit() + val currentUser = braze.currentUser + kit.configuration = MockKitConfiguration() + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + TestCase.assertEquals(0, currentUser.getCustomUserAttribute().size) + } + + @Test + fun testOnConsentStateUpdatedTest_No_consentMappingSDK() { + val kit = MockAppboyKit() + val currentUser = braze.currentUser + kit.configuration = MockKitConfiguration() + val map = java.util.HashMap() + map["includeEnrichedUserAttributes"] = "True" + map["userIdentificationType"] = "MPID" + map["ABKDisableAutomaticLocationCollectionKey"] = "False" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kit) + + kit.onConsentStateUpdated(state, state, filteredMParticleUser) + + TestCase.assertEquals(0, currentUser.getCustomUserAttribute().size) + } + + @Test + fun testPurchase_Forward_product_name() { + var settings = HashMap() + settings[AppboyKit.APPBOY_KEY] = "key" + settings[AppboyKit.REPLACE_SKU_AS_PRODUCT_NAME] = "True" + val kit = MockAppboyKit() + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", settings)) + kit.onKitCreate(settings, MockContextApplication()) + val product = + Product + .Builder("product name", "sku1", 4.5) + .build() + val commerceEvent = + CommerceEvent + .Builder(Product.CHECKOUT, product) + .currency("Moon Dollars") + .build() + kit.logTransaction(commerceEvent, product) + val braze = Braze + val purchases = braze.purchases + Assert.assertEquals(1, purchases.size.toLong()) + val purchase = purchases[0] + Assert.assertEquals("product name", purchase.sku) + Assert.assertNull( + purchase.purchaseProperties.properties[CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE], + ) + } + + @Test + fun testPurchase_Forward_product_name_When_flag_IS_FALSE() { + var settings = HashMap() + settings[AppboyKit.APPBOY_KEY] = "key" + settings[AppboyKit.REPLACE_SKU_AS_PRODUCT_NAME] = "False" + val kit = MockAppboyKit() + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", settings)) + kit.onKitCreate(settings, MockContextApplication()) + val product = + Product + .Builder("product name", "sku1", 4.5) + .build() + val commerceEvent = + CommerceEvent + .Builder(Product.CHECKOUT, product) + .currency("Moon Dollars") + .build() + kit.logTransaction(commerceEvent, product) + val braze = Braze + val purchases = braze.purchases + Assert.assertEquals(1, purchases.size.toLong()) + val purchase = purchases[0] + Assert.assertEquals("sku1", purchase.sku) + Assert.assertNull( + purchase.purchaseProperties.properties[CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE], + ) + } + + @Test + fun testPurchase_Forward_product_name_When_flag_IS_Null() { + var settings = HashMap() + settings[AppboyKit.APPBOY_KEY] = "key" + val kit = MockAppboyKit() + + kit.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", settings)) + kit.onKitCreate(settings, MockContextApplication()) + val product = + Product + .Builder("product name", "sku1", 4.5) + .build() + val commerceEvent = + CommerceEvent + .Builder(Product.CHECKOUT, product) + .currency("Moon Dollars") + .build() + kit.logTransaction(commerceEvent, product) + val braze = Braze + val purchases = braze.purchases + Assert.assertEquals(1, purchases.size.toLong()) + val purchase = purchases[0] + Assert.assertEquals("sku1", purchase.sku) + Assert.assertNull( + purchase.purchaseProperties.properties[CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE], + ) + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/BrazePurchase.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/BrazePurchase.kt new file mode 100644 index 000000000..93de4c921 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/BrazePurchase.kt @@ -0,0 +1,12 @@ +package com.mparticle.kits + +import com.braze.models.outgoing.BrazeProperties +import java.math.BigDecimal + +data class BrazePurchase( + val sku: String, + val currency: String, + val unitPrice: BigDecimal, + val quantity: Int, + val purchaseProperties: BrazeProperties, +) diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/TypeDetectionTests.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/TypeDetectionTests.kt new file mode 100644 index 000000000..65e9b5ee2 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/TypeDetectionTests.kt @@ -0,0 +1,91 @@ +package com.mparticle.kits + +import com.mparticle.kits.AppboyKit.StringTypeParser +import org.junit.Assert +import org.junit.Test + +class TypeDetectionTests { + @Test + fun testEnableTypeDetection() { + val parser = SomeParser(true) + Assert.assertEquals("foo", parser.parseValue("key", "foo")) + Assert.assertEquals(1, parser.parseValue("key", "1")) + Assert.assertEquals(-99, parser.parseValue("key", "-99")) + Assert.assertEquals(Int.MAX_VALUE, parser.parseValue("key", Int.MAX_VALUE.toString())) + Assert.assertEquals(Int.MIN_VALUE, parser.parseValue("key", Int.MIN_VALUE.toString())) + Assert.assertEquals( + Int.MAX_VALUE + 1L, + parser.parseValue("key", (Int.MAX_VALUE + 1L).toString()), + ) + Assert.assertEquals( + Int.MIN_VALUE - 1L, + parser.parseValue("key", (Int.MIN_VALUE - 1L).toString()), + ) + Assert.assertEquals(Long.MAX_VALUE, parser.parseValue("key", Long.MAX_VALUE.toString())) + Assert.assertEquals(Long.MIN_VALUE, parser.parseValue("key", Long.MIN_VALUE.toString())) + Assert.assertEquals(432.2561, parser.parseValue("key", "432.2561")) + Assert.assertEquals(-1.0001, parser.parseValue("key", "-1.0001")) + Assert.assertEquals(false, parser.parseValue("key", "false")) + Assert.assertEquals(true, parser.parseValue("key", "True")) + Assert.assertTrue(parser.parseValue("key", "1.0") is Double) + Assert.assertTrue(parser.parseValue("key", (Int.MAX_VALUE + 1L).toString()) is Long) + Assert.assertTrue(parser.parseValue("key", Int.MAX_VALUE.toString()) is Int) + Assert.assertTrue(parser.parseValue("key", "0") is Int) + Assert.assertTrue(parser.parseValue("key", "true") is Boolean) + Assert.assertTrue(parser.parseValue("key", "True") is Boolean) + } + + @Test + fun testDisableTypeDetection() { + val parser = SomeParser(false) + Assert.assertEquals("foo", parser.parseValue("key", "foo")) + Assert.assertEquals("1", parser.parseValue("key", "1")) + Assert.assertEquals( + (Int.MAX_VALUE + 1L).toString(), + parser.parseValue("key", (Int.MAX_VALUE + 1L).toString()), + ) + Assert.assertEquals("432.2561", parser.parseValue("key", "432.2561")) + Assert.assertEquals("true", parser.parseValue("key", "true")) + } + + private inner class SomeParser internal constructor( + enableTypeDetection: Boolean?, + ) : StringTypeParser( + enableTypeDetection!!, + ) { + override fun toString( + key: String, + value: String, + ) { + // do nothing + } + + override fun toInt( + key: String, + value: Int, + ) { + // do nothing + } + + override fun toLong( + key: String, + value: Long, + ) { + // do nothing + } + + override fun toDouble( + key: String, + value: Double, + ) { + // do nothing + } + + override fun toBoolean( + key: String, + value: Boolean, + ) { + // do nothing + } + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockAppboyKit.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockAppboyKit.kt new file mode 100644 index 000000000..f96faa2c2 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockAppboyKit.kt @@ -0,0 +1,29 @@ +package com.mparticle.kits.mocks + +import android.content.Context +import com.mparticle.internal.ReportingManager +import com.mparticle.kits.AppboyKit +import org.mockito.Mockito + +class MockAppboyKit : AppboyKit() { + val calledAuthority = arrayOfNulls(1) + + override fun setAuthority(authority: String?) { + calledAuthority[0] = authority + } + + override fun queueDataFlush() { + // do nothing + } + + init { + kitManager = + MockKitManagerImpl( + Mockito.mock(Context::class.java), + Mockito.mock( + ReportingManager::class.java, + ), + MockCoreCallbacks(), + ) + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockApplication.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockApplication.kt new file mode 100644 index 000000000..be9dc8b59 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockApplication.kt @@ -0,0 +1,39 @@ +package com.mparticle.kits.mocks + +import android.app.Application +import android.content.Context +import android.content.SharedPreferences +import android.content.pm.ApplicationInfo +import android.content.pm.PackageManager +import android.content.res.Resources + +class MockApplication( + var mContext: MockContext, +) : Application() { + var mCallbacks: ActivityLifecycleCallbacks? = null + + override fun registerActivityLifecycleCallbacks(callback: ActivityLifecycleCallbacks) { + mCallbacks = callback + } + + override fun getApplicationContext(): Context = this + + fun setSharedPreferences(prefs: SharedPreferences) { + mContext.setSharedPreferences(prefs) + } + + override fun getSystemService(name: String): Any? = mContext.getSystemService(name) + + override fun getSharedPreferences( + name: String, + mode: Int, + ): SharedPreferences = mContext.getSharedPreferences(name, mode) + + override fun getPackageManager(): PackageManager = mContext.packageManager + + override fun getPackageName(): String = mContext.packageName + + override fun getApplicationInfo(): ApplicationInfo = mContext.applicationInfo + + override fun getResources(): Resources? = mContext.resources +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockContext.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockContext.kt new file mode 100644 index 000000000..1d620778e --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockContext.kt @@ -0,0 +1,500 @@ +package com.mparticle.kits.mocks + +import android.content.BroadcastReceiver +import android.content.ComponentName +import android.content.ContentResolver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.content.IntentSender +import android.content.IntentSender.SendIntentException +import android.content.ServiceConnection +import android.content.SharedPreferences +import android.content.pm.ApplicationInfo +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.content.pm.PackageManager.NameNotFoundException +import android.content.res.AssetManager +import android.content.res.Configuration +import android.content.res.Resources +import android.content.res.Resources.Theme +import android.database.DatabaseErrorHandler +import android.database.sqlite.SQLiteDatabase +import android.database.sqlite.SQLiteDatabase.CursorFactory +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.net.Uri +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.os.UserHandle +import android.telephony.TelephonyManager +import android.view.Display +import junit.framework.Assert +import org.mockito.Mockito +import java.io.File +import java.io.FileInputStream +import java.io.FileNotFoundException +import java.io.FileOutputStream +import java.io.IOException +import java.io.InputStream + +class MockContext : Context() { + private var sharedPreferences: SharedPreferences = MockSharedPreferences() + private var resources: Resources = MockResources() + var application: MockApplication? = null + + fun setSharedPreferences(prefs: SharedPreferences) { + sharedPreferences = prefs + } + + override fun getApplicationContext(): Context { + if (application == null) { + application = MockApplication(this) + } + return application as MockApplication + } + + override fun checkCallingOrSelfPermission(permission: String): Int = PackageManager.PERMISSION_GRANTED + + override fun getSharedPreferences( + name: String, + mode: Int, + ): SharedPreferences = sharedPreferences + + override fun getResources(): Resources? = resources + + override fun getSystemService(name: String): Any? = + if (name == TELEPHONY_SERVICE) { + Mockito.mock(TelephonyManager::class.java) + } else { + null + } + + override fun getPackageManager(): PackageManager { + val manager = Mockito.mock(PackageManager::class.java) + val info = Mockito.mock(PackageInfo::class.java) + info.versionName = "42" + info.versionCode = 42 + val appInfo = Mockito.mock(ApplicationInfo::class.java) + try { + Mockito + .`when`(manager.getPackageInfo(Mockito.anyString(), Mockito.anyInt())) + .thenReturn(info) + Mockito + .`when`(manager.getInstallerPackageName(Mockito.anyString())) + .thenReturn("com.mparticle.test.installer") + Mockito + .`when`(manager.getApplicationInfo(Mockito.anyString(), Mockito.anyInt())) + .thenReturn(appInfo) + Mockito.`when`(manager.getApplicationLabel(appInfo)).thenReturn("test label") + } catch (e: Exception) { + Assert.fail(e.toString()) + } + return manager + } + + override fun getPackageName(): String = "com.mparticle.test" + + override fun getApplicationInfo(): ApplicationInfo = ApplicationInfo() + + /** + * Stubbed methods + */ + override fun setTheme(resid: Int) {} + + override fun getTheme(): Theme? = null + + override fun getClassLoader(): ClassLoader? = null + + override fun sendBroadcast(intent: Intent) {} + + override fun sendBroadcast( + intent: Intent, + receiverPermission: String?, + ) {} + + override fun sendOrderedBroadcast( + intent: Intent, + receiverPermission: String?, + ) {} + + override fun sendOrderedBroadcast( + intent: Intent, + receiverPermission: String?, + resultReceiver: BroadcastReceiver?, + scheduler: Handler?, + initialCode: Int, + initialData: String?, + initialExtras: Bundle?, + ) { + } + + override fun sendBroadcastAsUser( + intent: Intent, + user: UserHandle, + ) {} + + override fun sendBroadcastAsUser( + intent: Intent, + user: UserHandle, + receiverPermission: String?, + ) { + } + + override fun sendOrderedBroadcastAsUser( + intent: Intent, + user: UserHandle, + receiverPermission: String?, + resultReceiver: BroadcastReceiver, + scheduler: Handler?, + initialCode: Int, + initialData: String?, + initialExtras: Bundle?, + ) { + } + + override fun sendStickyBroadcast(intent: Intent) {} + + override fun sendStickyOrderedBroadcast( + intent: Intent, + resultReceiver: BroadcastReceiver, + scheduler: Handler?, + initialCode: Int, + initialData: String?, + initialExtras: Bundle?, + ) { + } + + override fun removeStickyBroadcast(intent: Intent) {} + + override fun sendStickyBroadcastAsUser( + intent: Intent, + user: UserHandle, + ) {} + + override fun sendStickyOrderedBroadcastAsUser( + intent: Intent, + user: UserHandle, + resultReceiver: BroadcastReceiver, + scheduler: Handler?, + initialCode: Int, + initialData: String?, + initialExtras: Bundle?, + ) { + } + + override fun removeStickyBroadcastAsUser( + intent: Intent, + user: UserHandle, + ) {} + + override fun registerReceiver( + receiver: BroadcastReceiver?, + filter: IntentFilter, + ): Intent? = null + + override fun registerReceiver( + receiver: BroadcastReceiver?, + filter: IntentFilter, + flags: Int, + ): Intent? = null + + override fun registerReceiver( + receiver: BroadcastReceiver, + filter: IntentFilter, + broadcastPermission: String?, + scheduler: Handler?, + ): Intent? = null + + override fun registerReceiver( + receiver: BroadcastReceiver, + filter: IntentFilter, + broadcastPermission: String?, + scheduler: Handler?, + flags: Int, + ): Intent? = null + + override fun unregisterReceiver(receiver: BroadcastReceiver) {} + + override fun startService(service: Intent): ComponentName? = null + + override fun startForegroundService(service: Intent): ComponentName? = null + + override fun stopService(service: Intent): Boolean = false + + override fun bindService( + service: Intent, + conn: ServiceConnection, + flags: Int, + ): Boolean = false + + override fun unbindService(conn: ServiceConnection) {} + + override fun startInstrumentation( + className: ComponentName, + profileFile: String?, + arguments: Bundle?, + ): Boolean = false + + override fun checkSelfPermission(permission: String): Int = 0 + + override fun enforcePermission( + permission: String, + pid: Int, + uid: Int, + message: String?, + ) {} + + override fun enforceCallingPermission( + permission: String, + message: String?, + ) {} + + override fun enforceCallingOrSelfPermission( + permission: String, + message: String?, + ) {} + + override fun grantUriPermission( + toPackage: String, + uri: Uri, + modeFlags: Int, + ) {} + + override fun revokeUriPermission( + uri: Uri, + modeFlags: Int, + ) {} + + override fun revokeUriPermission( + toPackage: String, + uri: Uri, + modeFlags: Int, + ) {} + + override fun checkUriPermission( + uri: Uri, + pid: Int, + uid: Int, + modeFlags: Int, + ): Int = 0 + + override fun checkCallingUriPermission( + uri: Uri, + modeFlags: Int, + ): Int = 0 + + override fun checkCallingOrSelfUriPermission( + uri: Uri, + modeFlags: Int, + ): Int = 0 + + override fun checkUriPermission( + uri: Uri?, + readPermission: String?, + writePermission: String?, + pid: Int, + uid: Int, + modeFlags: Int, + ): Int = 0 + + override fun enforceUriPermission( + uri: Uri, + pid: Int, + uid: Int, + modeFlags: Int, + message: String, + ) { + } + + override fun enforceCallingUriPermission( + uri: Uri, + modeFlags: Int, + message: String, + ) {} + + override fun enforceCallingOrSelfUriPermission( + uri: Uri, + modeFlags: Int, + message: String, + ) {} + + override fun enforceUriPermission( + uri: Uri?, + readPermission: String?, + writePermission: String?, + pid: Int, + uid: Int, + modeFlags: Int, + message: String?, + ) { + } + + @Throws(NameNotFoundException::class) + override fun createPackageContext( + packageName: String, + flags: Int, + ): Context? = null + + @Throws(NameNotFoundException::class) + override fun createContextForSplit(splitName: String): Context? = null + + override fun createConfigurationContext(overrideConfiguration: Configuration): Context? = null + + override fun createDisplayContext(display: Display): Context? = null + + override fun createDeviceProtectedStorageContext(): Context? = null + + override fun isDeviceProtectedStorage(): Boolean = false + + override fun moveSharedPreferencesFrom( + sourceContext: Context, + name: String, + ): Boolean = false + + override fun deleteSharedPreferences(name: String): Boolean = false + + @Throws(FileNotFoundException::class) + override fun openFileInput(name: String): FileInputStream? = null + + @Throws(FileNotFoundException::class) + override fun openFileOutput( + name: String, + mode: Int, + ): FileOutputStream? = null + + override fun deleteFile(name: String): Boolean = false + + override fun getFileStreamPath(name: String): File? = null + + override fun getDataDir(): File? = null + + override fun getFilesDir(): File? = null + + override fun getNoBackupFilesDir(): File? = null + + override fun getExternalFilesDir(type: String?): File? = null + + override fun getExternalFilesDirs(type: String): Array = arrayOfNulls(0) + + override fun getObbDir(): File? = null + + override fun getObbDirs(): Array = arrayOfNulls(0) + + override fun getCacheDir(): File? = null + + override fun getCodeCacheDir(): File? = null + + override fun getExternalCacheDir(): File? = null + + override fun getExternalCacheDirs(): Array = arrayOfNulls(0) + + override fun getExternalMediaDirs(): Array = arrayOfNulls(0) + + override fun fileList(): Array = arrayOfNulls(0) + + override fun getDir( + name: String, + mode: Int, + ): File? = null + + override fun openOrCreateDatabase( + name: String, + mode: Int, + factory: CursorFactory, + ): SQLiteDatabase? = null + + override fun openOrCreateDatabase( + name: String, + mode: Int, + factory: CursorFactory, + errorHandler: DatabaseErrorHandler?, + ): SQLiteDatabase? = null + + override fun moveDatabaseFrom( + sourceContext: Context, + name: String, + ): Boolean = false + + override fun deleteDatabase(name: String): Boolean = false + + override fun getDatabasePath(name: String): File? = null + + override fun databaseList(): Array = arrayOfNulls(0) + + override fun getWallpaper(): Drawable? = null + + override fun peekWallpaper(): Drawable? = null + + override fun getWallpaperDesiredMinimumWidth(): Int = 0 + + override fun getWallpaperDesiredMinimumHeight(): Int = 0 + + @Throws(IOException::class) + override fun setWallpaper(bitmap: Bitmap) { + } + + @Throws(IOException::class) + override fun setWallpaper(data: InputStream) { + } + + @Throws(IOException::class) + override fun clearWallpaper() { + } + + override fun startActivity(intent: Intent) {} + + override fun startActivity( + intent: Intent, + options: Bundle?, + ) {} + + override fun startActivities(intents: Array) {} + + override fun startActivities( + intents: Array, + options: Bundle, + ) {} + + @Throws(SendIntentException::class) + override fun startIntentSender( + intent: IntentSender, + fillInIntent: Intent?, + flagsMask: Int, + flagsValues: Int, + extraFlags: Int, + ) { + } + + @Throws(SendIntentException::class) + override fun startIntentSender( + intent: IntentSender, + fillInIntent: Intent?, + flagsMask: Int, + flagsValues: Int, + extraFlags: Int, + options: Bundle?, + ) { + } + + override fun getSystemServiceName(serviceClass: Class<*>): String? = null + + override fun checkPermission( + permission: String, + pid: Int, + uid: Int, + ): Int = 0 + + override fun checkCallingPermission(permission: String): Int = 0 + + override fun getContentResolver(): ContentResolver? = null + + override fun getMainLooper(): Looper? = null + + override fun getPackageResourcePath(): String? = null + + override fun getPackageCodePath(): String? = null + + override fun getAssets(): AssetManager? = null +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockContextApplication.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockContextApplication.kt new file mode 100644 index 000000000..274af78e9 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockContextApplication.kt @@ -0,0 +1,19 @@ +package com.mparticle.kits.mocks + +import android.app.Application +import android.app.Application.ActivityLifecycleCallbacks +import android.content.Context +import android.content.SharedPreferences + +class MockContextApplication : Application() { + override fun getApplicationContext(): Context = this + + override fun getSharedPreferences( + name: String, + mode: Int, + ): SharedPreferences = MockSharedPreferences() + + override fun registerActivityLifecycleCallbacks(callback: ActivityLifecycleCallbacks) { + // do nothing + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockCoreCallbacks.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockCoreCallbacks.kt new file mode 100644 index 000000000..fe538f4d5 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockCoreCallbacks.kt @@ -0,0 +1,70 @@ +package com.mparticle.kits.mocks + +import android.app.Activity +import android.net.Uri +import com.mparticle.MParticleOptions.DataplanOptions +import com.mparticle.internal.CoreCallbacks +import com.mparticle.internal.CoreCallbacks.KitListener +import org.json.JSONArray +import java.lang.ref.WeakReference + +class MockCoreCallbacks : CoreCallbacks { + override fun isBackgrounded(): Boolean = false + + override fun getUserBucket(): Int = 0 + + override fun isEnabled(): Boolean = false + + override fun setIntegrationAttributes( + kitId: Int, + integrationAttributes: Map, + ) {} + + override fun getIntegrationAttributes(kitId: Int): Map? = null + + override fun getCurrentActivity(): WeakReference? = null + + override fun getLatestKitConfiguration(): JSONArray? = null + + override fun getDataplanOptions(): DataplanOptions? = null + + override fun isPushEnabled(): Boolean = false + + override fun getPushSenderId(): String? = null + + override fun getPushInstanceId(): String? = null + + override fun getLaunchUri(): Uri? = null + + override fun getLaunchAction(): String? = null + + override fun getKitListener(): KitListener = + object : KitListener { + override fun kitFound(kitId: Int) {} + + override fun kitConfigReceived( + kitId: Int, + configuration: String?, + ) {} + + override fun kitExcluded( + kitId: Int, + reason: String?, + ) {} + + override fun kitStarted(kitId: Int) {} + + override fun onKitApiCalled( + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) {} + + override fun onKitApiCalled( + methodName: String?, + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) {} + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt new file mode 100644 index 000000000..556310a0a --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt @@ -0,0 +1,84 @@ +package com.mparticle.kits.mocks + +import android.util.SparseBooleanArray +import com.mparticle.internal.Logger +import com.mparticle.kits.KitConfiguration +import org.json.JSONException +import org.json.JSONObject +import java.util.HashMap +import kotlin.Throws + +open class MockKitConfiguration : KitConfiguration() { + @Throws(JSONException::class) + override fun parseConfiguration(json: JSONObject): KitConfiguration { + mTypeFilters = MockSparseBooleanArray() + mNameFilters = MockSparseBooleanArray() + mAttributeFilters = MockSparseBooleanArray() + mScreenNameFilters = MockSparseBooleanArray() + mScreenAttributeFilters = MockSparseBooleanArray() + mUserIdentityFilters = MockSparseBooleanArray() + mUserAttributeFilters = MockSparseBooleanArray() + mCommerceAttributeFilters = MockSparseBooleanArray() + mCommerceEntityFilters = MockSparseBooleanArray() + return super.parseConfiguration(json) + } + + override fun convertToSparseArray(json: JSONObject): SparseBooleanArray { + val map: SparseBooleanArray = MockSparseBooleanArray() + val iterator = json.keys() + while (iterator.hasNext()) { + try { + val key = iterator.next().toString() + map.put(key.toInt(), json.getInt(key) == 1) + } catch (jse: JSONException) { + Logger.error("Issue while parsing kit configuration: " + jse.message) + } + } + return map + } + + internal inner class MockSparseBooleanArray : SparseBooleanArray() { + override fun get(key: Int): Boolean = get(key, false) + + override fun get( + key: Int, + valueIfKeyNotFound: Boolean, + ): Boolean { + print("SparseArray getting: $key") + return if (map.containsKey(key)) { + true + } else { + valueIfKeyNotFound + } + } + + var map: MutableMap = HashMap() + + override fun put( + key: Int, + value: Boolean, + ) { + map[key] = value + } + + override fun clear() { + map.clear() + } + + override fun size(): Int = map.size + + override fun toString(): String = map.toString() + } + + companion object { + @Throws(JSONException::class) + fun createKitConfiguration(json: JSONObject): KitConfiguration = MockKitConfiguration().parseConfiguration(json) + + @Throws(JSONException::class) + fun createKitConfiguration(): KitConfiguration { + val jsonObject = JSONObject() + jsonObject.put("id", 42) + return MockKitConfiguration().parseConfiguration(jsonObject) + } + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockKitManagerImpl.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockKitManagerImpl.kt new file mode 100644 index 000000000..eb493b293 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockKitManagerImpl.kt @@ -0,0 +1,71 @@ +package com.mparticle.kits.mocks + +import android.content.Context +import com.mparticle.MParticleOptions +import com.mparticle.internal.CoreCallbacks +import com.mparticle.internal.CoreCallbacks.KitListener +import com.mparticle.internal.ReportingManager +import com.mparticle.kits.KitConfiguration +import com.mparticle.kits.KitManagerImpl +import org.json.JSONException +import org.json.JSONObject +import org.mockito.Mockito +import kotlin.Throws + +class MockKitManagerImpl( + context: Context?, + reportingManager: ReportingManager?, + coreCallbacks: CoreCallbacks?, +) : KitManagerImpl( + context, + reportingManager, + coreCallbacks, + Mockito.mock( + MParticleOptions::class.java, + ), + ) { + constructor() : this( + MockContext(), + Mockito.mock(ReportingManager::class.java), + Mockito.mock( + CoreCallbacks::class.java, + ), + ) { + Mockito.`when`(mCoreCallbacks.getKitListener()).thenReturn( + object : KitListener { + override fun kitFound(kitId: Int) {} + + override fun kitConfigReceived( + kitId: Int, + configuration: String?, + ) {} + + override fun kitExcluded( + kitId: Int, + reason: String?, + ) {} + + override fun kitStarted(kitId: Int) {} + + override fun onKitApiCalled( + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) {} + + override fun onKitApiCalled( + methodName: String?, + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) {} + }, + ) + } + + @Throws(JSONException::class) + override fun createKitConfiguration(configuration: JSONObject): KitConfiguration = + MockKitConfiguration.createKitConfiguration(configuration) + + override fun getUserBucket(): Int = 50 +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockResources.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockResources.kt new file mode 100644 index 000000000..4b2dca6ba --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockResources.kt @@ -0,0 +1,40 @@ +package com.mparticle.kits.mocks + +import android.content.res.Resources +import android.content.res.Resources.NotFoundException +import kotlin.Throws + +class MockResources : Resources(null, null, null) { + override fun getIdentifier( + name: String, + defType: String, + defPackage: String, + ): Int { + if (name == "mp_key") { + return 1 + } else if (name == "mp_secret") { + return 2 + } + return 0 + } + + @Throws(NotFoundException::class) + override fun getString(id: Int): String { + when (id) { + 1 -> return testAppKey + 2 -> return testAppSecret + } + return "" + } + + @Throws(NotFoundException::class) + override fun getString( + id: Int, + vararg formatArgs: Any, + ): String = super.getString(id, *formatArgs) + + companion object { + var testAppKey = "the app key" + var testAppSecret = "the app secret" + } +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockSharedPreferences.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockSharedPreferences.kt new file mode 100644 index 000000000..70f560949 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockSharedPreferences.kt @@ -0,0 +1,88 @@ +package com.mparticle.kits.mocks + +import android.content.SharedPreferences +import android.content.SharedPreferences.Editor +import android.content.SharedPreferences.OnSharedPreferenceChangeListener +import java.util.TreeSet + +class MockSharedPreferences : + SharedPreferences, + Editor { + override fun getAll(): Map? = null + + override fun getString( + key: String, + defValue: String?, + ): String = "" + + override fun getStringSet( + key: String, + defValues: Set?, + ): Set = TreeSet() + + override fun getInt( + key: String, + defValue: Int, + ): Int = 0 + + override fun getLong( + key: String, + defValue: Long, + ): Long = 0 + + override fun getFloat( + key: String, + defValue: Float, + ): Float = 0f + + override fun getBoolean( + key: String, + defValue: Boolean, + ): Boolean = false + + override fun contains(key: String): Boolean = false + + override fun edit(): Editor = this + + override fun registerOnSharedPreferenceChangeListener(listener: OnSharedPreferenceChangeListener) {} + + override fun unregisterOnSharedPreferenceChangeListener(listener: OnSharedPreferenceChangeListener) {} + + override fun putString( + key: String, + value: String?, + ): Editor = this + + override fun putStringSet( + key: String, + values: Set?, + ): Editor = this + + override fun putInt( + key: String, + value: Int, + ): Editor = this + + override fun putLong( + key: String, + value: Long, + ): Editor = this + + override fun putFloat( + key: String, + value: Float, + ): Editor = this + + override fun putBoolean( + key: String, + value: Boolean, + ): Editor = this + + override fun remove(key: String): Editor = this + + override fun clear(): Editor = this + + override fun commit(): Boolean = false + + override fun apply() {} +} diff --git a/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockUser.kt b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockUser.kt new file mode 100644 index 000000000..35125bb28 --- /dev/null +++ b/kits/braze/braze-38/src/test/kotlin/com/mparticle/kits/mocks/MockUser.kt @@ -0,0 +1,53 @@ +package com.mparticle.kits.mocks + +import com.mparticle.MParticle.IdentityType +import com.mparticle.UserAttributeListenerType +import com.mparticle.audience.AudienceResponse +import com.mparticle.audience.AudienceTask +import com.mparticle.consent.ConsentState +import com.mparticle.identity.MParticleUser + +class MockUser( + var identities: Map, +) : MParticleUser { + override fun getId(): Long = 0 + + override fun getUserAttributes(): Map = mapOf() + + override fun getUserAttributes(p0: UserAttributeListenerType?): MutableMap? = null + + override fun setUserAttributes(map: Map): Boolean = false + + override fun getUserIdentities(): Map = identities + + override fun setUserAttribute( + s: String, + o: Any, + ): Boolean = false + + override fun setUserAttributeList( + s: String, + o: Any, + ): Boolean = false + + override fun incrementUserAttribute( + p0: String, + p1: Number?, + ): Boolean = false + + override fun removeUserAttribute(s: String): Boolean = false + + override fun setUserTag(s: String): Boolean = false + + override fun getConsentState(): ConsentState = consentState + + override fun setConsentState(consentState: ConsentState?) {} + + override fun isLoggedIn(): Boolean = false + + override fun getFirstSeenTime(): Long = 0 + + override fun getLastSeenTime(): Long = 0 + + override fun getUserAudiences(): AudienceTask = throw NotImplementedError("getUserAudiences() is not implemented") +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 411e538b2..2ba86948c 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -4,12 +4,12 @@ include ( ':kits:adjust-kit', ':kits:adobe-kit', ':kits:adobemedia-kit', - ':kits:appboy-kit', ':kits:appsflyer:appsflyer-6', ':kits:apptentive-kit', ':kits:apptimize-kit', ':kits:apteligent-kit', //blueshift hosts kit + ':kits:braze:braze-38', ':kits:branch-kit', ':kits:button-kit', ':kits:clevertap-kit', From 0b0e2cb14b8e1db2e6fff41ff732dbdcc1f48fba Mon Sep 17 00:00:00 2001 From: denischilik Date: Mon, 9 Mar 2026 07:24:10 -0400 Subject: [PATCH 03/61] feat: GA 23 Kit Migrate (#652) * feat: migrate googleanalyticsfirebase-kit from submodule to regular directory * feat: relocate googleanalyticsfirebase-kit to kits/ga/ga-23 and update settings-kits.gradle Made-with: Cursor * fix agent typo * add bracket --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/ga/ga-23/README.md | 25 + kits/ga/ga-23/build.gradle | 65 ++ kits/ga/ga-23/gradle.properties | 4 + .../ga-23/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/ga/ga-23/gradlew | 234 +++++ kits/ga/ga-23/gradlew.bat | 89 ++ kits/ga/ga-23/libs/java-json.jar | Bin 0 -> 84697 bytes kits/ga/ga-23/libs/test-utils.aar | Bin 0 -> 104495 bytes kits/ga/ga-23/settings.gradle.kts | 2 + kits/ga/ga-23/src/main/AndroidManifest.xml | 5 + .../kits/GoogleAnalyticsFirebaseKit.kt | 711 +++++++++++++ .../src/test/kotlin/android/os/Bundle.kt | 55 + .../firebase/analytics/FirebaseAnalytics.kt | 74 ++ .../kits/GoogleAnalyticsFirebaseKitTest.kt | 945 ++++++++++++++++++ kits/googleanalyticsfirebase-kit | 1 - settings-kits.gradle | 4 +- 19 files changed, 2217 insertions(+), 6 deletions(-) create mode 100644 kits/ga/ga-23/README.md create mode 100644 kits/ga/ga-23/build.gradle create mode 100644 kits/ga/ga-23/gradle.properties create mode 100644 kits/ga/ga-23/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/ga/ga-23/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/ga/ga-23/gradlew create mode 100644 kits/ga/ga-23/gradlew.bat create mode 100755 kits/ga/ga-23/libs/java-json.jar create mode 100644 kits/ga/ga-23/libs/test-utils.aar create mode 100644 kits/ga/ga-23/settings.gradle.kts create mode 100644 kits/ga/ga-23/src/main/AndroidManifest.xml create mode 100644 kits/ga/ga-23/src/main/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseKit.kt create mode 100644 kits/ga/ga-23/src/test/kotlin/android/os/Bundle.kt create mode 100644 kits/ga/ga-23/src/test/kotlin/com/google/firebase/analytics/FirebaseAnalytics.kt create mode 100644 kits/ga/ga-23/src/test/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseKitTest.kt delete mode 160000 kits/googleanalyticsfirebase-kit diff --git a/.gitmodules b/.gitmodules index 3b02ca9b1..25e7ec9a3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -37,9 +37,6 @@ [submodule "kits/foresee-kit"] path = kits/foresee-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-foresee.git -[submodule "kits/googleanalyticsfirebase-kit"] - path = kits/googleanalyticsfirebase-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-google-analytics-firebase.git [submodule "kits/googleanalyticsfirebasega4-kit"] path = kits/googleanalyticsfirebasega4-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-google-analytics-firebase-ga4.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index f9a54434f..1c300523a 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -69,6 +69,7 @@ lint: - scripts/install-start-emulator.sh - kits/appsflyer/appsflyer-6/** - kits/braze/braze-38/** + - kits/ga/ga-23/** actions: enabled: - trunk-announce diff --git a/kits/ga/ga-23/README.md b/kits/ga/ga-23/README.md new file mode 100644 index 000000000..a95bedd3b --- /dev/null +++ b/kits/ga/ga-23/README.md @@ -0,0 +1,25 @@ +> Google launched Google Analytics 4, a new way of analyzing iOS, Android, and Web data together. Google encourages all customers to [upgrade their Firebase instances](https://support.google.com/analytics/answer/9379599) so that Firebase data flows to Google Analytics 4. mParticle encourages all customers to also upgrade to the [new mParticle Android Firebase GA4 kit](https://github.com/mparticle-integrations/mparticle-android-integration-google-analytics-firebase-ga4). Please see the [mParticle GA4](https://docs.mparticle.com/integrations/google-analytics-4/event) docs for more information on upgrading. + +## Google Analytics for Firebase Kit Integration + +This repository contains the [Google Analytics for Firebase](https://firebase.google.com/docs/analytics/android/start) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-googleanalyticsfirebase-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Google Analytics for Firebase detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Google Analytics for Firebase integration](http://docs.mparticle.com/integrations/firebase) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/ga/ga-23/build.gradle b/kits/ga/ga-23/build.gradle new file mode 100644 index 000000000..898c9a56d --- /dev/null +++ b/kits/ga/ga-23/build.gradle @@ -0,0 +1,65 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:8.1.4' + classpath 'com.mparticle:android-kit-plugin:' + project.version + classpath 'com.google.gms:google-services:4.3.15' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +plugins { + id "org.sonarqube" version "3.5.0.2730" + id "org.jlleitschuh.gradle.ktlint" version "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-google-analytics-firebase" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.googleanalyticsfirebase' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 21 + } + 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 { + testImplementation files('libs/java-json.jar') + testImplementation files('libs/test-utils.aar') + testImplementation 'com.google.android.gms:play-services-measurement-api:22.1.0' + compileOnly 'com.google.firebase:firebase-analytics:22.1.0' +} diff --git a/kits/ga/ga-23/gradle.properties b/kits/ga/ga-23/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/ga/ga-23/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/ga/ga-23/gradle/wrapper/gradle-wrapper.jar b/kits/ga/ga-23/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/ga/ga-23/gradle/wrapper/gradle-wrapper.properties b/kits/ga/ga-23/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/ga/ga-23/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/ga/ga-23/gradlew b/kits/ga/ga-23/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/ga/ga-23/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/ga/ga-23/gradlew.bat b/kits/ga/ga-23/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/ga/ga-23/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/ga/ga-23/libs/java-json.jar b/kits/ga/ga-23/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 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%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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

5a_^i>gI1 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 + + + + diff --git a/kits/ga/ga-23/src/main/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseKit.kt b/kits/ga/ga-23/src/main/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseKit.kt new file mode 100644 index 000000000..b53efec36 --- /dev/null +++ b/kits/ga/ga-23/src/main/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseKit.kt @@ -0,0 +1,711 @@ +package com.mparticle.kits + +import android.content.Context +import android.os.Bundle +import com.google.firebase.analytics.FirebaseAnalytics +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.EventType +import com.mparticle.UserAttributeListener +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.consent.ConsentState +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.Logger +import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.IdentityListener +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import java.math.BigDecimal +import java.util.EnumMap + +class GoogleAnalyticsFirebaseKit : + KitIntegration(), + KitIntegration.EventListener, + IdentityListener, + CommerceListener, + KitIntegration.UserAttributeListener { + override fun getName(): String = KIT_NAME + + @Throws(IllegalArgumentException::class) + public override fun onKitCreate( + map: Map, + context: Context, + ): List { + Logger.info( + "$name Kit relies on a functioning instance of Firebase Analytics. If your Firebase Analytics instance is not configured properly, this Kit will not work", + ) + val userConsentState = currentUser?.consentState + userConsentState?.let { + setConsent(currentUser.consentState) + } + return emptyList() + } + + override fun setOptOut(b: Boolean): List = emptyList() + + override fun leaveBreadcrumb(s: String): List = emptyList() + + override fun logError( + s: String, + map: Map, + ): List = emptyList() + + override fun logException( + e: Exception, + map: Map, + s: String, + ): List = emptyList() + + override fun logEvent(mpEvent: MPEvent): List { + getFirebaseEventName(mpEvent)?.let { + FirebaseAnalytics + .getInstance(context) + .logEvent(it, toBundle(mpEvent.customAttributeStrings)) + } + return listOf(ReportingMessage.fromEvent(this, mpEvent)) + } + + override fun logScreen( + screenName: String, + screenAttributes: Map?, + ): List { + val bundle = toBundle(screenAttributes) + bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, standardizeName(screenName, true)) + val activity = currentActivity.get() + if (activity != null) { + FirebaseAnalytics + .getInstance(context) + .logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle) + return listOf( + ReportingMessage( + this, + ReportingMessage.MessageType.SCREEN_VIEW, + System.currentTimeMillis(), + null, + ), + ) + } + return emptyList() + } + + override fun logLtvIncrease( + bigDecimal: BigDecimal, + bigDecimal1: BigDecimal, + s: String, + map: Map, + ): List = emptyList() + + override fun logEvent(commerceEvent: CommerceEvent): List { + val instance = FirebaseAnalytics.getInstance(context) + if (commerceEvent.productAction == null) { + return emptyList() + } + val bundle = + getCommerceEventBundle(commerceEvent) + .bundle + val eventName: String = + when (commerceEvent.productAction) { + Product.ADD_TO_CART -> FirebaseAnalytics.Event.ADD_TO_CART + Product.ADD_TO_WISHLIST -> FirebaseAnalytics.Event.ADD_TO_WISHLIST + Product.CHECKOUT -> FirebaseAnalytics.Event.BEGIN_CHECKOUT + Product.PURCHASE -> FirebaseAnalytics.Event.PURCHASE + Product.REFUND -> FirebaseAnalytics.Event.REFUND + Product.REMOVE_FROM_CART -> FirebaseAnalytics.Event.REMOVE_FROM_CART + Product.CLICK -> FirebaseAnalytics.Event.SELECT_CONTENT + Product.CHECKOUT_OPTION -> { + val warningMessage = WARNING_MESSAGE + val customFlags = commerceEvent.customFlags + if ((customFlags != null) && customFlags.containsKey(CF_COMMERCE_EVENT_TYPE) + ) { + val commerceEventTypes = + customFlags[CF_COMMERCE_EVENT_TYPE] + if (!commerceEventTypes.isNullOrEmpty()) { + when (commerceEventTypes[0]) { + FirebaseAnalytics.Event.ADD_SHIPPING_INFO -> { + FirebaseAnalytics.Event.ADD_SHIPPING_INFO + } + FirebaseAnalytics.Event.ADD_PAYMENT_INFO -> { + FirebaseAnalytics.Event.ADD_PAYMENT_INFO + } + else -> { + Logger.warning(warningMessage) + return emptyList() + } + } + } else { + Logger.warning(warningMessage) + return emptyList() + } + } else { + Logger.warning(warningMessage) + return emptyList() + } + } + Product.DETAIL -> FirebaseAnalytics.Event.VIEW_ITEM + else -> return emptyList() + } + instance.logEvent(eventName, bundle) + return listOf(ReportingMessage.fromEvent(this, commerceEvent)) + } + + override fun onIdentifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + setUserId(mParticleUser) + try { + mParticleUser.getUserAttributes( + UserAttributeListener { userAttributeSingles, userAttributeLists, mpid -> + val userAttributes: MutableMap = HashMap(userAttributeSingles) + onSetAllUserAttributes(userAttributes, null, null) + }, + ) + } catch (e: Exception) { + Logger.warning(e, "Unable to fetch User Attributes") + } + } + + override fun onLoginCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + setUserId(mParticleUser) + try { + mParticleUser.getUserAttributes( + UserAttributeListener { userAttributeSingles, userAttributeLists, mpid -> + val userAttributes: MutableMap = HashMap(userAttributeSingles) + onSetAllUserAttributes(userAttributes, null, null) + }, + ) + } catch (e: Exception) { + Logger.warning(e, "Unable to fetch User Attributes") + } + } + + override fun onLogoutCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + setUserId(mParticleUser) + } + + override fun onModifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + setUserId(mParticleUser) + try { + mParticleUser.getUserAttributes( + UserAttributeListener { userAttributeSingles, userAttributeLists, mpid -> + val userAttributes: MutableMap = HashMap(userAttributeSingles) + onSetAllUserAttributes(userAttributes, null, null) + }, + ) + } catch (e: Exception) { + Logger.warning(e, "Unable to fetch User Attributes") + } + } + + override fun onUserIdentified(mParticleUser: MParticleUser) {} + + private fun setUserId(user: MParticleUser?) { + var userId: String? = null + if (user != null) { + if (USER_ID_CUSTOMER_ID_VALUE.equals(settings[USER_ID_FIELD_KEY], true)) { + userId = user.userIdentities[MParticle.IdentityType.CustomerId] + } else if (USER_ID_EMAIL_VALUE.equals(settings[USER_ID_FIELD_KEY], true)) { + userId = user.userIdentities[MParticle.IdentityType.Email] + } else if (USER_ID_MPID_VALUE.equals(settings[USER_ID_FIELD_KEY], true)) { + userId = user.id.toString() + } + } + if (!KitUtils.isEmpty(userId)) { + FirebaseAnalytics.getInstance(context).setUserId(userId) + } + } + + private fun getFirebaseEventName(event: MPEvent): String? { + if (event.eventType == EventType.Search) { + return FirebaseAnalytics.Event.SEARCH + } + return if (event.isScreenEvent) { + FirebaseAnalytics.Event.VIEW_ITEM + } else { + standardizeName(event.eventName, true) + } + } + + private fun toBundle(mapIn: Map?): Bundle { + var map = mapIn + val bundle = Bundle() + map = standardizeAttributes(map, true) + if (map != null) { + for ((key, value) in map) { + bundle.putString(key, value) + } + } + return bundle + } + + private fun getCommerceEventBundle(commerceEvent: CommerceEvent): PickyBundle { + val pickyBundle = getTransactionAttributesBundle(commerceEvent) + var currency = commerceEvent.currency + if (currency == null) { + Logger.info(CURRENCY_FIELD_NOT_SET) + currency = USD + } + commerceEvent.customAttributes?.let { customAttributes -> + for (attributes in customAttributes) { + pickyBundle.putString(attributes.key, attributes.value.toString()) + } + } + val customFlags = commerceEvent.customFlags + if (customFlags != null && customFlags.containsKey(CF_COMMERCE_EVENT_TYPE)) { + val commerceEventTypeList = customFlags[CF_COMMERCE_EVENT_TYPE] + if (!commerceEventTypeList.isNullOrEmpty()) { + val commerceEventType = commerceEventTypeList[0] + if (commerceEventType == FirebaseAnalytics.Event.ADD_SHIPPING_INFO) { + val shippingTier = customFlags[CF_SHIPPING_TIER] + if (!shippingTier.isNullOrEmpty()) { + pickyBundle.putString( + FirebaseAnalytics.Param.SHIPPING_TIER, + shippingTier[0], + ) + } + } else if (commerceEventType == FirebaseAnalytics.Event.ADD_PAYMENT_INFO) { + val paymentType = customFlags[CF_PAYMENT_TYPE] + if (!paymentType.isNullOrEmpty()) { + pickyBundle.putString(FirebaseAnalytics.Param.PAYMENT_TYPE, paymentType[0]) + } + } + } + } + + pickyBundle + .putString(FirebaseAnalytics.Param.CURRENCY, currency) + .putBundleList(FirebaseAnalytics.Param.ITEMS, getProductBundles(commerceEvent)) + + return pickyBundle + } + + private fun getProductBundles(commerceEvent: CommerceEvent): Array { + val products = commerceEvent.products + if (products != null) { + val bundles = arrayOfNulls(products.size) + var i = 0 + for (product in products) { + val bundle = + getBundle(product) + .putString(FirebaseAnalytics.Param.CURRENCY, commerceEvent.currency) + bundles[i] = bundle.bundle + i++ + } + return bundles + } + return arrayOfNulls(0) + } + + private fun getTransactionAttributesBundle(commerceEvent: CommerceEvent): PickyBundle { + val pickyBundle = PickyBundle() + val transactionAttributes = commerceEvent.transactionAttributes + return if (commerceEvent.transactionAttributes == null) { + pickyBundle + } else { + pickyBundle + .putString( + FirebaseAnalytics.Param.TRANSACTION_ID, + transactionAttributes?.id, + ).putDouble( + FirebaseAnalytics.Param.VALUE, + transactionAttributes?.revenue, + ).putDouble( + FirebaseAnalytics.Param.TAX, + transactionAttributes?.tax, + ).putDouble( + FirebaseAnalytics.Param.SHIPPING, + transactionAttributes?.shipping, + ).putString( + FirebaseAnalytics.Param.COUPON, + transactionAttributes?.couponCode, + ) + } + } + + private fun getBundle(product: Product): PickyBundle = + PickyBundle() + .putLong(FirebaseAnalytics.Param.QUANTITY, product.quantity.toLong()) + .putString(FirebaseAnalytics.Param.ITEM_ID, product.sku) + .putString(FirebaseAnalytics.Param.ITEM_NAME, product.name) + .putString(FirebaseAnalytics.Param.ITEM_CATEGORY, product.category) + .putDouble(FirebaseAnalytics.Param.PRICE, product.unitPrice) + + private fun getValue(commerceEvent: CommerceEvent): Double? { + var value = 0.0 + val products = commerceEvent.products ?: return null + for (product in products) { + value += product.quantity * product.unitPrice + } + return value + } + + override fun onIncrementUserAttribute( + key: String, + incrementedBy: Number, + value: String, + filteredMParticleUser: FilteredMParticleUser, + ) { + standardizeName(key, false)?.let { + FirebaseAnalytics.getInstance(context).setUserProperty( + it, + value, + ) + } + } + + override fun onRemoveUserAttribute( + key: String, + filteredMParticleUser: FilteredMParticleUser, + ) { + standardizeName(key, false)?.let { + FirebaseAnalytics.getInstance(context).setUserProperty( + it, + null, + ) + } + } + + /** + * We are going to ignore Lists here, since Firebase only supports String "user property" values + */ + override fun onSetUserAttribute( + key: String, + value: Any, + filteredMParticleUser: FilteredMParticleUser, + ) { + if (value is String) { + standardizeName(key, false)?.let { + FirebaseAnalytics.getInstance(context).setUserProperty( + it, + standardizeValue(value, false), + ) + } + } + } + + override fun onSetUserTag( + s: String, + filteredMParticleUser: FilteredMParticleUser, + ) {} + + override fun onSetUserAttributeList( + s: String, + list: List, + filteredMParticleUser: FilteredMParticleUser, + ) { + } + + override fun onSetAllUserAttributes( + userAttributes: Map, + userAttributeLists: Map>?, + filteredMParticleUser: FilteredMParticleUser?, + ) { + var userAttributes: Map? = userAttributes + userAttributes = standardizeAttributes(userAttributes, false) + if (userAttributes != null) { + for ((key, value) in userAttributes) { + FirebaseAnalytics.getInstance(context).setUserProperty(key, value) + } + } + } + + override fun supportsAttributeLists(): Boolean = false + + override fun onConsentStateUpdated( + consentState: ConsentState, + consentState1: ConsentState, + filteredMParticleUser: FilteredMParticleUser, + ) { + setConsent(consentState1) + } + + private fun setConsent(consentState: ConsentState) { + val consentMap: MutableMap = + EnumMap( + FirebaseAnalytics.ConsentType::class.java, + ) + googleConsentMapSettings.forEach { it -> + val mpConsentSetting = settings[it.value] + if (!mpConsentSetting.isNullOrEmpty()) { + if (mpConsentSetting == GoogleConsentValues.GRANTED.consentValue) { + consentMap[it.key] = FirebaseAnalytics.ConsentStatus.GRANTED + } else if (mpConsentSetting == GoogleConsentValues.DENIED.consentValue) { + consentMap[it.key] = FirebaseAnalytics.ConsentStatus.DENIED + } + } + } + + val clientConsentSettings = parseToNestedMap(consentState.toString()) + + parseConsentMapping(settings[CONSENT_MAPPING_SDK]).iterator().forEach { currentConsent -> + + val isConsentAvailable = + searchKeyInNestedMap(clientConsentSettings, key = currentConsent.key) + + if (isConsentAvailable != null) { + val isConsentGranted: Boolean = + JSONObject(isConsentAvailable.toString()).opt("consented") as Boolean + val consentStatus = + if (isConsentGranted) FirebaseAnalytics.ConsentStatus.GRANTED else FirebaseAnalytics.ConsentStatus.DENIED + + when (currentConsent.value) { + "ad_storage" -> + consentMap[FirebaseAnalytics.ConsentType.AD_STORAGE] = + consentStatus + + "ad_user_data" -> + consentMap[FirebaseAnalytics.ConsentType.AD_USER_DATA] = + consentStatus + + "ad_personalization" -> + consentMap[FirebaseAnalytics.ConsentType.AD_PERSONALIZATION] = + consentStatus + + "analytics_storage" -> + consentMap[FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE] = + consentStatus + } + } + } + if (consentMap.isNotEmpty()) { + FirebaseAnalytics.getInstance(context).setConsent(consentMap) + } + } + + private fun parseConsentMapping(json: String?): Map { + if (json.isNullOrEmpty()) { + return emptyMap() + } + val jsonWithFormat = json.replace("\\", "") + + return try { + JSONArray(jsonWithFormat) + .let { jsonArray -> + (0 until jsonArray.length()) + .associate { + val jsonObject = jsonArray.getJSONObject(it) + val map = jsonObject.getString("map") + val value = jsonObject.getString("value") + map to value + } + } + } catch (jse: JSONException) { + Logger.warning( + jse, + "The Google Firebase kit threw an exception while searching for the configured consent purpose mapping in the current user's consent status.", + ) + emptyMap() + } + } + + private fun parseToNestedMap(jsonString: String): Map { + val topLevelMap = mutableMapOf() + try { + val jsonObject = JSONObject(jsonString) + + for (key in jsonObject.keys()) { + val value = jsonObject.get(key) + if (value is JSONObject) { + topLevelMap[key] = parseToNestedMap(value.toString()) + } else { + topLevelMap[key] = value + } + } + } catch (e: Exception) { + Logger.error( + e, + "The Google Firebase kit was unable to parse the user's ConsentState, consent may not be set correctly on the Google Analytics SDK", + ) + } + return topLevelMap + } + + private fun searchKeyInNestedMap( + map: Map<*, *>, + key: Any, + ): Any? { + if (map.isNullOrEmpty()) { + return null + } + try { + for ((mapKey, mapValue) in map) { + if (mapKey.toString().equals(key.toString(), ignoreCase = true)) { + return mapValue + } + if (mapValue is Map<*, *>) { + val foundValue = searchKeyInNestedMap(mapValue, key) + if (foundValue != null) { + return foundValue + } + } + } + } catch (e: Exception) { + Logger.error( + e, + "The Google Firebase kit threw an exception while searching for the configured consent purpose mapping in the current user's consent status.", + ) + } + return null + } + + fun standardizeAttributes( + attributes: Map?, + event: Boolean, + ): Map? { + if (attributes == null) { + return null + } + val attributeCopy = HashMap() + for ((key, value) in attributes) { + attributeCopy[standardizeName(key, event)!!] = standardizeValue(value, event) + } + return attributeCopy + } + + fun standardizeValue( + valueIn: String?, + event: Boolean, + ): String { + var value = valueIn ?: return "" + if (event) { + if (value.length > EVENT_VAL_MAX_LENGTH) { + value = value.substring(0, EVENT_VAL_MAX_LENGTH) + } + } else { + if (value.length > USER_ATTRIBUTE_VAL_MAX_LENGTH) { + value = value.substring(0, USER_ATTRIBUTE_VAL_MAX_LENGTH) + } + } + return value + } + + fun standardizeName( + nameIn: String?, + event: Boolean, + ): String? { + var name = nameIn ?: return null + name = name.replace("[^a-zA-Z0-9_\\s]".toRegex(), " ") + name = name.replace("[\\s]+".toRegex(), "_") + for (forbiddenPrefix in forbiddenPrefixes) { + if (name.startsWith(forbiddenPrefix)) { + name = name.replaceFirst(forbiddenPrefix.toRegex(), "") + } + } + while (name.isNotEmpty() && !Character.isLetter(name.toCharArray()[0])) { + name = name.substring(1) + } + if (event) { + if (name.length > EVENT_MAX_LENGTH) { + name = name.substring(0, EVENT_MAX_LENGTH) + } + } else { + if (name.length > USER_ATTRIBUTE_MAX_LENGTH) { + name = name.substring(0, USER_ATTRIBUTE_MAX_LENGTH) + } + } + return name + } + + class PickyBundle { + val bundle = Bundle() + + fun putString( + key: String?, + value: String?, + ): PickyBundle { + if (value != null) { + bundle.putString(key, value) + } + return this + } + + fun putDouble( + key: String?, + value: Double?, + ): PickyBundle { + if (value != null) { + bundle.putDouble(key, value) + } + return this + } + + fun putLong( + key: String?, + value: Long?, + ): PickyBundle { + if (value != null) { + bundle.putLong(key, value) + } + return this + } + + fun putInt( + key: String?, + value: Int?, + ): PickyBundle { + if (value != null) { + bundle.putInt(key, value) + } + return this + } + + fun putBundleList( + key: String?, + value: Array?, + ): PickyBundle { + if (value != null) { + bundle.putParcelableArray(key, value) + } + return this + } + } + + companion object { + const val USER_ID_FIELD_KEY = "userIdField" + const val USER_ID_CUSTOMER_ID_VALUE = "customerId" + const val USER_ID_EMAIL_VALUE = "email" + const val USER_ID_MPID_VALUE = "mpid" + private val forbiddenPrefixes = arrayOf("google_", "firebase_", "ga_") + private const val CURRENCY_FIELD_NOT_SET = "Currency field required by Firebase was not set, defaulting to 'USD'" + const val CF_COMMERCE_EVENT_TYPE = "Firebase.CommerceEventType" + const val CF_PAYMENT_TYPE = "Firebase.PaymentType" + const val CF_SHIPPING_TIER = "Firebase.ShippingTier" + const val WARNING_MESSAGE = + "Firebase no longer supports CHECKOUT_OPTION. To specify a different eventName, add CF_COMMERCE_EVENT_TYPE to your customFlags with a valid value" + private const val USD = "USD" + private const val EVENT_MAX_LENGTH = 40 + private const val USER_ATTRIBUTE_MAX_LENGTH = 24 + private const val EVENT_VAL_MAX_LENGTH = 100 + private const val USER_ATTRIBUTE_VAL_MAX_LENGTH = 36 + private const val KIT_NAME = "Google Analytics for Firebase" + + // Constants for Read Consent + private const val CONSENT_MAPPING_SDK = "consentMappingSDK" + + enum class GoogleConsentValues( + val consentValue: String, + ) { + GRANTED("Granted"), + DENIED("Denied"), + } + + val googleConsentMapSettings = + mapOf( + FirebaseAnalytics.ConsentType.AD_STORAGE to "defaultAdStorageConsentSDK", + FirebaseAnalytics.ConsentType.AD_USER_DATA to "defaultAdUserDataConsentSDK", + FirebaseAnalytics.ConsentType.AD_PERSONALIZATION to "defaultAdPersonalizationConsentSDK", + FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE to "defaultAnalyticsStorageConsentSDK", + ) + } +} diff --git a/kits/ga/ga-23/src/test/kotlin/android/os/Bundle.kt b/kits/ga/ga-23/src/test/kotlin/android/os/Bundle.kt new file mode 100644 index 000000000..b9078a76c --- /dev/null +++ b/kits/ga/ga-23/src/test/kotlin/android/os/Bundle.kt @@ -0,0 +1,55 @@ +package android.os + +class Bundle : Parcelable { + var map = HashMap() + + operator fun get(key: String): Any? = map[key] + + fun putString( + key: String, + value: String, + ) { + map[key] = value + } + + fun putDouble( + key: String, + value: Double, + ) { + map[key] = value + } + + fun putLong( + key: String, + value: Long, + ) { + map[key] = value + } + + fun putInt( + key: String, + value: Int, + ) { + map[key] = value + } + + fun putParcelableArray( + key: String, + value: Array, + ) { + map[key] = value + } + + fun getDouble(key: String): Double = map[key] as Double + + fun getString(key: String): String? = map[key] as String? + + fun size(): Int = map.keys.size + + override fun describeContents(): Int = 0 + + override fun writeToParcel( + dest: Parcel, + flags: Int, + ) {} +} diff --git a/kits/ga/ga-23/src/test/kotlin/com/google/firebase/analytics/FirebaseAnalytics.kt b/kits/ga/ga-23/src/test/kotlin/com/google/firebase/analytics/FirebaseAnalytics.kt new file mode 100644 index 000000000..1694c26e5 --- /dev/null +++ b/kits/ga/ga-23/src/test/kotlin/com/google/firebase/analytics/FirebaseAnalytics.kt @@ -0,0 +1,74 @@ +package com.google.firebase.analytics + +import android.app.Activity +import android.content.Context +import android.os.Bundle +import java.util.AbstractMap.SimpleEntry +import java.util.LinkedList + +class FirebaseAnalytics { + var loggedEvents: LinkedList> = LinkedList() + var currentScreenName: String? = null + var consentStateMap: MutableMap = mutableMapOf() + + object Event { + const val ADD_PAYMENT_INFO = "add_payment_info" + const val ADD_SHIPPING_INFO = "add_shipping_info" + } + + fun logEvent( + key: String, + bundle: Bundle, + ) { + loggedEvents.add(SimpleEntry(key, bundle)) + } + + fun setCurrentScreen( + currentActivity: Activity?, + screenName: String?, + classOverride: String?, + ) { + currentScreenName = screenName + } + + fun setConsent(var1: MutableMap) { + consentStateMap.putAll(var1) + } + + fun getConsentState(): MutableMap = consentStateMap + + fun setUserProperty( + key: String?, + value: String?, + ) {} + + fun getLoggedEvents(): List> = loggedEvents + + fun clearLoggedEvents() { + loggedEvents = LinkedList() + } + + companion object { + var firebaseInstanceId: String? = null + var instance: FirebaseAnalytics? = null + + @JvmStatic + fun getInstance(context: Context?): FirebaseAnalytics? { + if (instance == null) { + instance = FirebaseAnalytics() + } + return instance + } + + /** + * Access Methods + */ + fun clearInstance() { + instance = null + } + + fun setFirebaseId(firebaseId: String?) { + firebaseInstanceId = firebaseId + } + } +} diff --git a/kits/ga/ga-23/src/test/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseKitTest.kt b/kits/ga/ga-23/src/test/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseKitTest.kt new file mode 100644 index 000000000..e7809bcfa --- /dev/null +++ b/kits/ga/ga-23/src/test/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseKitTest.kt @@ -0,0 +1,945 @@ +package com.mparticle.kits + +import android.app.Activity +import android.content.Context +import android.net.Uri +import com.google.firebase.analytics.FirebaseAnalytics +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticleOptions +import com.mparticle.MParticleOptions.DataplanOptions +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.commerce.Promotion +import com.mparticle.commerce.TransactionAttributes +import com.mparticle.consent.ConsentState +import com.mparticle.consent.GDPRConsent +import com.mparticle.identity.IdentityApi +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.CoreCallbacks +import com.mparticle.internal.CoreCallbacks.KitListener +import com.mparticle.testutils.TestingUtils +import junit.framework.TestCase +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.Mockito.mock +import org.mockito.MockitoAnnotations +import java.lang.ref.WeakReference +import java.lang.reflect.Method +import java.lang.reflect.Modifier +import java.util.HashMap +import java.util.Random + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see [Testing documentation](http://d.android.com/tools/testing) + */ +class GoogleAnalyticsFirebaseKitTest { + private lateinit var kitInstance: GoogleAnalyticsFirebaseKit + private lateinit var firebaseSdk: FirebaseAnalytics + var random = Random() + + @Mock + lateinit var user: MParticleUser + + @Mock + lateinit var filteredMParticleUser: FilteredMParticleUser + + @Before + @Throws(JSONException::class) + fun before() { + FirebaseAnalytics.clearInstance() + FirebaseAnalytics.setFirebaseId("firebaseId") + kitInstance = GoogleAnalyticsFirebaseKit() + MockitoAnnotations.initMocks(this) + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + Mockito.`when`(MParticle.getInstance()!!.Identity()).thenReturn( + Mockito.mock( + IdentityApi::class.java, + ), + ) + val kitManager = + KitManagerImpl( + Mockito.mock( + Context::class.java, + ), + null, + emptyCoreCallbacks, + mock(MParticleOptions::class.java), + ) + kitInstance.kitManager = kitManager + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("id", "-1")) + kitInstance.onKitCreate(HashMap(), Mockito.mock(Context::class.java)) + firebaseSdk = FirebaseAnalytics.getInstance(null)!! + } + + /** + * make sure that all MPEvents are getting translating their getInfo() value to the bundle of the Firebase event. + * MPEvent.getName() should be the firebase event name in all cases, except when the MPEvent.type is MPEvent.Search + */ + @Test + fun testEmptyEvent() { + kitInstance.logEvent(MPEvent.Builder("eventName", MParticle.EventType.Other).build()) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + var firebaseEvent = firebaseSdk.loggedEvents[0] + TestCase.assertEquals("eventName", firebaseEvent.key) + TestCase.assertEquals(0, firebaseEvent.value.size()) + + for (i in 0..9) { + val event = TestingUtils.getInstance().randomMPEventRich + firebaseSdk.clearLoggedEvents() + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + firebaseEvent = firebaseSdk.loggedEvents[0] + if (event.eventType != MParticle.EventType.Search) { + TestCase.assertEquals( + kitInstance.standardizeName(event.eventName, true), + firebaseEvent.key, + ) + } else { + TestCase.assertEquals("search", firebaseEvent.key) + } + event.customAttributes?.let { + TestCase.assertEquals(it.size, firebaseEvent.value.size()) + for (customAttEvent in it) { + val key = kitInstance.standardizeName(customAttEvent.key, true) + val value = kitInstance.standardizeValue(customAttEvent.value as String?, true) + if (key != null) { + TestCase.assertEquals( + value, + firebaseEvent.value.getString(key), + ) + } + } + } + } + } + + /** + * shouldn't do anything, just don't crash + */ + @Test + fun testPromotionCommerceEvent() { + val promotion = Promotion() + promotion.creative = "asdva" + promotion.id = "1234" + promotion.name = "1234asvd" + promotion.position = "2" + val event = CommerceEvent.Builder(Promotion.CLICK, promotion).build() + kitInstance.logEvent(event) + TestCase.assertEquals(0, firebaseSdk.loggedEvents.size) + } + + @Test + @Throws(IllegalAccessException::class) + fun testCommerceEvent() { + for (field in Product::class.java.fields) { + if (Modifier.isPublic(field.modifiers) && Modifier.isStatic(field.modifiers)) { + firebaseSdk.clearLoggedEvents() + val eventType = field?.get(null).toString() + if (eventType != "remove_from_wishlist") { + val event = + CommerceEvent + .Builder( + eventType, + Product.Builder("asdv", "asdv", 1.3).build(), + ).transactionAttributes( + TransactionAttributes() + .setId("235") + .setRevenue(23.3) + .setAffiliation("231"), + ).build() + kitInstance.logEvent(event) + /* TestCase.assertEquals( + "failed for event type: $eventType", + 1, + firebaseSdk.loggedEvents.size + )*/ + } + } + } + } + + @Test + fun onConsentStateUpdatedTest() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("DENIED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("DENIED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_Marketing_true() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("DENIED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_Performance_true() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val performanceConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("DENIED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_Performance_false() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val performanceConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("DENIED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("DENIED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTestPerformance_And_Marketing_are_true() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_No_Defaults_Values() { + val map = HashMap() + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue2) + TestCase.assertEquals(2, firebaseSdk.getConsentState().size) + } + + @Test + fun onConsentStateUpdatedTest_When_No_DATA_From_Server() { + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + TestCase.assertEquals(0, firebaseSdk.getConsentState().size) + } + + @Test + fun onConsentStateUpdatedTest_No_consentMappingSDK() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("DENIED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("DENIED", expectedConsentValue4) + TestCase.assertEquals(4, firebaseSdk.getConsentState().size) + } + + @Test + fun onConsentStateUpdatedTest_When_default_is_Unspecified_And_No_consentMappingSDK() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Unspecified" + map["defaultAnalyticsStorageConsentSDK"] = "Unspecified" + map["defaultAdUserDataConsentSDK"] = "Unspecified" + map["defaultAdPersonalizationConsentSDK"] = "Unspecified" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + TestCase.assertEquals(0, firebaseSdk.getConsentState().size) + } + + @Test + fun onConsentStateUpdatedTest_When_default_is_Unspecified() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Unspecified" + map["defaultAnalyticsStorageConsentSDK"] = "Unspecified" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Unspecified" + map["defaultAdPersonalizationConsentSDK"] = "Unspecified" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue2) + TestCase.assertEquals(2, firebaseSdk.getConsentState().size) + } + + fun MutableMap.getKeyByValue(inputKey: String): Any? { + for ((key, mapValue) in entries) { + if (key.toString() == inputKey) { + return mapValue + } + } + return null + } + + @Test + fun testParseToNestedMap_When_JSON_Is_INVALID() { + var jsonInput = + "{'GDPR':{'marketing':'{:false,'timestamp':1711038269644:'Test consent','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}','performance':'{'consented':true,'timestamp':1711038269644,'document':'parental_consent_agreement_v2','location':'17 Cherry Tree Lan 3','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'},'CCPA':'{'consented':true,'timestamp':1711038269644,'document':'ccpa_consent_agreement_v3','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}" + + val method: Method = + GoogleAnalyticsFirebaseKit::class.java.getDeclaredMethod( + "parseToNestedMap", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, jsonInput) + Assert.assertEquals(mutableMapOf(), result) + } + + @Test + fun testParseToNestedMap_When_JSON_Is_Empty() { + var jsonInput = "" + + val method: Method = + GoogleAnalyticsFirebaseKit::class.java.getDeclaredMethod( + "parseToNestedMap", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, jsonInput) + Assert.assertEquals(mutableMapOf(), result) + } + + @Test + fun testSearchKeyInNestedMap_When_Input_Key_Is_Empty_String() { + val map = + mapOf( + "GDPR" to true, + "marketing" to + mapOf( + "consented" to false, + "document" to + mapOf( + "timestamp" to 1711038269644, + ), + ), + ) + val method: Method = + GoogleAnalyticsFirebaseKit::class.java.getDeclaredMethod( + "searchKeyInNestedMap", + Map::class.java, + Any::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, map, "") + Assert.assertEquals(null, result) + } + + @Test + fun testSearchKeyInNestedMap_When_Input_Is_Empty_Map() { + val emptyMap: Map = emptyMap() + val method: Method = + GoogleAnalyticsFirebaseKit::class.java.getDeclaredMethod( + "searchKeyInNestedMap", + Map::class.java, + Any::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, emptyMap, "1") + Assert.assertEquals(null, result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_Empty_Json() { + val emptyJson = "" + val method: Method = + GoogleAnalyticsFirebaseKit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, emptyJson) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_Invalid_Json() { + var jsonInput = + "{'GDPR':{'marketing':'{:false,'timestamp':1711038269644:'Test consent','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}','performance':'{'consented':true,'timestamp':1711038269644,'document':'parental_consent_agreement_v2','location':'17 Cherry Tree Lan 3','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'},'CCPA':'{'consented':true,'timestamp':1711038269644,'document':'ccpa_consent_agreement_v3','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}" + val method: Method = + GoogleAnalyticsFirebaseKit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, jsonInput) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_NULL() { + val method: Method = + GoogleAnalyticsFirebaseKit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, null) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testShippingInfoCommerceEvent() { + val event = + CommerceEvent + .Builder( + Product.CHECKOUT_OPTION, + Product.Builder("asdv", "asdv", 1.3).build(), + ).addCustomFlag( + "Firebase.CommerceEventType", + FirebaseAnalytics.Event.ADD_SHIPPING_INFO, + ).addCustomFlag("Firebase.ShippingTier", "overnight") + .build() + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + TestCase.assertEquals("add_shipping_info", firebaseSdk.loggedEvents[0].key) + TestCase.assertEquals( + "overnight", + firebaseSdk.loggedEvents[0].value.getString("shipping_tier"), + ) + } + + @Test + fun testPaymentInfoCommerceEvent() { + val commerceCustomAttributes = + mapOf( + "event::country" to "US", + ) + val event = + CommerceEvent + .Builder( + Product.CHECKOUT_OPTION, + Product.Builder("asdv", "asdv", 1.3).build(), + ).addCustomFlag( + "Firebase.CommerceEventType", + FirebaseAnalytics.Event.ADD_PAYMENT_INFO, + ).addCustomFlag("Firebase.PaymentType", "visa") + .build() + event.customAttributes = commerceCustomAttributes + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + TestCase.assertEquals("add_payment_info", firebaseSdk.loggedEvents[0].key) + TestCase.assertEquals("visa", firebaseSdk.loggedEvents[0].value.getString("payment_type")) + TestCase.assertEquals("US", firebaseSdk.loggedEvents[0].value.getString("event::country")) + } + + @Test + fun testCheckoutOptionCommerceEvent() { + val customEventTypes = + arrayOf( + FirebaseAnalytics.Event.ADD_PAYMENT_INFO, + FirebaseAnalytics.Event.ADD_SHIPPING_INFO, + ) + for (customEventType in customEventTypes) { + val event = + CommerceEvent + .Builder( + Product.CHECKOUT_OPTION, + Product.Builder("asdv", "asdv", 1.3).build(), + ).addCustomFlag( + "Firebase.CommerceEventType", + customEventType, + ).build() + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + TestCase.assertEquals(customEventType, firebaseSdk.loggedEvents[0].key) + firebaseSdk.clearLoggedEvents() + } + } + + @Test + fun testNameStandardization() { + val badPrefixes = arrayOf("firebase_event_name", "google_event_name", "ga_event_name") + for (badPrefix in badPrefixes) { + val clean = kitInstance.standardizeName(badPrefix, random.nextBoolean()) + TestCase.assertEquals("event_name", clean) + } + val emptySpace1 = "event name" + val emptySpace2 = "event_name " + val emptySpace3 = "event name " + val emptySpace4 = "event - name " + TestCase.assertEquals( + "event_name", + kitInstance.standardizeName(emptySpace1, random.nextBoolean()), + ) + TestCase.assertEquals( + "event_name_", + kitInstance.standardizeName(emptySpace2, random.nextBoolean()), + ) + TestCase.assertEquals( + "event_name_", + kitInstance.standardizeName(emptySpace3, random.nextBoolean()), + ) + TestCase.assertEquals( + "event_name_", + kitInstance.standardizeName(emptySpace4, random.nextBoolean()), + ) + val badStarts = + arrayOf( + "!@#$%^&*()_+=[]{}|'\"?><:;event_name", + "_event_name", + " event_name", + "_event_name", + ) + for (badStart in badStarts) { + val clean = kitInstance.standardizeName(badStart, random.nextBoolean()) + TestCase.assertEquals("event_name", clean) + } + val tooLong = + "abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890" + var sanitized: String = kitInstance.standardizeName(tooLong, true).toString() + TestCase.assertEquals(40, sanitized.length) + TestCase.assertTrue(tooLong.startsWith(sanitized)) + sanitized = kitInstance.standardizeName(tooLong, false).toString() + TestCase.assertEquals(24, sanitized.length) + TestCase.assertTrue(tooLong.startsWith(sanitized)) + sanitized = kitInstance.standardizeValue(tooLong, true) + TestCase.assertEquals(100, sanitized.length) + TestCase.assertTrue(tooLong.startsWith(sanitized)) + sanitized = kitInstance.standardizeValue(tooLong, false) + TestCase.assertEquals(36, sanitized.length) + TestCase.assertTrue(tooLong.startsWith(sanitized)) + } + + @Test + fun testScreenNameSanitized() { + kitInstance.logScreen("Some long Screen name", emptyMap()) + val firebaseScreenViewEvent = firebaseSdk.loggedEvents[0] + TestCase.assertEquals( + "Some_long_Screen_name", + firebaseScreenViewEvent.value.getString("screen_name"), + ) + } + + @Test + fun testScreenNameAttributes() { + val attributes = hashMapOf() + attributes["testAttributeKey"] = "testAttributeValue" + kitInstance.logScreen("testScreenName", attributes) + val firebaseScreenViewEvent = firebaseSdk.loggedEvents[0] + // even though we are passing one attribute, it should contain two including the screen_name + TestCase.assertEquals( + 2, + firebaseScreenViewEvent.value.size(), + ) + // make sure the even name is correct with Firebase's constant SCREEN_NAME value + TestCase.assertEquals( + "screen_view", + firebaseScreenViewEvent.key, + ) + // make sure that the Params include the screenName value + TestCase.assertEquals( + "testScreenName", + firebaseScreenViewEvent.value.getString("screen_name"), + ) + } + + private var emptyCoreCallbacks: CoreCallbacks = + object : CoreCallbacks { + var activity = Activity() + + override fun isBackgrounded(): Boolean = false + + override fun getUserBucket(): Int = 0 + + override fun isEnabled(): Boolean = false + + override fun setIntegrationAttributes( + i: Int, + map: Map, + ) {} + + override fun getIntegrationAttributes(i: Int): Map = emptyMap() + + override fun getCurrentActivity(): WeakReference = WeakReference(activity) + + override fun getLatestKitConfiguration(): JSONArray? = null + + override fun getDataplanOptions(): DataplanOptions? = null + + override fun isPushEnabled(): Boolean = false + + override fun getPushSenderId(): String? = null + + override fun getPushInstanceId(): String? = null + + override fun getLaunchUri(): Uri? = null + + override fun getLaunchAction(): String? = null + + override fun getKitListener(): KitListener = + object : KitListener { + override fun kitFound(kitId: Int) {} + + override fun kitConfigReceived( + kitId: Int, + configuration: String?, + ) {} + + override fun kitExcluded( + kitId: Int, + reason: String?, + ) {} + + override fun kitStarted(kitId: Int) {} + + override fun onKitApiCalled( + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) {} + + override fun onKitApiCalled( + methodName: String?, + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) {} + } + } +} diff --git a/kits/googleanalyticsfirebase-kit b/kits/googleanalyticsfirebase-kit deleted file mode 160000 index 4217ef83c..000000000 --- a/kits/googleanalyticsfirebase-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4217ef83c4045b1c7f7f61030b8d212a3b437133 diff --git a/settings-kits.gradle b/settings-kits.gradle index 2ba86948c..8fb9903c8 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -8,15 +8,15 @@ include ( ':kits:apptentive-kit', ':kits:apptimize-kit', ':kits:apteligent-kit', + ':kits:branch-kit', //blueshift hosts kit ':kits:braze:braze-38', - ':kits:branch-kit', ':kits:button-kit', ':kits:clevertap-kit', ':kits:comscore-kit', ':kits:flurry-kit', ':kits:foresee-kit', - ':kits:googleanalyticsfirebase-kit', + ':kits:ga:ga-23', ':kits:googleanalyticsfirebasega4-kit', ':kits:iterable-kit', ':kits:kochava-kit', From 03d7f2123f80781cb085ab5cc8254a68ddbd3d1e Mon Sep 17 00:00:00 2001 From: denischilik Date: Mon, 9 Mar 2026 08:50:32 -0400 Subject: [PATCH 04/61] feat: GA4 23 Kit Migrate (#653) * feat: migrate googleanalyticsfirebasega4-kit from submodule to regular directory * feat: relocate googleanalyticsfirebasega4-kit to kits/ga4/ga4-23 and update settings-kits.gradle * fix typo --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/ga4/ga4-23/README.md | 23 + kits/ga4/ga4-23/build.gradle | 66 + kits/ga4/ga4-23/gradle.properties | 4 + .../ga4-23/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/ga4/ga4-23/gradlew | 234 +++ kits/ga4/ga4-23/gradlew.bat | 89 ++ kits/ga4/ga4-23/libs/java-json.jar | Bin 0 -> 84697 bytes kits/ga4/ga4-23/libs/test-utils.aar | Bin 0 -> 104495 bytes kits/ga4/ga4-23/settings.gradle.kts | 2 + kits/ga4/ga4-23/src/main/AndroidManifest.xml | 5 + .../kits/GoogleAnalyticsFirebaseGA4Kit.kt | 977 +++++++++++++ .../src/test/kotlin/android/os/Bundle.kt | 55 + .../android/gms/tasks/OnSuccessListener.kt | 5 + .../firebase/analytics/FirebaseAnalytics.kt | 74 + .../kits/GoogleAnalyticsFirebaseGA4KitTest.kt | 1267 +++++++++++++++++ kits/googleanalyticsfirebasega4-kit | 1 - settings-kits.gradle | 2 +- 20 files changed, 2808 insertions(+), 5 deletions(-) create mode 100644 kits/ga4/ga4-23/README.md create mode 100644 kits/ga4/ga4-23/build.gradle create mode 100644 kits/ga4/ga4-23/gradle.properties create mode 100644 kits/ga4/ga4-23/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/ga4/ga4-23/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/ga4/ga4-23/gradlew create mode 100644 kits/ga4/ga4-23/gradlew.bat create mode 100755 kits/ga4/ga4-23/libs/java-json.jar create mode 100644 kits/ga4/ga4-23/libs/test-utils.aar create mode 100644 kits/ga4/ga4-23/settings.gradle.kts create mode 100644 kits/ga4/ga4-23/src/main/AndroidManifest.xml create mode 100644 kits/ga4/ga4-23/src/main/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseGA4Kit.kt create mode 100644 kits/ga4/ga4-23/src/test/kotlin/android/os/Bundle.kt create mode 100644 kits/ga4/ga4-23/src/test/kotlin/com/google/android/gms/tasks/OnSuccessListener.kt create mode 100644 kits/ga4/ga4-23/src/test/kotlin/com/google/firebase/analytics/FirebaseAnalytics.kt create mode 100644 kits/ga4/ga4-23/src/test/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseGA4KitTest.kt delete mode 160000 kits/googleanalyticsfirebasega4-kit diff --git a/.gitmodules b/.gitmodules index 25e7ec9a3..32ebfc39d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -37,9 +37,6 @@ [submodule "kits/foresee-kit"] path = kits/foresee-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-foresee.git -[submodule "kits/googleanalyticsfirebasega4-kit"] - path = kits/googleanalyticsfirebasega4-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-google-analytics-firebase-ga4.git [submodule "kits/iterable-kit"] path = kits/iterable-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-iterable.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 1c300523a..e5c8b535b 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -70,6 +70,7 @@ lint: - kits/appsflyer/appsflyer-6/** - kits/braze/braze-38/** - kits/ga/ga-23/** + - kits/ga4/ga4-23/** actions: enabled: - trunk-announce diff --git a/kits/ga4/ga4-23/README.md b/kits/ga4/ga4-23/README.md new file mode 100644 index 000000000..fe4a48bdd --- /dev/null +++ b/kits/ga4/ga4-23/README.md @@ -0,0 +1,23 @@ +## Firebase for Google Analytics 4 (GA4) Kit Integration + +This repository contains the [Firebase for GA4](https://firebase.google.com/docs/analytics/get-started?platform=android) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-googleanalyticsfirebasega4-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"GA4 for Firebase detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Firebase for GA4 integration](http://docs.mparticle.com/integrations/google-analytics-4/event/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/ga4/ga4-23/build.gradle b/kits/ga4/ga4-23/build.gradle new file mode 100644 index 000000000..79de88de4 --- /dev/null +++ b/kits/ga4/ga4-23/build.gradle @@ -0,0 +1,66 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:8.1.4' + classpath 'com.mparticle:android-kit-plugin:' + project.version + classpath 'com.google.gms:google-services:4.3.15' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +plugins { + id "org.sonarqube" version "3.5.0.2730" + id "org.jlleitschuh.gradle.ktlint" version "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-google-analytics-firebase-ga4" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.googleanalyticsfirebasega4' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 21 + } + 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 { + testImplementation files('libs/java-json.jar') + testImplementation files('libs/test-utils.aar') + testImplementation 'com.google.android.gms:play-services-measurement-api:22.1.0' + + compileOnly 'com.google.firebase:firebase-analytics:22.1.0' +} diff --git a/kits/ga4/ga4-23/gradle.properties b/kits/ga4/ga4-23/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/ga4/ga4-23/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/ga4/ga4-23/gradle/wrapper/gradle-wrapper.jar b/kits/ga4/ga4-23/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/ga4/ga4-23/gradle/wrapper/gradle-wrapper.properties b/kits/ga4/ga4-23/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/ga4/ga4-23/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/ga4/ga4-23/gradlew b/kits/ga4/ga4-23/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/ga4/ga4-23/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/ga4/ga4-23/gradlew.bat b/kits/ga4/ga4-23/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/ga4/ga4-23/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/ga4/ga4-23/libs/java-json.jar b/kits/ga4/ga4-23/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 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%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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
5a_^i>gI1 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 + + + + diff --git a/kits/ga4/ga4-23/src/main/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseGA4Kit.kt b/kits/ga4/ga4-23/src/main/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseGA4Kit.kt new file mode 100644 index 000000000..04b59aa02 --- /dev/null +++ b/kits/ga4/ga4-23/src/main/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseGA4Kit.kt @@ -0,0 +1,977 @@ +package com.mparticle.kits + +import android.content.Context +import android.os.Bundle +import com.google.firebase.analytics.FirebaseAnalytics +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.EventType +import com.mparticle.UserAttributeListener +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.commerce.Promotion +import com.mparticle.consent.ConsentState +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.Logger +import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.IdentityListener +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import java.math.BigDecimal +import java.util.EnumMap + +class GoogleAnalyticsFirebaseGA4Kit : + KitIntegration(), + KitIntegration.EventListener, + IdentityListener, + CommerceListener, + KitIntegration.UserAttributeListener { + override fun getName(): String = KIT_NAME + + @Throws(IllegalArgumentException::class) + public override fun onKitCreate( + map: Map, + context: Context, + ): List? { + Logger.info( + "$name Kit relies on a functioning instance of Firebase Analytics. If your Firebase Analytics instance is not configured properly, this Kit will not work", + ) + val userConsentState = currentUser?.consentState + userConsentState?.let { + setConsent(currentUser.consentState) + } + updateInstanceIDIntegration() + return null + } + + override fun setOptOut(b: Boolean): List = emptyList() + + override fun leaveBreadcrumb(s: String): List = emptyList() + + override fun logError( + s: String, + map: Map, + ): List = emptyList() + + override fun logException( + e: Exception, + map: Map, + s: String, + ): List = emptyList() + + override fun logEvent(mpEvent: MPEvent): List? { + if (forwardRequestsServerSide()) { + return null + } + + val bundle = toBundle(mpEvent.customAttributeStrings) + FirebaseAnalytics + .getInstance(context) + .logEvent(getFirebaseEventName(mpEvent)!!, bundle) + return listOf(ReportingMessage.fromEvent(this, mpEvent)) + } + + override fun logScreen( + screenName: String, + screenAttributes: Map?, + ): List { + if (forwardRequestsServerSide()) { + return emptyList() + } + val bundle = toBundle(screenAttributes) + bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, standardizeName(screenName, true)) + val activity = currentActivity.get() + if (activity != null) { + FirebaseAnalytics + .getInstance(context) + .logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle) + return listOf( + ReportingMessage( + this, + ReportingMessage.MessageType.SCREEN_VIEW, + System.currentTimeMillis(), + null, + ), + ) + } + return emptyList() + } + + override fun logLtvIncrease( + bigDecimal: BigDecimal, + bigDecimal1: BigDecimal, + s: String, + map: Map, + ): List = emptyList() + + override fun logEvent(commerceEvent: CommerceEvent): List? { + if (forwardRequestsServerSide()) { + return null + } + val instance = FirebaseAnalytics.getInstance(context) + + if (commerceEvent.promotionAction != null) { + promotionActionNotNull(commerceEvent, instance) + } else if (commerceEvent.impressions != null) { + impressionsNotNull(commerceEvent, instance) + } else if (commerceEvent.productAction != null) { + productActionNotNull(commerceEvent, instance) + } else { + return null + } + return listOf(ReportingMessage.fromEvent(this, commerceEvent)) + } + + private fun promotionActionNotNull( + commerceEvent: CommerceEvent, + instance: FirebaseAnalytics, + ) { + var bundle: Bundle + val eventName: String = + if (commerceEvent.promotionAction === Promotion.CLICK) { + FirebaseAnalytics.Event.SELECT_PROMOTION + } else { + FirebaseAnalytics.Event.VIEW_PROMOTION + } + commerceEvent.promotions?.let { + for (promotion in it) { + bundle = + getPromotionCommerceEventBundle( + promotion, + commerceEvent.customAttributeStrings, + ).bundle + instance.logEvent(eventName, bundle) + } + } + } + + private fun impressionsNotNull( + commerceEvent: CommerceEvent, + instance: FirebaseAnalytics, + ) { + var bundle: Bundle + val eventName: String = FirebaseAnalytics.Event.VIEW_ITEM_LIST + commerceEvent.impressions?.let { + for (impression in it) { + bundle = + getImpressionCommerceEventBundle( + impression.listName, + impression.products, + commerceEvent.customAttributeStrings, + ).bundle + instance.logEvent(eventName, bundle) + } + } + } + + private fun productActionNotNull( + commerceEvent: CommerceEvent, + instance: FirebaseAnalytics, + ) { + val bundle: Bundle = getCommerceEventBundle(commerceEvent).bundle + val eventName = + when (commerceEvent.productAction) { + Product.ADD_TO_CART -> FirebaseAnalytics.Event.ADD_TO_CART + Product.ADD_TO_WISHLIST -> FirebaseAnalytics.Event.ADD_TO_WISHLIST + Product.CHECKOUT -> FirebaseAnalytics.Event.BEGIN_CHECKOUT + Product.PURCHASE -> FirebaseAnalytics.Event.PURCHASE + Product.REFUND -> FirebaseAnalytics.Event.REFUND + Product.REMOVE_FROM_CART -> FirebaseAnalytics.Event.REMOVE_FROM_CART + Product.CLICK -> FirebaseAnalytics.Event.SELECT_ITEM + Product.CHECKOUT_OPTION -> { + val warningMessage = WARNING_MESSAGE + val customFlags = commerceEvent.customFlags + if ((customFlags != null) && customFlags.containsKey(CF_GA4COMMERCE_EVENT_TYPE) + ) { + val commerceEventTypes = + customFlags[CF_GA4COMMERCE_EVENT_TYPE] + if (!commerceEventTypes.isNullOrEmpty()) { + when (commerceEventTypes[0]) { + FirebaseAnalytics.Event.ADD_SHIPPING_INFO -> { + FirebaseAnalytics.Event.ADD_SHIPPING_INFO + } + FirebaseAnalytics.Event.ADD_PAYMENT_INFO -> { + FirebaseAnalytics.Event.ADD_PAYMENT_INFO + } + else -> { + Logger.warning(warningMessage) + return + } + } + } else { + Logger.warning(warningMessage) + return + } + } else { + Logger.warning(warningMessage) + return + } + } + Product.DETAIL -> FirebaseAnalytics.Event.VIEW_ITEM + else -> return + } + + instance.logEvent(eventName, bundle) + } + + override fun onIdentifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + if (!forwardRequestsServerSide()) { + setUserId(mParticleUser) + try { + mParticleUser.getUserAttributes( + UserAttributeListener { userAttributeSingles, userAttributeLists, mpid -> + val userAttributes: MutableMap = HashMap(userAttributeSingles) + onSetAllUserAttributes(userAttributes, null, null) + }, + ) + } catch (e: Exception) { + Logger.warning(e, "Unable to fetch User Attributes") + } + } + } + + override fun onLoginCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + if (!forwardRequestsServerSide()) { + setUserId(mParticleUser) + try { + mParticleUser.getUserAttributes( + UserAttributeListener { userAttributeSingles, userAttributeLists, mpid -> + val userAttributes: MutableMap = HashMap(userAttributeSingles) + onSetAllUserAttributes(userAttributes, null, null) + }, + ) + } catch (e: Exception) { + Logger.warning(e, "Unable to fetch User Attributes") + } + } + } + + override fun onLogoutCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + if (!forwardRequestsServerSide()) { + setUserId(mParticleUser) + } + } + + override fun onModifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + if (!forwardRequestsServerSide()) { + setUserId(mParticleUser) + try { + mParticleUser.getUserAttributes( + UserAttributeListener { userAttributeSingles, userAttributeLists, mpid -> + val userAttributes: MutableMap = HashMap(userAttributeSingles) + onSetAllUserAttributes(userAttributes, null, null) + }, + ) + } catch (e: Exception) { + Logger.warning(e, "Unable to fetch User Attributes") + } + } + } + + override fun onUserIdentified(mParticleUser: MParticleUser) { + if (!forwardRequestsServerSide()) { + setUserId(mParticleUser) + } + } + + private fun forwardRequestsServerSide(): Boolean = + true.toString().equals( + settings[FORWARD_REQUESTS_SERVER_SIDE], + true, + ) + + /** + * Sets the GA4 Instance ID as an mParticle integration attribute. + */ + private fun updateInstanceIDIntegration() { + val instance = FirebaseAnalytics.getInstance(context) + val task = instance.appInstanceId + task.addOnSuccessListener { appInstanceID -> + if (!KitUtils.isEmpty(appInstanceID)) { + val integrationAttributes = HashMap(1) + integrationAttributes[INSTANCE_ID_INTEGRATION_KEY] = appInstanceID!! + setIntegrationAttributes(integrationAttributes) + } + } + } + + private fun setUserId(user: MParticleUser?) { + var userId: String? = null + val setting = settings[EXTERNAL_USER_IDENTITY_TYPE] + + if (user != null) { + if (EXTERNAL_USER_IDENTITY_CUSTOMER_ID.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.CustomerId] + } else if (EXTERNAL_USER_IDENTITY_MPID.equals(setting, true)) { + userId = user.id.toString() + } else if (EXTERNAL_USER_IDENTITY_OTHER.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other] + } else if (EXTERNAL_USER_IDENTITY_OTHER2.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other2] + } else if (EXTERNAL_USER_IDENTITY_OTHER3.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other3] + } else if (EXTERNAL_USER_IDENTITY_OTHER4.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other4] + } else if (EXTERNAL_USER_IDENTITY_OTHER5.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other5] + } else if (EXTERNAL_USER_IDENTITY_OTHER6.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other6] + } else if (EXTERNAL_USER_IDENTITY_OTHER7.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other7] + } else if (EXTERNAL_USER_IDENTITY_OTHER8.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other8] + } else if (EXTERNAL_USER_IDENTITY_OTHER9.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other9] + } else if (EXTERNAL_USER_IDENTITY_OTHER10.equals(setting, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other10] + } + + if (!KitUtils.isEmpty(userId)) { + if (true.toString().equals(settings[SHOULD_HASH_USER_ID], true) + ) { + if (userId != null) { + userId = KitUtils.hashFnv1a(userId.toByteArray()).toString() + } + } + FirebaseAnalytics.getInstance(context).setUserId(userId) + } + } + } + + private fun getFirebaseEventName(event: MPEvent): String? { + if (event.eventType == EventType.Search) { + return FirebaseAnalytics.Event.SEARCH + } + return if (event.isScreenEvent) { + FirebaseAnalytics.Event.VIEW_ITEM + } else { + standardizeName(event.eventName, true) + } + } + + private fun toBundle(mapIn: Map?): Bundle { + var map = mapIn + val bundle = Bundle() + map = standardizeAttributes(map, true) + if (map != null) { + for ((key, value) in map) { + bundle.putString(key, value) + } + } + return bundle + } + + private fun getPromotionCommerceEventBundle( + promotion: Promotion?, + customAttributesStrings: Map?, + ): PickyBundle { + var pickyBundle = PickyBundle() + if (promotion != null) { + pickyBundle + .putString(FirebaseAnalytics.Param.PROMOTION_ID, promotion.id) + .putString( + FirebaseAnalytics.Param.CREATIVE_NAME, + promotion.creative, + ).putString( + FirebaseAnalytics.Param.PROMOTION_NAME, + promotion.name, + ).putString( + FirebaseAnalytics.Param.CREATIVE_SLOT, + promotion.position, + ) + + customAttributesStrings?.let { customAttributes -> + var map = standardizeAttributes(customAttributes, true) + + if (map != null) { + for (attributes in map) { + pickyBundle.putString(attributes.key, attributes.value.toString()) + } + } + } + } + return pickyBundle + } + + private fun getImpressionCommerceEventBundle( + impressionKey: String?, + products: List?, + customAttributesStrings: Map?, + ): PickyBundle { + var pickyBundle = + PickyBundle() + .putString(FirebaseAnalytics.Param.ITEM_LIST_ID, impressionKey) + .putString(FirebaseAnalytics.Param.ITEM_LIST_NAME, impressionKey) + .putBundleList(FirebaseAnalytics.Param.ITEMS, getProductBundles(products)) + + customAttributesStrings?.let { customAttributes -> + var map = standardizeAttributes(customAttributes, true) + + if (map != null) { + for (attributes in map) { + pickyBundle.putString(attributes.key, attributes.value.toString()) + } + } + } + + return pickyBundle + } + + private fun getCommerceEventBundle(commerceEvent: CommerceEvent): PickyBundle { + val pickyBundle = getTransactionAttributesBundle(commerceEvent) + var currency = commerceEvent.currency + if (currency == null) { + Logger.info(CURRENCY_FIELD_NOT_SET) + currency = USD + } + + // Google Analytics 4 introduces 2 new event types - add_shipping_info and add_payment_info + // each of these has an extra parameter that is optional + val customFlags = commerceEvent.customFlags + if (customFlags != null && customFlags.containsKey(CF_GA4COMMERCE_EVENT_TYPE)) { + val commerceEventTypeList = customFlags[CF_GA4COMMERCE_EVENT_TYPE] + if (!commerceEventTypeList.isNullOrEmpty()) { + val commerceEventType = commerceEventTypeList[0] + if (commerceEventType == FirebaseAnalytics.Event.ADD_SHIPPING_INFO) { + val shippingTier = customFlags[CF_GA4_SHIPPING_TIER] + if (!shippingTier.isNullOrEmpty()) { + pickyBundle.putString( + FirebaseAnalytics.Param.SHIPPING_TIER, + shippingTier[0], + ) + } + } else if (commerceEventType == FirebaseAnalytics.Event.ADD_PAYMENT_INFO) { + val paymentType = customFlags[CF_GA4_PAYMENT_TYPE] + if (!paymentType.isNullOrEmpty()) { + pickyBundle.putString(FirebaseAnalytics.Param.PAYMENT_TYPE, paymentType[0]) + } + } + } + } + + commerceEvent.customAttributeStrings?.let { customAttributes -> + var map = standardizeAttributes(customAttributes, true) + + if (map != null) { + for (attributes in map) { + pickyBundle.putString(attributes.key, attributes.value.toString()) + } + } + } + + pickyBundle + .putString(FirebaseAnalytics.Param.CURRENCY, currency) + .putBundleList(FirebaseAnalytics.Param.ITEMS, getProductBundles(commerceEvent)) + + return pickyBundle + } + + private fun getProductBundles(commerceEvent: CommerceEvent): Array { + val products = commerceEvent.products + return getProductBundles(products) + } + + private fun getProductBundles(products: List?): Array { + products?.let { + val bundles = arrayOfNulls(products.size) + for ((i, product) in products.withIndex()) { + val bundle = getHashmap(product) + val bundleSize = bundle.size + if (bundleSize > ITEM_MAX_PARAMETER) { + val additionalParameterSize = bundleSize - ITEM_MAX_PARAMETER + val keysToRemove = + bundle + .keys + .sortedWith(String.CASE_INSENSITIVE_ORDER) + .takeLast(additionalParameterSize) + keysToRemove.forEach { key -> + bundle.remove(key) + } + } + bundles[i] = hashMapToBundle(bundle).bundle + } + return products.map { hashMapToBundle(getHashmap(it)).bundle }.toTypedArray() + } + return arrayOf() + } + + private fun getTransactionAttributesBundle(commerceEvent: CommerceEvent): PickyBundle { + val pickyBundle = PickyBundle() + val transactionAttributes = commerceEvent.transactionAttributes + + return if (transactionAttributes != null) { + pickyBundle + .putString(FirebaseAnalytics.Param.TRANSACTION_ID, transactionAttributes.id) + .putDouble(FirebaseAnalytics.Param.VALUE, transactionAttributes.revenue) + .putDouble(FirebaseAnalytics.Param.TAX, transactionAttributes.tax) + .putDouble(FirebaseAnalytics.Param.SHIPPING, transactionAttributes.shipping) + .putString(FirebaseAnalytics.Param.COUPON, transactionAttributes.couponCode) + } else { + return pickyBundle + } + } + + private fun hashMapToBundle(hashMap: HashMap): PickyBundle { + val bundle = PickyBundle() + for ((key, value) in hashMap) { + when (value) { + is String -> bundle.putString(key, value) + is Int -> bundle.putInt(key, value) + is Double -> bundle.putDouble(key, value) + is Long -> bundle.putLong(key, value) + } + } + return bundle + } + + private fun getHashmap(product: Product): HashMap = + hashMapOf().apply { + put(FirebaseAnalytics.Param.QUANTITY, product.quantity.toLong()) + put(FirebaseAnalytics.Param.ITEM_ID, product.sku) + put(FirebaseAnalytics.Param.ITEM_NAME, product.name) + put(FirebaseAnalytics.Param.PRICE, product.unitPrice) + product.category?.let { put(FirebaseAnalytics.Param.ITEM_CATEGORY, it) } + product.brand?.let { put(FirebaseAnalytics.Param.ITEM_BRAND, it) } + product.position?.let { put(FirebaseAnalytics.Param.INDEX, it) } + product.customAttributes?.let { + for ((key, value) in it) { + put(key, value) + } + } + } + + private fun getValue(commerceEvent: CommerceEvent): Double? { + var value = 0.0 + val products = commerceEvent.products ?: return null + for (product in products) { + value += product.quantity * product.unitPrice + } + return value + } + + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + standardizeName(key, false)?.let { + FirebaseAnalytics.getInstance(context).setUserProperty( + it, + value, + ) + } + } + + override fun onRemoveUserAttribute( + key: String, + filteredMParticleUser: FilteredMParticleUser, + ) { + standardizeName(key, false)?.let { + FirebaseAnalytics.getInstance(context).setUserProperty( + it, + null, + ) + } + } + + /** + * We are going to ignore Lists here, since Firebase only supports String "user property" values + */ + override fun onSetUserAttribute( + key: String, + value: Any, + filteredMParticleUser: FilteredMParticleUser, + ) { + if (value is String) { + standardizeName(key, false)?.let { + FirebaseAnalytics.getInstance(context).setUserProperty( + it, + standardizeValue(value, false), + ) + } + } + } + + override fun onSetUserTag( + s: String, + filteredMParticleUser: FilteredMParticleUser, + ) {} + + override fun onSetUserAttributeList( + s: String, + list: List, + filteredMParticleUser: FilteredMParticleUser, + ) { + } + + override fun onSetAllUserAttributes( + userAttributesIn: Map, + userAttributeLists: Map>?, + filteredMParticleUser: FilteredMParticleUser?, + ) { + var userAttributes: Map? = userAttributesIn + userAttributes = standardizeAttributes(userAttributes, false) + if (userAttributes != null) { + for ((key, value) in userAttributes) { + FirebaseAnalytics.getInstance(context).setUserProperty(key, value) + } + } + } + + override fun supportsAttributeLists(): Boolean = false + + private fun parseToNestedMap(jsonString: String): Map { + val topLevelMap = mutableMapOf() + try { + val jsonObject = JSONObject(jsonString) + + for (key in jsonObject.keys()) { + val value = jsonObject.get(key) + if (value is JSONObject) { + topLevelMap[key] = parseToNestedMap(value.toString()) + } else { + topLevelMap[key] = value + } + } + } catch (e: Exception) { + Logger.error( + e, + "Google Analytics 4 kit was unable to parse the user's ConsentState, consent may not be set correctly on the Google Analytics SDK", + ) + } + return topLevelMap + } + + private fun searchKeyInNestedMap( + map: Map<*, *>, + key: Any, + ): Any? { + if (map.isNullOrEmpty()) { + return null + } + try { + for ((mapKey, mapValue) in map) { + if (mapKey.toString().equals(key.toString(), ignoreCase = true)) { + return mapValue + } + if (mapValue is Map<*, *>) { + val foundValue = searchKeyInNestedMap(mapValue, key) + if (foundValue != null) { + return foundValue + } + } + } + } catch (e: Exception) { + Logger.error( + e, + "The Google Analytics 4 kit threw an exception while searching for the configured consent purpose mapping in the current user's consent status.", + ) + } + return null + } + + override fun onConsentStateUpdated( + consentState: ConsentState, + consentState1: ConsentState, + filteredMParticleUser: FilteredMParticleUser, + ) { + setConsent(consentState1) + } + + private fun setConsent(consentState: ConsentState) { + val consentMap: MutableMap = + EnumMap( + FirebaseAnalytics.ConsentType::class.java, + ) + googleConsentMapSettings.forEach { it -> + val mpConsentSetting = settings[it.value] + if (!mpConsentSetting.isNullOrEmpty()) { + if (mpConsentSetting == GoogleConsentValues.GRANTED.consentValue) { + consentMap[it.key] = FirebaseAnalytics.ConsentStatus.GRANTED + } else if (mpConsentSetting == GoogleConsentValues.DENIED.consentValue) { + consentMap[it.key] = FirebaseAnalytics.ConsentStatus.DENIED + } + } + } + + val clientConsentSettings = parseToNestedMap(consentState.toString()) + + parseConsentMapping(settings[CONSENT_MAPPING_SDK]).iterator().forEach { currentConsent -> + + val isConsentAvailable = + searchKeyInNestedMap(clientConsentSettings, key = currentConsent.key) + + if (isConsentAvailable != null) { + val isConsentGranted: Boolean = + JSONObject(isConsentAvailable.toString()).opt("consented") as Boolean + val consentStatus = + if (isConsentGranted) FirebaseAnalytics.ConsentStatus.GRANTED else FirebaseAnalytics.ConsentStatus.DENIED + + when (currentConsent.value) { + "ad_storage" -> + consentMap[FirebaseAnalytics.ConsentType.AD_STORAGE] = + consentStatus + + "ad_user_data" -> + consentMap[FirebaseAnalytics.ConsentType.AD_USER_DATA] = + consentStatus + + "ad_personalization" -> + consentMap[FirebaseAnalytics.ConsentType.AD_PERSONALIZATION] = + consentStatus + + "analytics_storage" -> + consentMap[FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE] = + consentStatus + } + } + } + if (consentMap.isNotEmpty()) { + FirebaseAnalytics.getInstance(context).setConsent(consentMap) + } + } + + private fun parseConsentMapping(json: String?): Map { + if (json.isNullOrEmpty()) { + return emptyMap() + } + val jsonWithFormat = json.replace("\\", "") + + return try { + JSONArray(jsonWithFormat) + .let { jsonArray -> + (0 until jsonArray.length()) + .associate { + val jsonObject = jsonArray.getJSONObject(it) + val map = jsonObject.getString("map") + val value = jsonObject.getString("value") + map to value + } + } + } catch (jse: JSONException) { + Logger.error( + jse, + "The Google Analytics 4 kit threw an exception while searching for the configured consent purpose mapping in the current user's consent status.", + ) + emptyMap() + } + } + + private fun standardizeAttributes( + attributes: Map?, + event: Boolean, + ): Map? { + if (attributes == null) { + return null + } + val attributeCopy = HashMap() + for ((key, value) in attributes) { + standardizeName(key, event)?.let { + attributeCopy[it] = standardizeValue(value, event) + } + } + limitAttributes(attributeCopy, EVENT_MAX_PARAMETER_PROPERTY) + return attributeCopy + } + + private fun limitAttributes( + attributeCopy: HashMap, + maxCount: Int, + ) { + if (!attributeCopy.isNullOrEmpty() && attributeCopy.size > maxCount) { + val dictionaryKeys = ArrayList(attributeCopy.keys) + dictionaryKeys.sortWith(String.CASE_INSENSITIVE_ORDER) + for (i in maxCount until dictionaryKeys.size) { + attributeCopy.remove(dictionaryKeys[i]) + } + } + } + + fun standardizeValue( + valueIn: String?, + event: Boolean, + ): String { + var value = valueIn ?: return "" + if (event) { + if (value.length > EVENT_VAL_MAX_LENGTH) { + value = value.substring(0, EVENT_VAL_MAX_LENGTH) + } + } else { + if (value.length > USER_ATTRIBUTE_VAL_MAX_LENGTH) { + value = value.substring(0, USER_ATTRIBUTE_VAL_MAX_LENGTH) + } + } + return value + } + + fun standardizeName( + nameIn: String?, + event: Boolean, + ): String? { + var name = nameIn ?: return INVALID_GA4_KEY + clientStandardizationCallback?.let { name = it.nameStandardization(name) } + + if (event) { + name = name.replace("[^a-zA-Z0-9_]".toRegex(), "_") + for (forbiddenPrefix in forbiddenPrefixes) { + if (name.startsWith(forbiddenPrefix)) { + name = name.replaceFirst(forbiddenPrefix.toRegex(), "") + } + } + while (name.isNotEmpty() && !Character.isLetter(name.toCharArray()[0])) { + name = name.substring(1) + } + } + if (event) { + if (name.length > EVENT_MAX_LENGTH) { + name = name.substring(0, EVENT_MAX_LENGTH) + } + } else { + if (name.length > USER_ATTRIBUTE_MAX_LENGTH) { + name = name.substring(0, USER_ATTRIBUTE_MAX_LENGTH) + } + } + if (name.isNotEmpty()) { + return name + } else { + return INVALID_GA4_KEY + } + } + + class PickyBundle { + val bundle = Bundle() + + fun putString( + key: String, + value: String?, + ): PickyBundle { + if (value != null) { + bundle.putString(key, value) + } + return this + } + + fun putDouble( + key: String, + value: Double?, + ): PickyBundle { + if (value != null) { + bundle.putDouble(key, value) + } + return this + } + + fun putLong( + key: String, + value: Long?, + ): PickyBundle { + if (value != null) { + bundle.putLong(key, value) + } + return this + } + + fun putInt( + key: String, + value: Int?, + ): PickyBundle { + if (value != null) { + bundle.putInt(key, value) + } + return this + } + + fun putBundleList( + key: String, + value: Array?, + ): PickyBundle { + value?.let { + if (it.isNotEmpty()) { + bundle.putParcelableArray(key, value) + } + } + return this + } + } + + companion object { + private var clientStandardizationCallback: MPClientStandardization? = null + + @JvmStatic + fun setClientStandardizationCallback(standardizationCallback: MPClientStandardization?) { + clientStandardizationCallback = standardizationCallback + } + + const val SHOULD_HASH_USER_ID = "hashUserId" + const val FORWARD_REQUESTS_SERVER_SIDE = "forwardWebRequestsServerSide" + const val EXTERNAL_USER_IDENTITY_TYPE = "externalUserIdentityType" + const val EXTERNAL_USER_IDENTITY_CUSTOMER_ID = "CustomerId" + const val EXTERNAL_USER_IDENTITY_MPID = "mpid" + const val EXTERNAL_USER_IDENTITY_OTHER = "Other" + const val EXTERNAL_USER_IDENTITY_OTHER2 = "Other2" + const val EXTERNAL_USER_IDENTITY_OTHER3 = "Other3" + const val EXTERNAL_USER_IDENTITY_OTHER4 = "Other4" + const val EXTERNAL_USER_IDENTITY_OTHER5 = "Other5" + const val EXTERNAL_USER_IDENTITY_OTHER6 = "Other6" + const val EXTERNAL_USER_IDENTITY_OTHER7 = "Other7" + const val EXTERNAL_USER_IDENTITY_OTHER8 = "Other8" + const val EXTERNAL_USER_IDENTITY_OTHER9 = "Other9" + const val EXTERNAL_USER_IDENTITY_OTHER10 = "Other10" + const val CF_GA4COMMERCE_EVENT_TYPE = "GA4.CommerceEventType" + const val CF_GA4_PAYMENT_TYPE = "GA4.PaymentType" + const val CF_GA4_SHIPPING_TIER = "GA4.ShippingTier" + const val WARNING_MESSAGE = + "GA4 no longer supports CHECKOUT_OPTION. To specify a different eventName, add CF_GA4COMMERCE_EVENT_TYPE to your customFlags with a valid value" + private const val INSTANCE_ID_INTEGRATION_KEY = "app_instance_id" + private val forbiddenPrefixes = arrayOf("google_", "firebase_", "ga_") + private const val EVENT_MAX_LENGTH = 40 + private const val USER_ATTRIBUTE_MAX_LENGTH = 24 + + // Following limits are based off Google Analytics 360 limits, docs here "https://support.google.com/analytics/answer/11202874?sjid=14644072134282618832-NA#limits" + private const val EVENT_VAL_MAX_LENGTH = 500 + private const val USER_ATTRIBUTE_VAL_MAX_LENGTH = 36 + private const val EVENT_MAX_PARAMETER_PROPERTY = 100 + private const val ITEM_MAX_PARAMETER = 25 + private const val INVALID_GA4_KEY = "invalid_ga4_key" + private const val KIT_NAME = "GA4 for Firebase" + private const val CURRENCY_FIELD_NOT_SET = + "Currency field required by Firebase was not set, defaulting to 'USD'" + private const val USD = "USD" + + // Constants for Read Consent + private const val CONSENT_MAPPING_SDK = "consentMappingSDK" + + enum class GoogleConsentValues( + val consentValue: String, + ) { + GRANTED("Granted"), + DENIED("Denied"), + } + + val googleConsentMapSettings = + mapOf( + FirebaseAnalytics.ConsentType.AD_STORAGE to "defaultAdStorageConsentSDK", + FirebaseAnalytics.ConsentType.AD_USER_DATA to "defaultAdUserDataConsentSDK", + FirebaseAnalytics.ConsentType.AD_PERSONALIZATION to "defaultAdPersonalizationConsentSDK", + FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE to "defaultAnalyticsStorageConsentSDK", + ) + } + + public interface MPClientStandardization { + fun nameStandardization(name: String): String + } +} diff --git a/kits/ga4/ga4-23/src/test/kotlin/android/os/Bundle.kt b/kits/ga4/ga4-23/src/test/kotlin/android/os/Bundle.kt new file mode 100644 index 000000000..b9078a76c --- /dev/null +++ b/kits/ga4/ga4-23/src/test/kotlin/android/os/Bundle.kt @@ -0,0 +1,55 @@ +package android.os + +class Bundle : Parcelable { + var map = HashMap() + + operator fun get(key: String): Any? = map[key] + + fun putString( + key: String, + value: String, + ) { + map[key] = value + } + + fun putDouble( + key: String, + value: Double, + ) { + map[key] = value + } + + fun putLong( + key: String, + value: Long, + ) { + map[key] = value + } + + fun putInt( + key: String, + value: Int, + ) { + map[key] = value + } + + fun putParcelableArray( + key: String, + value: Array, + ) { + map[key] = value + } + + fun getDouble(key: String): Double = map[key] as Double + + fun getString(key: String): String? = map[key] as String? + + fun size(): Int = map.keys.size + + override fun describeContents(): Int = 0 + + override fun writeToParcel( + dest: Parcel, + flags: Int, + ) {} +} diff --git a/kits/ga4/ga4-23/src/test/kotlin/com/google/android/gms/tasks/OnSuccessListener.kt b/kits/ga4/ga4-23/src/test/kotlin/com/google/android/gms/tasks/OnSuccessListener.kt new file mode 100644 index 000000000..7988ceac6 --- /dev/null +++ b/kits/ga4/ga4-23/src/test/kotlin/com/google/android/gms/tasks/OnSuccessListener.kt @@ -0,0 +1,5 @@ +package com.google.android.gms.tasks + +interface OnSuccessListener { + fun onSuccess(var1: TResult) +} diff --git a/kits/ga4/ga4-23/src/test/kotlin/com/google/firebase/analytics/FirebaseAnalytics.kt b/kits/ga4/ga4-23/src/test/kotlin/com/google/firebase/analytics/FirebaseAnalytics.kt new file mode 100644 index 000000000..1694c26e5 --- /dev/null +++ b/kits/ga4/ga4-23/src/test/kotlin/com/google/firebase/analytics/FirebaseAnalytics.kt @@ -0,0 +1,74 @@ +package com.google.firebase.analytics + +import android.app.Activity +import android.content.Context +import android.os.Bundle +import java.util.AbstractMap.SimpleEntry +import java.util.LinkedList + +class FirebaseAnalytics { + var loggedEvents: LinkedList> = LinkedList() + var currentScreenName: String? = null + var consentStateMap: MutableMap = mutableMapOf() + + object Event { + const val ADD_PAYMENT_INFO = "add_payment_info" + const val ADD_SHIPPING_INFO = "add_shipping_info" + } + + fun logEvent( + key: String, + bundle: Bundle, + ) { + loggedEvents.add(SimpleEntry(key, bundle)) + } + + fun setCurrentScreen( + currentActivity: Activity?, + screenName: String?, + classOverride: String?, + ) { + currentScreenName = screenName + } + + fun setConsent(var1: MutableMap) { + consentStateMap.putAll(var1) + } + + fun getConsentState(): MutableMap = consentStateMap + + fun setUserProperty( + key: String?, + value: String?, + ) {} + + fun getLoggedEvents(): List> = loggedEvents + + fun clearLoggedEvents() { + loggedEvents = LinkedList() + } + + companion object { + var firebaseInstanceId: String? = null + var instance: FirebaseAnalytics? = null + + @JvmStatic + fun getInstance(context: Context?): FirebaseAnalytics? { + if (instance == null) { + instance = FirebaseAnalytics() + } + return instance + } + + /** + * Access Methods + */ + fun clearInstance() { + instance = null + } + + fun setFirebaseId(firebaseId: String?) { + firebaseInstanceId = firebaseId + } + } +} diff --git a/kits/ga4/ga4-23/src/test/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseGA4KitTest.kt b/kits/ga4/ga4-23/src/test/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseGA4KitTest.kt new file mode 100644 index 000000000..240f701a0 --- /dev/null +++ b/kits/ga4/ga4-23/src/test/kotlin/com/mparticle/kits/GoogleAnalyticsFirebaseGA4KitTest.kt @@ -0,0 +1,1267 @@ +package com.mparticle.kits + +import android.app.Activity +import android.content.Context +import android.net.Uri +import android.os.Bundle +import com.google.firebase.analytics.FirebaseAnalytics +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticleOptions +import com.mparticle.MParticleOptions.DataplanOptions +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Impression +import com.mparticle.commerce.Product +import com.mparticle.commerce.Promotion +import com.mparticle.commerce.TransactionAttributes +import com.mparticle.consent.ConsentState +import com.mparticle.consent.GDPRConsent +import com.mparticle.identity.IdentityApi +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.CoreCallbacks +import com.mparticle.internal.CoreCallbacks.KitListener +import com.mparticle.testutils.TestingUtils +import junit.framework.TestCase +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.Mockito.mock +import org.mockito.MockitoAnnotations +import java.lang.ref.WeakReference +import java.lang.reflect.Method +import java.lang.reflect.Modifier +import java.util.HashMap +import java.util.Random + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see [Testing documentation](http://d.android.com/tools/testing) + */ +class GoogleAnalyticsFirebaseGA4KitTest { + private lateinit var kitInstance: GoogleAnalyticsFirebaseGA4Kit + private lateinit var firebaseSdk: FirebaseAnalytics + + @Mock + lateinit var user: MParticleUser + + @Mock + lateinit var filteredMParticleUser: FilteredMParticleUser + + private var random = Random() + + @Before + @Throws(JSONException::class) + fun before() { + FirebaseAnalytics.clearInstance() + FirebaseAnalytics.setFirebaseId("firebaseId") + kitInstance = GoogleAnalyticsFirebaseGA4Kit() + MockitoAnnotations.initMocks(this) + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + Mockito.`when`(MParticle.getInstance()?.Identity()).thenReturn( + Mockito.mock( + IdentityApi::class.java, + ), + ) + val kitManager = + KitManagerImpl( + Mockito.mock( + Context::class.java, + ), + null, + emptyCoreCallbacks, + mock(MParticleOptions::class.java), + ) + kitInstance.kitManager = kitManager + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("id", "-1")) + firebaseSdk = FirebaseAnalytics.getInstance(null)!! + GoogleAnalyticsFirebaseGA4Kit.setClientStandardizationCallback(null) + } + + /** + * make sure that all MPEvents are getting translating their getInfo() value to the bundle of the Firebase event. + * MPEvent.getName() should be the firebase event name in all cases, except when the MPEvent.type is MPEvent.Search + */ + @Test + fun testEmptyEvent() { + kitInstance.logEvent(MPEvent.Builder("eventName", MParticle.EventType.Other).build()) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + var firebaseEvent = firebaseSdk.loggedEvents[0] + TestCase.assertEquals("eventName", firebaseEvent.key) + TestCase.assertEquals(0, firebaseEvent.value.size()) + + for (i in 0..9) { + val event = TestingUtils.getInstance().randomMPEventRich + firebaseSdk.clearLoggedEvents() + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + firebaseEvent = firebaseSdk.loggedEvents[0] + if (event.eventType != MParticle.EventType.Search) { + TestCase.assertEquals( + kitInstance.standardizeName(event.eventName, true), + firebaseEvent.key, + ) + } else { + TestCase.assertEquals("search", firebaseEvent.key) + } + event.customAttributeStrings?.let { + TestCase.assertEquals( + it.size, + firebaseEvent.value.size(), + ) + for (customAttEvent in it) { + val key = kitInstance.standardizeName(customAttEvent.key, true) + val value = kitInstance.standardizeValue(customAttEvent.value, true) + if (key != null) { + TestCase.assertEquals( + value, + firebaseEvent.value.getString( + key, + ), + ) + } + } + } + } + } + + @Test + fun testPromotionCommerceEvent() { + val promotion = Promotion() + promotion.creative = "asdva" + promotion.id = "1234" + promotion.name = "1234asvd" + promotion.position = "2" + val event = CommerceEvent.Builder(Promotion.CLICK, promotion).build() + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + } + + @Test + fun onConsentStateUpdatedTest() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("DENIED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("DENIED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_Marketing_true() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("DENIED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_Performance_true() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val performanceConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("DENIED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_Performance_false() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val performanceConsent = + GDPRConsent + .builder(false) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("DENIED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("DENIED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTestPerformance_And_Marketing_are_true() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue4) + } + + @Test + fun onConsentStateUpdatedTest_When_No_Defaults_Values() { + val map = HashMap() + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue2) + TestCase.assertEquals(2, firebaseSdk.getConsentState().size) + } + + @Test + fun onConsentStateUpdatedTest_When_No_DATA_From_Server() { + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + TestCase.assertEquals(0, firebaseSdk.getConsentState().size) + } + + @Test + fun onConsentStateUpdatedTest_No_consentMappingSDK() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Granted" + map["defaultAnalyticsStorageConsentSDK"] = "Granted" + map["defaultAdUserDataConsentSDK"] = "Denied" + map["defaultAdPersonalizationConsentSDK"] = "Denied" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("ANALYTICS_STORAGE").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue2) + val expectedConsentValue3 = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("DENIED", expectedConsentValue3) + val expectedConsentValue4 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("DENIED", expectedConsentValue4) + TestCase.assertEquals(4, firebaseSdk.getConsentState().size) + } + + @Test + fun onConsentStateUpdatedTest_When_default_is_Unspecified_And_No_consentMappingSDK() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Unspecified" + map["defaultAnalyticsStorageConsentSDK"] = "Unspecified" + map["defaultAdUserDataConsentSDK"] = "Unspecified" + map["defaultAdPersonalizationConsentSDK"] = "Unspecified" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + TestCase.assertEquals(0, firebaseSdk.getConsentState().size) + } + + @Test + fun onConsentStateUpdatedTest_When_default_is_Unspecified() { + val map = HashMap() + map["defaultAdStorageConsentSDK"] = "Unspecified" + map["defaultAnalyticsStorageConsentSDK"] = "Unspecified" + map["consentMappingSDK"] = + "[{\\\"jsmap\\\":null,\\\"map\\\":\\\"Performance\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_user_data\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"Marketing\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_personalization\\\"},{\\\"jsmap\\\":null,\\\"map\\\":\\\"testconsent\\\",\\\"maptype\\\":\\\"ConsentPurposes\\\",\\\"value\\\":\\\"ad_storage\\\"}]" + map["defaultAdUserDataConsentSDK"] = "Unspecified" + map["defaultAdPersonalizationConsentSDK"] = "Unspecified" + + kitInstance.configuration = + KitConfiguration.createKitConfiguration(JSONObject().put("as", map.toMutableMap())) + + val marketingConsent = + GDPRConsent + .builder(true) + .document("Test consent") + .location("17 Cherry Tree Lane") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + + val performanceConsent = + GDPRConsent + .builder(true) + .document("parental_consent_agreement_v2") + .location("17 Cherry Tree Lan 3") + .hardwareId("IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702") + .build() + val state = + ConsentState + .builder() + .addGDPRConsentState("Marketing", marketingConsent) + .addGDPRConsentState("Performance", performanceConsent) + .build() + filteredMParticleUser = FilteredMParticleUser.getInstance(user, kitInstance) + + kitInstance.onConsentStateUpdated(state, state, filteredMParticleUser) + + val expectedConsentValue = + firebaseSdk.getConsentState().getKeyByValue("AD_USER_DATA").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue) + val expectedConsentValue2 = + firebaseSdk.getConsentState().getKeyByValue("AD_PERSONALIZATION").toString() + TestCase.assertEquals("GRANTED", expectedConsentValue2) + TestCase.assertEquals(2, firebaseSdk.getConsentState().size) + } + + fun MutableMap.getKeyByValue(inputKey: String): Any? { + for ((key, mapValue) in entries) { + if (key.toString() == inputKey) { + return mapValue + } + } + return null + } + + @Test + fun testParseToNestedMap_When_JSON_Is_INVALID() { + var jsonInput = + "{'GDPR':{'marketing':'{:false,'timestamp':1711038269644:'Test consent','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}','performance':'{'consented':true,'timestamp':1711038269644,'document':'parental_consent_agreement_v2','location':'17 Cherry Tree Lan 3','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'},'CCPA':'{'consented':true,'timestamp':1711038269644,'document':'ccpa_consent_agreement_v3','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}" + + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "parseToNestedMap", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, jsonInput) + Assert.assertEquals(mutableMapOf(), result) + } + + @Test + fun testParseToNestedMap_When_JSON_Is_Empty() { + var jsonInput = "" + + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "parseToNestedMap", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, jsonInput) + Assert.assertEquals(mutableMapOf(), result) + } + + @Test + fun testSearchKeyInNestedMap_When_Input_Key_Is_Empty_String() { + val map = + mapOf( + "GDPR" to true, + "marketing" to + mapOf( + "consented" to false, + "document" to + mapOf( + "timestamp" to 1711038269644, + ), + ), + ) + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "searchKeyInNestedMap", + Map::class.java, + Any::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, map, "") + Assert.assertEquals(null, result) + } + + @Test + fun testSearchKeyInNestedMap_When_Input_Is_Empty_Map() { + val emptyMap: Map = emptyMap() + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "searchKeyInNestedMap", + Map::class.java, + Any::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, emptyMap, "1") + Assert.assertEquals(null, result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_Empty_Json() { + val emptyJson = "" + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, emptyJson) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_Invalid_Json() { + var jsonInput = + "{'GDPR':{'marketing':'{:false,'timestamp':1711038269644:'Test consent','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}','performance':'{'consented':true,'timestamp':1711038269644,'document':'parental_consent_agreement_v2','location':'17 Cherry Tree Lan 3','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'},'CCPA':'{'consented':true,'timestamp':1711038269644,'document':'ccpa_consent_agreement_v3','location':'17 Cherry Tree Lane','hardware_id':'IDFA:a5d934n0-232f-4afc-2e9a-3832d95zc702'}'}" + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, jsonInput) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testParseConsentMapping_When_Input_Is_NULL() { + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "parseConsentMapping", + String::class.java, + ) + method.isAccessible = true + val result = method.invoke(kitInstance, null) + Assert.assertEquals(emptyMap(), result) + } + + @Test + fun testShippingInfoCommerceEvent() { + val event = + CommerceEvent + .Builder( + Product.CHECKOUT_OPTION, + Product.Builder("asdv", "asdv", 1.3).build(), + ).addCustomFlag( + "GA4.CommerceEventType", + FirebaseAnalytics.Event.ADD_SHIPPING_INFO, + ).addCustomFlag("GA4.ShippingTier", "overnight") + .build() + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + TestCase.assertEquals("add_shipping_info", firebaseSdk.loggedEvents[0].key) + TestCase.assertEquals( + "overnight", + firebaseSdk.loggedEvents[0].value.getString("shipping_tier"), + ) + } + + @Test + fun testPaymentInfoCommerceEvent() { + val commerceCustomAttributes = + mapOf( + "event::country" to "US", + ) + val event = + CommerceEvent + .Builder( + Product.CHECKOUT_OPTION, + Product.Builder("asdv", "asdv", 1.3).build(), + ).addCustomFlag( + "GA4.CommerceEventType", + FirebaseAnalytics.Event.ADD_PAYMENT_INFO, + ).addCustomFlag("GA4.PaymentType", "visa") + .build() + event.customAttributes = commerceCustomAttributes + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + TestCase.assertEquals("add_payment_info", firebaseSdk.loggedEvents[0].key) + TestCase.assertEquals("visa", firebaseSdk.loggedEvents[0].value.getString("payment_type")) + TestCase.assertEquals("US", firebaseSdk.loggedEvents[0].value.getString("event__country")) + } + + @Test + fun testCheckoutOptionCommerceEvent() { + val customEventTypes = + arrayOf( + FirebaseAnalytics.Event.ADD_PAYMENT_INFO, + FirebaseAnalytics.Event.ADD_SHIPPING_INFO, + ) + for (customEventType in customEventTypes) { + val event = + CommerceEvent + .Builder( + Product.CHECKOUT_OPTION, + Product.Builder("asdv", "asdv", 1.3).build(), + ).addCustomFlag( + "GA4.CommerceEventType", + customEventType, + ).build() + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + TestCase.assertEquals(customEventType, firebaseSdk.loggedEvents[0].key) + firebaseSdk.clearLoggedEvents() + } + } + + @Test + @Throws(IllegalAccessException::class) + fun testCommerceEvent() { + for (field in Product::class.java.fields) { + if (Modifier.isPublic(field.modifiers) && Modifier.isStatic(field.modifiers)) { + firebaseSdk.clearLoggedEvents() + val eventType = field?.get(null).toString() + if (eventType != "remove_from_wishlist" && eventType != "checkout_option") { + val event = + CommerceEvent + .Builder( + eventType, + Product.Builder("asdv", "asdv", 1.3).build(), + ).transactionAttributes( + TransactionAttributes() + .setId("235") + .setRevenue(23.3) + .setAffiliation("231"), + ).build() + kitInstance.logEvent(event) + TestCase.assertEquals( + "failed for event type: $eventType", + 1, + firebaseSdk.loggedEvents.size, + ) + } + } + } + } + + @Test + fun testNameStandardization() { + val badPrefixes = arrayOf("firebase_event_name", "google_event_name", "ga_event_name") + for (badPrefix in badPrefixes) { + val clean = kitInstance.standardizeName(badPrefix, true) + TestCase.assertEquals("event_name", clean) + } + val emptySpace1 = "event name" + val emptySpace2 = "event_name " + val emptySpace3 = "event name " + val emptySpace4 = "event - name " + TestCase.assertEquals( + "event_name", + kitInstance.standardizeName(emptySpace1, true), + ) + TestCase.assertEquals( + "event_name_", + kitInstance.standardizeName(emptySpace2, true), + ) + TestCase.assertEquals( + "event__name_", + kitInstance.standardizeName(emptySpace3, true), + ) + TestCase.assertEquals( + "event___name_", + kitInstance.standardizeName(emptySpace4, true), + ) + TestCase.assertEquals( + "event_name ", + kitInstance.standardizeName(emptySpace2, false), + ) + TestCase.assertEquals( + "event name ", + kitInstance.standardizeName(emptySpace3, false), + ) + TestCase.assertEquals( + "event - name ", + kitInstance.standardizeName(emptySpace4, false), + ) + TestCase.assertEquals( + "!event - name !", + kitInstance.standardizeName("!event - name !", false), + ) + TestCase.assertEquals( + "!@#\$%^&*()_+=[]{}|'\"?>", + kitInstance.standardizeName("!@#\$%^&*()_+=[]{}|'\"?>", false), + ) + + val badStarts = + arrayOf( + "!@#$%^&*()_+=[]{}|'\"?><:;event_name", + "_event_name", + " event_name", + "_event_name", + ) + for (badStart in badStarts) { + val clean = kitInstance.standardizeName(badStart, true) + TestCase.assertEquals("event_name", clean) + } + val justFine = + "abcdefghijklmnopqrstuvwx" + var sanitized: String = kitInstance.standardizeName(justFine, true).toString() + TestCase.assertEquals(24, sanitized.length) + TestCase.assertTrue(justFine.startsWith(sanitized)) + sanitized = kitInstance.standardizeName(justFine, false).toString() + TestCase.assertEquals(24, sanitized.length) + TestCase.assertTrue(justFine.startsWith(sanitized)) + sanitized = kitInstance.standardizeValue(justFine, true) + TestCase.assertEquals(24, sanitized.length) + TestCase.assertTrue(justFine.startsWith(sanitized)) + sanitized = kitInstance.standardizeValue(justFine, false) + TestCase.assertEquals(24, sanitized.length) + TestCase.assertTrue(justFine.startsWith(sanitized)) + + val tooLong = + "abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890" + sanitized = kitInstance.standardizeName(tooLong, true).toString() + TestCase.assertEquals(40, sanitized.length) + TestCase.assertTrue(tooLong.startsWith(sanitized)) + sanitized = kitInstance.standardizeName(tooLong, false).toString() + TestCase.assertEquals(24, sanitized.length) + TestCase.assertTrue(tooLong.startsWith(sanitized)) + sanitized = kitInstance.standardizeValue(tooLong, true) + TestCase.assertEquals(500, sanitized.length) + TestCase.assertTrue(tooLong.startsWith(sanitized)) + sanitized = kitInstance.standardizeValue(tooLong, false) + TestCase.assertEquals(36, sanitized.length) + TestCase.assertTrue(tooLong.startsWith(sanitized)) + + val emptyStrings = + arrayOf( + "!@#$%^&*()_+=[]{}|'\"?><:;", + "_1234567890", + " ", + "", + ) + for (emptyString in emptyStrings) { + val empty = kitInstance.standardizeName(emptyString, true) + TestCase.assertEquals("invalid_ga4_key", empty) + } + + var callback = + object : GoogleAnalyticsFirebaseGA4Kit.MPClientStandardization { + override fun nameStandardization(name: String): String = "test" + } + + GoogleAnalyticsFirebaseGA4Kit.setClientStandardizationCallback(callback) + + val clientTestStrings = + arrayOf( + "this", + "is", + "not", + "a", + "test", + ) + for (clientString in clientTestStrings) { + val client = kitInstance.standardizeName(clientString, true) + TestCase.assertEquals("test", client) + } + + var callbackCheck = + object : GoogleAnalyticsFirebaseGA4Kit.MPClientStandardization { + override fun nameStandardization(name: String): String = name + } + + GoogleAnalyticsFirebaseGA4Kit.setClientStandardizationCallback(callbackCheck) + + val client = kitInstance.standardizeName("clientString", true) + TestCase.assertEquals("clientString", client) + } + + @Test + fun testMaxStandardization() { + val testSucccessAttributes = + mapOf( + "test1" to "parameter", + "test2" to "parameter", + "test3" to "parameter", + "test4" to "parameter", + "test5" to "parameter", + "test6" to "parameter", + "test7" to "parameter", + "test8" to "parameter", + "test9" to "parameter", + "test10" to "parameter", + "test11" to "parameter", + "test12" to "parameter", + "test13" to "parameter", + "test14" to "parameter", + "test15" to "parameter", + "test16" to "parameter", + "test17" to "parameter", + "test18" to "parameter", + "test19" to "parameter", + "test20" to "parameter", + "test21" to "parameter", + "test22" to "parameter", + "test23" to "parameter", + "event::country" to "US", + ) + val testTruncatedAttributes = + mapOf( + "test1" to "parameter", + "test2" to "parameter", + "test3" to "parameter", + "test4" to "parameter", + "test5" to "parameter", + "test6" to "parameter", + "test7" to "parameter", + "test8" to "parameter", + "test9" to "parameter", + "test10" to "parameter", + "test11" to "parameter", + "test12" to "parameter", + "test13" to "parameter", + "test14" to "parameter", + "test15" to "parameter", + "test16" to "parameter", + "test17" to "parameter", + "test18" to "parameter", + "test19" to "parameter", + "test20" to "parameter", + "test21" to "parameter", + "test22" to "parameter", + "test23" to "parameter", + "event::country" to "US", + "z1" to "parameter", + "z2" to "parameter", + "z3" to "parameter", + "z4" to "parameter", + ) + val testFinalAttributes = + mapOf( + "test1" to "parameter", + "test2" to "parameter", + "test3" to "parameter", + "test4" to "parameter", + "test5" to "parameter", + "test6" to "parameter", + "test7" to "parameter", + "test8" to "parameter", + "test9" to "parameter", + "test10" to "parameter", + "test11" to "parameter", + "test12" to "parameter", + "test13" to "parameter", + "test14" to "parameter", + "test15" to "parameter", + "test16" to "parameter", + "test17" to "parameter", + "test18" to "parameter", + "test19" to "parameter", + "test20" to "parameter", + "test21" to "parameter", + "test22" to "parameter", + "test23" to "parameter", + "event__country" to "US", + "currency" to "USD", + ) + val event = + CommerceEvent + .Builder( + Product.ADD_TO_CART, + Product.Builder("asdv", "asdv", 1.3).build(), + ).build() + event.customAttributes = testSucccessAttributes + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + TestCase.assertEquals( + testSucccessAttributes.size + 3, + firebaseSdk.loggedEvents[0].value.size(), + ) + firebaseSdk.clearLoggedEvents() + + event.customAttributes = testTruncatedAttributes + kitInstance.logEvent(event) + TestCase.assertEquals(1, firebaseSdk.loggedEvents.size) + TestCase.assertEquals( + testTruncatedAttributes.size + 3, + firebaseSdk.loggedEvents[0].value.size(), + ) + firebaseSdk.clearLoggedEvents() + } + + @Test + fun testProductCustomAttributes() { + val attributes = hashMapOf() + attributes["productCustomAttribute"] = "potato" + attributes["store"] = "Target" + val product = + Product + .Builder("expensivePotato", "SKU123", 40.00) + .quantity(1.0) + .brand("LV") + .category("vegetable") + .position(4) + .customAttributes(attributes) + .build() + + Impression("Suggested Products List", product) + .let { + CommerceEvent.Builder(it).build() + }.let { + kitInstance.logEvent(it) + } + val firebaseImpressionEvent = firebaseSdk.loggedEvents[0] + val firebaseProducts = firebaseImpressionEvent.value.get("items") as? Array + val firebaseProduct = firebaseProducts?.get(0) + + // test the count of parameters for product, even though we only pass 2 custom attributes we + // expect the total to be 9 to include name, price, quantity, sku, brand, category and position + TestCase.assertEquals( + 9, + firebaseProduct?.size(), + ) + } + + @Test + fun testStandardizeAttributes() { + val attributeCopy = + hashMapOf( + "test" to "test", + "test1" to "test1", + "test2" to "test2", + "test3" to "test4", + "test5" to "test5", + ) + val eventMaxParameterProperty = 3 + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "limitAttributes", + HashMap::class.java, + Int::class.javaPrimitiveType, + ) + method.isAccessible = true + + method.invoke(kitInstance, attributeCopy, eventMaxParameterProperty) + Assert.assertEquals(eventMaxParameterProperty, attributeCopy.size) + } + + @Test + fun testStandardizeAttributes_attribute_isNull() { + val attributeCopy = HashMap() + + val eventMaxParameterProperty = 3 + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "limitAttributes", + HashMap::class.java, + Int::class.javaPrimitiveType, + ) + method.isAccessible = true + method.invoke(kitInstance, null, eventMaxParameterProperty) + Assert.assertEquals(0, attributeCopy.size) + } + + @Test + fun testStandardizeAttributes_attribute_empty() { + val attributeCopy = HashMap() + val eventMaxParameterProperty = 3 + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "limitAttributes", + HashMap::class.java, + Int::class.javaPrimitiveType, + ) + method.isAccessible = true + method.invoke(kitInstance, attributeCopy, eventMaxParameterProperty) + Assert.assertEquals(0, attributeCopy.size) + } + + @Test + fun testStandardizeAttributes_attribute_less_than_max_size() { + val attributeCopy = + hashMapOf( + "test" to "test", + "test1" to "test1", + ) + val eventMaxParameterProperty = 3 + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "limitAttributes", + HashMap::class.java, + Int::class.javaPrimitiveType, + ) + method.isAccessible = true + method.invoke(kitInstance, attributeCopy, eventMaxParameterProperty) + Assert.assertEquals(2, attributeCopy.size) + } + + @Test + fun testStandardizeAttributes_attribute_equal_to_max_size() { + val attributeCopy = + hashMapOf( + "test" to "test", + "test1" to "test1", + "test2" to "test4", + ) + val eventMaxParameterProperty = 3 + val method: Method = + GoogleAnalyticsFirebaseGA4Kit::class.java.getDeclaredMethod( + "limitAttributes", + HashMap::class.java, + Int::class.javaPrimitiveType, + ) + method.isAccessible = true + method.invoke(kitInstance, attributeCopy, eventMaxParameterProperty) + Assert.assertEquals(eventMaxParameterProperty, attributeCopy.size) + } + + @Test + fun testScreenNameSanitized() { + kitInstance.logScreen("Some long Screen name", null) + val firebaseScreenViewEvent = firebaseSdk.loggedEvents[0] + TestCase.assertEquals( + "Some_long_Screen_name", + firebaseScreenViewEvent.value.getString("screen_name"), + ) + } + + @Test + fun testScreenNameAttributes() { + val attributes = hashMapOf() + attributes["testAttributeKey"] = "testAttributeValue" + kitInstance.logScreen("testScreenName", attributes) + val firebaseScreenViewEvent = firebaseSdk.loggedEvents[0] + // even though we are passing one attribute, it should contain two including the screen_name + TestCase.assertEquals( + 2, + firebaseScreenViewEvent.value.size(), + ) + // make sure the even name is correct with Firebase's constant SCREEN_NAME value + TestCase.assertEquals( + "screen_view", + firebaseScreenViewEvent.key, + ) + // make sure that the Params include the screenName value + TestCase.assertEquals( + "testScreenName", + firebaseScreenViewEvent.value.getString("screen_name"), + ) + } + + private var emptyCoreCallbacks: CoreCallbacks = + object : CoreCallbacks { + var activity = Activity() + + override fun isBackgrounded(): Boolean = false + + override fun getUserBucket(): Int = 0 + + override fun isEnabled(): Boolean = false + + override fun setIntegrationAttributes( + i: Int, + map: Map, + ) {} + + override fun getIntegrationAttributes(i: Int): Map? = null + + override fun getCurrentActivity(): WeakReference = WeakReference(activity) + + override fun getLatestKitConfiguration(): JSONArray? = null + + override fun getDataplanOptions(): DataplanOptions? = null + + override fun isPushEnabled(): Boolean = false + + override fun getPushSenderId(): String? = null + + override fun getPushInstanceId(): String? = null + + override fun getLaunchUri(): Uri? = null + + override fun getLaunchAction(): String? = null + + override fun getKitListener(): KitListener = + object : KitListener { + override fun kitFound(kitId: Int) {} + + override fun kitConfigReceived( + kitId: Int, + configuration: String?, + ) {} + + override fun kitExcluded( + kitId: Int, + reason: String?, + ) {} + + override fun kitStarted(kitId: Int) {} + + override fun onKitApiCalled( + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) {} + + override fun onKitApiCalled( + methodName: String?, + kitId: Int, + used: Boolean?, + vararg objects: Any?, + ) {} + } + } +} diff --git a/kits/googleanalyticsfirebasega4-kit b/kits/googleanalyticsfirebasega4-kit deleted file mode 160000 index 93bfe8be4..000000000 --- a/kits/googleanalyticsfirebasega4-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 93bfe8be4a6b2310207d735a412f5797de6713c4 diff --git a/settings-kits.gradle b/settings-kits.gradle index 8fb9903c8..7e70a694f 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -17,7 +17,7 @@ include ( ':kits:flurry-kit', ':kits:foresee-kit', ':kits:ga:ga-23', - ':kits:googleanalyticsfirebasega4-kit', + ':kits:ga4:ga4-23', ':kits:iterable-kit', ':kits:kochava-kit', ':kits:leanplum-kit', From ba2980d5784588c56efe0cfc8064daf9e2cfef62 Mon Sep 17 00:00:00 2001 From: denischilik Date: Mon, 9 Mar 2026 11:01:59 -0400 Subject: [PATCH 05/61] feat: Migrate Rokt kit (#659) * feat: migrate rokt-kit from submodule to regular directory * feat: relocate rokt-kit to kits/rokt/rokt * feat: add rokt to settings-kits.gradle, remove accidental kit adds Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/rokt-kit | 1 - kits/rokt/rokt/.editorconfig | 25 + kits/rokt/rokt/.run/Assemble.run.xml | 24 + kits/rokt/rokt/.run/Lint.run.xml | 25 + kits/rokt/rokt/.run/Test.run.xml | 24 + kits/rokt/rokt/LICENSE | 201 +++ kits/rokt/rokt/README.md | 23 + kits/rokt/rokt/build.gradle | 94 + kits/rokt/rokt/consumer-proguard.pro | 4 + kits/rokt/rokt/gradle.properties | 4 + .../rokt/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/rokt/rokt/gradlew | 234 +++ kits/rokt/rokt/gradlew.bat | 89 + kits/rokt/rokt/libs/java-json.jar | Bin 0 -> 84697 bytes kits/rokt/rokt/libs/testutils.aar | Bin 0 -> 47713 bytes kits/rokt/rokt/settings.gradle | 1 + kits/rokt/rokt/settings.gradle.kts | 2 + kits/rokt/rokt/src/main/AndroidManifest.xml | 1 + .../mparticle/kits/RoktConfigExtensions.kt | 38 + .../main/kotlin/com/mparticle/kits/RoktKit.kt | 505 ++++++ .../kotlin/com/mparticle/kits/RoktLayout.kt | 57 + .../kits/RoktConfigExtensionsTest.kt | 67 + .../kotlin/com/mparticle/kits/RoktKitTests.kt | 1506 +++++++++++++++++ .../mparticle/kits/mocks/MockApplication.kt | 34 + .../com/mparticle/kits/mocks/MockContext.kt | 359 ++++ .../kits/mocks/MockContextApplication.kt | 15 + .../kits/mocks/MockKitConfiguration.kt | 75 + .../kits/mocks/MockKitManagerImpl.kt | 47 + .../com/mparticle/kits/mocks/MockResources.kt | 31 + .../kits/mocks/MockSharedPreferences.kt | 53 + settings-kits.gradle | 2 +- 34 files changed, 3545 insertions(+), 5 deletions(-) delete mode 160000 kits/rokt-kit create mode 100644 kits/rokt/rokt/.editorconfig create mode 100644 kits/rokt/rokt/.run/Assemble.run.xml create mode 100644 kits/rokt/rokt/.run/Lint.run.xml create mode 100644 kits/rokt/rokt/.run/Test.run.xml create mode 100644 kits/rokt/rokt/LICENSE create mode 100644 kits/rokt/rokt/README.md create mode 100644 kits/rokt/rokt/build.gradle create mode 100755 kits/rokt/rokt/consumer-proguard.pro create mode 100644 kits/rokt/rokt/gradle.properties create mode 100644 kits/rokt/rokt/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/rokt/rokt/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/rokt/rokt/gradlew create mode 100644 kits/rokt/rokt/gradlew.bat create mode 100755 kits/rokt/rokt/libs/java-json.jar create mode 100644 kits/rokt/rokt/libs/testutils.aar create mode 100644 kits/rokt/rokt/settings.gradle create mode 100644 kits/rokt/rokt/settings.gradle.kts create mode 100755 kits/rokt/rokt/src/main/AndroidManifest.xml create mode 100644 kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktConfigExtensions.kt create mode 100644 kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKit.kt create mode 100644 kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayout.kt create mode 100644 kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktConfigExtensionsTest.kt create mode 100644 kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt create mode 100644 kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockApplication.kt create mode 100644 kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockContext.kt create mode 100644 kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockContextApplication.kt create mode 100644 kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt create mode 100644 kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockKitManagerImpl.kt create mode 100644 kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockResources.kt create mode 100644 kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockSharedPreferences.kt diff --git a/.gitmodules b/.gitmodules index 32ebfc39d..396e5c971 100644 --- a/.gitmodules +++ b/.gitmodules @@ -67,9 +67,6 @@ [submodule "kits/revealmobile-kit"] path = kits/revealmobile-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-revealmobile.git -[submodule "kits/rokt-kit"] - path = kits/rokt-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-rokt.git [submodule "kits/singular-kit"] path = kits/singular-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-singular.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index e5c8b535b..948e1d7a5 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -71,6 +71,7 @@ lint: - kits/braze/braze-38/** - kits/ga/ga-23/** - kits/ga4/ga4-23/** + - kits/rokt/rokt/** actions: enabled: - trunk-announce diff --git a/kits/rokt-kit b/kits/rokt-kit deleted file mode 160000 index cfd8174db..000000000 --- a/kits/rokt-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cfd8174db257484693247752bc094835916d4108 diff --git a/kits/rokt/rokt/.editorconfig b/kits/rokt/rokt/.editorconfig new file mode 100644 index 000000000..7b2c5be0b --- /dev/null +++ b/kits/rokt/rokt/.editorconfig @@ -0,0 +1,25 @@ +# https://editorconfig.org/ + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true +# don't set end_of_line; let correct git setting checkout the appropriate one for OS +charset = utf-8 + +[*.{json,yml,yaml,html,tf}] +indent_size = 2 +ij_json_array_wrapping = normal + +[*.{kt,kts}] +ktlint_code_style = intellij_idea +max_line_length = 120 +ij_kotlin_allow_trailing_comma = true +ij_kotlin_allow_trailing_comma_on_call_site = true + +[*Test.{kt,kts}] +ktlint_standard_max-line-length = disabled diff --git a/kits/rokt/rokt/.run/Assemble.run.xml b/kits/rokt/rokt/.run/Assemble.run.xml new file mode 100644 index 000000000..3b6dc5490 --- /dev/null +++ b/kits/rokt/rokt/.run/Assemble.run.xml @@ -0,0 +1,24 @@ + + + + + + + false + true + false + false + + + \ No newline at end of file diff --git a/kits/rokt/rokt/.run/Lint.run.xml b/kits/rokt/rokt/.run/Lint.run.xml new file mode 100644 index 000000000..da34f789d --- /dev/null +++ b/kits/rokt/rokt/.run/Lint.run.xml @@ -0,0 +1,25 @@ + + + + + + + false + true + false + true + + + \ No newline at end of file diff --git a/kits/rokt/rokt/.run/Test.run.xml b/kits/rokt/rokt/.run/Test.run.xml new file mode 100644 index 000000000..f9e8241e8 --- /dev/null +++ b/kits/rokt/rokt/.run/Test.run.xml @@ -0,0 +1,24 @@ + + + + + + + false + true + false + true + + + \ No newline at end of file diff --git a/kits/rokt/rokt/LICENSE b/kits/rokt/rokt/LICENSE new file mode 100644 index 000000000..261eeb9e9 --- /dev/null +++ b/kits/rokt/rokt/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/kits/rokt/rokt/README.md b/kits/rokt/rokt/README.md new file mode 100644 index 000000000..44c996a25 --- /dev/null +++ b/kits/rokt/rokt/README.md @@ -0,0 +1,23 @@ +## Rokt Kit Integration + +This repository contains the [Rokt](https://docs.rokt.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-rokt-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Rokt detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Rokt integration](https://docs.rokt.com/developers/integration-guides/android/overview) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) \ No newline at end of file diff --git a/kits/rokt/rokt/build.gradle b/kits/rokt/rokt/build.gradle new file mode 100644 index 000000000..4d49a2422 --- /dev/null +++ b/kits/rokt/rokt/build.gradle @@ -0,0 +1,94 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" + id "org.jetbrains.kotlin.plugin.compose" version "2.0.20" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-button" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.rokt' + defaultConfig { + minSdkVersion 21 + consumerProguardFiles 'consumer-proguard.pro' + } + lint { + disable "NullSafeMutableLiveData" + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } + testOptions { + unitTests.returnDefaultValues = true + unitTests.all { + jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] + jvmArgs += ['--add-opens', 'java.base/java.lang.reflect=ALL-UNNAMED'] + } + } + buildFeatures { + buildConfig = true + compose true + } +} + +repositories { + google() + mavenCentral() +} + +dependencies { + def composeBom = platform('androidx.compose:compose-bom:2023.10.01') + implementation composeBom + implementation 'androidx.annotation:annotation:1.5.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' + implementation 'androidx.compose.runtime:runtime' + api 'com.rokt:roktsdk:4.14.0' + + testImplementation files('libs/java-json.jar') + testImplementation 'com.squareup.assertj:assertj-android:1.2.0' + testImplementation ("io.mockk:mockk:1.13.4") + testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4' + compileOnly 'androidx.compose.ui:ui' + compileOnly 'androidx.compose.material:material' + compileOnly 'androidx.compose.ui:ui-tooling' +} + +ktlint { + android = true + reporters { + reporter "html" + } +} diff --git a/kits/rokt/rokt/consumer-proguard.pro b/kits/rokt/rokt/consumer-proguard.pro new file mode 100755 index 000000000..de7bcb44f --- /dev/null +++ b/kits/rokt/rokt/consumer-proguard.pro @@ -0,0 +1,4 @@ +# These are the proguard rules specified by the Button SDK's documentation + +-keep class com.google.android.gms.ads.identifier.** { *; } +-keep class com.rokt.** { *; } \ No newline at end of file diff --git a/kits/rokt/rokt/gradle.properties b/kits/rokt/rokt/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/rokt/rokt/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/rokt/rokt/gradle/wrapper/gradle-wrapper.jar b/kits/rokt/rokt/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/rokt/rokt/gradle/wrapper/gradle-wrapper.properties b/kits/rokt/rokt/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/rokt/rokt/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/rokt/rokt/gradlew b/kits/rokt/rokt/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/rokt/rokt/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/rokt/rokt/gradlew.bat b/kits/rokt/rokt/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/rokt/rokt/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/rokt/rokt/libs/java-json.jar b/kits/rokt/rokt/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 zcmaI61CS<7x9{82w#{kVwr$(CZQHgvZQHiZr#0<lEj94pwnM$%?;OHRG|J+GnR{|ja#{~ld4k9nECQL7_Ai?-G4FUoNq9h9i{VxUR zf6A2p+s5esDE{BZ^1=$z65^_A4Du3>^0PB?vh)l~2(t7v^Ro*rDom@aho>$KGV*lN z@=NYD;4oPiIHPzvR94`bXVkA26j-NNnwXhoXPC5JXXIDb4=zBLAOA5B@SfmK$$vic zukx>f!2ZXe5Zf>RKURSM^VZSDlJS2lqW*t&{##+=>gezvvVZ@M|Jo7ie|GdAGEp%( z22(p@SJ!+ET_;^l4E+foJ?-vhbMlyD8ItD5Mv^HHZyZ!!2Yhntd@YXZy{!9MJ40R< z{Hf&A)#61=DQj;^d+Ti_02?2lXao-HiZbgQ{2~$S2-LxBnsLw(v)>>T(W05%?6zhM zKDEn~ljW^Iga7lEZ+_cL-@xAmT|uz>AH4uE-UOZ|f=^sj1uZAFksve+TD81EL=S1am=mzPVArWEc#5sJBn1DawFkE=)>yq z8Zdie8|gi~47YufbvAOadu#p!2RHBE--~xyPA4+Vj)$|KM}zN#)3fFiaU;~JlEBc< zo076pFr>>YsNgM?uB*Y_(XeE7t6ooHc76uhelZ)547B2=i`iNf9@fk$oMH`v!jV)G zfd-|O?fPS5Kj8^gFP*c3C7?K86$pXha3)6Y3uMu8=xb8KqgO`WG7y7L(u6=NA#z-S zqGhTnFBzeYMO{bKnE90tX=_gO*{C6*0btA1pWyiWm7>4=c&GCx4HgE6rl@{Nps=K# z$GEfBgutKQUMP&oEK89yP(mJlo_^KG_QTNLpwrgo*#f&`|syY$4DF|URpsnMWc`ZN!H z>TCJLIjhLlU{Ug?W=}>Ro6%%`>Co^y%pxf;Y1k}!_8_-&YGO}t4!equ`mL?Lc{{Dd z_Ly$ce5rYEW+)VJSWHddLt3c^NYsoQW{I&5=-wnvK#+%rK78UsY_Sv@$M(WJsd}If zECuc5*+r@@~fT z(B7%qOby&o&{6J(xfdBxI$=DEUjqkXd~YVozs5S&WVp1yRctWYWJD_sh@5sq))Er4 zf@%HG+f=4tosNjaJLeC=GK1|d6L$yC!bW$|bR|sLkPghfE^aesoFMp{AU0Q3(vHVb z66BQrhJfSf3kQ!8{OQChf?yoM)Taqk=e*2amsQ9%2n8OuE_ zaU@u|lbJ$Lw6_+8)jn(?W;$mBjIo$5_ zW^O;5b9yUtszyvK<=^JE#y!+NV8P&Eo@2i?oKQ5{0%R51hl%h8uw0@NaxmELlRj|? zX;^1d41U)04Dln@(_w9`I&NVVnIEw0A?XFP(ug@FicRLdAhgmSgJw6|H?&R3^fnw$ zQT(cnG!RYWuiUb=Sg?P_&8@|3QML5Q;iuPJ!g^|r5?&FioLjbj+466X$?LhX;4FmG0iJkmBV-EbF42mFXNM*^xT$3QYUliZL z<%72&ujg6ffuW$H>8-g`c?9CbE%*i+&~4VJSt?L(hUblCID<#-1J4+(?w_9TyKm>^lT^sM^D?#q4bY-DT> zYg1<5T_WQsE=zlSl!n5XM1-&%vGr4BSvIjvx}CoMlix# z!S@viWj8{kz5Nx&^c6?-C9*frEcP`A?!|h|&;}a6svoTIupcp^e0Dx!ArVzbO+uT! zghD(q{JCU)O@ihjn*bhrLD2I9@-Pae$BMWv^L9E13L5;LaXOGSbYGm`!5GaUmH1Z$ zE8=2$`!qb@TWKjcmT!Oj*$6_(f`^=rf2b;3VW+f~)>t~D!Ghvo)(n*b z4BCu>36j`Y3YsKVNJttSk4#7!8O18wOkh}ug>`nzU&EAe(tK8Vr z)~4gzo!36Fy>jEF@IE7mnJ;kn*-s{yZNo> zgz~^noCy2gfcF|v%WrY$%t+(37*Dz^Kzt(2S>SSPeL7d9rSte~d_QkT6*KJu%>}OcXB(m>wN@G+cJXkA~ zxooY|HM!YZ?5{!b%&Kt|$SK{M`5J1nEom>v1H~%IoAUjtt>fYOm|Z)(h2jRob1JyE z!K1SbDp2zFrr4Ue(9VKu3v5ez>hk4DioNFpXPEBwAJWm}^)1+h)s{OjPvurREftnk znj7e=nSA+9jtO`i;JTT&(@AHg*)wmq7yBo!CzpxFvipE(_w-Zva%QDa8kH;3HM+d@ zX=dFm0g4paRfap=#-CB#Q)Bt^h*wHf69O{)x~W}mkzEuFw~sS#?I#AT#uevN7DWAV z1b>Q=9Eoe3wi=P}TzfpStywL`!mhVZMttn!IC zMrjioCHVVBKk)T;BrcABRV%IJu&Yu#AjzhMwY;Yu!CSH%c~Rs^S&U@s(WJ{+&SfDH z{M>?}X(!P{+as#CcyLxkeD|9SLV>AS&aqvvia2^UV?db+lb;#*Y669re2Jhp1QFvC z3eH8V1=|CPsWqBivz`O}m)ceak^EkX14i}iZ!cMROZAOeS5V}$AN^jNK>ot)KN2%Y zY=NC^jDn)+4pBh|)F4x7>7*-2BGJ6sWZrc41^BMDi_U1y{yFmhh+{7zFPMt5cqbe5 zf8`dqKf-!lj7)3{wZ=}c7zw%0^MW-G$B-$u z!h7s(<;~gO;kovnP6t%Z2tQhJFZ*qKRHnX{8(he!;>(x2F;~A2pl%~VTc}v|k}!8) z*KDnmeS{u6qB*)~zWtVACD@_9>{MNH8$U@hW)Q8xo~uNm;$qjVq3$fOB5x!uJLRiPeahUC16#1%?;70lFu zNG9TNljj9L&v6jLxi{E^I0Cr?SuqUGfSA0&cHh3N<%n2cCSe9y3~X3yXvUYEq!aR~ z6BDi}=2!gYtbU79S|pJ;qyt+c#Pp!NxAHV$OP}}POEc7_(Fy+oS_z-q!ubS+%a~W0NjFf z8e*}Z?N28}G)A#@mvJ1lUybMK1sw4ln!qam3RU4Gdz}7|YPtsXs1nSZ&J=blW|M6O zF|D&M@PSC*0h?pRGB{W$xk{U{ni)i|$uaYlj zCe&3{=^q_MsMaD=CWNtf>YEM5orhE}@6_>`LG=DGy2%33f3aSQW}739u0vOtr+c;T zxXoCpVfAPux2Hy%PcKm@LbF=K&0LW55&}FJToYKj;v|FLrS2%Fp{yDsvD=YsEB=UU z2M2m@nF+Z*rirD zfeEx`w3t+jmP;2432H5g$~D4mw1U#$>sooR)?*hU{~o z?u<4)q~-xw(|Dzon(7Ho5lm#WQ({+FDn%LyJS(!=&ND?8SSkz*YTcIhGd|GxL}#AN zw7Lq;{h=WovfbuVzn9ao9qffpeDJu;3z?@bXO-!y@EYHA$h^t&*ztfHWu_GwQq3Bn ztKRfM91^lZP9GAMLz*?BB+F;w4ej(pR>u-4b%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M 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%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/rokt/rokt/libs/testutils.aar b/kits/rokt/rokt/libs/testutils.aar new file mode 100644 index 0000000000000000000000000000000000000000..cf49b418969034bad0f13e3bee536d9b7ba56833 GIT binary patch literal 47713 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 le<@PWyj%{{x-|yYK)2 literal 0 HcmV?d00001 diff --git a/kits/rokt/rokt/settings.gradle b/kits/rokt/rokt/settings.gradle new file mode 100644 index 000000000..1f50202bb --- /dev/null +++ b/kits/rokt/rokt/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'android-rokt-kit' \ No newline at end of file diff --git a/kits/rokt/rokt/settings.gradle.kts b/kits/rokt/rokt/settings.gradle.kts new file mode 100644 index 000000000..3d11eefb1 --- /dev/null +++ b/kits/rokt/rokt/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-rokt-kit" +include(":") diff --git a/kits/rokt/rokt/src/main/AndroidManifest.xml b/kits/rokt/rokt/src/main/AndroidManifest.xml new file mode 100755 index 000000000..c4e6c98d7 --- /dev/null +++ b/kits/rokt/rokt/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktConfigExtensions.kt b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktConfigExtensions.kt new file mode 100644 index 000000000..45a6ee4f8 --- /dev/null +++ b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktConfigExtensions.kt @@ -0,0 +1,38 @@ +package com.mparticle.kits + +import com.mparticle.rokt.PlacementOptions +import com.mparticle.rokt.RoktConfig +import com.rokt.roktsdk.CacheConfig +import com.mparticle.rokt.CacheConfig as MpCacheConfig +import com.rokt.roktsdk.RoktConfig as RoktSdkConfig + +fun MpCacheConfig.toRoktSdkCacheConfig(): CacheConfig = CacheConfig( + cacheDurationInSeconds = this.cacheDurationInSeconds, + cacheAttributes = this.cacheAttributes, +) + +fun RoktConfig.toRoktSdkConfig(): RoktSdkConfig { + val colorMode = when (this.colorMode) { + RoktConfig.ColorMode.LIGHT -> RoktSdkConfig.ColorMode.LIGHT + RoktConfig.ColorMode.DARK -> RoktSdkConfig.ColorMode.DARK + RoktConfig.ColorMode.SYSTEM -> RoktSdkConfig.ColorMode.SYSTEM + else -> RoktSdkConfig.ColorMode.SYSTEM + } + + val cacheConfig = this.cacheConfig?.toRoktSdkCacheConfig() + + val edgeToEdgeDisplay = this.edgeToEdgeDisplay + + val builder = RoktSdkConfig.Builder() + .colorMode(colorMode) + .edgeToEdgeDisplay(edgeToEdgeDisplay) + + cacheConfig?.let { builder.cacheConfig(it) } + + return builder.build() +} + +fun PlacementOptions.toRoktSdkPlacementOptions(): com.rokt.roktsdk.PlacementOptions = com.rokt.roktsdk.PlacementOptions( + jointSdkSelectPlacements = this.jointSdkSelectPlacements, + dynamicPerformanceMarkers = this.dynamicPerformanceMarkers, +) diff --git a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKit.kt new file mode 100644 index 000000000..091ba6356 --- /dev/null +++ b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -0,0 +1,505 @@ +package com.mparticle.kits + +import android.app.Application +import android.content.Context +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.graphics.Typeface +import android.os.Build +import com.mparticle.BuildConfig +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.MpRoktEventCallback +import com.mparticle.UnloadReasons +import com.mparticle.WrapperSdk +import com.mparticle.WrapperSdkVersion +import com.mparticle.commerce.CommerceEvent +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.Logger +import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.RoktListener +import com.mparticle.rokt.PlacementOptions +import com.mparticle.rokt.RoktConfig +import com.mparticle.rokt.RoktEmbeddedView +import com.rokt.roktsdk.Rokt +import com.rokt.roktsdk.Rokt.RoktCallback +import com.rokt.roktsdk.Rokt.SdkFrameworkType.Android +import com.rokt.roktsdk.Rokt.SdkFrameworkType.Cordova +import com.rokt.roktsdk.Rokt.SdkFrameworkType.Flutter +import com.rokt.roktsdk.Rokt.SdkFrameworkType.ReactNative +import com.rokt.roktsdk.RoktEvent +import com.rokt.roktsdk.RoktWidgetDimensionCallBack +import com.rokt.roktsdk.Widget +import com.rokt.roktsdk.logging.RoktLogLevel +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.launch +import java.lang.ref.WeakReference +import java.math.BigDecimal + +const val ROKT_ATTRIBUTE_SANDBOX_MODE: String = "sandbox" + +/** + * MParticle embedded implementation of the Rokt Library. + * + * Learn more at our [Developer Docs](https://docs.rokt.com/developers/integration-guides/android) + */ + +@Suppress("unused") +class RoktKit : + KitIntegration(), + CommerceListener, + IdentityListener, + RoktListener, + Rokt.RoktCallback { + private var applicationContext: Context? = null + private var mpRoktEventCallback: MpRoktEventCallback? = null + private var hashedEmailUserIdentityType: String? = null + override fun getName(): String = NAME + + override fun getInstance(): RoktKit = this + + private var deferredAttributes: CompletableDeferred>? = null + + public override fun onKitCreate(settings: Map, ctx: Context): List { + register(this) + applicationContext = ctx.applicationContext + val roktTagId = settings[ROKT_ACCOUNT_ID] + if (KitUtils.isEmpty(roktTagId)) { + throwOnKitCreateError(NO_ROKT_ACCOUNT_ID) + } + hashedEmailUserIdentityType = settings[HASHED_EMAIL_USER_IDENTITY_TYPE] + applicationContext?.let { + val manager = context.packageManager + if (roktTagId != null) { + try { + val info = manager.getPackageInfoForApp(context.packageName, 0) + val application = context.applicationContext as Application + val mparticleVersion = BuildConfig.VERSION_NAME + + // Get RoktOptions from the kit manager + val roktOptions = kitManager?.roktOptions + val fontFilePathMap = roktOptions?.fontFilePathMap ?: emptyMap() + val fontPostScriptNames = roktOptions?.fontPostScriptNames ?: emptySet() + + val mappedLogLevel = Logger.getMinLogLevel().toRoktLogLevel() + Rokt.setLogLevel(mappedLogLevel) + + Rokt.init( + roktTagId = roktTagId, + appVersion = info.versionName, + application = application, + fontPostScriptNames = fontPostScriptNames, + fontFilePathMap = fontFilePathMap, + callback = object : Rokt.RoktInitCallback { + override fun onInitComplete(success: Boolean) { + Logger.verbose("Rokt Kit Initialization success: $success") + } + }, + mParticleSdkVersion = mparticleVersion, + mParticleKitVersion = mparticleVersion, + ) + } catch (e: PackageManager.NameNotFoundException) { + throwOnKitCreateError(NO_APP_VERSION_FOUND) + } catch (e: Exception) { + logError("Error initializing Rokt", e) + } + } + } + return emptyList() + } + + override fun setOptOut(optedOut: Boolean): List = emptyList() + + public override fun reset() { + super.reset() + } + + /* + * Overrides for CommerceListener + */ + override fun logLtvIncrease( + bigDecimal: BigDecimal, + bigDecimal1: BigDecimal, + s: String, + map: Map, + ): List = emptyList() + + override fun logEvent(commerceEvent: CommerceEvent): List = emptyList() + + /* + * Overrides for IdentityListener + */ + override fun onIdentifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + } + + override fun onLoginCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + } + + override fun onLogoutCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + } + + override fun onModifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + } + + override fun onUserIdentified(mParticleUser: MParticleUser) {} + + private fun logError(message: String, t: Throwable) { + Logger.error(t, "RoktKit: $message") + } + + private fun MParticle.LogLevel.toRoktLogLevel(): RoktLogLevel = when (this) { + MParticle.LogLevel.VERBOSE -> RoktLogLevel.VERBOSE + MParticle.LogLevel.DEBUG -> RoktLogLevel.DEBUG + MParticle.LogLevel.INFO -> RoktLogLevel.INFO + MParticle.LogLevel.WARNING -> RoktLogLevel.WARNING + MParticle.LogLevel.ERROR -> RoktLogLevel.ERROR + MParticle.LogLevel.NONE -> RoktLogLevel.NONE + } + + private fun throwOnKitCreateError(message: String): Unit = throw IllegalArgumentException(message) + + /* + For more details, visit the official documentation: + https://docs.rokt.com/developers/integration-guides/android/how-to/adding-a-placement/ + */ + override fun selectPlacements( + viewName: String, + attributes: Map, + mpRoktEventCallback: MpRoktEventCallback?, + placeHolders: MutableMap>?, + fontTypefaces: MutableMap>?, + filterUser: FilteredMParticleUser?, + mpRoktConfig: RoktConfig?, + placementOptions: PlacementOptions?, + ) { + val placeholders: Map>? = placeHolders?.mapNotNull { entry -> + val widget = Widget(entry.value.get()?.context as Context) + entry.value.get()?.removeAllViews() + entry.value.get()?.addView(widget) + entry.value.get()?.dimensionCallBack?.let { + widget.registerDimensionListener( + object : RoktWidgetDimensionCallBack { + override fun onHeightChanged(height: Int) { + it.onHeightChanged(height) + } + + override fun onMarginChanged(start: Int, top: Int, end: Int, bottom: Int) { + it.onMarginChanged(start, top, end, bottom) + } + }, + ) + } + entry.key to WeakReference(widget) + }?.toMap() + + this.mpRoktEventCallback = mpRoktEventCallback + val finalAttributes = prepareFinalAttributes(filterUser, attributes) + val roktConfig = mpRoktConfig?.toRoktSdkConfig() + Rokt.execute( + viewName, + finalAttributes, + this, + // Pass placeholders and fontTypefaces only if they are not empty or null + placeholders.takeIf { it?.isNotEmpty() == true }, + fontTypefaces.takeIf { it?.isNotEmpty() == true }, + roktConfig, + placementOptions?.toRoktSdkPlacementOptions(), + ) + } + + private fun prepareFinalAttributes( + filterUser: FilteredMParticleUser?, + attributes: Map, + ): Map { + val finalAttributes = mutableMapOf() + + filterUser?.userAttributes?.let { userAttrs -> + for ((key, value) in userAttrs) { + if (value != null) { + finalAttributes[key] = convertValueToString(value) + } + } + } + + finalAttributes.putAll(filterAttributes(attributes, configuration)) + + filterUser?.id?.toString()?.let { mpid -> + finalAttributes[MPID] = mpid + } ?: Logger.warning("RoktKit: No user ID available for placement") + + addIdentityAttributes(finalAttributes, filterUser) + + verifyHashedEmail(finalAttributes) + + logSelectPlacementEvent(finalAttributes) + return finalAttributes + } + + private fun convertValueToString(value: Any?): String = when (value) { + is Double -> BigDecimal.valueOf(value).toPlainString() + is Long -> BigDecimal.valueOf(value).toPlainString() + is Int -> BigDecimal.valueOf(value.toLong()).toPlainString() + is Number -> BigDecimal(value.toString()).toPlainString() + else -> value.toString() + } + + private fun filterAttributes( + attributes: Map, + kitConfiguration: KitConfiguration, + ): MutableMap { + val userAttributes = mutableMapOf() + for ((key, value) in attributes) { + val hashKey = KitUtils.hashForFiltering(key) + if (kitConfiguration.mUserAttributeFilters.get(hashKey, true)) { + userAttributes[key] = value + } + } + return userAttributes + } + + override fun events(identifier: String): Flow = Rokt.events(identifier).map { event -> + when (event) { + is RoktEvent.HideLoadingIndicator -> com.mparticle.RoktEvent.HideLoadingIndicator + is RoktEvent.ShowLoadingIndicator -> com.mparticle.RoktEvent.ShowLoadingIndicator + is RoktEvent.FirstPositiveEngagement -> com.mparticle.RoktEvent.FirstPositiveEngagement( + event.id, + ) + + is RoktEvent.PositiveEngagement -> com.mparticle.RoktEvent.PositiveEngagement( + event.id, + ) + + is RoktEvent.OfferEngagement -> com.mparticle.RoktEvent.OfferEngagement(event.id) + is RoktEvent.OpenUrl -> com.mparticle.RoktEvent.OpenUrl(event.id, event.url) + is RoktEvent.PlacementClosed -> com.mparticle.RoktEvent.PlacementClosed(event.id) + is RoktEvent.PlacementCompleted -> com.mparticle.RoktEvent.PlacementCompleted( + event.id, + ) + + is RoktEvent.PlacementFailure -> com.mparticle.RoktEvent.PlacementFailure(event.id) + is RoktEvent.PlacementInteractive -> com.mparticle.RoktEvent.PlacementInteractive( + event.id, + ) + + is RoktEvent.PlacementReady -> com.mparticle.RoktEvent.PlacementReady(event.id) + is RoktEvent.CartItemInstantPurchase -> com.mparticle.RoktEvent.CartItemInstantPurchase( + placementId = event.placementId, + cartItemId = event.cartItemId, + catalogItemId = event.catalogItemId, + currency = event.currency, + description = event.description, + linkedProductId = event.linkedProductId, + totalPrice = event.totalPrice, + quantity = event.quantity, + unitPrice = event.unitPrice, + ) + + is RoktEvent.InitComplete -> com.mparticle.RoktEvent.InitComplete(event.success) + } + } + + override fun setWrapperSdkVersion(wrapperSdkVersion: WrapperSdkVersion) { + val sdkFrameworkType = when (wrapperSdkVersion.sdk) { + WrapperSdk.WrapperFlutter -> Flutter + WrapperSdk.WrapperSdkReactNative -> ReactNative + WrapperSdk.WrapperSdkCordova -> Cordova + else -> Android + } + Rokt.setFrameworkType(sdkFrameworkType) + } + + override fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean) { + Rokt.purchaseFinalized(placementId, catalogItemId, status) + } + + override fun close() { + Rokt.close() + } + + /** + * Set the session id to use for the next execute call. + * This is useful for cases where you have a session id from a non-native integration, + * e.g. WebView, and you want the session to be consistent across integrations. + * + * @param sessionId The session id to be set. Must be a non-empty string. + */ + override fun setSessionId(sessionId: String) { + Rokt.setSessionId(sessionId) + } + + /** + * Get the session id to use within a non-native integration e.g. WebView. + * + * @return The session id or null if no session is present. + */ + override fun getSessionId(): String? = Rokt.getSessionId() + + override fun enrichAttributes(attributes: MutableMap, user: FilteredMParticleUser?) { + val finalAttributes = prepareFinalAttributes(user, attributes) + deferredAttributes?.complete(finalAttributes) + } + + suspend fun runComposableWithCallback( + attributes: Map, + mpRoktEventCallback: MpRoktEventCallback?, + onResult: (Map, RoktCallback) -> Unit, + ) { + val instance = MParticle.getInstance() + deferredAttributes = CompletableDeferred() + instance?.Internal()?.kitManager?.roktKitApi?.prepareAttributesAsync(attributes) + this.mpRoktEventCallback = mpRoktEventCallback + CoroutineScope(Dispatchers.Default).launch { + val resultAttributes = deferredAttributes!!.await() + onResult(resultAttributes, this@RoktKit) + } + } + + private fun addIdentityAttributes( + attributes: MutableMap?, + filterUser: FilteredMParticleUser?, + ): MutableMap { + val identityAttributes = mutableMapOf() + if (filterUser != null) { + for ((identityNumberKey, identityValue) in filterUser.userIdentities) { + val identityType = getStringForIdentity(identityNumberKey) + if (identityType.equals(hashedEmailUserIdentityType)) { + identityAttributes["emailsha256"] = identityValue + } else { + identityAttributes[identityType] = identityValue + } + } + } + if (attributes != null) { + attributes.putAll(identityAttributes) + return attributes + } else { + return identityAttributes + } + } + + private fun verifyHashedEmail(attributes: MutableMap?) { + if (attributes == null) return + + val emailKey = MParticle.IdentityType.Email.name.lowercase() + val emailShaKey = "emailsha256" + + val emailShaValue = attributes.entries.find { it.key.equals(emailShaKey, ignoreCase = true) }?.value + + when { + !emailShaValue.isNullOrEmpty() -> { + // If emailsha256 is already present, remove entries with email + val iterator = attributes.entries.iterator() + while (iterator.hasNext()) { + val entry = iterator.next() + if (entry.key.equals(emailKey, ignoreCase = true)) { + iterator.remove() + } + } + } + } + } + + private fun logSelectPlacementEvent(attributes: Map) { + val event = MPEvent.Builder(EVENT_NAME_SELECT_PLACEMENTS, MParticle.EventType.Other) + .customAttributes(attributes) + .build() + MParticle.getInstance()?.logEvent(event) + } + + private fun getStringForIdentity(identityType: IdentityType): String = when (identityType) { + IdentityType.Other -> "other" + IdentityType.CustomerId -> "customerid" + IdentityType.Facebook -> "facebook" + IdentityType.Twitter -> "twitter" + IdentityType.Google -> "google" + IdentityType.Microsoft -> "microsoft" + IdentityType.Yahoo -> "yahoo" + IdentityType.Email -> "email" + IdentityType.Alias -> "alias" + IdentityType.FacebookCustomAudienceId -> "facebookcustomaudienceid" + IdentityType.Other2 -> "other2" + IdentityType.Other3 -> "other3" + IdentityType.Other4 -> "other4" + IdentityType.Other5 -> "other5" + IdentityType.Other6 -> "other6" + IdentityType.Other7 -> "other7" + IdentityType.Other8 -> "other8" + IdentityType.Other9 -> "other9" + IdentityType.Other10 -> "other10" + IdentityType.MobileNumber -> "mobilenumber" + IdentityType.PhoneNumber2 -> "phonenumber2" + IdentityType.PhoneNumber3 -> "phonenumber3" + else -> "" + } + + companion object { + @Volatile + var instance: RoktKit? = null + private set + + fun register(kit: RoktKit) { + instance = kit + } + + const val NAME = "Rokt" + const val ROKT_ACCOUNT_ID = "accountId" + const val HASHED_EMAIL_USER_IDENTITY_TYPE = "hashedEmailUserIdentityType" + const val MPID = "mpid" + const val EVENT_NAME_SELECT_PLACEMENTS = "selectPlacements" + const val NO_ROKT_ACCOUNT_ID = "No Rokt account ID provided, can't initialize kit." + const val NO_APP_VERSION_FOUND = "No App version found, can't initialize kit." + } + + override fun onLoad() { + mpRoktEventCallback?.onLoad() + } + + override fun onShouldHideLoadingIndicator() { + mpRoktEventCallback?.onShouldHideLoadingIndicator() + } + + override fun onShouldShowLoadingIndicator() { + mpRoktEventCallback?.onShouldShowLoadingIndicator() + } + + override fun onUnload(reason: Rokt.UnloadReasons) { + mpRoktEventCallback?.onUnload( + when (reason) { + Rokt.UnloadReasons.NO_OFFERS -> UnloadReasons.NO_OFFERS + Rokt.UnloadReasons.FINISHED -> UnloadReasons.FINISHED + Rokt.UnloadReasons.TIMEOUT -> UnloadReasons.TIMEOUT + Rokt.UnloadReasons.NETWORK_ERROR -> UnloadReasons.NETWORK_ERROR + Rokt.UnloadReasons.NO_WIDGET -> UnloadReasons.NO_WIDGET + Rokt.UnloadReasons.INIT_FAILED -> UnloadReasons.INIT_FAILED + Rokt.UnloadReasons.UNKNOWN_PLACEHOLDER -> UnloadReasons.UNKNOWN_PLACEHOLDER + Rokt.UnloadReasons.UNKNOWN -> UnloadReasons.UNKNOWN + }, + ) + } +} + +fun PackageManager.getPackageInfoForApp(packageName: String, flags: Int = 0): PackageInfo = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(flags.toLong())) + } else { + @Suppress("DEPRECATION") + getPackageInfo(packageName, flags) + } diff --git a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayout.kt b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayout.kt new file mode 100644 index 000000000..0987ea40d --- /dev/null +++ b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayout.kt @@ -0,0 +1,57 @@ +package com.mparticle.kits + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import com.mparticle.MpRoktEventCallback +import com.mparticle.rokt.PlacementOptions +import com.mparticle.rokt.RoktConfig +import com.rokt.roktsdk.Rokt + +@Composable +@Suppress("FunctionName") +fun RoktLayout( + sdkTriggered: Boolean, + identifier: String, + attributes: Map, + location: String, + modifier: Modifier = Modifier, + mpRoktEventCallback: MpRoktEventCallback? = null, + config: RoktConfig? = null, +) { + var placementOptions: PlacementOptions? = null + val instance = RoktKit.instance + val resultMapState = remember { mutableStateOf(null) } + if (sdkTriggered) { + // Capture the timestamp when the SDK is triggered + placementOptions = PlacementOptions( + jointSdkSelectPlacements = System.currentTimeMillis(), + dynamicPerformanceMarkers = mapOf(), + ) + LaunchedEffect(Unit) { + instance?.runComposableWithCallback( + HashMap(attributes), + mpRoktEventCallback, + { resultMap, callback -> + resultMapState.value = RoktResult(resultMap, callback) + }, + ) + } + } + + resultMapState.value?.let { resultMap -> + com.rokt.roktsdk.RoktLayout( + sdkTriggered, identifier, modifier, resultMap.attributes, location, + onLoad = { resultMap.callback.onLoad() }, + onShouldShowLoadingIndicator = { resultMap.callback.onShouldShowLoadingIndicator() }, + onShouldHideLoadingIndicator = { resultMap.callback.onShouldHideLoadingIndicator() }, + onUnload = { reason -> resultMap.callback.onUnload(reason) }, + config = config?.toRoktSdkConfig(), + placementOptions = placementOptions?.toRoktSdkPlacementOptions(), + ) + } +} + +data class RoktResult(val attributes: Map, val callback: Rokt.RoktCallback) diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktConfigExtensionsTest.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktConfigExtensionsTest.kt new file mode 100644 index 000000000..14a407c99 --- /dev/null +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktConfigExtensionsTest.kt @@ -0,0 +1,67 @@ +package com.mparticle.kits + +import com.mparticle.rokt.CacheConfig +import com.mparticle.rokt.RoktConfig +import io.mockk.every +import io.mockk.mockk +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Test +import com.rokt.roktsdk.RoktConfig as SdkRoktConfig + +class RoktConfigExtensionsTest { + + @Test + fun `toRoktSdkConfig maps color mode and edgeToEdge`() { + val source = mockk() + every { source.colorMode } returns RoktConfig.ColorMode.DARK + every { source.edgeToEdgeDisplay } returns true + every { source.cacheConfig } returns null + + val result: SdkRoktConfig = source.toRoktSdkConfig() + + assertEquals(SdkRoktConfig.ColorMode.DARK, result.colorMode) + assertEquals(true, result.edgeToEdgeDisplay) + } + + @Test + fun `toRoktSdkConfig maps cacheConfig when present`() { + val cacheAttributes = mapOf( + "key1" to "value1", + "key2" to "value2", + ) + + val cacheConfig = mockk() + every { cacheConfig.cacheDurationInSeconds } returns 3600 + every { cacheConfig.cacheAttributes } returns cacheAttributes + + val source = mockk() + every { source.colorMode } returns RoktConfig.ColorMode.LIGHT + every { source.edgeToEdgeDisplay } returns false + every { source.cacheConfig } returns cacheConfig + + val result: SdkRoktConfig = source.toRoktSdkConfig() + + assertEquals(SdkRoktConfig.ColorMode.LIGHT, result.colorMode) + assertEquals(false, result.edgeToEdgeDisplay) + assertNotNull(result.cacheConfig) + assertEquals(3600L, result.cacheConfig?.cacheDurationInSeconds) + assertEquals(cacheAttributes, result.cacheConfig?.cacheAttributes) + } + + @Test + fun `toRoktSdkCacheConfig maps fields`() { + val cacheAttributes = mapOf( + "a" to "1", + "b" to "2", + ) + val mpCache = mockk() + every { mpCache.cacheDurationInSeconds } returns 120 + every { mpCache.cacheAttributes } returns cacheAttributes + + val sdkCache = mpCache.toRoktSdkCacheConfig() + + assertEquals(120, sdkCache.cacheDurationInSeconds) + assertEquals(cacheAttributes, sdkCache.cacheAttributes) + } +} diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt new file mode 100644 index 000000000..9717978a6 --- /dev/null +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -0,0 +1,1506 @@ +package com.mparticle.kits + +import android.app.Activity +import android.content.Context +import android.net.Uri +import android.os.Build.VERSION +import com.mparticle.AttributionError +import com.mparticle.AttributionResult +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.MParticleOptions +import com.mparticle.MParticleOptions.DataplanOptions +import com.mparticle.WrapperSdk +import com.mparticle.WrapperSdkVersion +import com.mparticle.identity.IdentityApi +import com.mparticle.internal.CoreCallbacks +import com.mparticle.internal.CoreCallbacks.KitListener +import com.mparticle.kits.mocks.MockKitConfiguration +import com.rokt.roktsdk.FulfillmentAttributes +import com.rokt.roktsdk.Rokt +import com.rokt.roktsdk.RoktEvent +import com.rokt.roktsdk.logging.RoktLogLevel +import io.mockk.every +import io.mockk.just +import io.mockk.mockk +import io.mockk.mockkObject +import io.mockk.runs +import io.mockk.slot +import io.mockk.unmockkObject +import io.mockk.verify +import io.mockk.verifyOrder +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.toList +import kotlinx.coroutines.test.runTest +import org.json.JSONArray +import org.json.JSONObject +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.ArgumentCaptor +import org.mockito.Mockito +import org.mockito.Mockito.mock +import java.lang.ref.WeakReference +import java.lang.reflect.Field +import java.lang.reflect.Method +import java.lang.reflect.Modifier + +class RoktKitTests { + private val context = mockk(relaxed = true) + private lateinit var roktKit: RoktKit + private val settings = HashMap() + private lateinit var kitManager: TestKitManager + + @Before + @Throws(Exception::class) + fun setUp() { + settings["application_id"] = TEST_APPLICATION_ID + every { context.applicationContext } returns context + roktKit = RoktKit() + kitManager = TestKitManager() + MParticle.setInstance(mock(MParticle::class.java)) + Mockito.`when`(MParticle.getInstance()?.Identity()).thenReturn( + mock( + IdentityApi::class.java, + ), + ) + val kitManager = KitManagerImpl( + mock( + Context::class.java, + ), + null, + emptyCoreCallbacks, + mock(MParticleOptions::class.java), + ) + roktKit.kitManager = kitManager + // roktKit.configuration = KitConfiguration.createKitConfiguration(JSONObject().put("id", "-1")) + } + + @Test + fun test_prepareFinalAttributes_filters_out_null_user_attributes() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + + // Include a null value and a non-null non-string value to verify toString() behavior + val userAttributes = HashMap() + userAttributes["attr_non_null_string"] = "value" + userAttributes["attr_null"] = null + userAttributes["attr_non_string"] = 123 + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(userAttributes) + // Set up the configuration with our test filters + val jsonObject = JSONObject() + try { + val filteredKey: String = KitUtils.hashForFiltering("ShouldFilter").toString() + val filteredKey2: String = KitUtils.hashForFiltering("ShouldFilter_key_2").toString() + jsonObject.put(filteredKey, 0) + jsonObject.put(filteredKey2, 1) + } catch (e: Exception) { + println("Exception occurred: ${e.message}") + } + val json = JSONObject() + json.put("ua", jsonObject) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", json)) + val method: Method = RoktKit::class.java.getDeclaredMethod( + "prepareFinalAttributes", + FilteredMParticleUser::class.java, + Map::class.java, + ) + method.isAccessible = true + + val inputAttributes: Map = emptyMap() + val result = method.invoke(roktKit, mockFilterUser, inputAttributes) as Map<*, *> + + // Should include only non-null user attributes, and convert non-string values via toString() + assertTrue(result.containsKey("attr_non_null_string")) + assertEquals("value", result["attr_non_null_string"]) + + assertFalse(result.containsKey("attr_null")) + + assertTrue(result.containsKey("attr_non_string")) + assertEquals("123", result["attr_non_string"]) + } + + @Test + fun test_prepareFinalAttributes_converts_large_double_without_scientific_notation() { + // Arrange + mockkObject(Rokt) + val capturedAttributesSlot = slot>() + every { + Rokt.execute( + any(), + capture(capturedAttributesSlot), + any(), + null, + null, + null, + ) + } just runs + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + Mockito.`when`(mockFilterUser.id).thenReturn(12345L) + + val userAttributes = HashMap() + // Large Double value that would produce scientific notation with toString() + userAttributes["large_double"] = 50352212112.0 + userAttributes["large_double_negative"] = -50352212112.0 + userAttributes["double_with_decimal"] = 123.456789 + userAttributes["double_zero"] = 0.0 + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(userAttributes) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", JSONObject())) + + // Act + val inputAttributes: Map = mapOf("initial_attr" to "initial_value") + roktKit.selectPlacements( + viewName = "test_view", + attributes = inputAttributes, + mpRoktEventCallback = null, + placeHolders = null, + fontTypefaces = null, + filterUser = mockFilterUser, + mpRoktConfig = null, + placementOptions = null, + ) + + // Assert + val capturedAttributes = capturedAttributesSlot.captured + assertEquals("50352212112", capturedAttributes["large_double"]) + + assertEquals("-50352212112", capturedAttributes["large_double_negative"]) + + assertTrue(capturedAttributes.containsKey("double_with_decimal")) + assertEquals("123.456789", capturedAttributes["double_with_decimal"]) + + assertEquals("0.0", capturedAttributes["double_zero"]) + + // Verify initial attributes are preserved + assertEquals("initial_value", capturedAttributes["initial_attr"]) + + unmockkObject(Rokt) + } + + @Test + fun test_prepareFinalAttributes_converts_long_values() { + // Arrange + mockkObject(Rokt) + val capturedAttributesSlot = slot>() + every { + Rokt.execute( + any(), + capture(capturedAttributesSlot), + any(), + null, + null, + null, + ) + } just runs + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + Mockito.`when`(mockFilterUser.id).thenReturn(12345L) + + val userAttributes = HashMap() + userAttributes["long_value"] = Long.MAX_VALUE // 9223372036854775807L + userAttributes["long_negative"] = Long.MIN_VALUE // -9223372036854775808L + userAttributes["long_zero"] = 0L + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(userAttributes) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", JSONObject())) + + // Act + roktKit.selectPlacements( + viewName = "test_view", + attributes = emptyMap(), + mpRoktEventCallback = null, + placeHolders = null, + fontTypefaces = null, + filterUser = mockFilterUser, + mpRoktConfig = null, + placementOptions = null, + ) + + // Assert + val capturedAttributes = capturedAttributesSlot.captured + assertEquals("9223372036854775807", capturedAttributes["long_value"]) + assertEquals("-9223372036854775808", capturedAttributes["long_negative"]) + assertEquals("0", capturedAttributes["long_zero"]) + + unmockkObject(Rokt) + } + + @Test + fun test_prepareFinalAttributes_converts_int_values() { + // Arrange + mockkObject(Rokt) + val capturedAttributesSlot = slot>() + every { + Rokt.execute( + any(), + capture(capturedAttributesSlot), + any(), + null, + null, + null, + ) + } just runs + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + Mockito.`when`(mockFilterUser.id).thenReturn(12345L) + + val userAttributes = HashMap() + userAttributes["int_value"] = Int.MAX_VALUE // 2147483647 + userAttributes["int_negative"] = Int.MIN_VALUE // -2147483648 + userAttributes["int_zero"] = 0 + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(userAttributes) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", JSONObject())) + + // Act + roktKit.selectPlacements( + viewName = "test_view", + attributes = emptyMap(), + mpRoktEventCallback = null, + placeHolders = null, + fontTypefaces = null, + filterUser = mockFilterUser, + mpRoktConfig = null, + placementOptions = null, + ) + + // Assert + val capturedAttributes = capturedAttributesSlot.captured + assertEquals("2147483647", capturedAttributes["int_value"]) + assertEquals("-2147483648", capturedAttributes["int_negative"]) + assertEquals("0", capturedAttributes["int_zero"]) + + unmockkObject(Rokt) + } + + @Test + fun test_prepareFinalAttributes_preserves_string_values() { + // Arrange + mockkObject(Rokt) + val capturedAttributesSlot = slot>() + every { + Rokt.execute( + any(), + capture(capturedAttributesSlot), + any(), + null, + null, + null, + ) + } just runs + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + Mockito.`when`(mockFilterUser.id).thenReturn(12345L) + + val userAttributes = HashMap() + userAttributes["string_value"] = "test_string" + userAttributes["string_with_numbers"] = "123abc456" + userAttributes["empty_string"] = "" + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(userAttributes) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", JSONObject())) + + // Act + roktKit.selectPlacements( + viewName = "test_view", + attributes = emptyMap(), + mpRoktEventCallback = null, + placeHolders = null, + fontTypefaces = null, + filterUser = mockFilterUser, + mpRoktConfig = null, + placementOptions = null, + ) + + // Assert + val capturedAttributes = capturedAttributesSlot.captured + assertEquals("test_string", capturedAttributes["string_value"]) + assertEquals("123abc456", capturedAttributes["string_with_numbers"]) + assertEquals("", capturedAttributes["empty_string"]) + + unmockkObject(Rokt) + } + + @Test + fun test_prepareFinalAttributes_handlesSameKeysInAttributesAndUserAttributes() { + // Arrange + mockkObject(Rokt) + val capturedAttributesSlot = slot>() + every { + Rokt.execute( + any(), + capture(capturedAttributesSlot), + any(), + null, + null, + null, + ) + } just runs + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + Mockito.`when`(mockFilterUser.id).thenReturn(12345L) + + val userAttributes = HashMap() + userAttributes["attr_non_null_string"] = "value" + userAttributes["attr_null"] = null + userAttributes["attr_non_string"] = 123 + userAttributes["user_key"] = "1231545" + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(userAttributes) + // Set up the configuration with our test filters + val jsonObject = JSONObject() + try { + val filteredKey: String = KitUtils.hashForFiltering("ShouldFilter").toString() + val filteredKey2: String = KitUtils.hashForFiltering("ShouldFilter_key_2").toString() + jsonObject.put(filteredKey, 0) + jsonObject.put(filteredKey2, 0) + } catch (e: Exception) { + println("Exception occurred: ${e.message}") + } + val json = JSONObject() + json.put("ua", jsonObject) + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", json)) + val inputAttributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + "user_key" to "2223333", + "ShouldFilter" to "testData", + ) + // Act + roktKit.selectPlacements( + viewName = "test", + attributes = inputAttributes, + mpRoktEventCallback = null, + placeHolders = null, + fontTypefaces = null, + filterUser = mockFilterUser, + mpRoktConfig = null, + placementOptions = null, + ) + + // Assert + val capturedAttributes = capturedAttributesSlot.captured + + assertEquals(7, capturedAttributes.size) + assertEquals("value", capturedAttributes["attr_non_null_string"]) + assertEquals("123", capturedAttributes["attr_non_string"]) + assertEquals("2223333", capturedAttributes["user_key"]) + assertEquals("value1", capturedAttributes["key1"]) + assertEquals("value2", capturedAttributes["key2"]) + assertEquals("value3", capturedAttributes["key3"]) + assertEquals("12345", capturedAttributes["mpid"]) + + assertFalse(capturedAttributes.containsKey("ShouldFilter")) + assertFalse(capturedAttributes.containsKey("ShouldFilter_key_2")) + unmockkObject(Rokt) + } + + @Test + fun test_prepareFinalAttributes_includesAttributeWhenFilterValueIsTrue() { + // Arrange + mockkObject(Rokt) + val capturedAttributesSlot = slot>() + every { + Rokt.execute( + any(), + capture(capturedAttributesSlot), + any(), + null, + null, + null, + ) + } just runs + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + Mockito.`when`(mockFilterUser.id).thenReturn(12345L) + + val userAttributes = HashMap() + userAttributes["attr_non_null_string"] = "value" + userAttributes["attr_null"] = null + userAttributes["attr_non_string"] = 123 + userAttributes["user_key"] = "1231545" + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(userAttributes) + // Set up the configuration with our test filters + val jsonObject = JSONObject() + try { + val filteredKey: String = KitUtils.hashForFiltering("ShouldFilter").toString() + val filteredKey2: String = KitUtils.hashForFiltering("ShouldFilter_key_2").toString() + jsonObject.put(filteredKey, 1) + jsonObject.put(filteredKey2, 0) + } catch (e: Exception) { + println("Exception occurred: ${e.message}") + } + val json = JSONObject() + json.put("ua", jsonObject) + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", json)) + val inputAttributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + "user_key" to "2223333", + "ShouldFilter" to "testData", + ) + // Act + roktKit.selectPlacements( + viewName = "test", + attributes = inputAttributes, + mpRoktEventCallback = null, + placeHolders = null, + fontTypefaces = null, + filterUser = mockFilterUser, + mpRoktConfig = null, + placementOptions = null, + ) + + // Assert + val capturedAttributes = capturedAttributesSlot.captured + + assertEquals(8, capturedAttributes.size) + assertEquals("value", capturedAttributes["attr_non_null_string"]) + assertEquals("123", capturedAttributes["attr_non_string"]) + assertEquals("2223333", capturedAttributes["user_key"]) + assertEquals("value1", capturedAttributes["key1"]) + assertEquals("value2", capturedAttributes["key2"]) + assertEquals("value3", capturedAttributes["key3"]) + assertEquals("12345", capturedAttributes["mpid"]) + + assertTrue(capturedAttributes.containsKey("ShouldFilter")) + assertFalse(capturedAttributes.containsKey("ShouldFilter_key_2")) + unmockkObject(Rokt) + } + + private inner class TestKitManager : + KitManagerImpl(context, null, TestCoreCallbacks(), mock(MParticleOptions::class.java)) { + var attributes = HashMap() + var result: AttributionResult? = null + private var error: AttributionError? = null + override fun getIntegrationAttributes(kitIntegration: KitIntegration): Map = attributes + + override fun setIntegrationAttributes( + kitIntegration: KitIntegration, + integrationAttributes: Map, + ) { + attributes = integrationAttributes as HashMap + } + + override fun onResult(result: AttributionResult) { + this.result = result + } + + override fun onError(error: AttributionError) { + this.error = error + } + } + + private inner class TestKitConfiguration : KitConfiguration() { + override fun getKitId(): Int = TEST_KIT_ID + } + + private inner class TestMParticle : MParticle() { + override fun Identity(): IdentityApi = mock(IdentityApi::class.java) + } + + @Test + fun test_addIdentityAttributes_When_userIdentities_IS_Null() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + val attributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + ) + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + assertEquals(3, result.size) + + assertTrue(result.containsKey("key1")) + assertTrue(result.containsKey("key2")) + assertTrue(result.containsKey("key3")) + } + + @Test + fun test_addIdentityAttributes_When_userIdentities_Contain_value() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities.put(IdentityType.Email, "TestEmail@gamil.com") + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + val attributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + ) + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + assertEquals(4, result.size) + + assertTrue(result.containsKey("key1")) + assertTrue(result.containsKey("key2")) + assertTrue(result.containsKey("key3")) + assertTrue(result.containsKey("email")) + } + + @Test + fun test_addIdentityAttributes_When_userIdentities_And_attributes_contains_same_key() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities.put(IdentityType.Email, "TestEmail@gamil.com") + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + val attributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + "email" to "abc@gmail.com", + ) + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + assertEquals(4, result.size) + + assertTrue(result.containsKey("key1")) + assertTrue(result.containsKey("key2")) + assertTrue(result.containsKey("key3")) + assertTrue(result.containsKey("email")) + assertEquals( + mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + "email" to "TestEmail@gamil.com", + ), + result, + ) + } + + @Test + fun testAddIdentityAttributes_bothNull() { + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, null, null) as Map + assertTrue(result.isEmpty()) + } + + @Test + fun testAddIdentityAttributes_nullAttributes_validUser() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities.put(IdentityType.Email, "TestEmail@gamil.com") + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, null, mockFilterUser) as Map + assertEquals(1, result.size) + assertEquals(mapOf("email" to "TestEmail@gamil.com"), result) + } + + @Test + fun testAddIdentityAttributes_nullUser_returnsSameAttributes() { + val attributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + ) + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, attributes, null) as Map + assertEquals(3, result.size) + assertTrue(result.containsKey("key1")) + assertTrue(result.containsKey("key2")) + assertTrue(result.containsKey("key3")) + } + + @Test + fun test_addIdentityAttributes_When_userIdentities_Contain_other() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities.put(IdentityType.Email, "TestEmail@gamil.com") + userIdentities.put(IdentityType.Other, "hashedEmail@123.com") + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + val attributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + ) + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + assertEquals(5, result.size) + + assertTrue(result.containsKey("key1")) + assertTrue(result.containsKey("key2")) + assertTrue(result.containsKey("key3")) + assertTrue(result.containsKey("email")) + assertTrue(result.containsKey("other")) + } + + @Test + fun test_addIdentityAttributes_When_userIdentities_Other_map_To_Identity() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities.put(IdentityType.Email, "TestEmail@gamil.com") + userIdentities.put(IdentityType.Other, "hashedEmail@123.com") + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + val attributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + ) + val hashedField = RoktKit::class.java.getDeclaredField("hashedEmailUserIdentityType") + hashedField.isAccessible = true + hashedField.set(roktKit, "Other") + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + assertEquals(5, result.size) + + assertTrue(result.containsKey("key1")) + assertTrue(result.containsKey("key2")) + assertTrue(result.containsKey("key3")) + assertTrue(result.containsKey("email")) + assertTrue(result.containsKey("other")) + } + + @Test + fun test_addIdentityAttributes_When_userIdentities_Unknown_map_To_Identity() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities.put(IdentityType.Email, "TestEmail@gamil.com") + userIdentities.put(IdentityType.Other, "hashedEmail@123.com") + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + val attributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + ) + val hashedField = RoktKit::class.java.getDeclaredField("hashedEmailUserIdentityType") + hashedField.isAccessible = true + hashedField.set(roktKit, "Unknown") + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + assertEquals(5, result.size) + + assertTrue(result.containsKey("key1")) + assertTrue(result.containsKey("key2")) + assertTrue(result.containsKey("key3")) + assertTrue(result.containsKey("email")) + assertTrue(result.containsKey("other")) + } + + @Test + fun testSetSdkWrapper_correctlySetsRoktFramework() { + mockkObject(Rokt) + every { Rokt.setFrameworkType(any()) } just runs + + roktKit.setWrapperSdkVersion(WrapperSdkVersion(WrapperSdk.WrapperFlutter, "1.0.0")) + roktKit.setWrapperSdkVersion(WrapperSdkVersion(WrapperSdk.WrapperSdkReactNative, "1.0.0")) + roktKit.setWrapperSdkVersion(WrapperSdkVersion(WrapperSdk.WrapperSdkCordova, "1.0.0")) + roktKit.setWrapperSdkVersion(WrapperSdkVersion(WrapperSdk.WrapperNone, "1.0.0")) + roktKit.setWrapperSdkVersion(WrapperSdkVersion(WrapperSdk.WrapperXamarin, "1.0.0")) + + verifyOrder { + Rokt.setFrameworkType(Rokt.SdkFrameworkType.Flutter) + Rokt.setFrameworkType(Rokt.SdkFrameworkType.ReactNative) + Rokt.setFrameworkType(Rokt.SdkFrameworkType.Cordova) + Rokt.setFrameworkType(Rokt.SdkFrameworkType.Android) + Rokt.setFrameworkType(Rokt.SdkFrameworkType.Android) + } + + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_ShowLoadingIndicator() = runTest { + mockkObject(Rokt) + val roktEvent = RoktEvent.ShowLoadingIndicator + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.ShowLoadingIndicator) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_HideLoadingIndicator() = runTest { + mockkObject(Rokt) + val roktEvent = RoktEvent.HideLoadingIndicator + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.HideLoadingIndicator) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_FirstPositiveEngagement() = runTest { + mockkObject(Rokt) + val placementId = "test-placement-123" + val roktEvent = RoktEvent.FirstPositiveEngagement( + placementId, + object : FulfillmentAttributes { + override fun sendAttributes(attributes: Map) { + } + }, + ) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.FirstPositiveEngagement(placementId)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_PositiveEngagement() = runTest { + mockkObject(Rokt) + val placementId = "test-placement-456" + val roktEvent = RoktEvent.PositiveEngagement(placementId) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.PositiveEngagement(placementId)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_OfferEngagement() = runTest { + mockkObject(Rokt) + val placementId = "test-placement-789" + val roktEvent = RoktEvent.OfferEngagement(placementId) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.OfferEngagement(placementId)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_OpenUrl() = runTest { + mockkObject(Rokt) + val placementId = "test-placement-url" + val url = "https://example.com" + val roktEvent = RoktEvent.OpenUrl(placementId, url) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.OpenUrl(placementId, url)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_PlacementClosed() = runTest { + mockkObject(Rokt) + val placementId = "test-placement-closed" + val roktEvent = RoktEvent.PlacementClosed(placementId) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.PlacementClosed(placementId)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_PlacementCompleted() = runTest { + mockkObject(Rokt) + val placementId = "test-placement-completed" + val roktEvent = RoktEvent.PlacementCompleted(placementId) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.PlacementCompleted(placementId)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_PlacementFailure() = runTest { + mockkObject(Rokt) + val placementId = "test-placement-failure" + val roktEvent = RoktEvent.PlacementFailure(placementId) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.PlacementFailure(placementId)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_PlacementInteractive() = runTest { + mockkObject(Rokt) + val placementId = "test-placement-interactive" + val roktEvent = RoktEvent.PlacementInteractive(placementId) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.PlacementInteractive(placementId)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_PlacementReady() = runTest { + mockkObject(Rokt) + val placementId = "test-placement-ready" + val roktEvent = RoktEvent.PlacementReady(placementId) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.PlacementReady(placementId)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_InitComplete() = runTest { + mockkObject(Rokt) + val success = true + val roktEvent = RoktEvent.InitComplete(success) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.InitComplete(success)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_CartItemInstantPurchase() = runTest { + mockkObject(Rokt) + val roktEvent = RoktEvent.CartItemInstantPurchase( + placementId = "test-placement-purchase", + cartItemId = "cart-item-123", + catalogItemId = "catalog-item-456", + currency = "USD", + description = "Test product description", + linkedProductId = "linked-product-789", + totalPrice = 99.99, + quantity = 2, + unitPrice = 49.99, + ) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals( + result, + com.mparticle.RoktEvent.CartItemInstantPurchase( + placementId = "test-placement-purchase", + cartItemId = "cart-item-123", + catalogItemId = "catalog-item-456", + currency = "USD", + description = "Test product description", + linkedProductId = "linked-product-789", + totalPrice = 99.99, + quantity = 2, + unitPrice = 49.99, + ), + ) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_PlacementFailureWithNullId() = runTest { + mockkObject(Rokt) + val roktEvent = RoktEvent.PlacementFailure(null) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.PlacementFailure(null)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_InitCompleteWithFailure() = runTest { + mockkObject(Rokt) + val success = false + val roktEvent = RoktEvent.InitComplete(success) + every { Rokt.events(any()) } returns flowOf(roktEvent) + + val result = roktKit.events("").first() + + assertEquals(result, com.mparticle.RoktEvent.InitComplete(success)) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_MultipleEventsInFlow() = runTest { + mockkObject(Rokt) + val events = listOf( + RoktEvent.ShowLoadingIndicator, + RoktEvent.HideLoadingIndicator, + RoktEvent.InitComplete(true), + ) + every { Rokt.events(any()) } returns flowOf(*events.toTypedArray()) + + val results = roktKit.events("").toList() + + assertEquals(3, results.size) + assertEquals(com.mparticle.RoktEvent.ShowLoadingIndicator, results[0]) + assertEquals(com.mparticle.RoktEvent.HideLoadingIndicator, results[1]) + assertEquals(com.mparticle.RoktEvent.InitComplete(true), results[2]) + + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_EmptyFlow() = runTest { + mockkObject(Rokt) + every { Rokt.events(any()) } returns flowOf() + + val results = roktKit.events("").toList() + + assertTrue(results.isEmpty()) + unmockkObject(Rokt) + } + + @Test + fun testRoktEventMapping_WithDifferentIdentifiers() = runTest { + mockkObject(Rokt) + val identifier1 = "test-identifier-1" + val identifier2 = "test-identifier-2" + + every { Rokt.events(identifier1) } returns flowOf(RoktEvent.ShowLoadingIndicator) + every { Rokt.events(identifier2) } returns flowOf(RoktEvent.HideLoadingIndicator) + + val result1 = roktKit.events(identifier1).first() + val result2 = roktKit.events(identifier2).first() + + assertEquals(com.mparticle.RoktEvent.ShowLoadingIndicator, result1) + assertEquals(com.mparticle.RoktEvent.HideLoadingIndicator, result2) + + verify { Rokt.events(identifier1) } + verify { Rokt.events(identifier2) } + + unmockkObject(Rokt) + } + + @Test + fun testVerifyHashedEmail_removes_when_emailsha256_is_present() { + val attributes = mutableMapOf( + "email" to "user@example.com", + "emailsha256" to "hashed_email_value", + "other" to "Test", + ) + val method: Method = RoktKit::class.java.getDeclaredMethod( + "verifyHashedEmail", + MutableMap::class.java, + ) + method.isAccessible = true + method.invoke(roktKit, attributes) + + assertFalse(attributes.containsKey("email")) + assertEquals("hashed_email_value", attributes["emailsha256"]) + assertEquals("Test", attributes["other"]) + } + + @Test + fun testVerifyHashedEmail_removes_when_neither_emailsha256_nor_other_is_present() { + val attributes = mutableMapOf( + "email" to "user@example.com", + ) + + val method: Method = RoktKit::class.java.getDeclaredMethod( + "verifyHashedEmail", + MutableMap::class.java, + ) + method.isAccessible = true + method.invoke(roktKit, attributes) + + assertEquals("user@example.com", attributes["email"]) + assertFalse(attributes.containsKey("emailsha256")) + } + + @Test + fun testFilterAttributes() { + // Create test attributes + val attributes: Map = mapOf( + "ShouldFilter" to "shoudl_filter_value", + "ShouldFilter_key_2" to "ShouldFilter_value", + "allowed_key" to "allowed_value", + ) + + // Get the private filterAttributes method using reflection + val method: Method = RoktKit::class.java.getDeclaredMethod( + "filterAttributes", + Map::class.java, + KitConfiguration::class.java, + ) + method.isAccessible = true + + // Set up the configuration with our test filters + val jsonObject = JSONObject() + try { + val filteredKey: String = KitUtils.hashForFiltering("ShouldFilter").toString() + val filteredKey2: String = KitUtils.hashForFiltering("ShouldFilter_key_2").toString() + jsonObject.put(filteredKey, 0) + jsonObject.put(filteredKey2, 0) + } catch (e: Exception) { + println("Exception occurred: ${e.message}") + } + + val json = JSONObject() + json.put("ua", jsonObject) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", json)) + + // Invoke the method and get the result + val result = method.invoke(roktKit, attributes, roktKit.configuration) as Map + + // Verify the results + assertEquals(1, result.size) + + assertFalse(result.containsKey("ShouldFilter")) + assertFalse(result.containsKey("ShouldFilter_key_2")) + assertTrue(result.containsKey("allowed_key")) + assertEquals("allowed_value", result["allowed_key"]) + } + + @Test + fun testFilterAttributes_When_kitConfig_User_Attributes_Filtering_IS_NULL() { + // Create test attributes + val attributes: Map = mapOf( + "filtered_key" to "filtered_value", + "allowed_key" to "allowed_value", + "another_allowed_key" to "another_allowed_value", + ) + + // Get the private filterAttributes method using reflection + val method: Method = RoktKit::class.java.getDeclaredMethod( + "filterAttributes", + Map::class.java, + KitConfiguration::class.java, + ) + method.isAccessible = true + + val json = JSONObject() + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", json)) + + // Invoke the method and get the result + val result = method.invoke(roktKit, attributes, roktKit.configuration) as Map + + assertEquals(3, result.size) + + assertTrue(result.containsKey("allowed_key")) + assertTrue(result.containsKey("filtered_key")) + assertTrue(result.containsKey("another_allowed_key")) + assertEquals("another_allowed_value", result["another_allowed_key"]) + } + + @Test + fun testFilterAttributes_When_Attributes_IS_Empty() { + // Create test attributes + val emptyAttributes: Map = emptyMap() + + // Get the private filterAttributes method using reflection + val method: Method = RoktKit::class.java.getDeclaredMethod( + "filterAttributes", + Map::class.java, + KitConfiguration::class.java, + ) + method.isAccessible = true + + // Set up the configuration with our test filters + val jsonObject = JSONObject() + try { + val filteredKey: String = KitUtils.hashForFiltering("filtered_key").toString() + val filteredKey2: String = KitUtils.hashForFiltering("allowed_key").toString() + jsonObject.put(filteredKey, 0) + jsonObject.put(filteredKey2, 1) + } catch (e: Exception) { + println("Exception occurred: ${e.message}") + } + + val json = JSONObject() + json.put("aaa", jsonObject) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", json)) + + // Invoke the method and get the result + val result = method.invoke(roktKit, emptyAttributes, roktKit.configuration) as Map + + assertEquals(0, result.size) + } + + @Test + fun testFilterAttributes_Allows_Attributes_To_Be_Set_When_When_Filtered_User_Attributes_Differ() { + // Create test attributes + val attributes: Map = mapOf( + "filtered_key" to "filtered_value", + "allowed_key" to "allowed_value", + "another_allowed_key" to "another_allowed_value", + ) + + // Get the private filterAttributes method using reflection + val method: Method = RoktKit::class.java.getDeclaredMethod( + "filterAttributes", + Map::class.java, + KitConfiguration::class.java, + ) + method.isAccessible = true + + // Set up the configuration with our test filters + val jsonObject = JSONObject() + try { + val filteredKey: String = KitUtils.hashForFiltering("Test1").toString() + val filteredKey2: String = KitUtils.hashForFiltering("Test2").toString() + jsonObject.put(filteredKey, 0) + jsonObject.put(filteredKey2, 1) + } catch (e: Exception) { + println("Exception occurred: ${e.message}") + } + + val json = JSONObject() + json.put("us", jsonObject) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", json)) + + // Invoke the method and get the result + val result = method.invoke(roktKit, attributes, roktKit.configuration) as Map + + // Verify the results + assertEquals(3, result.size) + + assertTrue(result.containsKey("filtered_key")) + assertTrue(result.containsKey("allowed_key")) + assertTrue(result.containsKey("another_allowed_key")) + assertEquals("another_allowed_value", result["another_allowed_key"]) + assertEquals("filtered_value", result["filtered_key"]) + assertEquals("allowed_value", result["allowed_key"]) + } + + internal inner class TestCoreCallbacks : CoreCallbacks { + override fun isBackgrounded(): Boolean = false + override fun getUserBucket(): Int = 0 + override fun isEnabled(): Boolean = false + override fun setIntegrationAttributes(kitId: Int, integrationAttributes: Map) {} + override fun getIntegrationAttributes(kitId: Int): Map? = null + override fun getCurrentActivity(): WeakReference? = null + override fun getLatestKitConfiguration(): JSONArray? = null + override fun getDataplanOptions(): DataplanOptions? = null + override fun isPushEnabled(): Boolean = false + override fun getPushSenderId(): String? = null + override fun getPushInstanceId(): String? = null + override fun getLaunchUri(): Uri? = null + override fun getLaunchAction(): String? = null + override fun getKitListener(): KitListener = object : KitListener { + override fun kitFound(kitId: Int) {} + override fun kitConfigReceived(kitId: Int, configuration: String?) {} + override fun kitExcluded(kitId: Int, reason: String?) {} + override fun kitStarted(kitId: Int) {} + override fun onKitApiCalled(kitId: Int, used: Boolean?, vararg objects: Any?) { + } + + override fun onKitApiCalled(methodName: String?, kitId: Int, used: Boolean?, vararg objects: Any?) { + } + } + } + + companion object { + private const val TEST_APPLICATION_ID = "app-abcdef1234567890" + private const val TEST_ATTRIBUTION_TOKEN = "srctok-abcdef1234567890" + private const val TEST_DEEP_LINK = "https://www.example.com/product/abc123" + private const val TEST_KIT_ID = 0x01 + + /* + * Test Helpers + */ + @Throws(Exception::class) + private fun setTestSdkVersion(sdkVersion: Int) { + setFinalStatic(VERSION::class.java.getField("SDK_INT"), sdkVersion) + } + + @Throws(Exception::class) + private fun setFinalStatic(field: Field, newValue: Int) { + field.isAccessible = true + val getDeclaredFields0 = Class::class.java.getDeclaredMethod( + "getDeclaredFields0", + Boolean::class.javaPrimitiveType, + ) + getDeclaredFields0.isAccessible = true + val fields = getDeclaredFields0.invoke(Field::class.java, false) as Array + var modifiersField: Field? = null + for (each in fields) { + if ("modifiers" == each.name) { + modifiersField = each + break + } + } + modifiersField!!.isAccessible = true + modifiersField.setInt(field, field.modifiers and Modifier.FINAL.inv()) + field[null] = newValue + } + } + + @Test + fun test_prepareFinalAttributes_logs_attributes_event() { + val mParticleMock = MParticle.getInstance()!! + val method: Method = RoktKit::class.java.getDeclaredMethod( + "prepareFinalAttributes", + FilteredMParticleUser::class.java, + Map::class.java, + ) + method.isAccessible = true + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + Mockito.`when`(mockFilterUser.id).thenReturn(9876L) + val userAttributes = hashMapOf("user_key" to "user_val") + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(userAttributes) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", JSONObject())) + val attributes: Map = mapOf("attr1" to "val1") + + method.invoke(roktKit, mockFilterUser, attributes) + + val eventCaptor = ArgumentCaptor.forClass(MPEvent::class.java) + Mockito.verify(mParticleMock).logEvent(eventCaptor.capture()) + + val loggedEvent = eventCaptor.value + assertEquals("selectPlacements", loggedEvent.eventName) + assertEquals(MParticle.EventType.Other, loggedEvent.eventType) + assertEquals( + mapOf( + "user_key" to "user_val", + "attr1" to "val1", + "mpid" to "9876", + ), + loggedEvent.customAttributes, + ) + } + + @Test + fun test_execute_logsMPEventWhenMParticleInstanceIsNull() { + // Arrange + mockkObject(Rokt) + every { + Rokt.execute( + any(), + any>(), + any(), + any(), + any(), + any(), + ) + } just runs + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + Mockito.`when`(mockFilterUser.id).thenReturn(12345L) + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(HashMap()) + + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", JSONObject())) + + val testAttributes = mapOf("key1" to "value1") + + // Set MParticle instance to null + MParticle.setInstance(null) + + roktKit.selectPlacements( + viewName = "test_view", + attributes = testAttributes, + mpRoktEventCallback = null, + placeHolders = null, + fontTypefaces = null, + filterUser = mockFilterUser, + mpRoktConfig = null, + placementOptions = null, + ) + + verify(exactly = 1) { + Rokt.execute( + any(), + any>(), + any(), + any(), + any(), + any(), + ) + } + + unmockkObject(Rokt) + } + + @Test + fun testSetSessionId_delegatesToRoktSdk() { + mockkObject(Rokt) + every { Rokt.setSessionId(any()) } just runs + + roktKit.setSessionId("test-session-id") + + verify { Rokt.setSessionId("test-session-id") } + unmockkObject(Rokt) + } + + @Test + fun testGetSessionId_returnsValueFromRoktSdk() { + mockkObject(Rokt) + every { Rokt.getSessionId() } returns "expected-session-id" + + val result = roktKit.getSessionId() + + assertEquals("expected-session-id", result) + verify { Rokt.getSessionId() } + unmockkObject(Rokt) + } + + private var emptyCoreCallbacks: CoreCallbacks = object : CoreCallbacks { + var activity = Activity() + override fun isBackgrounded(): Boolean = false + + override fun getUserBucket(): Int = 0 + + override fun isEnabled(): Boolean = false + + override fun setIntegrationAttributes(kitId: Int, integrationAttributes: Map) {} + + override fun getIntegrationAttributes(i: Int): Map? = null + + override fun getCurrentActivity(): WeakReference = WeakReference(activity) + + override fun getLatestKitConfiguration(): JSONArray? = null + + override fun getDataplanOptions(): DataplanOptions? = null + + override fun isPushEnabled(): Boolean = false + + override fun getPushSenderId(): String? = null + + override fun getPushInstanceId(): String? = null + + override fun getLaunchUri(): Uri? = null + + override fun getLaunchAction(): String? = null + + override fun getKitListener(): KitListener = object : KitListener { + override fun kitFound(kitId: Int) {} + override fun kitConfigReceived(kitId: Int, configuration: String?) {} + override fun kitExcluded(kitId: Int, reason: String?) {} + override fun kitStarted(kitId: Int) {} + override fun onKitApiCalled(kitId: Int, used: Boolean?, vararg objects: Any?) {} + override fun onKitApiCalled(methodName: String?, kitId: Int, used: Boolean?, vararg objects: Any?) {} + } + } + + @Test + fun testLogLevelMapping_VERBOSE() { + // Arrange + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + + // Act & Assert + assertEquals(RoktLogLevel.VERBOSE, method.invoke(roktKit, MParticle.LogLevel.VERBOSE)) + } + + @Test + fun testLogLevelMapping_DEBUG() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.DEBUG, method.invoke(roktKit, MParticle.LogLevel.DEBUG)) + } + + @Test + fun testLogLevelMapping_INFO() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.INFO, method.invoke(roktKit, MParticle.LogLevel.INFO)) + } + + @Test + fun testLogLevelMapping_WARNING() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.WARNING, method.invoke(roktKit, MParticle.LogLevel.WARNING)) + } + + @Test + fun testLogLevelMapping_ERROR() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.ERROR, method.invoke(roktKit, MParticle.LogLevel.ERROR)) + } + + @Test + fun testLogLevelMapping_NONE() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.NONE, method.invoke(roktKit, MParticle.LogLevel.NONE)) + } +} diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockApplication.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockApplication.kt new file mode 100644 index 000000000..8782e5d7f --- /dev/null +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockApplication.kt @@ -0,0 +1,34 @@ +package com.mparticle.kits.mocks + +import android.app.Application +import android.content.Context +import android.content.SharedPreferences +import android.content.pm.ApplicationInfo +import android.content.pm.PackageManager +import android.content.res.Resources + +class MockApplication(var mContext: MockContext) : Application() { + var mCallbacks: ActivityLifecycleCallbacks? = null + override fun registerActivityLifecycleCallbacks(callback: ActivityLifecycleCallbacks) { + mCallbacks = callback + } + + override fun getApplicationContext(): Context = this + + fun setSharedPreferences(prefs: SharedPreferences) { + mContext.setSharedPreferences(prefs) + } + + override fun getSystemService(name: String): Any? = mContext.getSystemService(name) + + override fun getSharedPreferences(name: String, mode: Int): SharedPreferences = + mContext.getSharedPreferences(name, mode) + + override fun getPackageManager(): PackageManager = mContext.packageManager + + override fun getPackageName(): String = mContext.packageName + + override fun getApplicationInfo(): ApplicationInfo = mContext.applicationInfo + + override fun getResources(): Resources = mContext.resources +} diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockContext.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockContext.kt new file mode 100644 index 000000000..4f18060ec --- /dev/null +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockContext.kt @@ -0,0 +1,359 @@ +package com.mparticle.kits.mocks + +import android.content.BroadcastReceiver +import android.content.ComponentName +import android.content.ContentResolver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.content.IntentSender +import android.content.IntentSender.SendIntentException +import android.content.ServiceConnection +import android.content.SharedPreferences +import android.content.pm.ApplicationInfo +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.content.pm.PackageManager.NameNotFoundException +import android.content.res.AssetManager +import android.content.res.Configuration +import android.content.res.Resources +import android.content.res.Resources.Theme +import android.database.DatabaseErrorHandler +import android.database.sqlite.SQLiteDatabase +import android.database.sqlite.SQLiteDatabase.CursorFactory +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.net.Uri +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.os.UserHandle +import android.telephony.TelephonyManager +import android.view.Display +import junit.framework.Assert +import org.mockito.Mockito +import java.io.File +import java.io.FileInputStream +import java.io.FileNotFoundException +import java.io.FileOutputStream +import java.io.IOException +import java.io.InputStream + +class MockContext : Context() { + private var sharedPreferences: SharedPreferences = MockSharedPreferences() + private var resources: Resources = MockResources() + var application: MockApplication? = null + fun setSharedPreferences(prefs: SharedPreferences) { + sharedPreferences = prefs + } + + override fun getApplicationContext(): Context { + if (application == null) { + application = MockApplication(this) + } + return application as MockApplication + } + + override fun checkCallingOrSelfPermission(permission: String): Int = PackageManager.PERMISSION_GRANTED + + override fun getSharedPreferences(name: String, mode: Int): SharedPreferences = sharedPreferences + + override fun getResources(): Resources = resources + + override fun getSystemService(name: String): Any? = if (name == TELEPHONY_SERVICE) { + Mockito.mock(TelephonyManager::class.java) + } else { + null + } + + override fun getPackageManager(): PackageManager { + val manager = Mockito.mock(PackageManager::class.java) + val info = Mockito.mock(PackageInfo::class.java) + info.versionName = "42" + info.versionCode = 42 + val appInfo = Mockito.mock(ApplicationInfo::class.java) + try { + Mockito.`when`(manager.getPackageInfo(Mockito.anyString(), Mockito.anyInt())).thenReturn(info) + Mockito.`when`(manager.getInstallerPackageName(Mockito.anyString())) + .thenReturn("com.mparticle.test.installer") + Mockito.`when`(manager.getApplicationInfo(Mockito.anyString(), Mockito.anyInt())).thenReturn(appInfo) + Mockito.`when`(manager.getApplicationLabel(appInfo)).thenReturn("test label") + } catch (e: Exception) { + Assert.fail(e.toString()) + } + return manager + } + + override fun getPackageName(): String = "com.mparticle.test" + + override fun getApplicationInfo(): ApplicationInfo = ApplicationInfo() + + /** + * Stubbed methods + */ + override fun setTheme(resid: Int) {} + override fun getTheme(): Theme? = null + + override fun getClassLoader(): ClassLoader? = null + + override fun sendBroadcast(intent: Intent) {} + override fun sendBroadcast(intent: Intent, receiverPermission: String?) {} + override fun sendOrderedBroadcast(intent: Intent, receiverPermission: String?) {} + override fun sendOrderedBroadcast( + intent: Intent, + receiverPermission: String?, + resultReceiver: BroadcastReceiver?, + scheduler: Handler?, + initialCode: Int, + initialData: String?, + initialExtras: Bundle?, + ) { + } + + override fun sendBroadcastAsUser(intent: Intent, user: UserHandle) {} + override fun sendBroadcastAsUser(intent: Intent, user: UserHandle, receiverPermission: String?) { + } + + override fun sendOrderedBroadcastAsUser( + intent: Intent, + user: UserHandle, + receiverPermission: String?, + resultReceiver: BroadcastReceiver, + scheduler: Handler?, + initialCode: Int, + initialData: String?, + initialExtras: Bundle?, + ) { + } + + override fun sendStickyBroadcast(intent: Intent) {} + override fun sendStickyOrderedBroadcast( + intent: Intent, + resultReceiver: BroadcastReceiver, + scheduler: Handler?, + initialCode: Int, + initialData: String?, + initialExtras: Bundle?, + ) { + } + + override fun removeStickyBroadcast(intent: Intent) {} + override fun sendStickyBroadcastAsUser(intent: Intent, user: UserHandle) {} + override fun sendStickyOrderedBroadcastAsUser( + intent: Intent, + user: UserHandle, + resultReceiver: BroadcastReceiver, + scheduler: Handler?, + initialCode: Int, + initialData: String?, + initialExtras: Bundle?, + ) { + } + + override fun removeStickyBroadcastAsUser(intent: Intent, user: UserHandle) {} + override fun registerReceiver(receiver: BroadcastReceiver?, filter: IntentFilter): Intent? = null + + override fun registerReceiver(receiver: BroadcastReceiver?, filter: IntentFilter, flags: Int): Intent? = null + + override fun registerReceiver( + receiver: BroadcastReceiver, + filter: IntentFilter, + broadcastPermission: String?, + scheduler: Handler?, + ): Intent? = null + + override fun registerReceiver( + receiver: BroadcastReceiver, + filter: IntentFilter, + broadcastPermission: String?, + scheduler: Handler?, + flags: Int, + ): Intent? = null + + override fun unregisterReceiver(receiver: BroadcastReceiver) {} + override fun startService(service: Intent): ComponentName? = null + + override fun startForegroundService(service: Intent): ComponentName? = null + + override fun stopService(service: Intent): Boolean = false + + override fun bindService(service: Intent, conn: ServiceConnection, flags: Int): Boolean = false + + override fun unbindService(conn: ServiceConnection) {} + override fun startInstrumentation(className: ComponentName, profileFile: String?, arguments: Bundle?): Boolean = + false + + override fun checkSelfPermission(permission: String): Int = 0 + + override fun enforcePermission(permission: String, pid: Int, uid: Int, message: String?) {} + override fun enforceCallingPermission(permission: String, message: String?) {} + override fun enforceCallingOrSelfPermission(permission: String, message: String?) {} + override fun grantUriPermission(toPackage: String, uri: Uri, modeFlags: Int) {} + override fun revokeUriPermission(uri: Uri, modeFlags: Int) {} + override fun revokeUriPermission(toPackage: String, uri: Uri, modeFlags: Int) {} + override fun checkUriPermission(uri: Uri, pid: Int, uid: Int, modeFlags: Int): Int = 0 + + override fun checkCallingUriPermission(uri: Uri, modeFlags: Int): Int = 0 + + override fun checkCallingOrSelfUriPermission(uri: Uri, modeFlags: Int): Int = 0 + + override fun checkUriPermission( + uri: Uri?, + readPermission: String?, + writePermission: String?, + pid: Int, + uid: Int, + modeFlags: Int, + ): Int = 0 + + override fun enforceUriPermission(uri: Uri, pid: Int, uid: Int, modeFlags: Int, message: String) { + } + + override fun enforceCallingUriPermission(uri: Uri, modeFlags: Int, message: String) {} + override fun enforceCallingOrSelfUriPermission(uri: Uri, modeFlags: Int, message: String) {} + override fun enforceUriPermission( + uri: Uri?, + readPermission: String?, + writePermission: String?, + pid: Int, + uid: Int, + modeFlags: Int, + message: String?, + ) { + } + + @Throws(NameNotFoundException::class) + override fun createPackageContext(packageName: String, flags: Int): Context? = null + + @Throws(NameNotFoundException::class) + override fun createContextForSplit(splitName: String): Context? = null + + override fun createConfigurationContext(overrideConfiguration: Configuration): Context? = null + + override fun createDisplayContext(display: Display): Context? = null + + override fun createDeviceProtectedStorageContext(): Context? = null + + override fun isDeviceProtectedStorage(): Boolean = false + + override fun moveSharedPreferencesFrom(sourceContext: Context, name: String): Boolean = false + + override fun deleteSharedPreferences(name: String): Boolean = false + + @Throws(FileNotFoundException::class) + override fun openFileInput(name: String): FileInputStream? = null + + @Throws(FileNotFoundException::class) + override fun openFileOutput(name: String, mode: Int): FileOutputStream? = null + + override fun deleteFile(name: String): Boolean = false + + override fun getFileStreamPath(name: String): File? = null + + override fun getDataDir(): File? = null + + override fun getFilesDir(): File? = null + + override fun getNoBackupFilesDir(): File? = null + + override fun getExternalFilesDir(type: String?): File? = null + + override fun getExternalFilesDirs(type: String): Array = arrayOfNulls(0) + + override fun getObbDir(): File? = null + + override fun getObbDirs(): Array = arrayOfNulls(0) + + override fun getCacheDir(): File? = null + + override fun getCodeCacheDir(): File? = null + + override fun getExternalCacheDir(): File? = null + + override fun getExternalCacheDirs(): Array = arrayOfNulls(0) + + override fun getExternalMediaDirs(): Array = arrayOfNulls(0) + + override fun fileList(): Array = arrayOfNulls(0) + + override fun getDir(name: String, mode: Int): File? = null + + override fun openOrCreateDatabase(name: String, mode: Int, factory: CursorFactory): SQLiteDatabase? = null + + override fun openOrCreateDatabase( + name: String, + mode: Int, + factory: CursorFactory, + errorHandler: DatabaseErrorHandler?, + ): SQLiteDatabase? = null + + override fun moveDatabaseFrom(sourceContext: Context, name: String): Boolean = false + + override fun deleteDatabase(name: String): Boolean = false + + override fun getDatabasePath(name: String): File? = null + + override fun databaseList(): Array = arrayOfNulls(0) + + override fun getWallpaper(): Drawable? = null + + override fun peekWallpaper(): Drawable? = null + + override fun getWallpaperDesiredMinimumWidth(): Int = 0 + + override fun getWallpaperDesiredMinimumHeight(): Int = 0 + + @Throws(IOException::class) + override fun setWallpaper(bitmap: Bitmap) { + } + + @Throws(IOException::class) + override fun setWallpaper(data: InputStream) { + } + + @Throws(IOException::class) + override fun clearWallpaper() { + } + + override fun startActivity(intent: Intent) {} + override fun startActivity(intent: Intent, options: Bundle?) {} + override fun startActivities(intents: Array) {} + override fun startActivities(intents: Array, options: Bundle) {} + + @Throws(SendIntentException::class) + override fun startIntentSender( + intent: IntentSender, + fillInIntent: Intent?, + flagsMask: Int, + flagsValues: Int, + extraFlags: Int, + ) { + } + + @Throws(SendIntentException::class) + override fun startIntentSender( + intent: IntentSender, + fillInIntent: Intent?, + flagsMask: Int, + flagsValues: Int, + extraFlags: Int, + options: Bundle?, + ) { + } + + override fun getSystemServiceName(serviceClass: Class<*>): String? = null + + override fun checkPermission(permission: String, pid: Int, uid: Int): Int = 0 + + override fun checkCallingPermission(permission: String): Int = 0 + + override fun getContentResolver(): ContentResolver? = null + + override fun getMainLooper(): Looper? = null + + override fun getPackageResourcePath(): String? = null + + override fun getPackageCodePath(): String? = null + + override fun getAssets(): AssetManager? = null +} diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockContextApplication.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockContextApplication.kt new file mode 100644 index 000000000..c9017bd28 --- /dev/null +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockContextApplication.kt @@ -0,0 +1,15 @@ +package com.mparticle.kits.mocks + +import android.app.Application +import android.content.Context +import android.content.SharedPreferences + +class MockContextApplication : Application() { + override fun getApplicationContext(): Context = this + + override fun getSharedPreferences(name: String, mode: Int): SharedPreferences = MockSharedPreferences() + + override fun registerActivityLifecycleCallbacks(callback: ActivityLifecycleCallbacks) { + // do nothing + } +} diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt new file mode 100644 index 000000000..56558c088 --- /dev/null +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt @@ -0,0 +1,75 @@ +package com.mparticle.kits.mocks + +import android.util.SparseBooleanArray +import com.mparticle.internal.Logger +import com.mparticle.kits.KitConfiguration +import org.json.JSONException +import org.json.JSONObject + +open class MockKitConfiguration : KitConfiguration() { + @Throws(JSONException::class) + override fun parseConfiguration(json: JSONObject): KitConfiguration { + mTypeFilters = MockSparseBooleanArray() + mNameFilters = MockSparseBooleanArray() + mAttributeFilters = MockSparseBooleanArray() + mScreenNameFilters = MockSparseBooleanArray() + mScreenAttributeFilters = MockSparseBooleanArray() + mUserIdentityFilters = MockSparseBooleanArray() + mUserAttributeFilters = MockSparseBooleanArray() + mCommerceAttributeFilters = MockSparseBooleanArray() + mCommerceEntityFilters = MockSparseBooleanArray() + return super.parseConfiguration(json) + } + + override fun convertToSparseArray(json: JSONObject): SparseBooleanArray { + val map: SparseBooleanArray = MockSparseBooleanArray() + val iterator = json.keys() + while (iterator.hasNext()) { + try { + val key = iterator.next().toString() + map.put(key.toInt(), json.getInt(key) == 1) + } catch (jse: JSONException) { + Logger.error("Issue while parsing kit configuration: " + jse.message) + } + } + return map + } + + internal inner class MockSparseBooleanArray : SparseBooleanArray() { + override fun get(key: Int): Boolean = get(key, false) + + override fun get(key: Int, valueIfKeyNotFound: Boolean): Boolean { + print("SparseArray getting: $key") + return if (map.containsKey(key)) { + map[key] ?: valueIfKeyNotFound + } else { + valueIfKeyNotFound + } + } + + var map: MutableMap = HashMap() + override fun put(key: Int, value: Boolean) { + map[key] = value + } + + override fun clear() { + map.clear() + } + + override fun size(): Int = map.size + + override fun toString(): String = map.toString() + } + + companion object { + @Throws(JSONException::class) + fun createKitConfiguration(json: JSONObject): KitConfiguration = MockKitConfiguration().parseConfiguration(json) + + @Throws(JSONException::class) + fun createKitConfiguration(): KitConfiguration { + val jsonObject = JSONObject() + jsonObject.put("id", 42) + return MockKitConfiguration().parseConfiguration(jsonObject) + } + } +} diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockKitManagerImpl.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockKitManagerImpl.kt new file mode 100644 index 000000000..ed175dd8e --- /dev/null +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockKitManagerImpl.kt @@ -0,0 +1,47 @@ +package com.mparticle.kits.mocks + +import android.content.Context +import com.mparticle.MParticleOptions +import com.mparticle.internal.CoreCallbacks +import com.mparticle.internal.CoreCallbacks.KitListener +import com.mparticle.internal.ReportingManager +import com.mparticle.kits.KitConfiguration +import com.mparticle.kits.KitManagerImpl +import org.json.JSONException +import org.json.JSONObject +import org.mockito.Mockito + +class MockKitManagerImpl(context: Context?, reportingManager: ReportingManager?, coreCallbacks: CoreCallbacks?) : + KitManagerImpl( + context, + reportingManager, + coreCallbacks, + Mockito.mock( + MParticleOptions::class.java, + ), + ) { + constructor() : this( + MockContext(), + Mockito.mock(ReportingManager::class.java), + Mockito.mock( + CoreCallbacks::class.java, + ), + ) { + Mockito.`when`(mCoreCallbacks.getKitListener()).thenReturn( + object : KitListener { + override fun kitFound(kitId: Int) {} + override fun kitConfigReceived(kitId: Int, configuration: String?) {} + override fun kitExcluded(kitId: Int, reason: String?) {} + override fun kitStarted(kitId: Int) {} + override fun onKitApiCalled(kitId: Int, used: Boolean?, vararg objects: Any?) {} + override fun onKitApiCalled(methodName: String?, kitId: Int, used: Boolean?, vararg objects: Any?) {} + }, + ) + } + + @Throws(JSONException::class) + override fun createKitConfiguration(configuration: JSONObject): KitConfiguration = + MockKitConfiguration.createKitConfiguration(configuration) + + override fun getUserBucket(): Int = 50 +} diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockResources.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockResources.kt new file mode 100644 index 000000000..7f853be13 --- /dev/null +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockResources.kt @@ -0,0 +1,31 @@ +package com.mparticle.kits.mocks + +import android.content.res.Resources + +class MockResources : Resources(null, null, null) { + override fun getIdentifier(name: String, defType: String, defPackage: String): Int { + if (name == "mp_key") { + return 1 + } else if (name == "mp_secret") { + return 2 + } + return 0 + } + + @Throws(NotFoundException::class) + override fun getString(id: Int): String { + when (id) { + 1 -> return TEST_APP_KEY + 2 -> return TEST_APP_SECRET + } + return "" + } + + @Throws(NotFoundException::class) + override fun getString(id: Int, vararg formatArgs: Any): String = super.getString(id, *formatArgs) + + companion object { + const val TEST_APP_KEY = "the app key" + const val TEST_APP_SECRET = "the app secret" + } +} diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockSharedPreferences.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockSharedPreferences.kt new file mode 100644 index 000000000..8b99f8fad --- /dev/null +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/mocks/MockSharedPreferences.kt @@ -0,0 +1,53 @@ +package com.mparticle.kits.mocks + +import android.content.SharedPreferences +import android.content.SharedPreferences.Editor +import android.content.SharedPreferences.OnSharedPreferenceChangeListener +import java.util.TreeSet + +class MockSharedPreferences : + SharedPreferences, + Editor { + + override fun getAll(): Map? = null + + override fun getString(key: String, defValue: String?): String = "" + + override fun getStringSet(key: String, defValues: Set?): Set = TreeSet() + + override fun getInt(key: String, defValue: Int): Int = 0 + + override fun getLong(key: String, defValue: Long): Long = 0 + + override fun getFloat(key: String, defValue: Float): Float = 0f + + override fun getBoolean(key: String, defValue: Boolean): Boolean = false + + override fun contains(key: String): Boolean = false + + override fun edit(): Editor = this + + override fun registerOnSharedPreferenceChangeListener(listener: OnSharedPreferenceChangeListener) {} + + override fun unregisterOnSharedPreferenceChangeListener(listener: OnSharedPreferenceChangeListener) {} + + override fun putString(key: String, value: String?): Editor = this + + override fun putStringSet(key: String, values: Set?): Editor = this + + override fun putInt(key: String, value: Int): Editor = this + + override fun putLong(key: String, value: Long): Editor = this + + override fun putFloat(key: String, value: Float): Editor = this + + override fun putBoolean(key: String, value: Boolean): Editor = this + + override fun remove(key: String): Editor = this + + override fun clear(): Editor = this + + override fun commit(): Boolean = false + + override fun apply() {} +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 7e70a694f..0961ac6fa 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -29,7 +29,7 @@ include ( ':kits:radar-kit', ':kits:responsys-kit', ':kits:revealmobile-kit', - ':kits:rokt-kit', + ':kits:rokt:rokt', ':kits:singular-kit', ':kits:skyhook-kit', //Swrve hosts kit From 47b3f39f0f8b58d69da243640debe729448208eb Mon Sep 17 00:00:00 2001 From: denischilik Date: Mon, 9 Mar 2026 11:25:37 -0400 Subject: [PATCH 06/61] feat: Kochava 5 Kit Migrate (#654) * feat: migrate kochava-kit from submodule to regular directory * feat: relocate kochava-kit to kits/kochava/kochava-5 and update settings-kits.gradle Made-with: Cursor * fix typo --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/kochava-kit | 1 - kits/kochava/kochava-5/README.md | 107 ++++++++ kits/kochava/kochava-5/build.gradle | 66 +++++ kits/kochava/kochava-5/consumer-proguard.pro | 3 + kits/kochava/kochava-5/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/kochava/kochava-5/gradlew | 234 ++++++++++++++++++ kits/kochava/kochava-5/gradlew.bat | 89 +++++++ kits/kochava/kochava-5/settings.gradle.kts | 2 + .../kochava-5/src/main/AndroidManifest.xml | 5 + .../kotlin/com/mparticle/kits/KochavaKit.kt | 202 +++++++++++++++ .../com/mparticle/kits/KochavaKitTest.kt | 53 ++++ settings-kits.gradle | 2 +- 16 files changed, 772 insertions(+), 5 deletions(-) delete mode 160000 kits/kochava-kit create mode 100644 kits/kochava/kochava-5/README.md create mode 100644 kits/kochava/kochava-5/build.gradle create mode 100644 kits/kochava/kochava-5/consumer-proguard.pro create mode 100644 kits/kochava/kochava-5/gradle.properties create mode 100644 kits/kochava/kochava-5/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/kochava/kochava-5/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/kochava/kochava-5/gradlew create mode 100644 kits/kochava/kochava-5/gradlew.bat create mode 100644 kits/kochava/kochava-5/settings.gradle.kts create mode 100644 kits/kochava/kochava-5/src/main/AndroidManifest.xml create mode 100644 kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt create mode 100644 kits/kochava/kochava-5/src/test/kotlin/com/mparticle/kits/KochavaKitTest.kt diff --git a/.gitmodules b/.gitmodules index 396e5c971..b0e8e91a9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -40,9 +40,6 @@ [submodule "kits/iterable-kit"] path = kits/iterable-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-iterable.git -[submodule "kits/kochava-kit"] - path = kits/kochava-kit - url = git@github.com:mParticle-integrations/mparticle-android-integration-kochava.git [submodule "kits/leanplum-kit"] path = kits/leanplum-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-leanplum.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 948e1d7a5..192260e98 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -71,6 +71,7 @@ lint: - kits/braze/braze-38/** - kits/ga/ga-23/** - kits/ga4/ga4-23/** + - kits/kochava/kochava-5/** - kits/rokt/rokt/** actions: enabled: diff --git a/kits/kochava-kit b/kits/kochava-kit deleted file mode 160000 index 65855e512..000000000 --- a/kits/kochava-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 65855e51269c1a472d2ac105ba305c6a2be4b8ad diff --git a/kits/kochava/kochava-5/README.md b/kits/kochava/kochava-5/README.md new file mode 100644 index 000000000..add50b8ad --- /dev/null +++ b/kits/kochava/kochava-5/README.md @@ -0,0 +1,107 @@ +## Kochava Kit Integration + +This repository contains the [Kochava](https://www.kochava.com) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + + ``` +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-kochava-kit:5+' + } + ``` +2. Add the following dependencies to enable various Kochava capabilites. + + > + > NOTE: Starting with Play Services 15 the dependency requirements have changed. The Android Advertising ID (adid) collection has moved out of play-services “base” and into “ads-identifier”. Use the appropriate option for the version of Play Services you are using as indicated below. + > + > ``` + > dependencies { + > + > //Required: Google Play Services Ads Identifier (If publishing to the Google Play Store) + > implementation 'com.google.android.gms:play-services-ads-identifier:15.0.1' + > //Required: If using Play Services prior to version 15. + > //implementation 'com.google.android.gms:play-services-base:12.0.1' + > + > //Required: Install Referrer (If publishing to the Google Play Store) + > implementation 'com.android.installreferrer:installreferrer:1+' + > + > //Optional: Location Collection. Note: This feature must also be enabled server side before collection will occur. + > implementation 'com.google.android.gms:play-services-location:15.0.1' + > + > //Optional: Instant App Status Collection + > implementation 'com.google.android.instantapps:instantapps:1.1.0' + > } + > ``` + > https://support.kochava.com/sdk-integration/sdk-kochavatracker-android/_ + + +3. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Kochava detected"` in the output of `adb logcat`. +4. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Kochava integration](https://docs.mparticle.com/integrations/kochava/event/) + +### IdentityLink + +If you would like to associate the Account Identity with a custom Identifier that is not the Device Identity, you can include the data in the Kochava kit's initialization, by calling `KochavaKit.setIdentityLink` before `MParticle.start()` + +``` +Map identityLink = new HashMap(); +identityLink.put("key1", "identity1"); +identityLink.put("key2", "identity2"); +KochavaKit.setIdentityLink(identityLink); +``` + +### Attribution, Deeplinking and Enhanced Deeplinking results + +Kochava offers a number of APIs to process attribution and deeplinking data. In our abstraction, the +results from these are all routed to our `AttributionListener` under distinct, constant keys. + +```kotlin +val attributionListener = object: AttributionListener { + override fun onResult(result: AttributionResult) { + when (result.serviceProviderId) { + MParticle.ServiceProviders.KOCHAVA -> { + val parameters = result.parameters ?: JSONObject() + + //process Attribution results + if (parameters.has(KochavaKit.ATTRIBUTION_PARAMETERS)) { + val attributionParamters = + parameters.getJSONObject(KochavaKit.ATTRIBUTION_PARAMETERS) + } + + //process Deeplink results + if (parameters.has(KochavaKit.DEEPLINK_PARAMETERS)) { + val deeplinkParameters = + parameters.getJSONObject(KochavaKit.DEEPLINK_PARAMETERS) + } + + //process Enhanced Deeplink results + if (parameters.has(KochavaKit.ENHANCED_DEEPLINK_PARAMETERS)) { + val enhancedDeeplinkParameters = + parameters.getJSONObject(KochavaKit.ENHANCED_DEEPLINK_PARAMETERS) + } + } + } + } + + override fun onError(error: AttributionError) { + //error handling + } +} + +MParticle.start( + MParticleOptions.builder(this) + .attributionListener(attributionListener) + .build() +) + +``` + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/kochava/kochava-5/build.gradle b/kits/kochava/kochava-5/build.gradle new file mode 100644 index 000000000..d7351440d --- /dev/null +++ b/kits/kochava/kochava-5/build.gradle @@ -0,0 +1,66 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-kochava" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.kochava' + 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 { + def kochava_tracker_version = "5.4.0" + implementation("com.kochava.tracker:tracker:$kochava_tracker_version") // Required + implementation("com.kochava.tracker:events:$kochava_tracker_version") // Optional + implementation("com.kochava.tracker:engagement:$kochava_tracker_version") // Optional + implementation("com.kochava.tracker:datapointnetwork:$kochava_tracker_version") // Optional + implementation("com.kochava.tracker:legacyreferrer:$kochava_tracker_version") // Optional +} diff --git a/kits/kochava/kochava-5/consumer-proguard.pro b/kits/kochava/kochava-5/consumer-proguard.pro new file mode 100644 index 000000000..ba2a55fcb --- /dev/null +++ b/kits/kochava/kochava-5/consumer-proguard.pro @@ -0,0 +1,3 @@ +# These are the proguard rules specified by the Kochava SDK's documentation + +-keep class kochava.android.** { *; } diff --git a/kits/kochava/kochava-5/gradle.properties b/kits/kochava/kochava-5/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/kochava/kochava-5/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/kochava/kochava-5/gradle/wrapper/gradle-wrapper.jar b/kits/kochava/kochava-5/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/kochava/kochava-5/gradle/wrapper/gradle-wrapper.properties b/kits/kochava/kochava-5/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/kochava/kochava-5/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/kochava/kochava-5/gradlew b/kits/kochava/kochava-5/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/kochava/kochava-5/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/kochava/kochava-5/gradlew.bat b/kits/kochava/kochava-5/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/kochava/kochava-5/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/kochava/kochava-5/settings.gradle.kts b/kits/kochava/kochava-5/settings.gradle.kts new file mode 100644 index 000000000..10d41908b --- /dev/null +++ b/kits/kochava/kochava-5/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-kochava-kit" +include(":") diff --git a/kits/kochava/kochava-5/src/main/AndroidManifest.xml b/kits/kochava/kochava-5/src/main/AndroidManifest.xml new file mode 100644 index 000000000..9863e2514 --- /dev/null +++ b/kits/kochava/kochava-5/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt new file mode 100644 index 000000000..04ccd31cf --- /dev/null +++ b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt @@ -0,0 +1,202 @@ +package com.mparticle.kits + +import android.content.Context +import android.content.Intent +import android.location.Location +import com.kochava.tracker.Tracker +import com.kochava.tracker.log.LogLevel +import com.mparticle.AttributionError +import com.mparticle.AttributionResult +import com.mparticle.MParticle.IdentityType +import com.mparticle.identity.MParticleUser +import com.mparticle.kits.KitIntegration.AttributeListener +import org.json.JSONException +import org.json.JSONObject + +class KochavaKit : + KitIntegration(), + AttributeListener, + KitIntegration.IdentityListener { + override fun getName(): String = NAME + + override fun onKitCreate( + settings: Map, + context: Context, + ): List? { + val attributionEnabled = java.lang.Boolean.parseBoolean(getSettings()[RETRIEVE_ATT_DATA]) + var logLevel = LogLevel.NONE + if (java.lang.Boolean.parseBoolean(getSettings()[ENABLE_LOGGING])) { + logLevel = LogLevel.DEBUG + } + Tracker.getInstance().setLogLevel(logLevel) + + Tracker + .getInstance() + .setAppLimitAdTracking(java.lang.Boolean.parseBoolean(getSettings()[LIMIT_ADD_TRACKING])) + val configuration = getSettings()[APP_ID] + if (configuration != null) { + Tracker.getInstance().startWithAppGuid(context.applicationContext, configuration) + + identityLink?.let { + for (link in it) { + Tracker.getInstance().registerIdentityLink(link.key, link.value) + } + } + try { + if (attributionEnabled) { + val currentInstallAttribution = Tracker.getInstance().installAttribution + if (!currentInstallAttribution.isRetrieved) { + Tracker.getInstance().retrieveInstallAttribution { installAttribution -> + try { + setAttributionResultParameter( + ATTRIBUTION_PARAMETERS, + installAttribution.toJson(), + ) + } catch (e: JSONException) { + val error = + AttributionError() + .setMessage("unable to parse attribution JSON:\n $installAttribution") + kitManager.onError(error) + } + } + } + Tracker + .getInstance() + .processDeeplink(kitManager.launchUri.toString()) { deeplink -> + setAttributionResultParameter( + ENHANCED_DEEPLINK_PARAMETERS, + deeplink.toJson(), + ) + } + } + } catch (e: Exception) { + e.toString() + } + } + return null + } + + override fun setLocation(location: Location) { + } + + override fun setUserAttribute( + attributeKey: String, + attributeValue: String, + ) {} + + override fun setUserAttributeList( + s: String, + list: List, + ) {} + + override fun supportsAttributeLists(): Boolean = true + + override fun setAllUserAttributes( + map: Map, + map1: Map>, + ) {} + + override fun removeUserAttribute(key: String) {} + + override fun setInstallReferrer(intent: Intent) {} + + override fun setUserIdentity( + identityType: IdentityType, + id: String, + ) { + val possibleIdentities = listOf(USER_IDENTIFICATION_TYPE, EMAIL_IDENTIFICATION_TYPE) + possibleIdentities.forEach { + if (it == identityType.name) { + Tracker.getInstance().registerIdentityLink(it, id) + } + } + } + + override fun removeUserIdentity(identityType: IdentityType) {} + + override fun logout(): List = emptyList() + + override fun setOptOut(optOutStatus: Boolean): List { + Tracker.getInstance().setAppLimitAdTracking(optOutStatus) + + return listOf( + ReportingMessage( + this, + ReportingMessage.MessageType.OPT_OUT, + System.currentTimeMillis(), + null, + ).setOptOut(optOutStatus), + ) + } + + private fun setAttributionResultParameter( + key: String, + value: JSONObject, + ) { + try { + val parameters = JSONObject().put(key, value) + val result = + AttributionResult() + .setServiceProviderId(configuration.kitId) + .setParameters(parameters) + kitManager.onResult(result) + } catch (e: JSONException) { + val error = + AttributionError() + .setServiceProviderId(configuration.kitId) + .setMessage(e.message) + kitManager.onError(error) + } + } + + companion object { + const val ATTRIBUTION_PARAMETERS = "attribution" + const val DEEPLINK_PARAMETERS = "deeplink" + const val ENHANCED_DEEPLINK_PARAMETERS = "enhancedDeeplink" + private const val APP_ID = "appId" + private const val USER_IDENTIFICATION_TYPE = "CustomerId" + private const val EMAIL_IDENTIFICATION_TYPE = "Email" + private const val LIMIT_ADD_TRACKING = "limitAdTracking" + private const val RETRIEVE_ATT_DATA = "retrieveAttributionData" + private const val ENABLE_LOGGING = "enableLogging" + const val NAME = "Kochava" + private var identityLink: Map? = null + + fun setIdentityLink(identityLink: Map?) { + Companion.identityLink = identityLink + } + } + + override fun onIdentifyCompleted( + user: MParticleUser?, + p1: FilteredIdentityApiRequest?, + ) { + } + + override fun onLoginCompleted( + user: MParticleUser?, + p1: FilteredIdentityApiRequest?, + ) { + val identityLinks = mutableMapOf() + user?.userIdentities?.iterator()?.forEach { + identityLinks.put(it.key.name, it.value) + setUserIdentity(it.key, it.value) + } + setIdentityLink(identityLink) + } + + override fun onLogoutCompleted( + user: MParticleUser?, + p1: FilteredIdentityApiRequest?, + ) { + } + + override fun onModifyCompleted( + user: MParticleUser?, + p1: FilteredIdentityApiRequest?, + ) { + } + + override fun onUserIdentified(user: MParticleUser?) { + } +} diff --git a/kits/kochava/kochava-5/src/test/kotlin/com/mparticle/kits/KochavaKitTest.kt b/kits/kochava/kochava-5/src/test/kotlin/com/mparticle/kits/KochavaKitTest.kt new file mode 100644 index 000000000..f07479784 --- /dev/null +++ b/kits/kochava/kochava-5/src/test/kotlin/com/mparticle/kits/KochavaKitTest.kt @@ -0,0 +1,53 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MParticleOptions +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito + +class KochavaKitTest { + private val kit: KitIntegration + get() = KochavaKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(!name.isNullOrEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 0961ac6fa..b10b91143 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -19,7 +19,7 @@ include ( ':kits:ga:ga-23', ':kits:ga4:ga4-23', ':kits:iterable-kit', - ':kits:kochava-kit', + ':kits:kochava:kochava-5', ':kits:leanplum-kit', ':kits:localytics-kit', //Neura hosts kit From 66a14a710a0b57ca78be2c2a643a992d17bee431 Mon Sep 17 00:00:00 2001 From: denischilik Date: Mon, 9 Mar 2026 12:48:12 -0400 Subject: [PATCH 07/61] feat: Migrate Adjust kit (#656) * feat: migrate adjust-kit from submodule to regular directory * feat: relocate adjust-kit to kits/adjust/adjust-5 * feat: add adjust-5 to settings-kits.gradle Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/adjust-kit | 1 - kits/adjust/adjust-5/README.md | 23 ++ kits/adjust/adjust-5/build.gradle | 62 +++++ kits/adjust/adjust-5/consumer-proguard.pro | 17 ++ kits/adjust/adjust-5/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/adjust/adjust-5/gradlew | 234 ++++++++++++++++++ kits/adjust/adjust-5/gradlew.bat | 89 +++++++ kits/adjust/adjust-5/libs/java-json.jar | Bin 0 -> 84697 bytes kits/adjust/adjust-5/settings.gradle.kts | 2 + .../adjust-5/src/main/AndroidManifest.xml | 1 + .../kotlin/com/mparticle/kits/AdjustKit.kt | 163 ++++++++++++ .../mparticle/kits/OnDeeplinkEventListener.kt | 7 + .../com/mparticle/kits/AdjustKitTests.kt | 78 ++++++ settings-kits.gradle | 2 +- 18 files changed, 686 insertions(+), 5 deletions(-) delete mode 160000 kits/adjust-kit create mode 100644 kits/adjust/adjust-5/README.md create mode 100644 kits/adjust/adjust-5/build.gradle create mode 100644 kits/adjust/adjust-5/consumer-proguard.pro create mode 100644 kits/adjust/adjust-5/gradle.properties create mode 100644 kits/adjust/adjust-5/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/adjust/adjust-5/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/adjust/adjust-5/gradlew create mode 100644 kits/adjust/adjust-5/gradlew.bat create mode 100755 kits/adjust/adjust-5/libs/java-json.jar create mode 100644 kits/adjust/adjust-5/settings.gradle.kts create mode 100644 kits/adjust/adjust-5/src/main/AndroidManifest.xml create mode 100644 kits/adjust/adjust-5/src/main/kotlin/com/mparticle/kits/AdjustKit.kt create mode 100644 kits/adjust/adjust-5/src/main/kotlin/com/mparticle/kits/OnDeeplinkEventListener.kt create mode 100644 kits/adjust/adjust-5/src/test/kotlin/com/mparticle/kits/AdjustKitTests.kt diff --git a/.gitmodules b/.gitmodules index b0e8e91a9..f88b41afa 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "kits/adjust-kit"] - path = kits/adjust-kit - url = git@github.com:mParticle-integrations/mparticle-android-integration-adjust.git [submodule "kits/adobe-kit"] path = kits/adobe-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-adobe.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 192260e98..87ede5445 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -67,6 +67,7 @@ lint: paths: - "**/gradlew" - scripts/install-start-emulator.sh + - kits/adjust/adjust-5/** - kits/appsflyer/appsflyer-6/** - kits/braze/braze-38/** - kits/ga/ga-23/** diff --git a/kits/adjust-kit b/kits/adjust-kit deleted file mode 160000 index a9d435738..000000000 --- a/kits/adjust-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a9d4357385e4a417e2bf4d2ac15fbd85e1cb7db7 diff --git a/kits/adjust/adjust-5/README.md b/kits/adjust/adjust-5/README.md new file mode 100644 index 000000000..dd6f829ad --- /dev/null +++ b/kits/adjust/adjust-5/README.md @@ -0,0 +1,23 @@ +## Adjust Kit Integration + +This repository contains the [Adjust](https://www.adjust.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-adjust-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Adjust detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Adjust integration](https://docs.mparticle.com/integrations/adjust/event/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/adjust/adjust-5/build.gradle b/kits/adjust/adjust-5/build.gradle new file mode 100644 index 000000000..8935c6967 --- /dev/null +++ b/kits/adjust/adjust-5/build.gradle @@ -0,0 +1,62 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-adjust" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.adjustkit' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 21 + } + 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 { + testImplementation files('libs/java-json.jar') + api 'com.adjust.sdk:adjust-android:5.0.0' +} diff --git a/kits/adjust/adjust-5/consumer-proguard.pro b/kits/adjust/adjust-5/consumer-proguard.pro new file mode 100644 index 000000000..35bdef0ba --- /dev/null +++ b/kits/adjust/adjust-5/consumer-proguard.pro @@ -0,0 +1,17 @@ +# These are the proguard rules specified by the Adjust SDK's documentation + +-keep class com.adjust.sdk.plugin.MacAddressUtil { java.lang.String getMacAddress(android.content.Context); } +-keep class com.adjust.sdk.plugin.AndroidIdUtil { java.lang.String getAndroidId(android.content.Context); } + +-keep class com.google.android.gms.common.ConnectionResult { + int SUCCESS; +} + +-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient { + com.google.android.gms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo (android.content.Context); +} + +-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info { + java.lang.String getId (); + boolean isLimitAdTrackingEnabled(); +} \ No newline at end of file diff --git a/kits/adjust/adjust-5/gradle.properties b/kits/adjust/adjust-5/gradle.properties new file mode 100644 index 000000000..05f921cc3 --- /dev/null +++ b/kits/adjust/adjust-5/gradle.properties @@ -0,0 +1,3 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true \ No newline at end of file diff --git a/kits/adjust/adjust-5/gradle/wrapper/gradle-wrapper.jar b/kits/adjust/adjust-5/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/adjust/adjust-5/gradle/wrapper/gradle-wrapper.properties b/kits/adjust/adjust-5/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/adjust/adjust-5/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/adjust/adjust-5/gradlew b/kits/adjust/adjust-5/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/adjust/adjust-5/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/adjust/adjust-5/gradlew.bat b/kits/adjust/adjust-5/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/adjust/adjust-5/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/adjust/adjust-5/libs/java-json.jar b/kits/adjust/adjust-5/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 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%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M 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%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/adjust/adjust-5/settings.gradle.kts b/kits/adjust/adjust-5/settings.gradle.kts new file mode 100644 index 000000000..ed92bbfad --- /dev/null +++ b/kits/adjust/adjust-5/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-adjust-kit" +include(":") diff --git a/kits/adjust/adjust-5/src/main/AndroidManifest.xml b/kits/adjust/adjust-5/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c4e6c98d7 --- /dev/null +++ b/kits/adjust/adjust-5/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/kits/adjust/adjust-5/src/main/kotlin/com/mparticle/kits/AdjustKit.kt b/kits/adjust/adjust-5/src/main/kotlin/com/mparticle/kits/AdjustKit.kt new file mode 100644 index 000000000..6db4eb07e --- /dev/null +++ b/kits/adjust/adjust-5/src/main/kotlin/com/mparticle/kits/AdjustKit.kt @@ -0,0 +1,163 @@ +package com.mparticle.kits + +import android.app.Activity +import android.app.Application +import android.app.Application.ActivityLifecycleCallbacks +import android.content.Context +import android.content.Intent +import android.os.Bundle +import com.adjust.sdk.Adjust +import com.adjust.sdk.AdjustAttribution +import com.adjust.sdk.AdjustConfig +import com.adjust.sdk.AdjustInstance +import com.adjust.sdk.AdjustReferrerReceiver +import com.adjust.sdk.LogLevel +import com.adjust.sdk.OnAttributionChangedListener +import com.mparticle.AttributionError +import com.mparticle.AttributionResult +import com.mparticle.MParticle +import org.json.JSONException +import org.json.JSONObject +import java.util.LinkedList + +/** + * Embedded implementation of the Adjust SDK + * + * + */ +class AdjustKit : + KitIntegration(), + OnAttributionChangedListener, + ActivityLifecycleCallbacks { + override fun getInstance(): AdjustInstance = Adjust.getDefaultInstance() + + override fun getName(): String = KIT_NAME + + override fun onKitCreate( + settings: Map, + context: Context, + ): List { + val production = MParticle.Environment.Production == MParticle.getInstance()?.environment + val config = + AdjustConfig( + getContext(), + getSettings()[APP_TOKEN], + if (production) AdjustConfig.ENVIRONMENT_PRODUCTION else AdjustConfig.ENVIRONMENT_SANDBOX, + ) + config.setOnAttributionChangedListener(this) + if (deeplinkResponseListenerProxy != null) { + val listener = deeplinkResponseListenerProxy + if (listener != null) { + config.setOnDeferredDeeplinkResponseListener { deeplink -> + listener.launchReceivedDeeplink( + deeplink, + ) + } + } + deeplinkResponseListenerProxy = null + } + if (!production) { + config.setLogLevel(LogLevel.VERBOSE) + } + val fbAppId = getSettings()[FB_APP_ID_KEY] + if (fbAppId != null) { + config.setFbAppId(fbAppId) + } + Adjust.initSdk(config) + setAdidIntegrationAttribute() + (context.applicationContext as Application).registerActivityLifecycleCallbacks(this) + return emptyList() + } + + override fun setInstallReferrer(intent: Intent) { + AdjustReferrerReceiver().onReceive(context, intent) + } + + override fun setOptOut(optOutStatus: Boolean): List { + if (!optOutStatus) Adjust.enable() else Adjust.disable() + val messageList: MutableList = LinkedList() + messageList.add( + ReportingMessage( + this, + ReportingMessage.MessageType.OPT_OUT, + System.currentTimeMillis(), + null, + ).setOptOut(optOutStatus), + ) + return messageList + } + + override fun onAttributionChanged(attribution: AdjustAttribution) { + // if Attribution has not been fetch yet the argument + // will be null, in this case we should do nothing and wait for + // the asynchronous callback to return + var jsonObject = JSONObject() + try { + jsonObject = toJSON(attribution) + } catch (e: JSONException) { + val error = + AttributionError() + .setMessage(e.message) + .setServiceProviderId(MParticle.ServiceProviders.ADJUST) + kitManager.onError(error) + } + val deepLinkResult = + AttributionResult() + .setParameters(jsonObject) + .setServiceProviderId(MParticle.ServiceProviders.ADJUST) + kitManager.onResult(deepLinkResult) + } + + override fun onActivityCreated( + activity: Activity, + savedInstanceState: Bundle?, + ) {} + + override fun onActivityStarted(activity: Activity) {} + + override fun onActivityResumed(activity: Activity) { + } + + override fun onActivityPaused(activity: Activity) { + } + + override fun onActivityStopped(activity: Activity) {} + + override fun onActivitySaveInstanceState( + activity: Activity, + outState: Bundle, + ) {} + + override fun onActivityDestroyed(activity: Activity) {} + + private fun setAdidIntegrationAttribute() { + val integrationAttributes = integrationAttributes + Adjust.getAdid { adid -> + if (adid != null) { + integrationAttributes[ADJUST_ID_KEY] = adid + setIntegrationAttributes(integrationAttributes) + } + } + } + + companion object { + private const val APP_TOKEN = "appToken" + private const val ADJUST_ID_KEY = "adid" + private const val FB_APP_ID_KEY = "fbAppId" + private const val KIT_NAME = "Adjust" + + var deeplinkResponseListenerProxy: OnDeeplinkEventListener? = null + + @JvmStatic + @Throws(JSONException::class) + fun toJSON(attribution: AdjustAttribution): JSONObject = + JSONObject() + .putOpt("tracker_token", attribution.trackerToken) + .putOpt("tracker_name", attribution.trackerName) + .putOpt("network", attribution.network) + .putOpt("campaign", attribution.campaign) + .putOpt("adgroup", attribution.adgroup) + .putOpt("creative", attribution.creative) + .putOpt("click_label", attribution.clickLabel) + } +} diff --git a/kits/adjust/adjust-5/src/main/kotlin/com/mparticle/kits/OnDeeplinkEventListener.kt b/kits/adjust/adjust-5/src/main/kotlin/com/mparticle/kits/OnDeeplinkEventListener.kt new file mode 100644 index 000000000..12c1fe7fe --- /dev/null +++ b/kits/adjust/adjust-5/src/main/kotlin/com/mparticle/kits/OnDeeplinkEventListener.kt @@ -0,0 +1,7 @@ +package com.mparticle.kits + +import android.net.Uri + +interface OnDeeplinkEventListener { + fun launchReceivedDeeplink(deeplink: Uri?): Boolean +} diff --git a/kits/adjust/adjust-5/src/test/kotlin/com/mparticle/kits/AdjustKitTests.kt b/kits/adjust/adjust-5/src/test/kotlin/com/mparticle/kits/AdjustKitTests.kt new file mode 100644 index 000000000..371044780 --- /dev/null +++ b/kits/adjust/adjust-5/src/test/kotlin/com/mparticle/kits/AdjustKitTests.kt @@ -0,0 +1,78 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MParticleOptions +import org.json.JSONException +import org.json.JSONObject +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito + +class AdjustKitTests { + private val kit: KitIntegration + get() = AdjustKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(!name.isNullOrEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + val appToken = AdjustKit::class.java.getDeclaredField("APP_TOKEN") + appToken.isAccessible = true + val token = appToken.get(AdjustKit.Companion) as String + settings[token] = "test1" + val fbAppId = AdjustKit::class.java.getDeclaredField("FB_APP_ID_KEY") + fbAppId.isAccessible = true + val fbId = fbAppId.get(AdjustKit.Companion) as String + settings[fbId] = "test2" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + @get:Throws(JSONException::class) + private val attributionJSON: JSONObject + get() { + val jsonObject = JSONObject() + jsonObject.putOpt("tracker_token", "a1") + jsonObject.putOpt("tracker_name", "b2") + jsonObject.putOpt("network", "c3") + jsonObject.putOpt("campaign", "d4") + jsonObject.putOpt("adgroup", "e5") + jsonObject.putOpt("creative", "f6") + jsonObject.putOpt("click_label", "g7") + jsonObject.putOpt("adid", "h8") + return jsonObject + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index b10b91143..3300df5fd 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -1,7 +1,7 @@ //keep things alphabetical like readme include ( - ':kits:adjust-kit', + ':kits:adjust:adjust-5', ':kits:adobe-kit', ':kits:adobemedia-kit', ':kits:appsflyer:appsflyer-6', From 42eb733bd05f35936bdf65d0badad2b45f3f3658 Mon Sep 17 00:00:00 2001 From: denischilik Date: Mon, 9 Mar 2026 15:49:41 -0400 Subject: [PATCH 08/61] feat: Migrate Localytics kit (#661) * feat: migrate localytics-kit from submodule to regular directory * feat: relocate localytics-kit to kits/localytics/localytics-6 Made-with: Cursor * feat: update settings-kits.gradle for localytics-6 path Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/localytics-kit | 1 - kits/localytics/localytics-6/README.md | 32 ++ kits/localytics/localytics-6/build.gradle | 69 ++++ .../localytics-6/consumer-proguard.pro | 4 + .../localytics/localytics-6/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/localytics/localytics-6/gradlew | 234 ++++++++++++ kits/localytics/localytics-6/gradlew.bat | 89 +++++ .../localytics-6/libs/java-json.jar | Bin 0 -> 84697 bytes .../localytics-6/libs/testutils.aar | Bin 0 -> 47713 bytes .../localytics-6/settings.gradle.kts | 2 + .../localytics-6/src/main/AndroidManifest.xml | 4 + .../com/mparticle/kits/LocalyticsKit.kt | 356 ++++++++++++++++++ .../com/mparticle/kits/LocalyticsKitTests.kt | 73 ++++ settings-kits.gradle | 2 +- 18 files changed, 874 insertions(+), 5 deletions(-) delete mode 160000 kits/localytics-kit create mode 100644 kits/localytics/localytics-6/README.md create mode 100644 kits/localytics/localytics-6/build.gradle create mode 100644 kits/localytics/localytics-6/consumer-proguard.pro create mode 100644 kits/localytics/localytics-6/gradle.properties create mode 100644 kits/localytics/localytics-6/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/localytics/localytics-6/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/localytics/localytics-6/gradlew create mode 100644 kits/localytics/localytics-6/gradlew.bat create mode 100755 kits/localytics/localytics-6/libs/java-json.jar create mode 100644 kits/localytics/localytics-6/libs/testutils.aar create mode 100644 kits/localytics/localytics-6/settings.gradle.kts create mode 100644 kits/localytics/localytics-6/src/main/AndroidManifest.xml create mode 100644 kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt create mode 100644 kits/localytics/localytics-6/src/test/kotlin/com/mparticle/kits/LocalyticsKitTests.kt diff --git a/.gitmodules b/.gitmodules index f88b41afa..228186f6b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -40,9 +40,6 @@ [submodule "kits/leanplum-kit"] path = kits/leanplum-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-leanplum.git -[submodule "kits/localytics-kit"] - path = kits/localytics-kit - url = git@github.com:mParticle-integrations/mparticle-android-integration-localytics.git [submodule "kits/onetrust-kit"] path = kits/onetrust-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-onetrust.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 87ede5445..095f63f17 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -74,6 +74,7 @@ lint: - kits/ga4/ga4-23/** - kits/kochava/kochava-5/** - kits/rokt/rokt/** + - kits/localytics/localytics-6/** actions: enabled: - trunk-announce diff --git a/kits/localytics-kit b/kits/localytics-kit deleted file mode 160000 index bc95677fe..000000000 --- a/kits/localytics-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bc95677fe0459003a1a9736a2a1061ba98f1b432 diff --git a/kits/localytics/localytics-6/README.md b/kits/localytics/localytics-6/README.md new file mode 100644 index 000000000..2ae8bc56b --- /dev/null +++ b/kits/localytics/localytics-6/README.md @@ -0,0 +1,32 @@ +## Localytics Kit Integration + +This repository contains the [Localytics](https://www.localytics.com) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. The Localytics Kit requires that you add Localytics' Maven server to your buildscript: + + ``` + repositories { + maven { url 'https://maven.localytics.com/public' } + ... + } + ``` + +2. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-localytics-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Localytics detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Localytics integration](https://docs.mparticle.com/integrations/localytics/event/) + +### License + +[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/localytics/localytics-6/build.gradle b/kits/localytics/localytics-6/build.gradle new file mode 100644 index 000000000..8a7ed6272 --- /dev/null +++ b/kits/localytics/localytics-6/build.gradle @@ -0,0 +1,69 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-localytics" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.localytics' + compileSdk 33 + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 21 + targetSdk 33 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } + testOptions { + unitTests.all { + jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] + } + } +} +repositories { + maven { url 'https://maven.localytics.com/public' } + mavenCentral() +} + +dependencies { + api 'com.localytics.androidx:library:6.3.7' + compileOnly 'androidx.appcompat:appcompat:1.6.1' + testImplementation files('libs/java-json.jar') +} diff --git a/kits/localytics/localytics-6/consumer-proguard.pro b/kits/localytics/localytics-6/consumer-proguard.pro new file mode 100644 index 000000000..c3b06cbbc --- /dev/null +++ b/kits/localytics/localytics-6/consumer-proguard.pro @@ -0,0 +1,4 @@ +# These are the proguard rules specified by the Localyticd SDK's documentation + +-keep class com.localytics.android.** { *; } +-keepattributes JavascriptInterface \ No newline at end of file diff --git a/kits/localytics/localytics-6/gradle.properties b/kits/localytics/localytics-6/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/localytics/localytics-6/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/localytics/localytics-6/gradle/wrapper/gradle-wrapper.jar b/kits/localytics/localytics-6/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/localytics/localytics-6/gradle/wrapper/gradle-wrapper.properties b/kits/localytics/localytics-6/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/localytics/localytics-6/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/localytics/localytics-6/gradlew b/kits/localytics/localytics-6/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/localytics/localytics-6/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/localytics/localytics-6/gradlew.bat b/kits/localytics/localytics-6/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/localytics/localytics-6/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/localytics/localytics-6/libs/java-json.jar b/kits/localytics/localytics-6/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 zcmaI61CS<7x9{82w#{kVwr$(CZQHgvZQHiZr#0<lEj94pwnM$%?;OHRG|J+GnR{|ja#{~ld4k9nECQL7_Ai?-G4FUoNq9h9i{VxUR zf6A2p+s5esDE{BZ^1=$z65^_A4Du3>^0PB?vh)l~2(t7v^Ro*rDom@aho>$KGV*lN z@=NYD;4oPiIHPzvR94`bXVkA26j-NNnwXhoXPC5JXXIDb4=zBLAOA5B@SfmK$$vic zukx>f!2ZXe5Zf>RKURSM^VZSDlJS2lqW*t&{##+=>gezvvVZ@M|Jo7ie|GdAGEp%( z22(p@SJ!+ET_;^l4E+foJ?-vhbMlyD8ItD5Mv^HHZyZ!!2Yhntd@YXZy{!9MJ40R< z{Hf&A)#61=DQj;^d+Ti_02?2lXao-HiZbgQ{2~$S2-LxBnsLw(v)>>T(W05%?6zhM zKDEn~ljW^Iga7lEZ+_cL-@xAmT|uz>AH4uE-UOZ|f=^sj1uZAFksve+TD81EL=S1am=mzPVArWEc#5sJBn1DawFkE=)>yq z8Zdie8|gi~47YufbvAOadu#p!2RHBE--~xyPA4+Vj)$|KM}zN#)3fFiaU;~JlEBc< zo076pFr>>YsNgM?uB*Y_(XeE7t6ooHc76uhelZ)547B2=i`iNf9@fk$oMH`v!jV)G zfd-|O?fPS5Kj8^gFP*c3C7?K86$pXha3)6Y3uMu8=xb8KqgO`WG7y7L(u6=NA#z-S zqGhTnFBzeYMO{bKnE90tX=_gO*{C6*0btA1pWyiWm7>4=c&GCx4HgE6rl@{Nps=K# z$GEfBgutKQUMP&oEK89yP(mJlo_^KG_QTNLpwrgo*#f&`|syY$4DF|URpsnMWc`ZN!H z>TCJLIjhLlU{Ug?W=}>Ro6%%`>Co^y%pxf;Y1k}!_8_-&YGO}t4!equ`mL?Lc{{Dd z_Ly$ce5rYEW+)VJSWHddLt3c^NYsoQW{I&5=-wnvK#+%rK78UsY_Sv@$M(WJsd}If zECuc5*+r@@~fT z(B7%qOby&o&{6J(xfdBxI$=DEUjqkXd~YVozs5S&WVp1yRctWYWJD_sh@5sq))Er4 zf@%HG+f=4tosNjaJLeC=GK1|d6L$yC!bW$|bR|sLkPghfE^aesoFMp{AU0Q3(vHVb z66BQrhJfSf3kQ!8{OQChf?yoM)Taqk=e*2amsQ9%2n8OuE_ zaU@u|lbJ$Lw6_+8)jn(?W;$mBjIo$5_ zW^O;5b9yUtszyvK<=^JE#y!+NV8P&Eo@2i?oKQ5{0%R51hl%h8uw0@NaxmELlRj|? zX;^1d41U)04Dln@(_w9`I&NVVnIEw0A?XFP(ug@FicRLdAhgmSgJw6|H?&R3^fnw$ zQT(cnG!RYWuiUb=Sg?P_&8@|3QML5Q;iuPJ!g^|r5?&FioLjbj+466X$?LhX;4FmG0iJkmBV-EbF42mFXNM*^xT$3QYUliZL z<%72&ujg6ffuW$H>8-g`c?9CbE%*i+&~4VJSt?L(hUblCID<#-1J4+(?w_9TyKm>^lT^sM^D?#q4bY-DT> zYg1<5T_WQsE=zlSl!n5XM1-&%vGr4BSvIjvx}CoMlix# z!S@viWj8{kz5Nx&^c6?-C9*frEcP`A?!|h|&;}a6svoTIupcp^e0Dx!ArVzbO+uT! zghD(q{JCU)O@ihjn*bhrLD2I9@-Pae$BMWv^L9E13L5;LaXOGSbYGm`!5GaUmH1Z$ zE8=2$`!qb@TWKjcmT!Oj*$6_(f`^=rf2b;3VW+f~)>t~D!Ghvo)(n*b z4BCu>36j`Y3YsKVNJttSk4#7!8O18wOkh}ug>`nzU&EAe(tK8Vr z)~4gzo!36Fy>jEF@IE7mnJ;kn*-s{yZNo> zgz~^noCy2gfcF|v%WrY$%t+(37*Dz^Kzt(2S>SSPeL7d9rSte~d_QkT6*KJu%>}OcXB(m>wN@G+cJXkA~ zxooY|HM!YZ?5{!b%&Kt|$SK{M`5J1nEom>v1H~%IoAUjtt>fYOm|Z)(h2jRob1JyE z!K1SbDp2zFrr4Ue(9VKu3v5ez>hk4DioNFpXPEBwAJWm}^)1+h)s{OjPvurREftnk znj7e=nSA+9jtO`i;JTT&(@AHg*)wmq7yBo!CzpxFvipE(_w-Zva%QDa8kH;3HM+d@ zX=dFm0g4paRfap=#-CB#Q)Bt^h*wHf69O{)x~W}mkzEuFw~sS#?I#AT#uevN7DWAV z1b>Q=9Eoe3wi=P}TzfpStywL`!mhVZMttn!IC zMrjioCHVVBKk)T;BrcABRV%IJu&Yu#AjzhMwY;Yu!CSH%c~Rs^S&U@s(WJ{+&SfDH z{M>?}X(!P{+as#CcyLxkeD|9SLV>AS&aqvvia2^UV?db+lb;#*Y669re2Jhp1QFvC z3eH8V1=|CPsWqBivz`O}m)ceak^EkX14i}iZ!cMROZAOeS5V}$AN^jNK>ot)KN2%Y zY=NC^jDn)+4pBh|)F4x7>7*-2BGJ6sWZrc41^BMDi_U1y{yFmhh+{7zFPMt5cqbe5 zf8`dqKf-!lj7)3{wZ=}c7zw%0^MW-G$B-$u z!h7s(<;~gO;kovnP6t%Z2tQhJFZ*qKRHnX{8(he!;>(x2F;~A2pl%~VTc}v|k}!8) z*KDnmeS{u6qB*)~zWtVACD@_9>{MNH8$U@hW)Q8xo~uNm;$qjVq3$fOB5x!uJLRiPeahUC16#1%?;70lFu zNG9TNljj9L&v6jLxi{E^I0Cr?SuqUGfSA0&cHh3N<%n2cCSe9y3~X3yXvUYEq!aR~ z6BDi}=2!gYtbU79S|pJ;qyt+c#Pp!NxAHV$OP}}POEc7_(Fy+oS_z-q!ubS+%a~W0NjFf z8e*}Z?N28}G)A#@mvJ1lUybMK1sw4ln!qam3RU4Gdz}7|YPtsXs1nSZ&J=blW|M6O zF|D&M@PSC*0h?pRGB{W$xk{U{ni)i|$uaYlj zCe&3{=^q_MsMaD=CWNtf>YEM5orhE}@6_>`LG=DGy2%33f3aSQW}739u0vOtr+c;T zxXoCpVfAPux2Hy%PcKm@LbF=K&0LW55&}FJToYKj;v|FLrS2%Fp{yDsvD=YsEB=UU z2M2m@nF+Z*rirD zfeEx`w3t+jmP;2432H5g$~D4mw1U#$>sooR)?*hU{~o z?u<4)q~-xw(|Dzon(7Ho5lm#WQ({+FDn%LyJS(!=&ND?8SSkz*YTcIhGd|GxL}#AN zw7Lq;{h=WovfbuVzn9ao9qffpeDJu;3z?@bXO-!y@EYHA$h^t&*ztfHWu_GwQq3Bn ztKRfM91^lZP9GAMLz*?BB+F;w4ej(pR>u-4b%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M 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%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/adobemedia/adobemedia-5/settings.gradle.kts b/kits/adobemedia/adobemedia-5/settings.gradle.kts new file mode 100644 index 000000000..0863f2755 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-adobemedia-kit" +include(":") diff --git a/kits/adobemedia/adobemedia-5/src/main/AndroidManifest.xml b/kits/adobemedia/adobemedia-5/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c4e6c98d7 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeApi.kt b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeApi.kt new file mode 100644 index 000000000..d2074a474 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeApi.kt @@ -0,0 +1,5 @@ +package com.mparticle.kits + +class AdobeApi( + val marketingCloudID: String, +) diff --git a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt new file mode 100644 index 000000000..3784ba655 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt @@ -0,0 +1,414 @@ +package com.mparticle.kits + +import android.app.Application +import android.content.Context +import android.content.Intent +import com.adobe.marketing.mobile.Analytics +import com.adobe.marketing.mobile.Identity +import com.adobe.marketing.mobile.Lifecycle +import com.adobe.marketing.mobile.Media +import com.adobe.marketing.mobile.MediaConstants +import com.adobe.marketing.mobile.MediaConstants.AdMetadataKeys +import com.adobe.marketing.mobile.MediaConstants.VideoMetadataKeys +import com.adobe.marketing.mobile.MediaTracker +import com.adobe.marketing.mobile.MobileCore +import com.adobe.marketing.mobile.Signal +import com.adobe.marketing.mobile.UserProfile +import com.mparticle.BaseEvent +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.kits.KitIntegration.ApplicationStateListener +import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.PushListener +import com.mparticle.media.events.ContentType +import com.mparticle.media.events.EventAttributes +import com.mparticle.media.events.MediaAd +import com.mparticle.media.events.MediaAdBreak +import com.mparticle.media.events.MediaAttributeKeys +import com.mparticle.media.events.MediaContent +import com.mparticle.media.events.MediaEvent +import com.mparticle.media.events.MediaEventName +import com.mparticle.media.events.MediaSegment +import com.mparticle.media.events.StreamType + +open class AdobeKit : + KitIntegration(), + EventListener, + AttributeListener, + PushListener, + ApplicationStateListener { + companion object { + internal const val MARKETING_CLOUD_ID_KEY = "mid" + internal const val LAUNCH_APP_ID = "launchAppId" + } + + var defaultMediaTracker: MediaTracker? = null + var mediaTrackers: MutableMap = mutableMapOf() + var currentPlayheadPosition: Long = 0 + + override fun getName() = "Adobe Media" + + public override fun onKitCreate( + settings: Map, + context: Context, + ): List { + val appId = settings.get(LAUNCH_APP_ID) + + MobileCore.setApplication(context.applicationContext as Application) + val extensions = + listOf( + Analytics.EXTENSION, + Media.EXTENSION, + UserProfile.EXTENSION, + Identity.EXTENSION, + Lifecycle.EXTENSION, + Signal.EXTENSION, + ) + appId?.let { + MobileCore.configureWithAppID(appId) + } + MobileCore.registerExtensions(extensions) { + syncIds() + } + defaultMediaTracker = Media.createTracker() + return listOf() + } + + override fun onApplicationForeground() { + syncIds() + } + + override fun onApplicationBackground() { + syncIds() + } + + override fun setUserAttribute( + s: String, + s1: String, + ) { + syncIds() + } + + override fun setUserAttributeList( + s: String, + list: List, + ) { + syncIds() + } + + override fun supportsAttributeLists(): Boolean = false + + override fun setAllUserAttributes( + map: Map, + map1: Map>, + ) { + syncIds() + } + + override fun removeUserAttribute(s: String) { + syncIds() + } + + override fun setUserIdentity( + identityType: MParticle.IdentityType, + s: String, + ) { + syncIds() + } + + override fun removeUserIdentity(identityType: MParticle.IdentityType) { + syncIds() + } + + override fun logout(): List = emptyList() + + override fun willHandlePushMessage(intent: Intent): Boolean = false + + override fun onPushMessageReceived( + context: Context, + intent: Intent, + ) {} + + override fun onPushRegistration( + instanceId: String, + senderId: String, + ): Boolean { + syncIds() + return false + } + + private fun syncIds() { + Identity.getExperienceCloudId { + setMarketingCloudId(it) + } + } + + override fun getInstance() = + Identity.getExperienceCloudId { + setMarketingCloudId(it) + AdobeApi(it) + } + + fun setMarketingCloudId(id: String) { + val integrationAttributes = integrationAttributes + if (id.length > 0 && !id.equals(integrationAttributes[MARKETING_CLOUD_ID_KEY])) { + integrationAttributes[MARKETING_CLOUD_ID_KEY] = id + setIntegrationAttributes(integrationAttributes) + } + } + + override fun setOptOut(optout: Boolean): List = emptyList() + + override fun logEvent(p0: MPEvent) = null + + override fun leaveBreadcrumb(p0: String?) = null + + override fun logException( + p0: Exception?, + p1: MutableMap?, + p2: String?, + ) = null + + override fun logScreen( + p0: String?, + p1: MutableMap?, + ) = null + + override fun logError( + errorString: String?, + p1: MutableMap?, + ): List? { + errorString?.let { + defaultMediaTracker?.trackError(errorString) + } + return null + } + + override fun logBaseEvent(event: BaseEvent): MutableList? { + if (event is MediaEvent) { + val sessionId = event.sessionId + event.playheadPosition?.let { + currentPlayheadPosition = it + sessionId?.let { id -> + mediaTrackers[id]?.updateCurrentPlayhead(it.toSeconds()) + } + } + when (event.eventName) { + MediaEventName.SESSION_START -> sessionStart(event) + MediaEventName.SESSION_END -> sessionEnd(event) + MediaEventName.PLAY -> play(event) + MediaEventName.PAUSE -> pause(event) + MediaEventName.AD_BREAK_END -> adBreakEnd(event) + MediaEventName.AD_BREAK_START -> adBreakStart(event) + MediaEventName.AD_START -> adStart(event) + MediaEventName.AD_SKIP, MediaEventName.AD_END -> adEnd(event) + MediaEventName.UPDATE_QOS -> updateQos(event) + MediaEventName.BUFFER_END -> bufferEnd(event) + MediaEventName.BUFFER_START -> bufferStart(event) + MediaEventName.SEEK_START -> seekStart(event) + MediaEventName.SEEK_END -> seekEnd(event) + MediaEventName.SEGMENT_START -> segmentStart(event) + MediaEventName.SEGMENT_SKIP -> segmentSkip(event) + MediaEventName.SEGMENT_END -> segmentEnd(event) + MediaEventName.UPDATE_PLAYHEAD_POSITION -> { + /** already handled */ + } + MediaEventName.AD_CLICK -> { + /** do nothing */ + } + } + } + return null + } + + private fun sessionStart(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val mediaInfo = mediaEvent.mediaContent.getMediaObject() + mediaTrackers[sessionId] = Media.createTracker() + mediaTrackers[sessionId]?.trackSessionStart(mediaInfo, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun sessionEnd(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + mediaTrackers[sessionId]?.trackSessionEnd() + mediaTrackers.remove(sessionId) + } + + private fun play(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + mediaTrackers[sessionId]?.trackPlay() + } + + private fun pause(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + mediaTrackers[sessionId]?.trackPause() + } + + private fun updateQos(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + mediaEvent.qos?.let { mediaQos -> + val qoe = + Media.createQoEObject( + mediaQos.bitRate?.toLong() ?: 0, + mediaQos.startupTime?.toSeconds() ?: 0.0, + mediaQos.fps?.toDouble() ?: 0.0, + mediaQos.droppedFrames?.toLong() ?: 0, + ) + mediaTrackers[sessionId]?.updateQoEObject(qoe) + } + } + + private fun adBreakStart(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val adBreakObject = mediaEvent.adBreak?.getAdBreakObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.AdBreakStart, adBreakObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun adBreakEnd(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val adBreakObject = mediaEvent.adBreak?.getAdBreakObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.AdBreakComplete, adBreakObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun adStart(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val adBreakObject = mediaEvent.mediaAd?.getAdObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.AdStart, adBreakObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun adEnd(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + mediaTrackers[sessionId]?.trackEvent( + Media.Event.AdComplete, + mediaEvent.mediaAd?.getAdObject(), + mediaEvent.customAttributes?.toAdobeAttributes(), + ) + } + + private fun seekEnd(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val mediaObject = mediaEvent.mediaContent.getMediaObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.SeekComplete, mediaObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun seekStart(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val mediaObject = mediaEvent.mediaContent.getMediaObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.SeekStart, mediaObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun bufferEnd(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val mediaObject = mediaEvent.mediaContent.getMediaObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.BufferComplete, mediaObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun bufferStart(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val mediaObject = mediaEvent.mediaContent.getMediaObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.BufferStart, mediaObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun segmentEnd(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val chapterObject = mediaEvent.segment?.getChapterObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.ChapterComplete, chapterObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun segmentSkip(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val chapterObject = mediaEvent.segment?.getChapterObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.ChapterSkip, chapterObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun segmentStart(mediaEvent: MediaEvent) { + val sessionId = mediaEvent.sessionId ?: return + val chapterObject = mediaEvent.segment?.getChapterObject() + mediaTrackers[sessionId]?.trackEvent(Media.Event.ChapterStart, chapterObject, mediaEvent.customAttributes?.toAdobeAttributes()) + } + + private fun MediaSegment.getChapterObject(): Map = + Media.createChapterObject( + title ?: "", + index?.toLong() ?: 0, + duration?.toDouble() ?: 0.0, + currentPlayheadPosition.toDouble(), + ) + + internal fun MediaContent.getMediaObject(): Map = + Media.createMediaObject( + name ?: "", + contentId ?: "", + duration?.toSeconds() ?: 0.0, + getStreamType() ?: "", + getMediaType(), + ) + + internal fun MediaAdBreak.getAdBreakObject(): Map = + Media.createAdBreakObject( + title ?: "", + 1L, + currentPlayheadPosition.toSeconds(), + ) + + internal fun MediaAd.getAdObject(): Map = + Media.createAdObject( + title ?: "", + id ?: "", + position?.toLong() ?: 0, + duration?.toDouble() ?: 0.0, + ) + + internal fun MediaContent.getMediaType(): Media.MediaType = + when (contentType) { + ContentType.AUDIO -> Media.MediaType.Audio + ContentType.VIDEO -> Media.MediaType.Video + // Adobe requires that this be non-nullable now, but it should never reach this else statement. + else -> Media.MediaType.Video + } + + internal fun MediaContent.getStreamType(): String? = + when (streamType) { + StreamType.LIVE_STEAM -> MediaConstants.StreamType.LIVE + StreamType.LINEAR -> MediaConstants.StreamType.LINEAR + StreamType.ON_DEMAND -> { + when (contentType) { + ContentType.AUDIO -> MediaConstants.StreamType.AOD + ContentType.VIDEO -> MediaConstants.StreamType.VOD + else -> null + } + } + StreamType.PODCAST -> MediaConstants.StreamType.PODCAST + StreamType.AUDIOBOOK -> MediaConstants.StreamType.AUDIOBOOK + else -> null + } + + internal fun Map.toAdobeAttributes(): Map = + entries.associate { (key, value) -> + when (key) { + MediaAttributeKeys.AD_ADVERTISING_ID -> AdMetadataKeys.ADVERTISER + MediaAttributeKeys.AD_CAMPAIGN -> AdMetadataKeys.CAMPAIGN_ID + MediaAttributeKeys.AD_CREATIVE -> AdMetadataKeys.CREATIVE_ID + MediaAttributeKeys.AD_PLACEMENT -> AdMetadataKeys.PLACEMENT_ID + MediaAttributeKeys.AD_SITE_ID -> AdMetadataKeys.SITE_ID + EventAttributes.CONTENT_SHOW -> VideoMetadataKeys.SHOW + EventAttributes.CONTENT_EPISODE -> VideoMetadataKeys.EPISODE + EventAttributes.CONTENT_ASSET_ID -> VideoMetadataKeys.ASSET_ID + EventAttributes.CONTENT_GENRE -> VideoMetadataKeys.GENRE + EventAttributes.CONTENT_FIRST_AIR_DATE -> VideoMetadataKeys.FIRST_AIR_DATE + EventAttributes.CONTENT_DIGITAL_DATE -> VideoMetadataKeys.FIRST_DIGITAL_DATE + EventAttributes.CONTENT_RATING -> VideoMetadataKeys.RATING + EventAttributes.CONTENT_ORIGINATOR -> VideoMetadataKeys.ORIGINATOR + EventAttributes.CONTENT_NETWORK -> VideoMetadataKeys.NETWORK + EventAttributes.CONTENT_SHOW_TYPE -> VideoMetadataKeys.SHOW_TYPE + EventAttributes.CONTENT_MVPD -> VideoMetadataKeys.MVPD + EventAttributes.CONTENT_AUTHORIZED -> VideoMetadataKeys.AUTHORIZED + EventAttributes.CONTENT_DAYPART -> VideoMetadataKeys.DAY_PART + EventAttributes.CONTENT_FEED -> VideoMetadataKeys.FEED + else -> key + } to value.toString() + } + + internal fun Long.toSeconds(): Double = toDouble() / 1000 +} diff --git a/kits/adobemedia/adobemedia-5/src/test/kotlin/com/adobe/marketing/mobile/MobileCore.kt b/kits/adobemedia/adobemedia-5/src/test/kotlin/com/adobe/marketing/mobile/MobileCore.kt new file mode 100644 index 000000000..8b2630caa --- /dev/null +++ b/kits/adobemedia/adobemedia-5/src/test/kotlin/com/adobe/marketing/mobile/MobileCore.kt @@ -0,0 +1,89 @@ +package com.adobe.marketing.mobile + +import android.app.Application + +class MobileCore { + companion object { + var configKey: String? = null + + @JvmStatic + fun start(callback: AdobeCallback) { + callback.call("") + } + + @JvmStatic + fun configureWithAppID(key: String) { + configKey = key + } + + @JvmStatic + fun registerExtensions( + extensions: List>, + completionCallback: AdobeCallback<*>?, + ) { + // Method implementation here + } + + @JvmStatic + fun setApplication(application: Application) {} + } +} + +interface AdobeCallback { + fun call(t: T) +} + +open class BaseAdobeExtension { + internal abstract class AnalyticsExtension( + extensionApi: ExtensionApi, + ) : com.adobe.marketing.mobile.Extension(extensionApi) { + companion object { + private val ANALYTICS_HARD_DEPENDENCIES: List = + listOf( + // Add actual hard dependencies here + ) + + private val ANALYTICS_SOFT_DEPENDENCIES: List = + listOf( + // Add actual soft dependencies here + ) + + private const val CLASS_NAME: String = "YourClassName" // Replace "YourClassName" with the actual class name + } + } + + companion object { + @JvmField + val EXTENSION: Class = AnalyticsExtension::class.java + + @JvmStatic + fun registerExtension() {} + } +} + +class MobileServices : BaseAdobeExtension() + +class Analytics : BaseAdobeExtension() + +class UserProfile : BaseAdobeExtension() + +class Lifecycle : BaseAdobeExtension() + +class Signal : BaseAdobeExtension() + +object Identity : BaseAdobeExtension() { + @JvmStatic + fun getExperienceCloudId(callback: AdobeCallback) {} +} + +object Media : BaseAdobeExtension() { + @JvmStatic + fun createTracker(): MediaTracker = MediaTracker() + + enum class MediaType { + Video, + Audio, + } +} + +open class MediaTracker diff --git a/kits/adobemedia/adobemedia-5/src/test/kotlin/com/mparticle/kits/AdobeMediaKitTests.kt b/kits/adobemedia/adobemedia-5/src/test/kotlin/com/mparticle/kits/AdobeMediaKitTests.kt new file mode 100644 index 000000000..a7935cbb6 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/src/test/kotlin/com/mparticle/kits/AdobeMediaKitTests.kt @@ -0,0 +1,108 @@ +package com.mparticle.kits + +import android.app.Application +import android.content.Context +import com.adobe.marketing.mobile.Media +import com.adobe.marketing.mobile.MediaTracker +import com.adobe.marketing.mobile.MobileCore +import com.mparticle.MParticleOptions +import com.mparticle.media.events.ContentType +import com.mparticle.media.events.MediaContent +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import org.junit.Test +import org.mockito.Mockito + +class AdobeMediaKitTests { + private val kit: AdobeKit + get() = + object : AdobeKit() { + val tracker: MediaTracker? + get() { + return super.defaultMediaTracker + } + } + + @Test + fun testGetName() { + val name = kit.name + assertTrue(name.isNotEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit: KitIntegration = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + assertNotNull(e) + } + + @Test + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = AdobeKit()::class.java.name + assertEquals("$className not found as a known integration.", 1, integrations.filter { it.name == className }.count()) + } + + @Test + fun testMediaConfig() { + val testKit = + object : AdobeKit() { + val tracker: MediaTracker? + get() { + return super.defaultMediaTracker + } + } + val trackingServer = "launch app idea" + val settings = mutableMapOf(AdobeKit.LAUNCH_APP_ID to trackingServer) + val context = Mockito.mock(Context::class.java) + Mockito.`when`(context.applicationContext).thenReturn(Mockito.mock(Application::class.java)) + + testKit.kitManager = Mockito.mock(KitManagerImpl::class.java) + Mockito.`when`(testKit.kitManager.getIntegrationAttributes(Mockito.any(KitIntegration::class.java))).thenReturn( + mapOf(AdobeKit.MARKETING_CLOUD_ID_KEY to "not nothing"), + ) + testKit.onKitCreate(settings, context) + + assertEquals(trackingServer, MobileCore.configKey) + assertNotNull(testKit.tracker) + } + + @Test + fun toSecondsTest() { + kit.apply { + assertEquals(1.001, 1001L.toSeconds(), 0.0) + } + } + + @Test + fun getMediaTypeTest() { + var mediaContent = + MediaContent().apply { + contentType = ContentType.AUDIO + } + kit.apply { + assertEquals(Media.MediaType.Audio, mediaContent.getMediaType()) + } + mediaContent = + MediaContent().apply { + contentType = ContentType.VIDEO + } + kit.apply { + assertEquals(Media.MediaType.Video, mediaContent.getMediaType()) + } + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index a10b5484d..799d03946 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -3,7 +3,7 @@ include ( ':kits:adjust:adjust-5', ':kits:adobe-kit', - ':kits:adobemedia-kit', + ':kits:adobemedia:adobemedia-5', ':kits:appsflyer:appsflyer-6', ':kits:apptentive:apptentive-6', ':kits:apptimize:apptimize-3', From 629e20eca445002fc3a6449194f449b12e73a9a9 Mon Sep 17 00:00:00 2001 From: denischilik Date: Wed, 11 Mar 2026 13:07:17 -0400 Subject: [PATCH 15/61] feat: Migrate Adobe 5 kit (#670) * feat: migrate adobe-kit from submodule to regular directory * feat: relocate adobe-kit to kits/adobe/adobe-5 Made-with: Cursor * feat: add adobe-5 to settings-kits.gradle Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/adobe-kit | 1 - kits/adobe/adobe-5/README.md | 24 ++ kits/adobe/adobe-5/build.gradle | 51 +++ kits/adobe/adobe-5/consumer-proguard.pro | 25 ++ kits/adobe/adobe-5/gradle.properties | 4 + .../adobe-5/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/adobe/adobe-5/gradlew | 234 +++++++++++++ kits/adobe/adobe-5/gradlew.bat | 89 +++++ kits/adobe/adobe-5/settings.gradle.kts | 2 + .../adobe-5/src/main/AndroidManifest.xml | 1 + .../kotlin/com/mparticle/kits/AdobeApi.kt | 5 + .../kotlin/com/mparticle/kits/AdobeKit.kt | 5 + .../kotlin/com/mparticle/kits/AdobeKitBase.kt | 325 ++++++++++++++++++ .../adobe-5/src/main/res/values/strings.xml | 3 + .../kotlin/com/mparticle/kits/AdobeKitTest.kt | 148 ++++++++ settings-kits.gradle | 2 +- 19 files changed, 923 insertions(+), 5 deletions(-) delete mode 160000 kits/adobe-kit create mode 100644 kits/adobe/adobe-5/README.md create mode 100644 kits/adobe/adobe-5/build.gradle create mode 100644 kits/adobe/adobe-5/consumer-proguard.pro create mode 100644 kits/adobe/adobe-5/gradle.properties create mode 100644 kits/adobe/adobe-5/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/adobe/adobe-5/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/adobe/adobe-5/gradlew create mode 100644 kits/adobe/adobe-5/gradlew.bat create mode 100644 kits/adobe/adobe-5/settings.gradle.kts create mode 100644 kits/adobe/adobe-5/src/main/AndroidManifest.xml create mode 100644 kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeApi.kt create mode 100644 kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt create mode 100644 kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt create mode 100644 kits/adobe/adobe-5/src/main/res/values/strings.xml create mode 100644 kits/adobe/adobe-5/src/test/kotlin/com/mparticle/kits/AdobeKitTest.kt diff --git a/.gitmodules b/.gitmodules index f377b6258..f0a156f04 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "kits/adobe-kit"] - path = kits/adobe-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-adobe.git [submodule "kits/apteligent-kit"] path = kits/apteligent-kit url = git@github.com:mParticle-integrations/mparticle-android-integration-apteligent.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 734a0a575..fceb7427b 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -80,6 +80,7 @@ lint: - kits/rokt/rokt/** - kits/localytics/localytics-6/** - kits/rokt/rokt/** + - kits/adobe/adobe-5/** - kits/adobemedia/adobemedia-5/** actions: enabled: diff --git a/kits/adobe-kit b/kits/adobe-kit deleted file mode 160000 index 53a816d8a..000000000 --- a/kits/adobe-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 53a816d8a7bbb756d252a0b54b72a4308f704d80 diff --git a/kits/adobe/adobe-5/README.md b/kits/adobe/adobe-5/README.md new file mode 100644 index 000000000..3b67012e7 --- /dev/null +++ b/kits/adobe/adobe-5/README.md @@ -0,0 +1,24 @@ +## Adobe Kit Integration + +This repository contains the Adobe integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-adobe-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Adobe detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. +4. Reference Adobe's integration doc below for more features. + +### Documentation + +[Adobe integration](https://docs.mparticle.com/integrations/amc/event/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/adobe/adobe-5/build.gradle b/kits/adobe/adobe-5/build.gradle new file mode 100644 index 000000000..1b829572b --- /dev/null +++ b/kits/adobe/adobe-5/build.gradle @@ -0,0 +1,51 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-adobe" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.adjustkit' + defaultConfig { + minSdkVersion 16 + } + buildFeatures { + buildConfig = true + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } +} diff --git a/kits/adobe/adobe-5/consumer-proguard.pro b/kits/adobe/adobe-5/consumer-proguard.pro new file mode 100644 index 000000000..9aa9a40e3 --- /dev/null +++ b/kits/adobe/adobe-5/consumer-proguard.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/wpassidomo/Library/Android/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/kits/adobe/adobe-5/gradle.properties b/kits/adobe/adobe-5/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/adobe/adobe-5/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/adobe/adobe-5/gradle/wrapper/gradle-wrapper.jar b/kits/adobe/adobe-5/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/adobe/adobe-5/gradle/wrapper/gradle-wrapper.properties b/kits/adobe/adobe-5/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/adobe/adobe-5/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/adobe/adobe-5/gradlew b/kits/adobe/adobe-5/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/adobe/adobe-5/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/adobe/adobe-5/gradlew.bat b/kits/adobe/adobe-5/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/adobe/adobe-5/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/adobe/adobe-5/settings.gradle.kts b/kits/adobe/adobe-5/settings.gradle.kts new file mode 100644 index 000000000..4c0d8559d --- /dev/null +++ b/kits/adobe/adobe-5/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-adobe-kit" +include(":") diff --git a/kits/adobe/adobe-5/src/main/AndroidManifest.xml b/kits/adobe/adobe-5/src/main/AndroidManifest.xml new file mode 100644 index 000000000..94cbbcfc3 --- /dev/null +++ b/kits/adobe/adobe-5/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeApi.kt b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeApi.kt new file mode 100644 index 000000000..ea1fe1eb1 --- /dev/null +++ b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeApi.kt @@ -0,0 +1,5 @@ +package com.mparticle.kits + +class AdobeApi( + val marketingCloudID: String?, +) diff --git a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt new file mode 100644 index 000000000..966dd9d5c --- /dev/null +++ b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt @@ -0,0 +1,5 @@ +package com.mparticle.kits + +class AdobeKit : AdobeKitBase() { + override fun getName(): String = "Adobe" +} diff --git a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt new file mode 100644 index 000000000..fa8dff19b --- /dev/null +++ b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt @@ -0,0 +1,325 @@ +package com.mparticle.kits + +import android.content.Context +import android.content.Intent +import com.mparticle.MParticle.IdentityType +import com.mparticle.internal.MPUtility +import com.mparticle.internal.MPUtility.AdIdInfo +import com.mparticle.kits.KitIntegration.ApplicationStateListener +import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.PushListener +import org.json.JSONException +import org.json.JSONObject +import java.net.HttpURLConnection +import java.net.URL + +abstract class AdobeKitBase : + KitIntegration(), + AttributeListener, + PushListener, + ApplicationStateListener { + private val dVer = "2" + var url: String? = DEFAULT_URL + private var mOrgId: String? = null + private var requestInProgress = false + + @Throws(IllegalArgumentException::class) + public override fun onKitCreate( + map: Map, + context: Context, + ): List { + mOrgId = map[ORG_ID_KEY] + if (map.containsKey(AUDIENCE_MANAGER_SERVER)) { + url = map[AUDIENCE_MANAGER_SERVER] + } + syncIds() + return emptyList() + } + + override fun setOptOut(optedOut: Boolean): List = emptyList() + + override fun onApplicationForeground() { + syncIds() + } + + override fun onApplicationBackground() { + syncIds() + } + + override fun setUserAttribute( + s: String, + s1: String, + ) { + syncIds() + } + + override fun setUserAttributeList( + s: String, + list: List, + ) { + syncIds() + } + + override fun supportsAttributeLists(): Boolean = false + + override fun setAllUserAttributes( + map: Map, + map1: Map>, + ) { + syncIds() + } + + override fun removeUserAttribute(s: String) { + syncIds() + } + + override fun setUserIdentity( + identityType: IdentityType, + s: String, + ) { + syncIds() + } + + override fun removeUserIdentity(identityType: IdentityType) { + syncIds() + } + + override fun logout(): List = emptyList() + + override fun willHandlePushMessage(intent: Intent): Boolean = false + + override fun onPushMessageReceived( + context: Context, + intent: Intent, + ) {} + + override fun onPushRegistration( + instanceId: String, + senderId: String, + ): Boolean { + syncIds() + return false + } + + @Synchronized + private fun syncIds() { + if (this.requestInProgress) return + requestInProgress = true + executeNetworkRequest { + try { + val url = URL("https", url, "/id?" + encodeIds()) + val urlConnection = url.openConnection() as HttpURLConnection + urlConnection.connectTimeout = 2000 + urlConnection.readTimeout = 10000 + if (urlConnection.responseCode in 200..299) { + val response = MPUtility.getJsonResponse(urlConnection) + parseResponse(response) + } + } catch (e: Exception) { + e.printStackTrace() + } + requestInProgress = false + } + } + + private fun encodeIds(): String { + var gaid: String? = null + val adId = MPUtility.getAdIdInfo(context) + if (adId != null && adId.advertiser == AdIdInfo.Advertiser.GOOGLE) { + gaid = adId.id + } + val pushId = kitManager.pushInstanceId + val dBlob = dBlob + val dcsRegion = dcsRegion + return encodeIds( + marketingCloudId, + mOrgId, + dBlob, + dcsRegion, + pushId, + gaid, + userIdentities, + ) + } + + fun encodeIds( + marketingCloudId: String?, + orgId: String?, + dBlob: String?, + dcsRegion: String?, + pushId: String?, + gaid: String?, + userIdentities: Map, + ): String { + val builder = UrlBuilder() + builder + .append( + D_MID_KEY, + marketingCloudId, + ).append( + D_ORIG_ID_KEY, + orgId, + ).append( + D_BLOB_KEY, + dBlob, + ).append( + DCS_REGION_KEY, + dcsRegion, + ).append( + D_PLATFORM_KEY, + "android", + ).append( + D_VER, + dVer, + ).appendCustomIdentity( + PUSH_TOKEN_KEY, + pushId, + ).appendCustomIdentity( + GOOGLE_AD_ID_KEY, + gaid, + ) + for ((key, value) in userIdentities) { + builder.appendCustomIdentity( + getServerString(key), + value, + ) + } + return builder.toString() + } + + override fun getInstance(): Any = AdobeApi(marketingCloudId) + + private fun parseResponse(jsonObject: JSONObject) { + try { + val marketingCloudIdKey = jsonObject.getString(D_MID_KEY) + val dcsRegion = jsonObject.optString(DCS_REGION_KEY) + val dBlob = jsonObject.optString(D_BLOB_KEY) + marketingCloudId = marketingCloudIdKey + setDcsRegion(dcsRegion) + setDBlob(dBlob) + } catch (e: JSONException) { + e.printStackTrace() + } + } + + /** + * fetch the MarketingCloudId. If it can't be found in our storage, assume that this + * user is migrating from the Adobe SDK and try to fetch it from where the Adobe SDK would store it + */ + private var marketingCloudId: String? + get() { + var marketingCloudIdKey = integrationAttributes[MARKETING_CLOUD_ID_KEY] + if (KitUtils.isEmpty(marketingCloudIdKey)) { + var adobeSharedPrefs = + context.getSharedPreferences("visitorIDServiceDataStore", Context.MODE_PRIVATE) + marketingCloudIdKey = adobeSharedPrefs.getString("ADOBEMOBILE_PERSISTED_MID", null) + if (KitUtils.isEmpty(marketingCloudIdKey)) { + adobeSharedPrefs = + context.getSharedPreferences("APP_MEASUREMENT_CACHE", Context.MODE_PRIVATE) + marketingCloudIdKey = adobeSharedPrefs.getString("ADBMOBILE_PERSISTED_MID", null) + } + if (!KitUtils.isEmpty(marketingCloudIdKey)) { + marketingCloudId = marketingCloudIdKey + } + } + return marketingCloudIdKey + } + + private set(id) { + val integrationAttributes = integrationAttributes + if (!id.isNullOrEmpty() && !id.equals(integrationAttributes[MARKETING_CLOUD_ID_KEY])) { + integrationAttributes[MARKETING_CLOUD_ID_KEY] = id + setIntegrationAttributes(integrationAttributes) + val adobeSharedPrefs = + context.getSharedPreferences("visitorIDServiceDataStore", Context.MODE_PRIVATE) + adobeSharedPrefs.edit().putString("ADOBEMOBILE_PERSISTED_MID", id).apply() + } + } + + private val dcsRegion: String? + get() = integrationAttributes[AUDIENCE_MANAGER_LOCATION_HINT] + + private fun setDcsRegion(dcsRegion: String) { + val attrs = integrationAttributes + attrs[AUDIENCE_MANAGER_LOCATION_HINT] = dcsRegion + integrationAttributes = attrs + } + + private val dBlob: String? + get() = integrationAttributes[AUDIENCE_MANAGER_BLOB] + + private fun setDBlob(dBlob: String) { + val attrs = integrationAttributes + attrs[AUDIENCE_MANAGER_BLOB] = dBlob + integrationAttributes = attrs + } + + private inner class UrlBuilder { + var builder: StringBuilder = StringBuilder() + var hasValue = false + + fun append( + key: String?, + value: String?, + ): UrlBuilder { + if (KitUtils.isEmpty(key) || KitUtils.isEmpty(value)) { + return this + } + if (hasValue) { + builder.append("&") + } else { + hasValue = true + } + builder.append(key) + builder.append("=") + builder.append(value) + return this + } + + fun appendCustomIdentity( + key: Int, + value: String?, + ): UrlBuilder = append("d_cid", "$key%01$value") + + fun appendCustomIdentity( + key: String, + value: String, + ): UrlBuilder = append("d_cid_ic", "$key%01$value") + + override fun toString(): String = builder.toString() + } + + companion object { + const val MARKETING_CLOUD_ID_KEY = "mid" + private const val ORG_ID_KEY = "organizationID" + private const val AUDIENCE_MANAGER_BLOB = "aamb" + private const val AUDIENCE_MANAGER_LOCATION_HINT = "aamlh" + const val AUDIENCE_MANAGER_SERVER = "audienceManagerServer" + private const val D_MID_KEY = "d_mid" + private const val D_ORIG_ID_KEY = "d_orgid" + private const val D_BLOB_KEY = "d_blob" + private const val DCS_REGION_KEY = "dcs_region" + private const val D_PLATFORM_KEY = "d_ptfm" + private const val D_VER = "d_ver" + private const val DEFAULT_URL = "dpm.demdex.net" + private const val PUSH_TOKEN_KEY = 20919 + private const val GOOGLE_AD_ID_KEY = 20914 + + // TODO + // check if these are actually correct and replace + private fun getServerString(identityType: IdentityType): String = + when (identityType) { + IdentityType.Other -> "other" + IdentityType.CustomerId -> "customerid" + IdentityType.Facebook -> "facebook" + IdentityType.Twitter -> "twitter" + IdentityType.Google -> "google" + IdentityType.Microsoft -> "microsoft" + IdentityType.Yahoo -> "yahoo" + IdentityType.Email -> "email" + IdentityType.Alias -> "alias" + IdentityType.FacebookCustomAudienceId -> "facebookcustomaudienceid" + else -> "" + } + } +} diff --git a/kits/adobe/adobe-5/src/main/res/values/strings.xml b/kits/adobe/adobe-5/src/main/res/values/strings.xml new file mode 100644 index 000000000..8470bfa52 --- /dev/null +++ b/kits/adobe/adobe-5/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + adobe-kit + diff --git a/kits/adobe/adobe-5/src/test/kotlin/com/mparticle/kits/AdobeKitTest.kt b/kits/adobe/adobe-5/src/test/kotlin/com/mparticle/kits/AdobeKitTest.kt new file mode 100644 index 000000000..cdacbc47d --- /dev/null +++ b/kits/adobe/adobe-5/src/test/kotlin/com/mparticle/kits/AdobeKitTest.kt @@ -0,0 +1,148 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MParticle +import com.mparticle.MParticleOptions +import com.mparticle.kits.AdobeKitBase +import com.mparticle.kits.KitIntegration +import com.mparticle.kits.KitIntegrationFactory +import com.mparticle.kits.KitManagerImpl +import org.junit.Assert +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import org.junit.Test +import org.mockito.Mockito +import java.util.Arrays +import java.util.HashMap + +class AdobeKitTest { + private val kit: AdobeKit + get() = AdobeKit() + + @Test + fun testGetName() { + val name = kit.name + assertTrue(name.isNotEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + + assertNotNull(e) + } + + @Test + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + @Test + fun testBuildUrl() { + val url = + kit.encodeIds( + "", + "", + "", + "", + "", + "", + HashMap(), + ) + val testUrl1 = + "d_mid=&d_ver=2&d_orgid=&d_cid=20914%01&d_cid=20919%01&dcs_region=&d_blob=&d_ptfm=android" + assertEqualUnorderedUrlParams(url, testUrl1) + + val userIdentities = HashMap() + userIdentities[MParticle.IdentityType.CustomerId] = "" + userIdentities[MParticle.IdentityType.Email] = "" + val url2 = + kit.encodeIds( + "", + "", + "", + "", + "", + "", + userIdentities, + ) + val testUrls2 = + "d_mid=&d_ver=2&d_orgid=&d_cid=20914%01&d_cid=20919%01&dcs_region=&d_blob=&d_ptfm=android&d_cid_ic=customerid%01&d_cid_ic=email%01" + assertEqualUnorderedUrlParams(url2, testUrls2) + } + + @Test + fun testGetUrlInstance() { + val kit = kit + kit.kitManager = Mockito.mock(KitManagerImpl::class.java) + val integrationAttributes = HashMap() + integrationAttributes[AdobeKitBase.MARKETING_CLOUD_ID_KEY] = "foo" + Mockito + .`when`( + kit.kitManager + .getIntegrationAttributes( + Mockito.any(KitIntegration::class.java), + ), + ).thenReturn(integrationAttributes) + + val settings = HashMap() + settings[AdobeKitBase.AUDIENCE_MANAGER_SERVER] = "some.random.url" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + + val url = kit.url + assertEquals(url, "some.random.url") + } + + private fun assertEqualUnorderedUrlParams( + url1: String?, + url2: String?, + ) { + if (url1 == null && url2 == null) { + return + } + val url1Split = + Arrays.asList( + *url1!! + .split("&".toRegex()) + .dropLastWhile { it.isEmpty() } + .toTypedArray(), + ) + val url2Split = + Arrays.asList( + *url2!! + .split("&".toRegex()) + .dropLastWhile { it.isEmpty() } + .toTypedArray(), + ) + assertEquals(url1Split.size.toLong(), url2Split.size.toLong()) + url1Split.sort() + url2Split.sort() + for (i in url1Split.indices) { + if (url1Split[i] != url2Split[i]) { + assertTrue(false) + } + } + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 799d03946..ec2c3d1ed 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -2,7 +2,7 @@ include ( ':kits:adjust:adjust-5', - ':kits:adobe-kit', + ':kits:adobe:adobe-5', ':kits:adobemedia:adobemedia-5', ':kits:appsflyer:appsflyer-6', ':kits:apptentive:apptentive-6', From 0e8c29625ffe16f8bd5fcc59ae9a4e08a420fe25 Mon Sep 17 00:00:00 2001 From: denischilik Date: Wed, 11 Mar 2026 13:12:28 -0400 Subject: [PATCH 16/61] feat: Migrate Iterable 3 kit (#669) * feat: migrate iterable-kit from submodule to regular directory * feat: relocate iterable-kit to kits/iterable/iterable-3 Made-with: Cursor * feat: add iterable-3 to settings-kits.gradle Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 5 +- kits/iterable-kit | 1 - kits/iterable/iterable-3/README.md | 27 ++ kits/iterable/iterable-3/build.gradle | 61 ++++ .../iterable/iterable-3/consumer-proguard.pro | 1 + kits/iterable/iterable-3/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/iterable/iterable-3/gradlew | 234 ++++++++++++++++ kits/iterable/iterable-3/gradlew.bat | 89 ++++++ kits/iterable/iterable-3/libs/testutils.aar | Bin 0 -> 47713 bytes kits/iterable/iterable-3/settings.gradle.kts | 2 + .../iterable-3/src/main/AndroidManifest.xml | 8 + .../iterableapi/IterableConfigHelper.kt | 21 ++ .../mparticle/kits/IterableDeviceIdHelper.kt | 35 +++ .../kotlin/com/mparticle/kits/IterableKit.kt | 261 ++++++++++++++++++ .../com/mparticle/kits/iterable/Future.kt | 74 +++++ .../com/mparticle/kits/IterableKitTests.kt | 33 +++ settings-kits.gradle | 2 +- 20 files changed, 859 insertions(+), 7 deletions(-) delete mode 160000 kits/iterable-kit create mode 100644 kits/iterable/iterable-3/README.md create mode 100644 kits/iterable/iterable-3/build.gradle create mode 100644 kits/iterable/iterable-3/consumer-proguard.pro create mode 100644 kits/iterable/iterable-3/gradle.properties create mode 100644 kits/iterable/iterable-3/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/iterable/iterable-3/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/iterable/iterable-3/gradlew create mode 100644 kits/iterable/iterable-3/gradlew.bat create mode 100644 kits/iterable/iterable-3/libs/testutils.aar create mode 100644 kits/iterable/iterable-3/settings.gradle.kts create mode 100644 kits/iterable/iterable-3/src/main/AndroidManifest.xml create mode 100644 kits/iterable/iterable-3/src/main/kotlin/com/iterable/iterableapi/IterableConfigHelper.kt create mode 100644 kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/IterableDeviceIdHelper.kt create mode 100644 kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/IterableKit.kt create mode 100644 kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/iterable/Future.kt create mode 100644 kits/iterable/iterable-3/src/test/kotlin/com/mparticle/kits/IterableKitTests.kt diff --git a/.gitmodules b/.gitmodules index f0a156f04..38f43a924 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,9 +19,6 @@ [submodule "kits/foresee-kit"] path = kits/foresee-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-foresee.git -[submodule "kits/iterable-kit"] - path = kits/iterable-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-iterable.git [submodule "kits/onetrust-kit"] path = kits/onetrust-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-onetrust.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index fceb7427b..a6d96a97c 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -68,11 +68,14 @@ lint: - "**/gradlew" - scripts/install-start-emulator.sh - kits/adjust/adjust-5/** + - kits/adobe/adobe-5/** + - kits/adobemedia/adobemedia-5/** - kits/apptentive/apptentive-6/** - kits/appsflyer/appsflyer-6/** - kits/apptimize/apptimize-3/** - kits/braze/braze-38/** - kits/clevertap/clevertap-7/** + - kits/iterable/iterable-3/** - kits/ga/ga-23/** - kits/ga4/ga4-23/** - kits/kochava/kochava-5/** @@ -80,8 +83,6 @@ lint: - kits/rokt/rokt/** - kits/localytics/localytics-6/** - kits/rokt/rokt/** - - kits/adobe/adobe-5/** - - kits/adobemedia/adobemedia-5/** actions: enabled: - trunk-announce diff --git a/kits/iterable-kit b/kits/iterable-kit deleted file mode 160000 index c94c7ab09..000000000 --- a/kits/iterable-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c94c7ab09be031bd6103ddb6480d6453755e1c1e diff --git a/kits/iterable/iterable-3/README.md b/kits/iterable/iterable-3/README.md new file mode 100644 index 000000000..a5b9d9c14 --- /dev/null +++ b/kits/iterable/iterable-3/README.md @@ -0,0 +1,27 @@ +## Iterable Kit Integration + +This repository contains the [Iterable](https://www.iterable.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +mParticle's Iterable integration is predominantly server-side. This kit is an optional add-on to handle Iterable deep links. + + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-iterable-kit:5+' + } + ``` + +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Iterable detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Iterable Integration Docs](https://docs.mparticle.com/integrations/iterable/audience/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/iterable/iterable-3/build.gradle b/kits/iterable/iterable-3/build.gradle new file mode 100644 index 000000000..0b2da8940 --- /dev/null +++ b/kits/iterable/iterable-3/build.gradle @@ -0,0 +1,61 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified') || project.version.toString().contains('beta')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-iterable" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.iterable' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 21 + } + 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.iterable:iterableapi:3.5.10' +} diff --git a/kits/iterable/iterable-3/consumer-proguard.pro b/kits/iterable/iterable-3/consumer-proguard.pro new file mode 100644 index 000000000..2a90e0f4c --- /dev/null +++ b/kits/iterable/iterable-3/consumer-proguard.pro @@ -0,0 +1 @@ +# TODO: Add rules to exclude your SDK classes from proguard in implementing apps \ No newline at end of file diff --git a/kits/iterable/iterable-3/gradle.properties b/kits/iterable/iterable-3/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/iterable/iterable-3/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/iterable/iterable-3/gradle/wrapper/gradle-wrapper.jar b/kits/iterable/iterable-3/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/iterable/iterable-3/gradle/wrapper/gradle-wrapper.properties b/kits/iterable/iterable-3/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/iterable/iterable-3/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/iterable/iterable-3/gradlew b/kits/iterable/iterable-3/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/iterable/iterable-3/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/iterable/iterable-3/gradlew.bat b/kits/iterable/iterable-3/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/iterable/iterable-3/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/iterable/iterable-3/libs/testutils.aar b/kits/iterable/iterable-3/libs/testutils.aar new file mode 100644 index 0000000000000000000000000000000000000000..cf49b418969034bad0f13e3bee536d9b7ba56833 GIT binary patch literal 47713 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 le<@PWyj%{{x-|yYK)2 literal 0 HcmV?d00001 diff --git a/kits/iterable/iterable-3/settings.gradle.kts b/kits/iterable/iterable-3/settings.gradle.kts new file mode 100644 index 000000000..9fbabbf34 --- /dev/null +++ b/kits/iterable/iterable-3/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-iterable-kit" +include(":") diff --git a/kits/iterable/iterable-3/src/main/AndroidManifest.xml b/kits/iterable/iterable-3/src/main/AndroidManifest.xml new file mode 100644 index 000000000..e3ecde421 --- /dev/null +++ b/kits/iterable/iterable-3/src/main/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/kits/iterable/iterable-3/src/main/kotlin/com/iterable/iterableapi/IterableConfigHelper.kt b/kits/iterable/iterable-3/src/main/kotlin/com/iterable/iterableapi/IterableConfigHelper.kt new file mode 100644 index 000000000..28fd44323 --- /dev/null +++ b/kits/iterable/iterable-3/src/main/kotlin/com/iterable/iterableapi/IterableConfigHelper.kt @@ -0,0 +1,21 @@ +package com.iterable.iterableapi + +object IterableConfigHelper { + fun createConfigBuilderFromIterableConfig(config: IterableConfig?): IterableConfig.Builder { + val builder = IterableConfig.Builder() + if (config != null) { + builder.apply { + setPushIntegrationName(config.pushIntegrationName) + setUrlHandler(config.urlHandler) + setCustomActionHandler(config.customActionHandler) + setAutoPushRegistration(config.autoPushRegistration) + setCheckForDeferredDeeplink(config.checkForDeferredDeeplink) + setLogLevel(config.logLevel) + setInAppHandler(config.inAppHandler) + setInAppDisplayInterval(config.inAppDisplayInterval) + setAllowedProtocols(config.allowedProtocols) + } + } + return builder + } +} diff --git a/kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/IterableDeviceIdHelper.kt b/kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/IterableDeviceIdHelper.kt new file mode 100644 index 000000000..9eadf0c08 --- /dev/null +++ b/kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/IterableDeviceIdHelper.kt @@ -0,0 +1,35 @@ +package com.mparticle.kits + +import android.content.Context +import androidx.annotation.WorkerThread + +internal object IterableDeviceIdHelper { + @WorkerThread + fun getGoogleAdId(context: Context?): String? { + try { + val advertisingIdClient = + Class + .forName("com.google.android.gms.ads.identifier.AdvertisingIdClient") + val getAdvertisingInfo = + advertisingIdClient.getMethod( + "getAdvertisingIdInfo", + Context::class.java, + ) + val advertisingInfo = getAdvertisingInfo.invoke(null, context) + val isLimitAdTrackingEnabled = + advertisingInfo.javaClass.getMethod( + "isLimitAdTrackingEnabled", + ) + val limitAdTrackingEnabled = + isLimitAdTrackingEnabled + .invoke(advertisingInfo) as Boolean + val getId = advertisingInfo.javaClass.getMethod("getId") + val advertisingId = getId.invoke(advertisingInfo) as String + if (!limitAdTrackingEnabled) { + return advertisingId + } + } catch (ignored: Exception) { + } + return null + } +} diff --git a/kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/IterableKit.kt b/kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/IterableKit.kt new file mode 100644 index 000000000..693f202f8 --- /dev/null +++ b/kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/IterableKit.kt @@ -0,0 +1,261 @@ +package com.mparticle.kits + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.util.Log +import com.google.firebase.messaging.RemoteMessage +import com.iterable.iterableapi.BuildConfig +import com.iterable.iterableapi.IterableApi +import com.iterable.iterableapi.IterableConfig +import com.iterable.iterableapi.IterableConfigHelper +import com.iterable.iterableapi.IterableConstants +import com.iterable.iterableapi.IterableFirebaseMessagingService +import com.iterable.iterableapi.IterableHelper.IterableActionHandler +import com.mparticle.AttributionResult +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.identity.MParticleUser +import com.mparticle.kits.KitIntegration.ActivityListener +import com.mparticle.kits.KitIntegration.ApplicationStateListener +import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.PushListener +import com.mparticle.kits.iterable.Future + +class IterableKit : + KitIntegration(), + ActivityListener, + ApplicationStateListener, + IdentityListener, + PushListener { + private val previousLinks: MutableSet = HashSet() + private var mpidEnabled = false + + override fun onKitCreate( + settings: Map, + context: Context, + ): List { + checkForAttribution() + val userIdField = settings[SETTING_USER_ID_FIELD] + mpidEnabled = userIdField != null && userIdField == IDENTITY_MPID + val configBuilder = + IterableConfigHelper.createConfigBuilderFromIterableConfig( + customConfig, + ) + settings[SETTING_GCM_INTEGRATION_NAME]?.let { configBuilder.setPushIntegrationName(it) } + settings[SETTING_API_KEY]?.let { + IterableApi.initialize(context, it, configBuilder.build()) + } + initIntegrationAttributes() + return emptyList() + } + + override fun getName(): String = NAME + + override fun setOptOut(optedOut: Boolean): List = emptyList() + + private fun initIntegrationAttributes() { + val integrationAttributes = HashMap() + integrationAttributes[INTEGRATION_ATTRIBUTE_SDK_VERSION] = + BuildConfig.ITERABLE_SDK_VERSION + setIntegrationAttributes(integrationAttributes) + } + + private fun checkForAttribution() { + val activityRef = kitManager.currentActivity + if (activityRef != null) { + val activity = activityRef.get() + if (activity != null) { + val currentLink = activity.intent.dataString + if (!currentLink.isNullOrEmpty() && !previousLinks.contains(currentLink) + ) { + previousLinks.add(currentLink) + val clickCallback = + IterableActionHandler { result -> + if (!KitUtils.isEmpty(result)) { + val attributionResult = AttributionResult().setLink(result) + attributionResult.serviceProviderId = configuration.kitId + kitManager.onResult(attributionResult) + } + } + IterableApi.getInstance().getAndTrackDeepLink(currentLink, clickCallback) + } + } + } + } + + override fun onActivityCreated( + activity: Activity, + bundle: Bundle?, + ): List = emptyList() + + override fun onActivityStarted(activity: Activity): List = emptyList() + + override fun onActivityResumed(activity: Activity): List = emptyList() + + override fun onActivityPaused(activity: Activity): List = emptyList() + + override fun onActivityStopped(activity: Activity): List = emptyList() + + override fun onActivitySaveInstanceState( + activity: Activity, + bundle: Bundle?, + ): List = emptyList() + + override fun onActivityDestroyed(activity: Activity): List = emptyList() + + override fun onApplicationForeground() { + checkForAttribution() + } + + override fun onApplicationBackground() {} + + override fun onIdentifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + updateIdentity(mParticleUser) + } + + override fun onLoginCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + updateIdentity(mParticleUser) + } + + override fun onLogoutCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + updateIdentity(mParticleUser) + } + + override fun onModifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + } + + override fun onUserIdentified(mParticleUser: MParticleUser) { + updateIdentity(mParticleUser) + } + + private fun isEmpty(string: String?): Boolean = string == null || "" == string + + private fun getUserId(mParticleUser: MParticleUser): Future = + Future.runAsync { + var id: String? = null + if (mpidEnabled) { + if (mParticleUser.id != 0L) { + id = mParticleUser.id.toString() + } + } else { + id = IterableDeviceIdHelper.getGoogleAdId(context) + if (isEmpty(id)) { + id = KitUtils.getAndroidID(context) + } + if (isEmpty(id)) { + val userIdentities = mParticleUser.userIdentities + id = userIdentities[IdentityType.CustomerId] + } + if (isEmpty(id)) { + id = MParticle.getInstance()?.Identity()?.deviceApplicationStamp + } + } + id + } + + private fun String?.getPlaceholderEmail(): String? = this?.let { "$it@placeholder.email" } + + private fun handleOnSuccess( + userId: String?, + mParticleUser: MParticleUser, + ) { + if (prefersUserId) { + IterableApi.getInstance().setUserId(userId) + } else { + val userIdentities = mParticleUser.userIdentities + val mpEmail = userIdentities[IdentityType.Email] + val placeholderEmail = userId.getPlaceholderEmail() + + val email = + if (!mpEmail.isNullOrEmpty()) { + mpEmail + } else if (!isEmpty(placeholderEmail)) { + placeholderEmail + } else { + null + } + + IterableApi.getInstance().setEmail(email) + } + } + + private fun updateIdentity(mParticleUser: MParticleUser) { + val userId = getUserId(mParticleUser) + + userId + .onSuccess( + object : Future.SuccessCallback { + override fun onSuccess(userId: String?) { + handleOnSuccess(userId, mParticleUser) + return + } + }, + ).onFailure( + object : Future.FailureCallback { + override fun onFailure(throwable: Throwable?) { + Log.e(ITERABLE_KIT_ERROR_TAG, ITERABLE_KIT_ERROR_MESSAGE, throwable) + } + }, + ) + } + + override fun willHandlePushMessage(intent: Intent): Boolean { + val extras = intent.extras + return extras != null && extras.containsKey(IterableConstants.ITERABLE_DATA_KEY) + } + + override fun onPushMessageReceived( + context: Context, + intent: Intent, + ) { + IterableFirebaseMessagingService.handleMessageReceived( + context, + RemoteMessage(intent.extras), + ) + } + + override fun onPushRegistration( + instanceId: String, + senderId: String, + ): Boolean { + IterableApi.getInstance().registerForPush() + return true + } + + companion object { + var prefersUserId = false + private var customConfig: IterableConfig? = null + private const val SETTING_API_KEY = "apiKey" + private const val SETTING_GCM_INTEGRATION_NAME = "gcmIntegrationName" + private const val SETTING_USER_ID_FIELD = "userIdField" + private const val IDENTITY_CUSTOMER_ID = "customerId" + private const val IDENTITY_MPID = "mpid" + private const val INTEGRATION_ATTRIBUTE_KIT_VERSION_CODE = "Iterable.kitVersionCode" + private const val INTEGRATION_ATTRIBUTE_SDK_VERSION = "Iterable.sdkVersion" + private const val NAME = "Iterable" + private const val ITERABLE_KIT_ERROR_TAG = "IterableKit" + private const val ITERABLE_KIT_ERROR_MESSAGE = "Error while getting the placeholder email" + + /** + * Set a custom config to be used when initializing Iterable SDK + * @param config `IterableConfig` instance with configuration data for Iterable SDK + */ + fun setCustomConfig(config: IterableConfig?) { + customConfig = config + } + } +} diff --git a/kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/iterable/Future.kt b/kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/iterable/Future.kt new file mode 100644 index 000000000..8c533e4d2 --- /dev/null +++ b/kits/iterable/iterable-3/src/main/kotlin/com/mparticle/kits/iterable/Future.kt @@ -0,0 +1,74 @@ +package com.mparticle.kits.iterable + +import android.os.Handler +import android.os.Looper +import java.util.concurrent.Callable +import java.util.concurrent.Executors + +class Future private constructor( + callable: Callable, +) { + private lateinit var callbackHandler: Handler + private val successCallbacks: MutableList> = ArrayList() + private val failureCallbacks: MutableList = ArrayList() + + private fun handleSuccess(result: T) { + callbackHandler.post { + var callbacks: List> + synchronized(successCallbacks) { callbacks = ArrayList(successCallbacks) } + for (callback: SuccessCallback? in callbacks) { + callback?.onSuccess(result) + } + } + } + + private fun handleFailure(t: Throwable) { + callbackHandler.post { + var callbacks: List + synchronized(failureCallbacks) { callbacks = ArrayList(failureCallbacks) } + for (callback: FailureCallback? in callbacks) { + callback?.onFailure(t) + } + } + } + + fun onSuccess(successCallback: SuccessCallback): Future { + synchronized(successCallbacks) { successCallbacks.add(successCallback) } + return this + } + + fun onFailure(failureCallback: FailureCallback): Future { + synchronized(failureCallbacks) { failureCallbacks.add(failureCallback) } + return this + } + + interface SuccessCallback { + fun onSuccess(result: T) + } + + interface FailureCallback { + fun onFailure(throwable: Throwable?) + } + + companion object { + private val EXECUTOR = Executors.newCachedThreadPool() + + fun runAsync(callable: Callable): Future = Future(callable) + } + + init { + // Set up a Handler for the callback based on the current thread + var looper = Looper.myLooper() + looper?.let { + callbackHandler = Handler((it)) + EXECUTOR.submit { + try { + val result = callable.call() + handleSuccess(result) + } catch (e: Exception) { + handleFailure(e) + } + } ?: { looper = Looper.getMainLooper() } + } + } +} diff --git a/kits/iterable/iterable-3/src/test/kotlin/com/mparticle/kits/IterableKitTests.kt b/kits/iterable/iterable-3/src/test/kotlin/com/mparticle/kits/IterableKitTests.kt new file mode 100644 index 000000000..ed49eca8e --- /dev/null +++ b/kits/iterable/iterable-3/src/test/kotlin/com/mparticle/kits/IterableKitTests.kt @@ -0,0 +1,33 @@ +package com.mparticle.kits + +import com.mparticle.MParticleOptions +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito + +class IterableKitTests { + private val kit: KitIntegration + get() = IterableKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(!name.isNullOrEmpty()) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index ec2c3d1ed..77fce8e8c 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -18,7 +18,7 @@ include ( ':kits:foresee-kit', ':kits:ga:ga-23', ':kits:ga4:ga4-23', - ':kits:iterable-kit', + ':kits:iterable:iterable-3', ':kits:kochava:kochava-5', ':kits:localytics:localytics-6', ':kits:leanplum:leanplum-7', From e643f34edc782ef07856a5d281f17ce7b7c1e19c Mon Sep 17 00:00:00 2001 From: denischilik Date: Wed, 11 Mar 2026 13:13:59 -0400 Subject: [PATCH 17/61] feat: Migrate ComScore 6 kit (#668) * feat: migrate comscore-kit from submodule to regular directory * feat: relocate comscore-kit to kits/comscore/comscore-6 Made-with: Cursor * feat: add comscore-6 to settings-kits.gradle Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/comscore-kit | 1 - kits/comscore/comscore-6/README.md | 25 ++ kits/comscore/comscore-6/build.gradle | 61 +++++ .../comscore/comscore-6/consumer-proguard.pro | 4 + kits/comscore/comscore-6/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/comscore/comscore-6/gradlew | 234 ++++++++++++++++++ kits/comscore/comscore-6/gradlew.bat | 89 +++++++ kits/comscore/comscore-6/libs/testutils.aar | Bin 0 -> 47713 bytes kits/comscore/comscore-6/settings.gradle.kts | 2 + .../comscore-6/src/main/AndroidManifest.xml | 1 + .../kotlin/com/mparticle/kits/ComscoreKit.kt | 229 +++++++++++++++++ .../kotlin/com/mparticle/kits/KitTests.kt | 53 ++++ settings-kits.gradle | 2 +- 17 files changed, 709 insertions(+), 5 deletions(-) delete mode 160000 kits/comscore-kit create mode 100644 kits/comscore/comscore-6/README.md create mode 100644 kits/comscore/comscore-6/build.gradle create mode 100644 kits/comscore/comscore-6/consumer-proguard.pro create mode 100644 kits/comscore/comscore-6/gradle.properties create mode 100644 kits/comscore/comscore-6/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/comscore/comscore-6/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/comscore/comscore-6/gradlew create mode 100644 kits/comscore/comscore-6/gradlew.bat create mode 100644 kits/comscore/comscore-6/libs/testutils.aar create mode 100644 kits/comscore/comscore-6/settings.gradle.kts create mode 100644 kits/comscore/comscore-6/src/main/AndroidManifest.xml create mode 100644 kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt create mode 100644 kits/comscore/comscore-6/src/test/kotlin/com/mparticle/kits/KitTests.kt diff --git a/.gitmodules b/.gitmodules index 38f43a924..a132b3d23 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,9 +7,6 @@ [submodule "kits/button-kit"] path = kits/button-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-button.git -[submodule "kits/comscore-kit"] - path = kits/comscore-kit - url = git@github.com:mParticle-integrations/mparticle-android-integration-comscore.git [submodule "kits/example-kit"] path = kits/example-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-example.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index a6d96a97c..ec773bef2 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -83,6 +83,7 @@ lint: - kits/rokt/rokt/** - kits/localytics/localytics-6/** - kits/rokt/rokt/** + - kits/comscore/comscore-6/** actions: enabled: - trunk-announce diff --git a/kits/comscore-kit b/kits/comscore-kit deleted file mode 160000 index b57adeb04..000000000 --- a/kits/comscore-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b57adeb041ea2fb9d95b2fcd3c644bf58700d676 diff --git a/kits/comscore/comscore-6/README.md b/kits/comscore/comscore-6/README.md new file mode 100644 index 000000000..34bfb48fc --- /dev/null +++ b/kits/comscore/comscore-6/README.md @@ -0,0 +1,25 @@ +## comScore Kit Integration + +This repository contains the [comScore](https://www.comscore.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-comscore-kit:5+' + } + ``` + +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"comScore detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[comScore integration](https://docs.mparticle.com/integrations/comscore/event/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/comscore/comscore-6/build.gradle b/kits/comscore/comscore-6/build.gradle new file mode 100644 index 000000000..9b8b6142f --- /dev/null +++ b/kits/comscore/comscore-6/build.gradle @@ -0,0 +1,61 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-comscore" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.comscore' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 21 + } + 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.comscore:android-analytics:6.9.2' +} diff --git a/kits/comscore/comscore-6/consumer-proguard.pro b/kits/comscore/comscore-6/consumer-proguard.pro new file mode 100644 index 000000000..4eb531cf7 --- /dev/null +++ b/kits/comscore/comscore-6/consumer-proguard.pro @@ -0,0 +1,4 @@ +# These are the proguard rules specified by the Comscore SDK's documentation + +-keep class com.comscore.** { *; } +-dontwarn com.comscore.** \ No newline at end of file diff --git a/kits/comscore/comscore-6/gradle.properties b/kits/comscore/comscore-6/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/comscore/comscore-6/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/comscore/comscore-6/gradle/wrapper/gradle-wrapper.jar b/kits/comscore/comscore-6/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/comscore/comscore-6/gradle/wrapper/gradle-wrapper.properties b/kits/comscore/comscore-6/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/comscore/comscore-6/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/comscore/comscore-6/gradlew b/kits/comscore/comscore-6/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/comscore/comscore-6/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/comscore/comscore-6/gradlew.bat b/kits/comscore/comscore-6/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/comscore/comscore-6/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/comscore/comscore-6/libs/testutils.aar b/kits/comscore/comscore-6/libs/testutils.aar new file mode 100644 index 0000000000000000000000000000000000000000..cf49b418969034bad0f13e3bee536d9b7ba56833 GIT binary patch literal 47713 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 le<@PWyj%{{x-|yYK)2 literal 0 HcmV?d00001 diff --git a/kits/comscore/comscore-6/settings.gradle.kts b/kits/comscore/comscore-6/settings.gradle.kts new file mode 100644 index 000000000..335cec423 --- /dev/null +++ b/kits/comscore/comscore-6/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-comscore-kit" +include(":") diff --git a/kits/comscore/comscore-6/src/main/AndroidManifest.xml b/kits/comscore/comscore-6/src/main/AndroidManifest.xml new file mode 100644 index 000000000..61363294b --- /dev/null +++ b/kits/comscore/comscore-6/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt new file mode 100644 index 000000000..c4af707ab --- /dev/null +++ b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt @@ -0,0 +1,229 @@ +package com.mparticle.kits + +import android.app.Activity +import android.content.Context +import android.os.Bundle +import com.comscore.Analytics +import com.comscore.PartnerConfiguration +import com.comscore.PublisherConfiguration +import com.comscore.util.log.LogLevel +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.kits.KitIntegration.ActivityListener +import com.mparticle.kits.KitIntegration.AttributeListener +import java.util.HashMap +import java.util.LinkedList + +class ComscoreKit : + KitIntegration(), + KitIntegration.EventListener, + AttributeListener, + ActivityListener { + private var isEnterprise = false + + override fun leaveBreadcrumb(breadcrumb: String): List = emptyList() + + override fun logError( + message: String, + errorAttributes: Map, + ): List = emptyList() + + override fun logException( + exception: Exception, + exceptionAttributes: Map, + message: String, + ): List = emptyList() + + override fun logEvent(event: MPEvent): List? { + if (!isEnterprise) { + return null + } + val messages = LinkedList() + val comscoreLabels: HashMap + when (val attributes = event.customAttributeStrings) { + null -> { + comscoreLabels = HashMap() + } + !is HashMap -> { + comscoreLabels = HashMap() + for ((key, value) in attributes) { + comscoreLabels[key] = value + } + } + else -> { + comscoreLabels = attributes + } + } + comscoreLabels[COMSCORE_DEFAULT_LABEL_KEY] = event.eventName + if (MParticle.EventType.Navigation == event.eventType) { + Analytics.notifyViewEvent(comscoreLabels) + } else { + Analytics.notifyHiddenEvent(comscoreLabels) + } + messages.add( + ReportingMessage.fromEvent( + this, + MPEvent.Builder(event).customAttributes(comscoreLabels).build(), + ), + ) + return messages + } + + override fun logScreen( + screenName: String, + eventAttributes: Map, + ): List = + logEvent( + MPEvent + .Builder(screenName, MParticle.EventType.Navigation) + .customAttributes(eventAttributes) + .build(), + )!! + + override fun setUserAttribute( + key: String, + value: String, + ) { + if (isEnterprise) { + Analytics + .getConfiguration() + .setPersistentLabel(KitUtils.sanitizeAttributeKey(key), value) + } + } + + override fun setUserAttributeList( + key: String, + list: List, + ) {} + + override fun supportsAttributeLists(): Boolean = !isEnterprise + + override fun setAllUserAttributes( + attributes: Map, + attributeLists: Map>, + ) { + if (isEnterprise) { + for ((key, value) in attributes) { + setUserAttribute(key, value) + } + } + } + + override fun removeUserAttribute(key: String) { + if (isEnterprise) { + Analytics.getConfiguration().removePersistentLabel(KitUtils.sanitizeAttributeKey(key)) + } + } + + override fun removeUserIdentity(identityType: IdentityType) { + if (isEnterprise) { + Analytics.getConfiguration().removePersistentLabel(identityType.toString()) + } + } + + override fun logout(): List = emptyList() + + override fun setUserIdentity( + identityType: IdentityType, + id: String, + ) { + if (isEnterprise) { + Analytics.getConfiguration().setPersistentLabel(identityType.toString(), id) + } + } + + override fun getName(): String = NAME + + override fun onKitCreate( + settings: Map, + context: Context, + ): List { + val partnerConfiguration = + PartnerConfiguration + .Builder() + .partnerId(settings[PARTNER_ID]) + .build() + Analytics.getConfiguration().addClient(partnerConfiguration) + val builder = PublisherConfiguration.Builder() + builder.publisherId(getSettings()[CLIENT_ID]) + builder.secureTransmission(true) + if (MParticle.getInstance()?.environment == MParticle.Environment.Development) { + Analytics.setLogLevel(LogLevel.VERBOSE) + } + isEnterprise = ENTERPRISE_STRING == getSettings()[PRODUCT] + val publisherConfiguration = builder.build() + Analytics.getConfiguration().addClient(publisherConfiguration) + Analytics.start(context) + return emptyList() + } + + override fun onActivityPaused(activity: Activity): List { + Analytics.notifyExitForeground() + val messageList = LinkedList() + messageList.add( + ReportingMessage( + this, + ReportingMessage.MessageType.APP_STATE_TRANSITION, + System.currentTimeMillis(), + null, + ), + ) + return messageList + } + + override fun onActivitySaveInstanceState( + activity: Activity, + outState: Bundle?, + ): List = emptyList() + + override fun onActivityDestroyed(activity: Activity): List = emptyList() + + override fun onActivityCreated( + activity: Activity, + savedInstanceState: Bundle?, + ): List = emptyList() + + override fun onActivityResumed(activity: Activity): List { + Analytics.notifyEnterForeground() + val messageList = LinkedList() + messageList.add( + ReportingMessage( + this, + ReportingMessage.MessageType.APP_STATE_TRANSITION, + System.currentTimeMillis(), + null, + ), + ) + return messageList + } + + override fun onActivityStarted(activity: Activity): List = emptyList() + + override fun onActivityStopped(activity: Activity): List = emptyList() + + override fun setOptOut(optOutStatus: Boolean): List { + if (!optOutStatus) { + Analytics.getConfiguration().disable() + } + val messageList = LinkedList() + messageList.add( + ReportingMessage( + this, + ReportingMessage.MessageType.OPT_OUT, + System.currentTimeMillis(), + null, + ).setOptOut(optOutStatus), + ) + return messageList + } + + companion object { + private const val CLIENT_ID = "CustomerC2Value" + private const val PRODUCT = "product" + private const val PARTNER_ID = "partnerId" + private const val COMSCORE_DEFAULT_LABEL_KEY = "name" + private const val ENTERPRISE_STRING = "enterprise" + const val NAME = "Comscore" + } +} diff --git a/kits/comscore/comscore-6/src/test/kotlin/com/mparticle/kits/KitTests.kt b/kits/comscore/comscore-6/src/test/kotlin/com/mparticle/kits/KitTests.kt new file mode 100644 index 000000000..c77cf5e93 --- /dev/null +++ b/kits/comscore/comscore-6/src/test/kotlin/com/mparticle/kits/KitTests.kt @@ -0,0 +1,53 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MParticleOptions +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito + +class KitTests { + private val kit: KitIntegration + get() = ComscoreKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(!name.isNullOrEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 77fce8e8c..55963e9af 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -13,7 +13,7 @@ include ( ':kits:braze:braze-38', ':kits:button-kit', ':kits:clevertap:clevertap-7', - ':kits:comscore-kit', + ':kits:comscore:comscore-6', ':kits:flurry-kit', ':kits:foresee-kit', ':kits:ga:ga-23', From eebf86609542d2ae15a8e4798bad9f205beb258f Mon Sep 17 00:00:00 2001 From: denischilik Date: Wed, 11 Mar 2026 13:18:03 -0400 Subject: [PATCH 18/61] feat: Migrate Radar kit (#665) * feat: migrate radar-kit from submodule to regular directory * feat: relocate radar-kit to kits/radar/radar-3 Made-with: Cursor * feat: update settings-kits.gradle for radar-3 Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/radar-kit | 1 - kits/radar/radar-3/README.md | 23 ++ kits/radar/radar-3/build.gradle | 78 ++++++ kits/radar/radar-3/consumer-proguard.pro | 0 kits/radar/radar-3/gradle.properties | 4 + .../radar-3/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/radar/radar-3/gradlew | 234 ++++++++++++++++++ kits/radar/radar-3/gradlew.bat | 89 +++++++ kits/radar/radar-3/settings.gradle.kts | 2 + .../radar-3/src/main/AndroidManifest.xml | 5 + .../kotlin/com/mparticle/kits/RadarKit.kt | 215 ++++++++++++++++ .../com/mparticle/kits/RadarKitTests.kt | 79 ++++++ settings-kits.gradle | 2 +- 16 files changed, 736 insertions(+), 5 deletions(-) delete mode 160000 kits/radar-kit create mode 100644 kits/radar/radar-3/README.md create mode 100644 kits/radar/radar-3/build.gradle create mode 100644 kits/radar/radar-3/consumer-proguard.pro create mode 100644 kits/radar/radar-3/gradle.properties create mode 100644 kits/radar/radar-3/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/radar/radar-3/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/radar/radar-3/gradlew create mode 100644 kits/radar/radar-3/gradlew.bat create mode 100644 kits/radar/radar-3/settings.gradle.kts create mode 100644 kits/radar/radar-3/src/main/AndroidManifest.xml create mode 100644 kits/radar/radar-3/src/main/kotlin/com/mparticle/kits/RadarKit.kt create mode 100644 kits/radar/radar-3/src/test/kotlin/com/mparticle/kits/RadarKitTests.kt diff --git a/.gitmodules b/.gitmodules index a132b3d23..4928c0458 100644 --- a/.gitmodules +++ b/.gitmodules @@ -25,9 +25,6 @@ [submodule "kits/pilgrim-kit"] path = kits/pilgrim-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-pilgrim.git -[submodule "kits/radar-kit"] - path = kits/radar-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-radar.git [submodule "kits/responsys-kit"] path = kits/responsys-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-responsys.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index ec773bef2..e02a94a29 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -82,6 +82,7 @@ lint: - kits/leanplum/leanplum-7/** - kits/rokt/rokt/** - kits/localytics/localytics-6/** + - kits/radar/radar-3/** - kits/rokt/rokt/** - kits/comscore/comscore-6/** actions: diff --git a/kits/radar-kit b/kits/radar-kit deleted file mode 160000 index 0a31841b8..000000000 --- a/kits/radar-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0a31841b8099ddac1a4f96a508ab0b0020d08b9a diff --git a/kits/radar/radar-3/README.md b/kits/radar/radar-3/README.md new file mode 100644 index 000000000..c6ca634b0 --- /dev/null +++ b/kits/radar/radar-3/README.md @@ -0,0 +1,23 @@ +## Radar Kit Integration + +This repository contains the [Radar](https://www.onradar.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-radar-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Radar detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Radar integration](https://docs.mparticle.com/integrations/radar/event/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/radar/radar-3/build.gradle b/kits/radar/radar-3/build.gradle new file mode 100644 index 000000000..c770839cf --- /dev/null +++ b/kits/radar/radar-3/build.gradle @@ -0,0 +1,78 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-radar" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +allprojects { + repositories { + mavenLocal() + mavenCentral() + maven { + url "https://maven.google.com" + } + mavenCentral() + } +} + +android { + namespace 'com.mparticle.kits.radar' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 16 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } + testOptions { + unitTests { + all { + // configure the test JVM arguments + jvmArgs '-noverify' + jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] + } + } + } +} + +dependencies { + api 'io.radar:sdk:3.5.11' + testImplementation 'org.json:json:20220924' +} + diff --git a/kits/radar/radar-3/consumer-proguard.pro b/kits/radar/radar-3/consumer-proguard.pro new file mode 100644 index 000000000..e69de29bb diff --git a/kits/radar/radar-3/gradle.properties b/kits/radar/radar-3/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/radar/radar-3/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/radar/radar-3/gradle/wrapper/gradle-wrapper.jar b/kits/radar/radar-3/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/radar/radar-3/gradle/wrapper/gradle-wrapper.properties b/kits/radar/radar-3/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/radar/radar-3/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/radar/radar-3/gradlew b/kits/radar/radar-3/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/radar/radar-3/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/radar/radar-3/gradlew.bat b/kits/radar/radar-3/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/radar/radar-3/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/radar/radar-3/settings.gradle.kts b/kits/radar/radar-3/settings.gradle.kts new file mode 100644 index 000000000..dcd25fa12 --- /dev/null +++ b/kits/radar/radar-3/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-radar-kit" +include(":") diff --git a/kits/radar/radar-3/src/main/AndroidManifest.xml b/kits/radar/radar-3/src/main/AndroidManifest.xml new file mode 100644 index 000000000..2aaccbb76 --- /dev/null +++ b/kits/radar/radar-3/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + diff --git a/kits/radar/radar-3/src/main/kotlin/com/mparticle/kits/RadarKit.kt b/kits/radar/radar-3/src/main/kotlin/com/mparticle/kits/RadarKit.kt new file mode 100644 index 000000000..96f539a9b --- /dev/null +++ b/kits/radar/radar-3/src/main/kotlin/com/mparticle/kits/RadarKit.kt @@ -0,0 +1,215 @@ +package com.mparticle.kits + +import android.Manifest +import android.content.Context +import android.content.pm.PackageManager +import androidx.core.app.ActivityCompat +import com.mparticle.MParticle.IdentityType +import com.mparticle.identity.MParticleUser +import com.mparticle.kits.KitIntegration.ApplicationStateListener +import com.mparticle.kits.KitIntegration.IdentityListener +import io.radar.sdk.Radar +import io.radar.sdk.Radar.getMetadata +import io.radar.sdk.Radar.getUserId +import io.radar.sdk.Radar.initialize +import io.radar.sdk.Radar.setAdIdEnabled +import io.radar.sdk.Radar.setMetadata +import io.radar.sdk.Radar.setUserId +import io.radar.sdk.Radar.startTracking +import io.radar.sdk.Radar.stopTracking +import io.radar.sdk.Radar.trackOnce +import io.radar.sdk.RadarTrackingOptions +import org.json.JSONException +import org.json.JSONObject +import java.util.LinkedList + +class RadarKit : + KitIntegration(), + ApplicationStateListener, + IdentityListener { + @JvmField + var mRunAutomatically = true + + private fun tryStartTracking() { + val hasGrantedPermissions = + ActivityCompat.checkSelfPermission( + context, + Manifest.permission.ACCESS_FINE_LOCATION, + ) == PackageManager.PERMISSION_GRANTED + if (hasGrantedPermissions) { + startTracking(RadarTrackingOptions.EFFICIENT) + } + } + + private fun tryTrackOnce() { + val hasGrantedPermissions = + ActivityCompat.checkSelfPermission( + context, + Manifest.permission.ACCESS_FINE_LOCATION, + ) == PackageManager.PERMISSION_GRANTED + if (hasGrantedPermissions) { + trackOnce(null as Radar.RadarTrackCallback?) + } + } + + override fun onKitCreate( + settings: Map, + context: Context, + ): List { + val publishableKey = settings[KEY_PUBLISHABLE_KEY] + mRunAutomatically = + settings.containsKey(KEY_RUN_AUTOMATICALLY) && + settings[KEY_RUN_AUTOMATICALLY].toBoolean() + initialize(context, publishableKey, null) + setAdIdEnabled(true) + val user = currentUser + if (user != null) { + val identities = user.userIdentities + val customerId = identities[IdentityType.CustomerId] + customerId?.let { setUserId(it) } + val radarMetadata = JSONObject() + try { + radarMetadata.put( + "mParticleId", + user.id.toString(), + ) + } catch (e: JSONException) { + e.printStackTrace() + } + setMetadata(radarMetadata) + } + if (mRunAutomatically) { + tryStartTracking() + } else { + stopTracking() + } + val messageList = LinkedList() + messageList.add( + ReportingMessage( + this, + ReportingMessage.MessageType.APP_STATE_TRANSITION, + System.currentTimeMillis(), + null, + ), + ) + return messageList + } + + override fun getName(): String = KIT_NAME + + override fun onApplicationForeground() { + if (mRunAutomatically) { + tryTrackOnce() + } else { + stopTracking() + } + } + + override fun onApplicationBackground() {} + + fun setUserAndTrack( + user: MParticleUser?, + currentRadarId: String?, + currentMetadata: JSONObject?, + ): Boolean = setUserAndTrack(user, currentRadarId, currentMetadata, false) + + fun setUserAndTrack( + user: MParticleUser?, + currentRadarId: String?, + currentMetadata: JSONObject?, + unitTesting: Boolean, + ): Boolean { + if (user == null) { + return false + } + val newCustomerId = user.userIdentities[IdentityType.CustomerId] + var newMpId: String? = null + if ((user.id).toInt() != 0) { + newMpId = user.id.toString() + } + var currentMpId: String? = null + if (currentMetadata != null) { + if (currentMetadata.has(M_PARTICLE_ID)) { + try { + currentMpId = currentMetadata.getString(M_PARTICLE_ID) + } catch (e: JSONException) { + e.printStackTrace() + } + } + } + val updatedCustomerId = + if (newCustomerId == null) currentRadarId != null else newCustomerId != currentRadarId + val updatedMpId = if (newMpId == null) currentMpId != null else newMpId != currentMpId + if (updatedCustomerId && !unitTesting) { + setUserId(newCustomerId) + } + if (updatedMpId && !unitTesting) { + try { + currentMetadata?.put(M_PARTICLE_ID, newMpId) + } catch (e: JSONException) { + e.printStackTrace() + } + setMetadata(currentMetadata) + } + if ((updatedCustomerId || updatedMpId) && !unitTesting) { + if (mRunAutomatically) { + tryTrackOnce() + tryStartTracking() + } + } + return updatedCustomerId || updatedMpId + } + + override fun onIdentifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + setUserAndTrack(mParticleUser, getUserId(), getMetadata()) + } + + override fun onLoginCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + setUserAndTrack(mParticleUser, getUserId(), getMetadata()) + } + + override fun onLogoutCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + setUserAndTrack(mParticleUser, getUserId(), getMetadata()) + } + + override fun onModifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + setUserAndTrack(mParticleUser, getUserId(), getMetadata()) + } + + override fun onUserIdentified(mParticleUser: MParticleUser) {} + + override fun setOptOut(optedOut: Boolean): List { + if (mRunAutomatically) { + stopTracking() + } + val messageList: MutableList = LinkedList() + messageList.add( + ReportingMessage( + this, + ReportingMessage.MessageType.OPT_OUT, + System.currentTimeMillis(), + null, + ), + ) + return messageList + } + + companion object { + private const val KEY_PUBLISHABLE_KEY = "publishableKey" + private const val KEY_RUN_AUTOMATICALLY = "runAutomatically" + private const val M_PARTICLE_ID = "mParticleId" + const val KIT_NAME = "RadarKit" + } +} diff --git a/kits/radar/radar-3/src/test/kotlin/com/mparticle/kits/RadarKitTests.kt b/kits/radar/radar-3/src/test/kotlin/com/mparticle/kits/RadarKitTests.kt new file mode 100644 index 000000000..ba345eb34 --- /dev/null +++ b/kits/radar/radar-3/src/test/kotlin/com/mparticle/kits/RadarKitTests.kt @@ -0,0 +1,79 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MParticle.IdentityType +import com.mparticle.MParticleOptions +import com.mparticle.identity.MParticleUser +import com.mparticle.kits.KitIntegration +import com.mparticle.kits.KitIntegrationFactory +import org.json.JSONObject +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito +import java.util.HashMap + +class RadarKitTests { + private val kit: KitIntegration + get() = RadarKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(!name.isNullOrEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + @Test + @Throws(Exception::class) + fun testSetUser() { + val kit = RadarKit() + kit.mRunAutomatically = false + val o = JSONObject() + o.put("mParticleId", "5") + Assert.assertFalse(kit.setUserAndTrack(null, "foo", o)) + val user = Mockito.mock(MParticleUser::class.java) + val identities = HashMap() + identities[IdentityType.CustomerId] = "foo" + Mockito.`when`(user.userIdentities).thenReturn(identities) + Mockito.`when`(user.id).thenReturn(5L) + Assert.assertFalse(kit.setUserAndTrack(user, "foo", o, true)) + Assert.assertTrue(kit.setUserAndTrack(user, "bar", o, true)) + Assert.assertTrue(kit.setUserAndTrack(user, null, o, true)) + identities.clear() + Assert.assertTrue(kit.setUserAndTrack(user, "foo", o, true)) + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 55963e9af..696e036d4 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -26,7 +26,7 @@ include ( ':kits:onetrust-kit', ':kits:optimizely-kit', // ':kits:pilgrim-kit', - ':kits:radar-kit', + ':kits:radar:radar-3', ':kits:responsys-kit', ':kits:revealmobile-kit', ':kits:rokt:rokt', From 84842a7d49f25e0d460c3cd0b2f23cc66207c6a4 Mon Sep 17 00:00:00 2001 From: denischilik Date: Wed, 11 Mar 2026 13:23:07 -0400 Subject: [PATCH 19/61] feat: Migrate Singular 12 kit (#667) * feat: migrate singular-kit from submodule to regular directory * feat: relocate singular-kit to kits/singular/singular-12 Made-with: Cursor * feat: add singular-12 to settings-kits.gradle Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 4 +- kits/singular-kit | 1 - kits/singular/singular-12/README.md | 32 ++ kits/singular/singular-12/build.gradle | 77 +++ .../singular-12/consumer-proguard.pro | 1 + kits/singular/singular-12/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/singular/singular-12/gradlew | 234 ++++++++ kits/singular/singular-12/gradlew.bat | 89 +++ kits/singular/singular-12/libs/java-json.jar | Bin 0 -> 84697 bytes kits/singular/singular-12/libs/testutils.aar | Bin 0 -> 47713 bytes kits/singular/singular-12/settings.gradle.kts | 2 + .../singular-12/src/main/AndroidManifest.xml | 1 + .../kotlin/com/mparticle/kits/SingularKit.kt | 507 ++++++++++++++++++ .../kotlin/com/mparticle/kits/KitTests.kt | 208 +++++++ .../com/mparticle/kits/MockSingularKit.kt | 43 ++ .../test/kotlin/com/singular/sdk/Singular.kt | 6 + settings-kits.gradle | 2 +- 20 files changed, 1212 insertions(+), 7 deletions(-) delete mode 160000 kits/singular-kit create mode 100644 kits/singular/singular-12/README.md create mode 100644 kits/singular/singular-12/build.gradle create mode 100644 kits/singular/singular-12/consumer-proguard.pro create mode 100644 kits/singular/singular-12/gradle.properties create mode 100644 kits/singular/singular-12/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/singular/singular-12/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/singular/singular-12/gradlew create mode 100644 kits/singular/singular-12/gradlew.bat create mode 100755 kits/singular/singular-12/libs/java-json.jar create mode 100644 kits/singular/singular-12/libs/testutils.aar create mode 100644 kits/singular/singular-12/settings.gradle.kts create mode 100644 kits/singular/singular-12/src/main/AndroidManifest.xml create mode 100644 kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt create mode 100644 kits/singular/singular-12/src/test/kotlin/com/mparticle/kits/KitTests.kt create mode 100644 kits/singular/singular-12/src/test/kotlin/com/mparticle/kits/MockSingularKit.kt create mode 100644 kits/singular/singular-12/src/test/kotlin/com/singular/sdk/Singular.kt diff --git a/.gitmodules b/.gitmodules index 4928c0458..5c6ceb14e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,9 +31,6 @@ [submodule "kits/revealmobile-kit"] path = kits/revealmobile-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-revealmobile.git -[submodule "kits/singular-kit"] - path = kits/singular-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-singular.git [submodule "kits/skyhook-kit"] path = kits/skyhook-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-skyhook.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index e02a94a29..7c5bd4251 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -75,16 +75,16 @@ lint: - kits/apptimize/apptimize-3/** - kits/braze/braze-38/** - kits/clevertap/clevertap-7/** + - kits/comscore/comscore-6/** - kits/iterable/iterable-3/** - kits/ga/ga-23/** - kits/ga4/ga4-23/** - kits/kochava/kochava-5/** - kits/leanplum/leanplum-7/** - - kits/rokt/rokt/** - kits/localytics/localytics-6/** - kits/radar/radar-3/** - kits/rokt/rokt/** - - kits/comscore/comscore-6/** + - kits/singular/singular-12/** actions: enabled: - trunk-announce diff --git a/kits/singular-kit b/kits/singular-kit deleted file mode 160000 index 64b3434b1..000000000 --- a/kits/singular-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 64b3434b173692283e6ac5616b1e4584deeff19e diff --git a/kits/singular/singular-12/README.md b/kits/singular/singular-12/README.md new file mode 100644 index 000000000..18649d6a8 --- /dev/null +++ b/kits/singular/singular-12/README.md @@ -0,0 +1,32 @@ +## Singular Kit Integration + +This repository contains the [Singular](https://www.singular.net/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. The singular Kit requires that you add singular's Maven server to your buildscript: + + ``` + repositories { + maven { url "https://maven.singular.net"} + ... + } + ``` + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-singular-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Singular detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Singular integration](https://docs.mparticle.com/integrations/singular/event/) + +### License + +[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/singular/singular-12/build.gradle b/kits/singular/singular-12/build.gradle new file mode 100644 index 000000000..d9431f556 --- /dev/null +++ b/kits/singular/singular-12/build.gradle @@ -0,0 +1,77 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-singular" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +repositories { + maven { + url 'https://maven.singular.net' + } + 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' + + androidTestImplementation 'androidx.test:runner:1.5.2' + testImplementation 'org.powermock:powermock-core:2.0.9' + testImplementation 'org.powermock:powermock-api-mockito2:2.0.2' + testImplementation 'org.powermock:powermock-module-junit4-rule:2.0.9' + testImplementation 'org.powermock:powermock-module-junit4:2.0.9' + testImplementation 'org.powermock:powermock-classloading-xstream:2.0.2' + testImplementation "org.robolectric:robolectric:4.3.1" + testImplementation 'org.json:json:20220320' +} diff --git a/kits/singular/singular-12/consumer-proguard.pro b/kits/singular/singular-12/consumer-proguard.pro new file mode 100644 index 000000000..2a90e0f4c --- /dev/null +++ b/kits/singular/singular-12/consumer-proguard.pro @@ -0,0 +1 @@ +# TODO: Add rules to exclude your SDK classes from proguard in implementing apps \ No newline at end of file diff --git a/kits/singular/singular-12/gradle.properties b/kits/singular/singular-12/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/singular/singular-12/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/singular/singular-12/gradle/wrapper/gradle-wrapper.jar b/kits/singular/singular-12/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/singular/singular-12/gradle/wrapper/gradle-wrapper.properties b/kits/singular/singular-12/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/singular/singular-12/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/singular/singular-12/gradlew b/kits/singular/singular-12/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/singular/singular-12/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/singular/singular-12/gradlew.bat b/kits/singular/singular-12/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/singular/singular-12/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/singular/singular-12/libs/java-json.jar b/kits/singular/singular-12/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 zcmaI61CS<7x9{82w#{kVwr$(CZQHgvZQHiZr#0<lEj94pwnM$%?;OHRG|J+GnR{|ja#{~ld4k9nECQL7_Ai?-G4FUoNq9h9i{VxUR zf6A2p+s5esDE{BZ^1=$z65^_A4Du3>^0PB?vh)l~2(t7v^Ro*rDom@aho>$KGV*lN z@=NYD;4oPiIHPzvR94`bXVkA26j-NNnwXhoXPC5JXXIDb4=zBLAOA5B@SfmK$$vic zukx>f!2ZXe5Zf>RKURSM^VZSDlJS2lqW*t&{##+=>gezvvVZ@M|Jo7ie|GdAGEp%( z22(p@SJ!+ET_;^l4E+foJ?-vhbMlyD8ItD5Mv^HHZyZ!!2Yhntd@YXZy{!9MJ40R< z{Hf&A)#61=DQj;^d+Ti_02?2lXao-HiZbgQ{2~$S2-LxBnsLw(v)>>T(W05%?6zhM zKDEn~ljW^Iga7lEZ+_cL-@xAmT|uz>AH4uE-UOZ|f=^sj1uZAFksve+TD81EL=S1am=mzPVArWEc#5sJBn1DawFkE=)>yq z8Zdie8|gi~47YufbvAOadu#p!2RHBE--~xyPA4+Vj)$|KM}zN#)3fFiaU;~JlEBc< zo076pFr>>YsNgM?uB*Y_(XeE7t6ooHc76uhelZ)547B2=i`iNf9@fk$oMH`v!jV)G zfd-|O?fPS5Kj8^gFP*c3C7?K86$pXha3)6Y3uMu8=xb8KqgO`WG7y7L(u6=NA#z-S zqGhTnFBzeYMO{bKnE90tX=_gO*{C6*0btA1pWyiWm7>4=c&GCx4HgE6rl@{Nps=K# z$GEfBgutKQUMP&oEK89yP(mJlo_^KG_QTNLpwrgo*#f&`|syY$4DF|URpsnMWc`ZN!H z>TCJLIjhLlU{Ug?W=}>Ro6%%`>Co^y%pxf;Y1k}!_8_-&YGO}t4!equ`mL?Lc{{Dd z_Ly$ce5rYEW+)VJSWHddLt3c^NYsoQW{I&5=-wnvK#+%rK78UsY_Sv@$M(WJsd}If zECuc5*+r@@~fT z(B7%qOby&o&{6J(xfdBxI$=DEUjqkXd~YVozs5S&WVp1yRctWYWJD_sh@5sq))Er4 zf@%HG+f=4tosNjaJLeC=GK1|d6L$yC!bW$|bR|sLkPghfE^aesoFMp{AU0Q3(vHVb z66BQrhJfSf3kQ!8{OQChf?yoM)Taqk=e*2amsQ9%2n8OuE_ zaU@u|lbJ$Lw6_+8)jn(?W;$mBjIo$5_ zW^O;5b9yUtszyvK<=^JE#y!+NV8P&Eo@2i?oKQ5{0%R51hl%h8uw0@NaxmELlRj|? zX;^1d41U)04Dln@(_w9`I&NVVnIEw0A?XFP(ug@FicRLdAhgmSgJw6|H?&R3^fnw$ zQT(cnG!RYWuiUb=Sg?P_&8@|3QML5Q;iuPJ!g^|r5?&FioLjbj+466X$?LhX;4FmG0iJkmBV-EbF42mFXNM*^xT$3QYUliZL z<%72&ujg6ffuW$H>8-g`c?9CbE%*i+&~4VJSt?L(hUblCID<#-1J4+(?w_9TyKm>^lT^sM^D?#q4bY-DT> zYg1<5T_WQsE=zlSl!n5XM1-&%vGr4BSvIjvx}CoMlix# z!S@viWj8{kz5Nx&^c6?-C9*frEcP`A?!|h|&;}a6svoTIupcp^e0Dx!ArVzbO+uT! zghD(q{JCU)O@ihjn*bhrLD2I9@-Pae$BMWv^L9E13L5;LaXOGSbYGm`!5GaUmH1Z$ zE8=2$`!qb@TWKjcmT!Oj*$6_(f`^=rf2b;3VW+f~)>t~D!Ghvo)(n*b z4BCu>36j`Y3YsKVNJttSk4#7!8O18wOkh}ug>`nzU&EAe(tK8Vr z)~4gzo!36Fy>jEF@IE7mnJ;kn*-s{yZNo> zgz~^noCy2gfcF|v%WrY$%t+(37*Dz^Kzt(2S>SSPeL7d9rSte~d_QkT6*KJu%>}OcXB(m>wN@G+cJXkA~ zxooY|HM!YZ?5{!b%&Kt|$SK{M`5J1nEom>v1H~%IoAUjtt>fYOm|Z)(h2jRob1JyE z!K1SbDp2zFrr4Ue(9VKu3v5ez>hk4DioNFpXPEBwAJWm}^)1+h)s{OjPvurREftnk znj7e=nSA+9jtO`i;JTT&(@AHg*)wmq7yBo!CzpxFvipE(_w-Zva%QDa8kH;3HM+d@ zX=dFm0g4paRfap=#-CB#Q)Bt^h*wHf69O{)x~W}mkzEuFw~sS#?I#AT#uevN7DWAV z1b>Q=9Eoe3wi=P}TzfpStywL`!mhVZMttn!IC zMrjioCHVVBKk)T;BrcABRV%IJu&Yu#AjzhMwY;Yu!CSH%c~Rs^S&U@s(WJ{+&SfDH z{M>?}X(!P{+as#CcyLxkeD|9SLV>AS&aqvvia2^UV?db+lb;#*Y669re2Jhp1QFvC z3eH8V1=|CPsWqBivz`O}m)ceak^EkX14i}iZ!cMROZAOeS5V}$AN^jNK>ot)KN2%Y zY=NC^jDn)+4pBh|)F4x7>7*-2BGJ6sWZrc41^BMDi_U1y{yFmhh+{7zFPMt5cqbe5 zf8`dqKf-!lj7)3{wZ=}c7zw%0^MW-G$B-$u z!h7s(<;~gO;kovnP6t%Z2tQhJFZ*qKRHnX{8(he!;>(x2F;~A2pl%~VTc}v|k}!8) z*KDnmeS{u6qB*)~zWtVACD@_9>{MNH8$U@hW)Q8xo~uNm;$qjVq3$fOB5x!uJLRiPeahUC16#1%?;70lFu zNG9TNljj9L&v6jLxi{E^I0Cr?SuqUGfSA0&cHh3N<%n2cCSe9y3~X3yXvUYEq!aR~ z6BDi}=2!gYtbU79S|pJ;qyt+c#Pp!NxAHV$OP}}POEc7_(Fy+oS_z-q!ubS+%a~W0NjFf z8e*}Z?N28}G)A#@mvJ1lUybMK1sw4ln!qam3RU4Gdz}7|YPtsXs1nSZ&J=blW|M6O zF|D&M@PSC*0h?pRGB{W$xk{U{ni)i|$uaYlj zCe&3{=^q_MsMaD=CWNtf>YEM5orhE}@6_>`LG=DGy2%33f3aSQW}739u0vOtr+c;T zxXoCpVfAPux2Hy%PcKm@LbF=K&0LW55&}FJToYKj;v|FLrS2%Fp{yDsvD=YsEB=UU z2M2m@nF+Z*rirD zfeEx`w3t+jmP;2432H5g$~D4mw1U#$>sooR)?*hU{~o z?u<4)q~-xw(|Dzon(7Ho5lm#WQ({+FDn%LyJS(!=&ND?8SSkz*YTcIhGd|GxL}#AN zw7Lq;{h=WovfbuVzn9ao9qffpeDJu;3z?@bXO-!y@EYHA$h^t&*ztfHWu_GwQq3Bn ztKRfM91^lZP9GAMLz*?BB+F;w4ej(pR>u-4b%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M 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%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/singular/singular-12/libs/testutils.aar b/kits/singular/singular-12/libs/testutils.aar new file mode 100644 index 0000000000000000000000000000000000000000..cf49b418969034bad0f13e3bee536d9b7ba56833 GIT binary patch literal 47713 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 le<@PWyj%{{x-|yYK)2 literal 0 HcmV?d00001 diff --git a/kits/singular/singular-12/settings.gradle.kts b/kits/singular/singular-12/settings.gradle.kts new file mode 100644 index 000000000..bfecd119f --- /dev/null +++ b/kits/singular/singular-12/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-singular-kit" +include(":") diff --git a/kits/singular/singular-12/src/main/AndroidManifest.xml b/kits/singular/singular-12/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c4e6c98d7 --- /dev/null +++ b/kits/singular/singular-12/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt new file mode 100644 index 000000000..280fd6aa3 --- /dev/null +++ b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt @@ -0,0 +1,507 @@ +package com.mparticle.kits + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.util.Log +import com.mparticle.AttributionResult +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.consent.ConsentState +import com.mparticle.internal.Logger +import com.mparticle.internal.MPUtility +import com.mparticle.kits.KitIntegration.ActivityListener +import com.mparticle.kits.KitIntegration.ApplicationStateListener +import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.PushListener +import com.mparticle.kits.KitIntegration.UserAttributeListener +import com.singular.sdk.SDIDAccessorHandler +import com.singular.sdk.Singular +import com.singular.sdk.SingularConfig +import com.singular.sdk.SingularDeviceAttributionHandler +import com.singular.sdk.internal.SingularLog +import org.json.JSONException +import org.json.JSONObject +import java.math.BigDecimal + +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) + private var isInitialized = false + private var deviceToken: String? = null + + //endregion + //region Kit Integration Implementation + override fun onKitCreate( + settings: Map, + 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. + val messages: MutableList = ArrayList() + messages.add( + ReportingMessage( + this, + ReportingMessage.MessageType.APP_STATE_TRANSITION, + System.currentTimeMillis(), + null, + ), + ) + return messages + } + + fun buildSingularConfig(settings: Map?): SingularConfig? = + try { + val singularKey = settings?.get(API_KEY) + val singularSecret = settings?.get(API_SECRET) + + // Getting the DDL timeout from the settings. If does not exist, use 60(S) as default. + val ddlTimeout = settings?.get(DDL_TIMEOUT) + var ddlHandlerTimeoutSec = 60L + if (!KitUtils.isEmpty(ddlTimeout)) { + try { + if (ddlTimeout != null) { + ddlHandlerTimeoutSec = ddlTimeout.toLong() + } + } catch (unableToGetDDLTimeout: Exception) { + } + } + val config = SingularConfig(singularKey, singularSecret) + config.withDDLTimeoutInSec(ddlHandlerTimeoutSec) + val activity = currentActivity.get() + if (activity != null) { + val intent = activity.intent + config.withSingularLink(intent) { singularLinkParams -> + val attributionResult = AttributionResult() + attributionResult.serviceProviderId = MParticle.ServiceProviders.SINGULAR + attributionResult.link = singularLinkParams.deeplink + try { + val linkParams = JSONObject() + linkParams.put(PASSTHROUGH, singularLinkParams.passthrough) + linkParams.put(IS_DEFERRED, singularLinkParams.isDeferred) + if (singularLinkParams.urlParameters != null) { + linkParams.put( + QUERY_PARAMS, + (singularLinkParams.urlParameters as Map<*, *>?)?.let { + JSONObject( + it, + ) + }, + ) + } + attributionResult.parameters = linkParams + } catch (e: JSONException) { + e.printStackTrace() + } + kitManager.onResult(attributionResult) + } + } + + // If the environment is in development mode, enable logging. + if (MPUtility.isDevEnv()) { + config.withLoggingEnabled() + config.withLogLevel(Log.DEBUG) + } + + config.deviceAttributionHandler = deviceAttributionCallback + + config.withCustomSdid(customSdid, sdidAccessorHandler) + + Singular.setWrapperNameAndVersion(MPARTICLE_WRAPPER_NAME, MPARTICLE_WRAPPER_VERSION) + config + } catch (ex: Exception) { + logger.error(CANT_BUILD_SINGULAR_CONFIG_MESSAGE, ex) + null + } + + override fun setOptOut(b: Boolean): List = emptyList() + + override fun getName(): String = KIT_NAME + + override fun setInstallReferrer(intent: Intent) {} + + //endregion + //region Activity Listener Implementation + override fun onActivityResumed(activity: Activity): List { + Singular.onActivityResumed() + return emptyList() + } + + override fun onActivityPaused(activity: Activity): List { + Singular.onActivityPaused() + return emptyList() + } + + //region Unimplemented (Empty Methods) + override fun onActivityCreated( + activity: Activity, + bundle: Bundle?, + ): List { + initializeSingular() + return emptyList() + } + + override fun onActivityStarted(activity: Activity): List = emptyList() + + override fun onActivityStopped(activity: Activity): List = emptyList() + + override fun onActivitySaveInstanceState( + activity: Activity, + bundle: Bundle?, + ): List = emptyList() + + override fun onActivityDestroyed(activity: Activity): List = emptyList() + + //endregion + //endregion + //region Event Listener Implementation + override fun logEvent(mpEvent: MPEvent): List? { + val messages: MutableList = ArrayList() + executeIfSingularInitialized({ + val eventName = mpEvent.eventName + 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) + } + + // If the Singular event logging was successful, return the message to the mParticle Kit + // So it won't retry the event + if (eventStatus) { + messages.add(ReportingMessage.fromEvent(this, mpEvent)) + } + }, forceInitSingular = true, "logEvent") + return messages + } + + //region Unimplemented (Empty Methods) + override fun leaveBreadcrumb(s: String): List = emptyList() + + override fun logError( + s: String, + map: Map, + ): List = emptyList() + + override fun logException( + e: Exception, + map: Map, + s: String, + ): 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 { + // Saving the registration token to determine when the user uninstalls the app. + this.deviceToken = deviceToken + executeIfSingularInitialized({ + if (MPUtility.isFirebaseAvailable()) { + Singular.setFCMDeviceToken(deviceToken) + } + }, forceInitSingular = false, "onPushRegistration") + return true + } + + private fun executeIfSingularInitialized( + operation: () -> Unit, + forceInitSingular: Boolean = false, + operationName: String, + ) { + if (isInitialized) { + operation.invoke() + Logger.debug("$operationName executed") + } else { + if (forceInitSingular) { + initializeSingular() + executeIfSingularInitialized(operation, false, operationName) + } else { + Logger.debug("$operationName can't be executed, Singular not initialized") + } + } + } + + private fun initializeSingular() { + if (!isInitialized) { + if (Singular.init(context, buildSingularConfig(settings))) { + currentUser?.id?.toString()?.let { Singular.setCustomUserId(it) } + isInitialized = true + singularSettings = settings + deviceToken?.let { deviceToken -> + if (MPUtility.isFirebaseAvailable()) { + Singular.setFCMDeviceToken(deviceToken) + } + } + } + } + } + + //region Unimplemented (Empty Methods) + override fun willHandlePushMessage(intent: Intent): Boolean = false + + override fun onPushMessageReceived( + context: Context, + intent: Intent, + ) {} + + //endregion + //endregion + //region Commerce Listener Implementation + override fun logEvent(commerceEvent: CommerceEvent): List { + var list = emptyList() + executeIfSingularInitialized(operation = { + if (commerceEvent.productAction == Product.PURCHASE) { + list = handlePurchaseEvents(commerceEvent) + } else { + list = handleNonPurchaseEvents(commerceEvent) + } + }, forceInitSingular = true, "logEvent") + return list + } + + private fun handlePurchaseEvents(commerceEvent: CommerceEvent): List { + val messages: MutableList = ArrayList() + commerceEvent.products?.let { + for (product in it) { + Singular.revenue( + commerceEvent.currency, + product.totalAmount, + product.sku, + product.name, + product.category, + product.quantity.toInt(), + product.unitPrice, + ) + } + } + messages.add(ReportingMessage.fromEvent(this, commerceEvent)) + return messages + } + + private fun handleNonPurchaseEvents(commerceEvent: CommerceEvent): List { + val messages: MutableList = ArrayList() + + // Getting the mParticle events from the commerce event + val eventList = CommerceEventUtils.expand(commerceEvent) + if (eventList != null) { + for (event in eventList) { + try { + logEvent(event)?.let { + for (message in it) { + messages.add(message) + } + } + } catch (e: Exception) { + Logger.warning("Failed to call logCustomEvent to Singular kit: $e") + } + } + } + return messages + } + + //region Unimplemented (Empty Methods) + override fun logLtvIncrease( + bigDecimal: BigDecimal, + bigDecimal1: BigDecimal, + s: String, + map: Map, + ): List = emptyList() + + //endregion + //endregion + //region Deprecated Attribute Listener + override fun setUserAttribute( + key: String, + value: String, + ) { + // TODO: Debug these lines to understand the code + val map = HashMap() + if (MParticle.UserAttributes.AGE == key) { + map[USER_AGE_KEY] = value + } else if (MParticle.UserAttributes.GENDER == key) { + if (value.contains("fe")) { + map[USER_GENDER_KEY] = "f" + } else { + map[USER_GENDER_KEY] = "m" + } + } + if (map.isNotEmpty()) { + executeIfSingularInitialized( + { + Singular.eventJSON("UserAttribute", (map as Map<*, *>?)?.let { JSONObject(it) }) + }, + forceInitSingular = false, + "setUserAttribute", + ) + } + } + + override fun setUserAttributeList( + s: String, + list: List, + ) {} + + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onRemoveUserAttribute( + s: String, + filteredMParticleUser: FilteredMParticleUser, + ) {} + + override fun onSetUserAttribute( + s: String, + o: Any, + filteredMParticleUser: FilteredMParticleUser, + ) { + } + + override fun onSetUserTag( + s: String, + filteredMParticleUser: FilteredMParticleUser, + ) {} + + override fun onSetUserAttributeList( + s: String, + list: List, + filteredMParticleUser: FilteredMParticleUser, + ) { + } + + override fun onSetAllUserAttributes( + map: Map, + map1: Map>, + filteredMParticleUser: FilteredMParticleUser, + ) { + } + + override fun supportsAttributeLists(): Boolean = false + + override fun onConsentStateUpdated( + consentState: ConsentState, + consentState1: ConsentState, + filteredMParticleUser: FilteredMParticleUser, + ) { + executeIfSingularInitialized({ + consentState.ccpaConsentState?.let { Singular.limitDataSharing(it.isConsented) } + }, forceInitSingular = false, "onConsentStateUpdated") + } + + override fun setAllUserAttributes( + map: Map, + map1: Map>, + ) {} + + override fun removeUserAttribute(s: String) {} + + override fun setUserIdentity( + identityType: IdentityType, + s: String, + ) { + if (identityType == IdentityType.CustomerId) { + executeIfSingularInitialized({ + Singular.setCustomUserId(s) + }, forceInitSingular = false, "setUserIdentity") + } + } + + override fun removeUserIdentity(identityType: IdentityType) { + if (identityType == IdentityType.CustomerId) { + executeIfSingularInitialized({ + Singular.unsetCustomUserId() + isInitialized = false + }, forceInitSingular = false, "removeUserIdentity") + } + } + + override fun logout(): List { + val messageList: MutableList = ArrayList() + executeIfSingularInitialized({ + Singular.unsetCustomUserId() + isInitialized = false + messageList.add(ReportingMessage.logoutMessage(this)) + }, forceInitSingular = false, "logout") + return messageList + } + + override fun onApplicationForeground() { + // Handling deeplinks when the application resumes from background + initializeSingular() + } + + override fun onApplicationBackground() {} //endregion + + companion object { + //region Members + // Config Consts + private const val API_KEY = "apiKey" + private const val API_SECRET = "secret" + private const val DDL_TIMEOUT = "ddlTimeout" + private const val KIT_NAME = "Singular" + + // User Attribute Consts + private const val USER_AGE_KEY = "age" + private const val USER_GENDER_KEY = "gender" + + // Singular Link Consts + private const val PASSTHROUGH = "passthrough" + private const val IS_DEFERRED = "is_deferred" + private const val QUERY_PARAMS = "query_params" + + // Wrapper Consts + private const val MPARTICLE_WRAPPER_NAME = "mParticle" + private const val MPARTICLE_WRAPPER_VERSION = "1.0.1" + private const val CANT_BUILD_SINGULAR_CONFIG_MESSAGE = + "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 + + @JvmStatic fun setDeviceAttributionCallback(deviceAttributionCallback: DeviceAttributionCallback?) { + this.deviceAttributionCallback = deviceAttributionCallback + } + + @JvmStatic fun setCustomSDID( + customSDID: String?, + sdidAccessorHandler: SdidAccessorHandler?, + ) { + this.customSdid = customSDID + this.sdidAccessorHandler = sdidAccessorHandler + } + } +} diff --git a/kits/singular/singular-12/src/test/kotlin/com/mparticle/kits/KitTests.kt b/kits/singular/singular-12/src/test/kotlin/com/mparticle/kits/KitTests.kt new file mode 100644 index 000000000..880425c0c --- /dev/null +++ b/kits/singular/singular-12/src/test/kotlin/com/mparticle/kits/KitTests.kt @@ -0,0 +1,208 @@ +package com.mparticle.kits + +import com.mparticle.MPEvent +import com.mparticle.MParticleOptions +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.singular.sdk.Singular +import com.singular.sdk.SingularConfig +import org.json.JSONObject +import org.junit.Assert +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.ExpectedException +import org.mockito.Mock +import org.mockito.Mockito +import org.powermock.core.classloader.annotations.PowerMockIgnore +import org.powermock.modules.junit4.rule.PowerMockRule + +@PowerMockIgnore("org.mockito.*", "org.robolectric.*", "android.*") +class KitTests { + //region Tests Setup + private var kit: MockSingularKit? = null + private lateinit var settings: HashMap + private val config: SingularConfig? = null + + @get:Rule + var rule = PowerMockRule() + + @get:Rule + var exception: ExpectedException = ExpectedException.none() + + @Mock + private val reportingMessage: ReportingMessage? = null + + @Before + fun setUp() { + // MockitoAnnotations.initMocks(this); + kit = MockSingularKit() + settings = HashMap() + settings[API_KEY] = "Test" + settings[API_SECRET] = "Test" + } + + //endregion + //region Config Tests + @Test + fun buildConfigWithoutSettings() { + val testConfig = kit?.buildSingularConfig(null) + Assert.assertNull(testConfig) + } + + @Test + fun buildConfigWithEmptySettings() { + val testConfig = kit?.buildSingularConfig(HashMap()) + Assert.assertNull(testConfig) + } + + //endregion + //region Log MPEvent Tests + @Test + fun logEventWithInfo() { + var result: List? = null + try { + // Creating the event + val eventJson = JSONObject() + eventJson.put("eventName", "Testing") + eventJson.put("eventType", "Unknown") + val event = MPEvent.Builder.parseString(eventJson.toString())?.build() + + // Mocking the Kit Methods + Singular.acceptEvent = true + result = event?.let { kit?.logEvent(it) } + } catch (e: Exception) { + e.printStackTrace() + Assert.fail( + String.format( + "logEventWithInfo failed with exception message:%s", + e.message, + ), + ) + } finally { + Assert.assertTrue(!result.isNullOrEmpty()) + } + } + + @Test + fun logEventWithoutInfo() { + var result: List? = null + try { + // Creating the event + val eventJson = JSONObject() + eventJson.put("eventName", "Testing") + eventJson.put("eventType", "Unknown") + val event = MPEvent.Builder.parseString(eventJson.toString())?.build() + if (event != null) { + event.customAttributes?.clear() + + // Mocking the kit Methods + Singular.acceptEvent = true + result = kit?.logEvent(event) + } + } catch (e: Exception) { + e.printStackTrace() + Assert.fail( + String.format( + "logEventWithInfo failed with exception message:%s", + e.message, + ), + ) + } finally { + Assert.assertTrue(!result.isNullOrEmpty()) + } + } + + @Test + fun logEventWithInvalidData() { + val event: MPEvent? = null + val result = event?.let { kit?.logEvent(it) } + if (result != null) { + Assert.assertTrue(result.isEmpty()) + } + } + + //endregion + //region Log CommerceEvent Tests + @Test + fun logCommercePurchaseEvents() { + var result: List? = null + try { + 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() + result = kit?.logEvent(commerceEvent) + } catch (e: Exception) { + e.printStackTrace() + Assert.fail( + String.format( + "logCommercePurchaseEvents failed with exception message:%s", + e.message, + ), + ) + } finally { + Assert.assertTrue(!result.isNullOrEmpty()) + } + } + + @Test + fun logCommerceNonPurchaseEvents() { + var result: List? = null + try { + 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() + result = kit?.logEvent(commerceEvent) + } catch (e: Exception) { + e.printStackTrace() + Assert.fail( + String.format( + "logCommerceNonPurchaseEvents failed with exception message:%s", + e.message, + ), + ) + } finally { + Assert.assertTrue(!result.isNullOrEmpty()) + } + } + + //endregion + //region MParticle Kit Factory Tests + //endregion + @Throws(Exception::class) + @Test + fun isSingularIntegrationInFactory() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit?.javaClass?.name.orEmpty() + for (integration in integrations) { + if (integration.name.replace("SingularKit", "MockSingularKit") == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + companion object { + private const val API_KEY = "apiKey" + private const val API_SECRET = "secret" + private const val DDL_TIME_OUT = "ddlTimeout" + } +} diff --git a/kits/singular/singular-12/src/test/kotlin/com/mparticle/kits/MockSingularKit.kt b/kits/singular/singular-12/src/test/kotlin/com/mparticle/kits/MockSingularKit.kt new file mode 100644 index 000000000..d96f8d58a --- /dev/null +++ b/kits/singular/singular-12/src/test/kotlin/com/mparticle/kits/MockSingularKit.kt @@ -0,0 +1,43 @@ +package com.mparticle.kits + +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.commerce.CommerceEvent +import org.json.JSONException +import org.json.JSONObject + +class MockSingularKit : SingularKit() { + override fun logEvent(commerceEvent: CommerceEvent): List = + mutableListOf( + ReportingMessage( + this, + commerceEvent.eventName, + System.currentTimeMillis(), + HashMap(), + ), + ) + + override fun logEvent(mpEvent: MPEvent): List = + mutableListOf( + ReportingMessage( + this, + mpEvent.eventType.toString(), + System.currentTimeMillis(), + HashMap(), + ), + ) + + override fun getConfiguration(): KitConfiguration? { + try { + return KitConfiguration.createKitConfiguration( + JSONObject().put( + "id", + MParticle.ServiceProviders.SINGULAR, + ), + ) + } catch (e: JSONException) { + e.printStackTrace() + } + return null + } +} diff --git a/kits/singular/singular-12/src/test/kotlin/com/singular/sdk/Singular.kt b/kits/singular/singular-12/src/test/kotlin/com/singular/sdk/Singular.kt new file mode 100644 index 000000000..ce69bede8 --- /dev/null +++ b/kits/singular/singular-12/src/test/kotlin/com/singular/sdk/Singular.kt @@ -0,0 +1,6 @@ +package com.singular.sdk + +object Singular { + var acceptEventJson = false + var acceptEvent = false +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 696e036d4..44bf2deae 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -30,7 +30,7 @@ include ( ':kits:responsys-kit', ':kits:revealmobile-kit', ':kits:rokt:rokt', - ':kits:singular-kit', + ':kits:singular:singular-12', ':kits:skyhook-kit', //Swrve hosts kit ':kits:taplytics-kit', From 0bfaa9e5aec0034a592ac7b859944081e0b67696 Mon Sep 17 00:00:00 2001 From: denischilik Date: Wed, 11 Mar 2026 13:39:06 -0400 Subject: [PATCH 20/61] feat: Migrate Optimizely kit (#664) * feat: migrate optimizely-kit from submodule to regular directory * feat: relocate optimizely-kit to kits/optimizely/optimizely-3 Made-with: Cursor * feat: update settings-kits.gradle for optimizely-3 Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/optimizely-kit | 1 - kits/optimizely/optimizely-3/README.md | 23 + kits/optimizely/optimizely-3/build.gradle | 63 ++ .../optimizely/optimizely-3/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/optimizely/optimizely-3/gradlew | 234 +++++++ kits/optimizely/optimizely-3/gradlew.bat | 89 +++ .../optimizely-3/libs/java-json.jar | Bin 0 -> 84697 bytes .../optimizely-3/libs/test-utils.aar | Bin 0 -> 104495 bytes .../optimizely-3/proguard-rules.pro | 20 + .../optimizely-3/settings.gradle.kts | 2 + .../optimizely-3/src/main/AndroidManifest.xml | 1 + .../com/mparticle/kits/OptimizelyKit.kt | 454 +++++++++++++ .../com/mparticle/kits/OptimizelyKitTests.kt | 611 ++++++++++++++++++ settings-kits.gradle | 2 +- 18 files changed, 1508 insertions(+), 5 deletions(-) delete mode 160000 kits/optimizely-kit create mode 100644 kits/optimizely/optimizely-3/README.md create mode 100644 kits/optimizely/optimizely-3/build.gradle create mode 100644 kits/optimizely/optimizely-3/gradle.properties create mode 100644 kits/optimizely/optimizely-3/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/optimizely/optimizely-3/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/optimizely/optimizely-3/gradlew create mode 100644 kits/optimizely/optimizely-3/gradlew.bat create mode 100755 kits/optimizely/optimizely-3/libs/java-json.jar create mode 100644 kits/optimizely/optimizely-3/libs/test-utils.aar create mode 100644 kits/optimizely/optimizely-3/proguard-rules.pro create mode 100644 kits/optimizely/optimizely-3/settings.gradle.kts create mode 100644 kits/optimizely/optimizely-3/src/main/AndroidManifest.xml create mode 100644 kits/optimizely/optimizely-3/src/main/kotlin/com/mparticle/kits/OptimizelyKit.kt create mode 100644 kits/optimizely/optimizely-3/src/test/kotlin/com/mparticle/kits/OptimizelyKitTests.kt diff --git a/.gitmodules b/.gitmodules index 5c6ceb14e..7debf12bc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,9 +19,6 @@ [submodule "kits/onetrust-kit"] path = kits/onetrust-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-onetrust.git -[submodule "kits/optimizely-kit"] - path = kits/optimizely-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-optimizely.git [submodule "kits/pilgrim-kit"] path = kits/pilgrim-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-pilgrim.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 7c5bd4251..9621ccb0b 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -82,6 +82,7 @@ lint: - kits/kochava/kochava-5/** - kits/leanplum/leanplum-7/** - kits/localytics/localytics-6/** + - kits/optimizely/optimizely-3/** - kits/radar/radar-3/** - kits/rokt/rokt/** - kits/singular/singular-12/** diff --git a/kits/optimizely-kit b/kits/optimizely-kit deleted file mode 160000 index 2b291d61e..000000000 --- a/kits/optimizely-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2b291d61ea0c4c8899f45dcfddc47d1e3603f3be diff --git a/kits/optimizely/optimizely-3/README.md b/kits/optimizely/optimizely-3/README.md new file mode 100644 index 000000000..849b37801 --- /dev/null +++ b/kits/optimizely/optimizely-3/README.md @@ -0,0 +1,23 @@ +## Optimizely Kit Integration + +This repository contains the [Optimizely](https://developers.optimizely.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-optimizely-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Optimizely detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Optimizely integration](https://docs.mparticle.com/integrations/optimizely/event/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) \ No newline at end of file diff --git a/kits/optimizely/optimizely-3/build.gradle b/kits/optimizely/optimizely-3/build.gradle new file mode 100644 index 000000000..dbafdc0c8 --- /dev/null +++ b/kits/optimizely/optimizely-3/build.gradle @@ -0,0 +1,63 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-optimizely" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.optimizely' + 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.optimizely.ab:android-sdk:3.13.3' + testImplementation files('libs/java-json.jar') + testImplementation files('libs/test-utils.aar') +} diff --git a/kits/optimizely/optimizely-3/gradle.properties b/kits/optimizely/optimizely-3/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/optimizely/optimizely-3/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/optimizely/optimizely-3/gradle/wrapper/gradle-wrapper.jar b/kits/optimizely/optimizely-3/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/optimizely/optimizely-3/gradle/wrapper/gradle-wrapper.properties b/kits/optimizely/optimizely-3/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/optimizely/optimizely-3/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/optimizely/optimizely-3/gradlew b/kits/optimizely/optimizely-3/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/optimizely/optimizely-3/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/optimizely/optimizely-3/gradlew.bat b/kits/optimizely/optimizely-3/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/optimizely/optimizely-3/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/optimizely/optimizely-3/libs/java-json.jar b/kits/optimizely/optimizely-3/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 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%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M 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%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/optimizely/optimizely-3/libs/test-utils.aar b/kits/optimizely/optimizely-3/libs/test-utils.aar new file mode 100644 index 0000000000000000000000000000000000000000..a13382c7d880d4b793c0ca38bdd359e4f4179f69 GIT binary patch literal 104495 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 z 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

5a_^i>gI1 zwqlNYk=QwE{s;wv|7{zizis3De{UPgHir7nre;pUZidEoPUf~YV)`~l zR>lth-%M-8E6d;J;_cabxO!(1zqqL3yWp{Uk31DXj(8(kN4v>8g^R?zrsHTH1^n?)GV2omKIDJ3Q7QAi5005|KAZmjoeQ%8dxL{TX;>m%g zA2j8&k;0I!=%9(I7JJly_BS^2k(z>6a)5a0o9 zzp9fnEYn)0X{c$|0FyG% zlo~AB@u|WIQN^KW#1u}0Bm8~)T@+B8>z!Ru!))_y_48xJc7dMdhL|=Wg$1ORjZCL9 z9S^;>TF>8KKlaG{Ft{i1BLe(2F^J{F`UftcFLRdz6+lr*J?PE1Z9vVX%;DC0c!1_W zFPTy$6~gsq_VmdGLUc$39^%K+$pAxoA;tZ#7OlQFtgSK%K6OxOH}=F*Cof_sMEFS4 z-z#fTl*=1R0#|sA5lMILa;<9~`Bywy8%tQX12e1IzlUs?-SV|YlUYS!Q7l1SD93B5 z>n6a)oUWa|WD}*2J{&N7^4ZMe1d8TdVp*?#%b-{P5@>1CIou?j6XHZOEr|@Nj zKg&x9d1MGV58s`9Gv2f!Q*gr)KVTh*Uw0Nv5$HbrW(!UdV5;yMZaJBFyu5{Zx$-V% ztLm*D#T^r#rhZeIW2$i9Jv^np%KZ@5c<%Mi)@L!qK$j1byg zyFt=SZ*jnIoB(c2VaMt!0xV0VQ)T#@ zCcC8&y2uo(vru$DJ-TyV`8+4)vq4$G8x>_Pe<7}OW|;Fm+z&W}r_yf0tUxqJniN)y zP2?$_9USBz2E*&c={{mf=qEvi6p1%_wg#D>@6_lH_X1OZRS@y!I%YV98-Ve(6Py6` zuyM=me79T*x|-R74X03m^s)JC2C2mLIF`T#4Tdd0B=_?Sy#>&OfhxnioetWc^u73X zB`*nHm_Vy+#c&8a^`&v~>ti-uF-ahz;w`hr6~?h83TMQY_RN07k<-%dNkDD%p;sfG zvfN4#Fs#aU@u`%s$_R9j+6C?d+vLY|xyR4mFUUq;_JM7j{AFR%xjqKD@9&GI9_at* zruwHe?ZHYrDoCQppCKDY_}cinaiCPi@B|QgLI?zEmJw>TSP#r*c^@p)f@?7MvL=`7txuD#-JYhOK3~IF0C#Tlp*~uRf*ir$ zv}XFXAkDR;^&ywo4?XR(4EZZ;%oYqFu_dulqBEcc-}=Tp`8Sf^X6rXXD%iV>jvF;8 zK`keqj9YfY$m0?ETP}d391LZHMxD9Ut9dQNUx-qSL%!iCciDBA?1S>UXT8k$P(BK; zAo+A^DdwFmjZnMKJ!m^e=+|D~l$HpQ^Xk*923U{Ko3(d&O9KPIlF3=wa*VpXdsW zxfqWE%=)<2>V~>aoc5E@+0UV;P+^r6_ zwTsbj(4M>c?L%WZJOmRxAunX=pVrc0cg}L}mvT7t%1q8#Cu4OZM;%eNDseLvuIc02 z@FYdo)r7pEb_G{WRWVArJgt8vMeKbOY+YM?NP_m>NrK?l4te2n5M|~OuJG*JdL*{z zauOK6i6vOVIW`(>kHu3-;q1&B59MUoZ#T@!21ufhmjH86V!5;^fOnOIw`orVWHHQZ z5m^%9wSItSk6Y0&>FH zc2H5Pb1ZX@{sv97@rEZR9IaFH&11%6)_lVmU}D})L-5NH{ab$tG0n_su6qsh2V^Dl z9VAZ?5IUVQ$mNvPQCgk=17iy*E^DzV+-32+AAx}t?UBp#LDW` z^FF|$X4J6X5R(Ymwbz#&g5J1NFTI1%>ZPZHIHf*hg=d3+EI4D#9KK*VBmR)#=z=mcg7 zF7p6-CoaizyiZW@MYQ9$zeHx;eIz>|f6IvA|BDlu@$cTTvZW%HGP;ip;xdUgbzxqk zj>f#2pn&+`B32_B`LZ6M1i4xV?Fa%YTYK6D%woSo{+im{s@)+WBg{^b zXQ{I{d8?a?@{0^rdqgOT;sxOt#yJbuwIQ<1xWY9t<*f<aR z7Ne;-YbFDpfI&{tO*o1kah(baYc*n1wUEk9;L+{tS?7`H{F)Bnv*@!H^G`q-i__1z zJFJtIEZ$v|_Uyfte~-{ zY2L=l#nj$Gdgeb`Dz%f*(}N(>+1OL*tI497#mh1t$};cbKF-J=die}+GU#KV1N0Io zQ$CoTN;u2Xe6etlSX8`@cjPWaf{&IUv*F@hr<>GUF8Q#@P~#^IM7NjeU+>o26X7<} z6>jOL8?zJ+zG3F?Q8T5-4Zq?jqskO3Px=XjD!eQ&+Eq=jwK0q}&QSX%*m zY9x6~Ge2ba?GO?x{96#4Bz`m6_VpRDU9tkC?K%H^MyPzt)#Qh*{yg@e`0U<;_Z3*3 zc-xuvRKa*sOGUDE#aN-;OtNX^2iH$Txi*R3ehWKoQ>!v)aa=Q3amdZUUU$@ z4-6QeN8D~`LIaSuw}eAhQu$fsJb^6BXO?MD57qjHNIp^m4Kf=(WIvV|GOZ21`m(?& z#1xWS(v*z{(D!W?UfDU&!?7Je)kejZcff6!eWH1)1}eH*yxn1RVD}h&;1IcEK4b=L z{>VD&B&9DTZFQ%yEw0%1!S{K7Mu8k~@ohqpe7E3&U8FM6H^Qr7LL{y@60LB;oO~$p zp~x?ok4sb!%0VekM+2lG1BST_ciQz#>UaOH0dFJ7bz;_;?gsxZu<1m1q_jaWG3AJu zu+lxs>OEux<%=WEy|1)Iu;XDt#CxbI--6+vE&iglCy}B_CvJGQ28m*}3_ieRrte2- z)3FQSeacIAFBmh;(j(Kv#muC}^C%rS56Zjcq_cyV2{El;=9~MhXi6kcRW0pG^GgHRbO! zLe(MMkPk3?zRqn-T$x(Mz=imLfr6y%K!o9cpyP|p5>w_P&o7RcfCpx5v~WetdNe?4 zG*&58EMzY>DQK>Ri~dlk(x6$;h{07kQ@7NtsOr>&OYGVjKTnf8;mvsYdG*@uNfy)L z`qT*!tpe45+$W9c5+WaxAppLUfoTIvv`yPZ!nL(%Cz(pr+l4gXYW&Ir(;OlntgXKu zvIcS-O@BF16M{hCl)`-pYY5kcCxUZ{kmzar2$biQGkysd`~7>D>PA@GJ}AEj-=q(D z4A{Xq1J*L7kanlL|qJ#&3~?+p1K zR15ucbT>wy8s(i8!G=NyNw|x4oqc6c95C1JV#T^Rixg>bmja8I(jqPHZVN27xI0~3 zij@|(#VN8#u|ly@ic?$)EbcDF*^h7TymRNiKW{Qg&P;O7oO6C8GnprO_FJz#f;w$7 z4IJj+(wd+>Iu-()u}5meON)ueXZUWy_y)51`F(aNaOo8JNO7v&5rp52oXI42b%jF#$&C(w`AYxCA4A`Wy#izt;1To%XFTEvvr6B6U8W* zn|@ps8KgkEyNF)KIzDtqDxt2i&#jCM3!|OcX3UH+v69vOOmfB|F7_fkPrsY0W2G@a zC;Ur+G@{!Wuj}(;tzJQ5P6j#y zI_Mw2P&{qnm6E-uf3VMuQGk01+Pzq5$LM%)#}M&4Yv?vh_1Tb0Tb|A^$C^$8t|TVY zP;^zXU^X%5)ugbwrA2r1q8>^UsptDcaQ9)SOB+F*Zf?1e%M zb{vz1t14rNF@g;jth8=tb!S%S1>ZM!r7+})`&;X56!1_BQTo0DtXP@8b`|dh4=n3FZKaNOFEh`k5PUya9)S7FT=SqC%6(q`U5k&|MpH104&3l!ks?`pK0*pi%}yA_P0gem z^yQRu7zvHE%1RgRycO7RF+6wFLo#XC63T2)1bl7ofyONnkdJ@v%_+eycIA+&Fz9g| zQax>|Ga!nYs)D>9uOor`s)$uR!oekt?>~ZMSdLN-)hcqRH&`+8!n6>$K`k7omI?){ ztXM^QfTn%Z$n(&WA%1AA?3s{JGM_LVu)4cVh)qj!vA6hVww+$)BL5(!+Q(l}i+*K! z3w89PGcSn^-)SbR&CRJ;{M5r;?&;gfuZ_erNn-Y>KN+AsIJZgjdJHOcC>GwfYlogZE44--kQNQFJ?)I(BR zJvGS{k0*-LLT{&8F(sfkh02HL0~y8I;!lM-2#G>Ex_*|IQSOW`FYFutT==Z6o5aNw zDQQOJ<#mX6-&wRKa1NV{D`RMI`D&w(p${VT)*JEY?w>2k$6<1?y{9ST zS%nKz8LO6O>zG#4={jMoW*WXKU5L4^$NU^&PWiqipW537o-S{yIo97YX&EeQA7Si3 z-NW>w`O2|{*1Ny`W0p6+KxeG-aDWs>?A!uV(R`6fPQ8&^!6VU#>^sf^BP$GJ))a&~ zq`4+a~i(SsWvNAm@4rR@*i`5fVooe;F2CK!d;}GVFg*bhS@O#qt zhb6usGJp$#7mOQC{%Xw{s%KnAw$xXfcY!BW=u6hI+BNFjk?iBX5S%G8mgO)WuXFl#nqQCp0H|DFmT9i7+K?9A=aXab$L+C*57{XKqE+)gm`ysibev-o zEh^uh=O|~Dr4<)E4{0d^9<(ruWLRh{WShS(@tQr2_BtSCbZxAX8Bi0+y zc{Vk+qKQk-cUs7fdZ?!Le;A5AYyUfKvr22b@(gno#Zh_WM)e?9@?kI%dvfx%O!Cop zR;q$GOL~YKtntlVOqzO^;SZ(3Aa;$UFKRUQmB*Im$e@Dn$<;Ergjy6{$#*QS+D*y@ z`G1>q{|xyCWktc>sm-CD?o-Q#59q-u7noyh#*q1-4HJ|`P}lsh4_oJJg$q^u8AH*2 z$|c>2+O@#v4hybtB(KgJQ#J|OuhMrc#Yo5&c(VuBdx`~Kb?QW#JSl(0?Ok7e zEat$P0>@J%RP~}Qp`meeUmljj}-HG%*f45QTQYt7w07Y{jBoa zp=j#0{7m(iS(24$1hUTcC8!;oTU@f9UM4!;{{~44iE0het`j`PEgsKQ8~bVA6T;JH%g7c?N6c#T!R?t5IQNuV1?_h_vnnf8VM#pY<3> zlnBgjMbm~=2Sz9ih6Ju~>AsR5=9S-kIbQ5thUL%~!Hc>1WpAUmtvLFKez57+zxd>& z*emSfv(FC88A!Pt8(Vmq4L{RRnDUlb^@k-)Me+{V@RsfUkTMus2hzcAgk+k$A&Qlb z(UGiUp48J$nRdHbV+s&9_|RsFRaxeP&h`JGn3p0QD5?HOVbcF;;C5%K?-Juq8mCfc ztu`S{nfUvJcnjGlgEo@p=eM+^ibn960FNbRhjY7%M;LMDH!2wLu)UWjHd7%h{_>Th zf637n_}+fo#T;02xYTZC5BoatBM07@Dh~C)F5;aBf<+stL`w1`zbC$Sv zdMc5$wpe@EQn8AConJUAZlOH?LzeL`99O&E88k`O0HvCCZFE|c{-eomvkqUxm)6M= z9lt9!clp>(9Z%#OTiuGIGH(wGD}^DcrCuyf6$tNAR-{@wf`2t%%&5dpX$o2BPL@81 zeIr(3juNjwPW>hQZ2RF~l2m$#WKfUogj~!Z)MpWkSLlo05GNRBYnm+Ne@_poZSo5B zZfLhN<+_mg$fIBjC)|zOgs{AibrGKWVpwH7i3G!}*0oh|e&f>9CKi$V$ID-r+2tnM zp_p!jsp#jjt8y_URl2C`5YIyS@N>hznEQid_Om>=3YZEz{PvR^;^P|F^sOyA$Hjv+ z{5zI?7aHRg-Dlp+3JeOM>0D*sM6pGl|NL`-U|rsw+5z8TMf7ZA}%PR@S39Y{v(L|VEg z7ML&xql@N~mV8c2)XURtMTLnmTB$-prp@Y9^IBRSW-b8*0>n0kP|_8Ft)pDx<3YY^o{yCuVLF|NL%eF%PH?#lP5x z+Z5r!-ck0L_IR>u=v?vlG-|@t+e~}=eGU&*O1-KbG5W5K>k~d~_}8?uY687dx09oP z{>qNk@zeL_7E|;)WJ6fiUe&!`SN}DjxfU=y>Ogfd-fDhwSYr|{?D%6*=VS777_|R6 ztU#oeG%~l`u54Ap@?Q{FX`9j|Q!$hUY~;C%bwq^HuZSXyx=RNcnjx`8fcKUpHCf3d zVxH>tbUAF=3g$MXHLc0#iqaumrka;dxZ-Ki0Qv3xsEo|le{`cr4zpME{LW|q?ViX z_lfdk(#n(WdW)0!m9BR8dUgDAzWU)aB|^bQRwlKjf8n`r?r16)ThSgS(&kD2k$`M&RCn7g&oAwFMqMSre)1Ga}C)LP&vpsx>Iz6Zb&Fx~^(B`?e zGH)74-(grFIeGwlmp9z$T#EH(2MPE%dV4}bHJw-iTw^vTDNH0CpX!XX>!~O7h-brL z&a)7Xa)$47Hm2P_YvIJXMvGGRjGBFUCvU|qae023DsOVy{Z?gG%?Rp4of8&o~SJ_BzH(dd?CE zPEmeEppvNV&D886ffR8s)wl0`bV-M&16SRSEC-oj8eBt>>j_sFt)VNF?{^NLHMBQ} z0u}ljfrxkfIv2MYg{wjJQt^4RegXS}>xp#a(3EC}V6U5>D^B;BZPxNmk)`EbFB2c; zgBEYX(PY6u&E*HC>v4wbs~cs~`P|YI&mt6=L??=?K$(#HWFmSn`pzT29A@pf?5G5@ z-?N4~7s8xi>yA*zveHu9(*P{61rBSPP&ya@NJ_bTf(JNPx6m*JNX(;Nl5eA43f!+v ztrH(#%2t(ERqY&+R>ic0)xz5g1#?>uv^RJ#*a84J4_U>>xIrD?1)Oia-H#%B4FDvfxU87*N#y9sW4J+o(RpQc??6ceSbjNE;9sxZAJX9`b>tr1I)=y# zi@t1hd+Fnj)@LP)LkF>U{4iksW`%r z*Y#>>&pfa8Fiu$b7)7@IVbfHcOD!GWnNVpux;_vg+xAmv7a4RvTOukZyYM>ywNFf=6zZR>r7& zps_P=A@WJnAmmchO7-r~zO9x^J7_YiURUR9w!ygN{>)AY=Bxg8l^2U;K`Lei_{snEU*lJ={ZnOzlL=Ynoe-br~T>?J-Ch zd*uC+`)lD~z%ZC|?l-RgwF4|PxJ;4I6mQXhIc!*<87EomqS`~qLoq*)mUizIPR9u) z??ZPVccqJ~c7a*9g3l|R1>*b6a)3-n7(u&D*x9gov&H!?=CpFyD|XMbCe2g26uh2; zr@Z+ifjh0_)3=B_hNz6Fn=%#dBg#9bW>&Awa>jp`G!UaShfX3+*oT2{(oR%rINJ4ArrU)0C_sT^uV}}l za|j_%i=CKO`V0AOt^t37bs7T1`2a7*@jzUG9)-dwVK4e)s8+aEbOMkh4Jlq>Q?(l_w z(h!9)(m}DbH=VB2;v`i8)vMRrz1uVDq46Na zu}|GQ*Qwy;x-kbdRn=G{loeSzm3}6cRd*~wGXn-LJH-izIfnw{dPjq-cZ} zVn^%YGi6~B)lHY_`Pp<4!~Q6iXJV)|M-q!&)flp+k}&mzP{bVpvPu`PvZIrY#8o}> zUm3Sytu3~aCgjRv@@|B!eoW8E@`ZSHO=tevV4EO^69(Li0B&14hpi+{NCYM+;6QNR z>@m@+;7s=}Pwhuh&4pLCh53k_jNphX{dQf%KQWi>$7bZvM-+B+e-#=f?z0c6%>DQ; zMjb&x=x#{Ra!vylKR(NRo6qDdZ|M6;O;q#w*7gg6UPCqjVp6?PTeJ`rI)dM@vxqTpsRjY&g7Botq6B?-t5G5&#!?#$dWq9q?E4wt4Xil)Di#4eW@l0&n_KuurPP$BGV!Y2)~ z?bS!Vb1xRPS%svMDo^V^5&n@V*&0JWiPTJbtTi_WywIa+=ud4UEc#-Wg%|ue72Y*u zDJQa0ZytIXKhf7o9pcm;h7~3pAE?IeeOEl?1uv9*APpqMgg-rke;636M0I~p0 zBdG{8lbb{19hrcNcqWeoHTVM{9mtcZjtklpg|d=XHX5 zLaZU45I$FT7gwmer#;j|S%t@akbgjx2Va?&Yh-A&USv{eSxJTGRF(I=%6p#oa-fmn zA&-$!-oBytK(+ox5$qHCGp*QDA?<}YGHrJ)EO(^|p|d1Uzy$!Hp^Sk^f%Si#EQ}~# zmcR!9?nM9qoJS}BQ;OjKD{1k0`g;Di%F|Ubp1a4%b_@W3{6Fg-$0E4tqaoS<6PPN* z+1>`~;mPOg diff --git a/kits/optimizely/optimizely-3/src/main/kotlin/com/mparticle/kits/OptimizelyKit.kt b/kits/optimizely/optimizely-3/src/main/kotlin/com/mparticle/kits/OptimizelyKit.kt new file mode 100644 index 000000000..4368c4e21 --- /dev/null +++ b/kits/optimizely/optimizely-3/src/main/kotlin/com/mparticle/kits/OptimizelyKit.kt @@ -0,0 +1,454 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.TypedUserAttributeListener +import com.mparticle.commerce.CommerceEvent +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.Logger +import com.mparticle.internal.MPUtility +import com.mparticle.kits.KitIntegration.CommerceListener +import com.optimizely.ab.android.sdk.OptimizelyClient +import com.optimizely.ab.android.sdk.OptimizelyManager +import com.optimizely.ab.android.sdk.OptimizelyStartListener +import java.math.BigDecimal +import java.util.ArrayList +import java.util.HashMap +import java.util.LinkedList +import java.util.Queue + +open class OptimizelyKit : + KitIntegration(), + KitIntegration.EventListener, + CommerceListener, + OptimizelyStartListener { + @JvmField + val mEventQueue: Queue = LinkedList() + + override fun getName(): String = KIT_NAME + + @Throws(IllegalArgumentException::class) + public override fun onKitCreate( + map: Map, + context: Context, + ): List { + val sdkKey = map[PROJECT_ID] + val eventInterval = tryParse(map[EVENT_INTERVAL]) + val datafileDownloadInterval = tryParse(map[DATAFILE_INTERVAL]) + if (!providedClient && (mOptimizelyClient == null || !mOptimizelyClient!!.isValid)) { + val builder = + OptimizelyManager + .builder() + .withSDKKey(sdkKey) + if (eventInterval != null) { + builder.withEventDispatchInterval(eventInterval) + } + if (datafileDownloadInterval != null) { + builder.withDatafileDownloadInterval(datafileDownloadInterval) + } + val optimizelyManager = builder.build(context) + optimizelyManager.initialize(context, null, this) + } + return emptyList() + } + + override fun setOptOut(b: Boolean): List = emptyList() + + override fun leaveBreadcrumb(s: String): List = emptyList() + + override fun logError( + s: String, + map: Map, + ): List = emptyList() + + override fun logException( + e: Exception, + map: Map, + s: String, + ): List = emptyList() + + override fun logEvent(mpEvent: MPEvent): List? { + val user = currentUser + var customUserId: String? = null + var valueString: String? = null + mpEvent.customFlags?.let { + val valueList = it[OPTIMIZELY_VALUE_KEY] + if (valueList != null && valueList.size > 0) { + valueString = valueList[0] + } + val userIdList = it[OPTIMIZELY_USER_ID] + if (userIdList != null && userIdList.size > 0) { + customUserId = userIdList[0] + } + } + val optimizelyCustomUserId = customUserId + val optimizelyValueString = valueString + val eventCreated = + getOptimizelyEvent( + mpEvent, + user, + object : OptimizelyEventCallback { + override fun onOptimizelyEventCreated(event: OptimizelyEvent) { + if (!MPUtility.isEmpty(optimizelyValueString)) { + try { + val value = optimizelyValueString!!.toDouble() + event.addEventAttribute("value", value) + Logger.debug( + String.format( + "Applying custom value: \"%s\" to Optimizely Event based on customFlag", + value.toString(), + ), + ) + } catch (ex: NumberFormatException) { + Logger.error( + String.format( + "Unable to log Optimizely Value \"%s\", failed to parse as a Double", + optimizelyValueString, + ), + ) + } + } + if (!MPUtility.isEmpty(optimizelyCustomUserId)) { + event.userId = optimizelyCustomUserId + Logger.debug( + String.format( + "Applying custom userId: \"%s\" to Optimizely Event based on customFlag", + optimizelyCustomUserId, + ), + ) + } + logOptimizelyEvent(event) + } + }, + ) + return if (!eventCreated) { + null + } else { + listOf(ReportingMessage.fromEvent(this, mpEvent)) + } + } + + override fun logScreen( + s: String, + map: Map, + ): List = emptyList() + + override fun logLtvIncrease( + bigDecimal: BigDecimal, + bigDecimal1: BigDecimal, + s: String, + map: Map, + ): List = emptyList() + + override fun logEvent(commerceEvent: CommerceEvent): List { + val user = currentUser + var customEventName: String? = null + var customUserId: String? = null + var valueString: String? = null + commerceEvent.customFlags?.let { + val eventNameFlags = it[OPTIMIZELY_EVENT_NAME] + val userIdFlags = it[OPTIMIZELY_USER_ID] + val valueList = it[OPTIMIZELY_VALUE_KEY] + if (eventNameFlags != null) { + customEventName = eventNameFlags[0] + } + if (userIdFlags != null) { + customUserId = userIdFlags[0] + } + if (valueList != null && valueList.size > 0) { + valueString = valueList[0] + } + } + val events = CommerceEventUtils.expand(commerceEvent) + val optimizelyCustomEventName = customEventName + val optimizelyCustomUserId = customUserId + val optimizelyValueString = valueString + for (event in events) { + getOptimizelyEvent( + event, + user, + object : OptimizelyEventCallback { + override fun onOptimizelyEventCreated(optimizelyEvent: OptimizelyEvent) { + // If the event is a Purchase or Refund expanded event + if (commerceEvent.productAction != null && + event.eventName == + String.format( + CommerceEventUtils.PLUSONE_NAME, + commerceEvent.productAction, + ) + ) { + // parse and apply the "revenue" + val totalAmountString = + event.customAttributeStrings?.get(CommerceEventUtils.Constants.ATT_TOTAL) + if (!MPUtility.isEmpty(totalAmountString)) { + try { + val totalAmount = java.lang.Double.valueOf(totalAmountString) + val revenueInCents = + java.lang.Double + .valueOf(totalAmount * 100) + .toInt() + optimizelyEvent.eventAttributes?.set("revenue", revenueInCents) + Logger.debug( + String.format( + "Applying revenue: \"%s\" to Optimizely Event based on transactionAttributes", + revenueInCents, + ), + ) + } catch (ex: NumberFormatException) { + Logger.error("Unable to parse Revenue value") + } + } + // And apply the custom name, if there is one + if (optimizelyCustomEventName != null) { + optimizelyEvent.eventName = optimizelyCustomEventName + Logger.debug( + String.format( + "Applying custom eventName: \"%s\" to Optimizely Event based on customFlag", + optimizelyCustomEventName, + ), + ) + } + } + // Apply customId, if there is one, to all expanded events + if (optimizelyCustomUserId != null) { + optimizelyEvent.userId = optimizelyCustomUserId + Logger.debug( + String.format( + "Applying custom userId: \"%s\" to Optimizely Event based on customFlag", + optimizelyCustomUserId, + ), + ) + } + if (!MPUtility.isEmpty(optimizelyValueString)) { + try { + val value = optimizelyValueString?.toDouble() + optimizelyEvent.addEventAttribute("value", value) + Logger.debug( + String.format( + "Applying custom value: \"%s\" to Optimizely Event based on customFlag", + value, + ), + ) + } catch (ex: NumberFormatException) { + Logger.error( + String.format( + "Unable to log Optimizely Value \"%s\", failed to parse as a Double", + optimizelyValueString, + ), + ) + } + } + logOptimizelyEvent(optimizelyEvent) + } + }, + ) + } + return listOf(ReportingMessage.fromEvent(this, commerceEvent)) + } + + public override fun onKitDestroy() { + super.onKitDestroy() + mOptimizelyClient = null + mStartListeners.clear() + } + + override fun onStart(optimizelyClient: OptimizelyClient) { + // check providedClient, so we don't override a client that the was set explicitly + if (!providedClient && optimizelyClient.isValid) { + mOptimizelyClient = optimizelyClient + for (listener in mStartListeners) { + try { + listener.onOptimizelyClientAvailable(mOptimizelyClient) + } catch (e: Exception) { + } + } + mStartListeners.clear() + replayQueue() + } + } + + open fun logOptimizelyEvent(trackEvent: OptimizelyEvent) { + if (mOptimizelyClient != null && mOptimizelyClient!!.isValid) { + if (trackEvent.eventAttributes == null) { + mOptimizelyClient?.track( + trackEvent.eventName!!, + trackEvent.userId!!, + trackEvent.userAttributes!!, + ) + } else { + mOptimizelyClient?.track( + trackEvent.eventName!!, + trackEvent.userId!!, + trackEvent.userAttributes!!, + trackEvent.eventAttributes!!, + ) + } + } else { + queueEvent(trackEvent) + } + } + + open fun getUserId(user: MParticleUser?): String { + var userId: String? = null + if (user != null) { + val userIdField = settings[USER_ID_FIELD_KEY] + if (USER_ID_CUSTOMER_ID_VALUE.equals(userIdField, true)) { + userId = user.userIdentities[MParticle.IdentityType.CustomerId] + } else if (USER_ID_EMAIL_VALUE.equals(userIdField, true)) { + userId = user.userIdentities[MParticle.IdentityType.Email] + } else if (USER_ID_OTHER_VALUE.equals(userIdField, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other] + } else if (USER_ID_OTHER2_VALUE.equals(userIdField, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other2] + } else if (USER_ID_OTHER3_VALUE.equals(userIdField, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other3] + } else if (USER_ID_OTHER4_VALUE.equals(userIdField, true)) { + userId = user.userIdentities[MParticle.IdentityType.Other4] + } else if (USER_ID_MPID_VALUE.equals(userIdField, true)) { + userId = user.id.toString() + } else if (USER_ID_DAS_VALUE.equals(userIdField, true)) { + userId = MParticle.getInstance()!!.Identity().deviceApplicationStamp + } + } + if (userId == null) { + userId = MParticle.getInstance()!!.Identity().deviceApplicationStamp + Logger.debug("Optimizely userId not found, applying DAS as userId by default") + } + return userId + } + + private fun getOptimizelyEvent( + mpEvent: MPEvent, + user: MParticleUser?, + onEventCreated: OptimizelyEventCallback, + ): Boolean = + if (!MPUtility.isEmpty(getUserId(user))) { + val listener: TypedUserAttributeListener = + object : TypedUserAttributeListener { + override fun onUserAttributesReceived( + userAttributes: Map, + map1: Map?>, + mpid: Long, + ) { + val attributes: MutableMap = HashMap() + for ((key, value) in userAttributes) { + attributes[key] = value + } + val event: OptimizelyEvent = OptimizelyEvent() + val eventName = mpEvent.eventName + val userId = getUserId(user) + event.eventName = eventName + event.userId = userId + event.userAttributes = attributes + if (mpEvent.customAttributes != null) { + event.eventAttributes = mpEvent.customAttributes?.let { HashMap(it) } + } + onEventCreated.onOptimizelyEventCreated(event) + } + } + if (user != null) { + user.getUserAttributes(listener) + } else { + listener.onUserAttributesReceived(HashMap(), HashMap(), 0) + } + true + } else { + false + } + + private fun queueEvent(event: OptimizelyEvent) { + mEventQueue.offer(event) + if (mEventQueue.size > 10) { + mEventQueue.remove() + } + } + + private fun replayQueue() { + while (!mEventQueue.isEmpty()) { + mEventQueue.poll()?.let { logOptimizelyEvent(it) } + } + } + + private fun tryParse(value: String?): Long? = + try { + value!!.toLong() + } catch (e: Exception) { + null + } + + inner class OptimizelyEvent { + @JvmField + var eventName: String? = null + + @JvmField + var userId: String? = null + + @JvmField + var userAttributes: Map? = null + + @JvmField + var eventAttributes: MutableMap? = null + + fun addEventAttribute( + key: String, + value: Any?, + ) { + if (eventAttributes == null) { + eventAttributes = HashMap() + } + eventAttributes!![key] = value + } + } + + interface OptimizelyClientListener { + fun onOptimizelyClientAvailable(optimizelyClient: OptimizelyClient?) + } + + private interface OptimizelyEventCallback { + fun onOptimizelyEventCreated(event: OptimizelyEvent) + } + + companion object { + private var providedClient = false + private var mOptimizelyClient: OptimizelyClient? = null + private val mStartListeners: MutableList = ArrayList() + const val USER_ID_FIELD_KEY = "userIdField" + const val EVENT_INTERVAL = "eventInterval" + const val DATAFILE_INTERVAL = "datafileInterval" + const val PROJECT_ID = "projectId" + const val USER_ID_CUSTOMER_ID_VALUE = "customerId" + const val USER_ID_EMAIL_VALUE = "email" + const val USER_ID_OTHER_VALUE = "otherid" + const val USER_ID_OTHER2_VALUE = "otherid2" + const val USER_ID_OTHER3_VALUE = "otherid3" + const val USER_ID_OTHER4_VALUE = "otherid4" + const val USER_ID_MPID_VALUE = "mpid" + const val USER_ID_DAS_VALUE = "deviceApplicationStamp" + const val OPTIMIZELY_VALUE_KEY = "Optimizely.Value" + const val OPTIMIZELY_EVENT_NAME = "Optimizely.EventName" + const val OPTIMIZELY_USER_ID = "Optimizely.UserId" + const val KIT_NAME = "Optimizely" + + @JvmStatic + var optimizelyClient: OptimizelyClient? + get() = mOptimizelyClient + set(optimizelyClient) { + mOptimizelyClient = optimizelyClient + providedClient = optimizelyClient != null + } + + /** + * Add a single use callback for Optimizely Client startup. Your listener will be automatically + * removed after it is invoked. To remove it earlier, simply null our your reference + * @param startListener + */ + fun getOptimizelyClient(startListener: OptimizelyClientListener) { + if (mOptimizelyClient != null) { + startListener.onOptimizelyClientAvailable(mOptimizelyClient) + } else { + mStartListeners.add(startListener) + } + } + } +} diff --git a/kits/optimizely/optimizely-3/src/test/kotlin/com/mparticle/kits/OptimizelyKitTests.kt b/kits/optimizely/optimizely-3/src/test/kotlin/com/mparticle/kits/OptimizelyKitTests.kt new file mode 100644 index 000000000..5b8a2ab2f --- /dev/null +++ b/kits/optimizely/optimizely-3/src/test/kotlin/com/mparticle/kits/OptimizelyKitTests.kt @@ -0,0 +1,611 @@ +package com.mparticle.kits + +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.TypedUserAttributeListener +import com.mparticle.UserAttributeListener +import com.mparticle.UserAttributeListenerType +import com.mparticle.audience.AudienceResponse +import com.mparticle.audience.AudienceTask +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Impression +import com.mparticle.commerce.Product +import com.mparticle.commerce.TransactionAttributes +import com.mparticle.consent.ConsentState +import com.mparticle.identity.IdentityApi +import com.mparticle.identity.MParticleUser +import com.mparticle.kits.OptimizelyKit.Companion.optimizelyClient +import com.mparticle.mock.MockContext +import com.mparticle.mock.MockKitConfiguration +import com.mparticle.testutils.RandomUtils +import com.mparticle.testutils.TestingUtils +import com.optimizely.ab.android.sdk.OptimizelyClient +import org.json.JSONException +import org.json.JSONObject +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.mockito.Mockito +import java.util.HashMap +import java.util.Random +import java.util.UUID + +class OptimizelyKitTests { + var randomUtils = RandomUtils() + private val kit: KitIntegration + get() = OptimizelyKit() + + @Before + fun before() { + val mockMParticle = Mockito.mock(MParticle::class.java) + val mockIdentityApi = Mockito.mock(IdentityApi::class.java) + val mockUser: MParticleUser = EmptyMParticleUser() + Mockito.`when`(mockMParticle.Identity()).thenReturn(mockIdentityApi) + Mockito.`when`(mockMParticle.environment).thenReturn(MParticle.Environment.Development) + Mockito.`when`(mockIdentityApi.currentUser).thenReturn(mockUser) + MParticle.setInstance(mockMParticle) + } + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(name != null && name.isNotEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + val optimizelyKit = OptimizelyKit() + val client = Mockito.mock(OptimizelyClient::class.java) + Mockito.`when`(client.isValid).thenReturn(true) + optimizelyClient = client + val minimalSettings: MutableMap = HashMap() + var e: Exception? = null + minimalSettings["projectId"] = "2234" + try { + optimizelyKit.onKitCreate(minimalSettings, MockContext()) + } catch (ex: Exception) { + e = ex + } + Assert.assertNull(e) + val badSettings: MutableMap = HashMap() + badSettings["projectId"] = "2234" + badSettings[OptimizelyKit.DATAFILE_INTERVAL] = "foo" + badSettings[OptimizelyKit.EVENT_INTERVAL] = "bar" + try { + optimizelyKit.onKitCreate(badSettings, MockContext()) + } catch (ex: Exception) { + e = ex + } + Assert.assertNull(e) + val goodSettings: MutableMap = HashMap() + goodSettings["projectId"] = "2234" + goodSettings[OptimizelyKit.DATAFILE_INTERVAL] = "3" + goodSettings[OptimizelyKit.EVENT_INTERVAL] = "5" + try { + optimizelyKit.onKitCreate(goodSettings, MockContext()) + } catch (ex: Exception) { + e = ex + } + Assert.assertNull(e) + } + + /** + * Test that the correct value for userId is being set, based on the settings value. default userId + * will be null + */ + @Test + @Throws(JSONException::class) + fun testUserId() { + val product1 = Product.Builder("product1", "1234", 0.0).build() + val product2 = Product.Builder("product2", "9876", 1.0).build() + val product3 = Product.Builder("product3", "3333", 300.0).build() + val commerceEvent = + CommerceEvent + .Builder(Product.ADD_TO_CART, product1) + .addProduct(product2) + .addProduct(product3) + .build() + val mpid = Random().nextLong() + val customerId = randomUtils.getAlphaNumericString(20) + val email = randomUtils.getAlphaNumericString(10) + val identities: MutableMap = HashMap() + identities[IdentityType.CustomerId] = customerId + identities[IdentityType.Email] = email + val user: MParticleUser = + object : EmptyMParticleUser() { + override fun getUserIdentities(): Map = identities + + override fun getId(): Long = mpid + } + Mockito.`when`(MParticle.getInstance()?.Identity()?.currentUser).thenReturn(user) + val expectedUserId = Mutable("") + val count = Mutable(0) + val settings = Mutable(JSONObject()) + val optimizelyKit: OptimizelyKit = + object : OptimizelyKit() { + override fun logOptimizelyEvent(trackEvent: OptimizelyEvent) { + count.value++ + Assert.assertEquals(expectedUserId.value, trackEvent.userId) + } + + override fun getConfiguration(): KitConfiguration? = + try { + MockKitConfiguration.createKitConfiguration( + JSONObject() + .put("id", MParticle.ServiceProviders.OPTIMIZELY) + .put("as", settings.value), + ) + } catch (e: JSONException) { + null + } + } + val expectedEventCount = CommerceEventUtils.expand(commerceEvent).size + settings.value = + JSONObject().put(OptimizelyKit.USER_ID_FIELD_KEY, OptimizelyKit.USER_ID_EMAIL_VALUE) + expectedUserId.value = email + optimizelyKit.logEvent(commerceEvent) + Assert.assertEquals(expectedEventCount, count.value) + count.value = 0 + settings.value = + JSONObject().put( + OptimizelyKit.USER_ID_FIELD_KEY, + OptimizelyKit.USER_ID_CUSTOMER_ID_VALUE, + ) + expectedUserId.value = customerId + optimizelyKit.logEvent(commerceEvent) + Assert.assertEquals(expectedEventCount, count.value) + count.value = 0 + settings.value = + JSONObject().put(OptimizelyKit.USER_ID_FIELD_KEY, OptimizelyKit.USER_ID_MPID_VALUE) + expectedUserId.value = mpid.toString() + optimizelyKit.logEvent(commerceEvent) + Assert.assertEquals(expectedEventCount, count.value) + count.value = 0 + val das = UUID.randomUUID().toString() + Mockito.`when`(MParticle.getInstance()?.Identity()?.deviceApplicationStamp).thenReturn(das) + settings.value = + JSONObject().put(OptimizelyKit.USER_ID_FIELD_KEY, OptimizelyKit.USER_ID_DAS_VALUE) + expectedUserId.value = das + optimizelyKit.logEvent(commerceEvent) + Assert.assertEquals(expectedEventCount, count.value) + count.value = 0 + + // test default, should be das + settings.value = JSONObject() + expectedUserId.value = das + optimizelyKit.logEvent(commerceEvent) + // Don't log events if there is no userId type present + Assert.assertEquals(3, count.value.toLong()) + count.value = 0 + Mockito.`when`(MParticle.getInstance()!!.Identity().currentUser).thenReturn(null) + // test default when no user is present, default to das + settings.value = JSONObject() + expectedUserId.value = das + optimizelyKit.logEvent(MPEvent.Builder("an event", MParticle.EventType.Location).build()) + optimizelyKit.logEvent(commerceEvent) + // log events with das if there is no userId type present + Assert.assertEquals(4, count.value.toLong()) + } + + /** + * Test that when the Client is explicitly set via the static getClient() method, the Kit will not + * override it, even if a client request is in progress + */ + @Test + fun testClientSetClientNotOverriden() { + val optimizelyClient = Mockito.mock(OptimizelyClient::class.java) + OptimizelyKit.optimizelyClient = optimizelyClient + val rejectedClient = Mockito.mock(OptimizelyClient::class.java) + Mockito.`when`(rejectedClient.isValid).thenReturn(true) + val optimizelyKit = OptimizelyKit() + optimizelyKit.onStart(rejectedClient) + Assert.assertTrue(optimizelyClient === OptimizelyKit.optimizelyClient) + OptimizelyKit.optimizelyClient = null + optimizelyKit.onStart(rejectedClient) + Assert.assertTrue(rejectedClient === OptimizelyKit.optimizelyClient) + } + + @Test + fun testLogEventNoCustom() { + val event = MPEvent.Builder("An event", MParticle.EventType.Location).build() + val called = Mutable(false) + val optimizelyKit: OptimizelyKit = + object : MockOptimizelyKit() { + override fun logOptimizelyEvent(trackEvent: OptimizelyEvent) { + if (called.value) { + Assert.fail("multiple events, expecting 1") + } + Assert.assertEquals(trackEvent.eventName, "An event") + Assert.assertNull(trackEvent.eventAttributes) + called.value = true + } + } + optimizelyKit.logEvent(event) + Assert.assertTrue(called.value) + } + + /** + * test that all Product custom attributes are properly translated into Optimizely event attributes + * test that default event name is correct + */ + @Test + fun testCommerceEventNoCustom() { + val userAttributes = randomUtils.getRandomAttributes(4) + val user: MParticleUser = + object : EmptyMParticleUser() { + override fun getUserAttributes(userAttributeListener: UserAttributeListenerType?): Map? { + (userAttributeListener as TypedUserAttributeListener?)!!.onUserAttributesReceived( + HashMap(userAttributes), + HashMap(), + 1L, + ) + return null + } + } + Mockito.`when`(MParticle.getInstance()!!.Identity().currentUser).thenReturn(user) + val product1 = Product.Builder("product1", "1234", 0.0).build() + val product2 = Product.Builder("product2", "9876", 1.0).build() + val product3 = Product.Builder("product3", "3333", 300.0).build() + val commerceEvent = + CommerceEvent + .Builder(Product.ADD_TO_CART, product1) + .addProduct(product2) + .addProduct(product3) + .build() + val expectedCount = CommerceEventUtils.expand(commerceEvent).size + val count = Mutable(0) + val optimizelyKit: OptimizelyKit = + object : MockOptimizelyKit() { + override fun logOptimizelyEvent(trackEvent: OptimizelyEvent) { + count.value++ + Assert.assertEquals( + String.format( + "eCommerce - %s - Item", + commerceEvent.productAction, + ), + trackEvent.eventName, + ) + Assert.assertEquals(userAttributes, trackEvent.userAttributes) + } + } + optimizelyKit.logEvent(commerceEvent) + Assert.assertEquals(expectedCount.toLong(), count.value.toLong()) + } + + /** + * test that the "revenue" reserved keyword is being populated when a CommerceEvent has revenue + */ + @Test + fun testCommerceEventRevenue() { + val userAttributes = randomUtils.getRandomAttributes(4) + val user: MParticleUser = + object : EmptyMParticleUser() { + override fun getUserAttributes(userAttributeListener: UserAttributeListenerType?): Map? { + (userAttributeListener as TypedUserAttributeListener?)!!.onUserAttributesReceived( + HashMap(userAttributes), + HashMap(), + 1L, + ) + return null + } + } + Mockito.`when`(MParticle.getInstance()!!.Identity().currentUser).thenReturn(user) + val customAttributes = randomUtils.getRandomAttributes(3) + customAttributes[OptimizelyKit.OPTIMIZELY_EVENT_NAME] = "myCustomName1" + val customAttributes1 = randomUtils.getRandomAttributes(5) + customAttributes1[OptimizelyKit.OPTIMIZELY_EVENT_NAME] = "myCustomName2" + val product1 = + Product.Builder("product1", "1234", 0.0).customAttributes(customAttributes).build() + val product2 = + Product.Builder("product2", "9876", 1.0).customAttributes(customAttributes1).build() + val product3 = Product.Builder("product3", "3333", 300.0).build() + val transactionAttributes = TransactionAttributes("999").setRevenue(45.5) + val commerceEvent = + CommerceEvent + .Builder(Product.PURCHASE, product1) + .transactionAttributes(transactionAttributes) + .addProduct(product2) + .addProduct(product3) + .build() + val count = Mutable(0) + val revenueEventFound = Mutable(false) + val optimizelyKit: OptimizelyKit = + object : MockOptimizelyKit() { + override fun logOptimizelyEvent(trackEvent: OptimizelyEvent) { + count.value++ + if (String.format( + CommerceEventUtils.PLUSONE_NAME, + commerceEvent.productAction, + ) == trackEvent.eventName + ) { + // make sure it is our revenue * 100 (we our dollars, they are cents) + Assert.assertEquals( + trackEvent.eventAttributes!!["revenue"].toString().toDouble(), + 4550.0, + 0.0, + ) + Assert.assertFalse(revenueEventFound.value) + revenueEventFound.value = true + } else { + Assert.assertEquals( + String.format( + "eCommerce - %s - Item", + commerceEvent.productAction, + ), + trackEvent.eventName, + ) + } + Assert.assertEquals(userAttributes, trackEvent.userAttributes) + } + } + optimizelyKit.logEvent(commerceEvent) + Assert.assertEquals( + CommerceEventUtils.expand(commerceEvent).size.toLong(), + count.value.toLong(), + ) + Assert.assertTrue(revenueEventFound.value) + } + + /** + * Ensure that the custom name flag is being applied when it should be + */ + @Test + fun testCommerceEventProductCustomName() { + val eventName = "custom name" + val product1 = Product.Builder("product1", "1234", 0.0).build() + val transactionAttributes = TransactionAttributes("999").setRevenue(20.5) + val commerceEvent = + CommerceEvent + .Builder(Product.PURCHASE, product1) + .transactionAttributes(transactionAttributes) + .addCustomFlag(OptimizelyKit.OPTIMIZELY_EVENT_NAME, eventName) + .build() + val count = Mutable(0) + val customNameFound = Mutable(false) + val optimizelyKit: OptimizelyKit = + object : MockOptimizelyKit() { + override fun logOptimizelyEvent(trackEvent: OptimizelyEvent) { + count.value++ + if (trackEvent.eventName == eventName) { + Assert.assertEquals( + trackEvent.eventAttributes!!["revenue"].toString().toFloat(), + 2050f, + 0f, + ) + Assert.assertFalse(customNameFound.value) + customNameFound.value = true + } + } + } + optimizelyKit.logEvent(commerceEvent) + Assert.assertEquals( + CommerceEventUtils.expand(commerceEvent).size.toLong(), + count.value.toLong(), + ) + Assert.assertTrue(customNameFound.value) + } + + @Test + fun testCustomValue() { + val randomEvent = + MPEvent + .Builder(TestingUtils.getInstance().randomMPEventRich) + .addCustomFlag(OptimizelyKit.OPTIMIZELY_VALUE_KEY, "40.1") + .build() + val eventFound = Mutable(false) + val optimizelyKit: OptimizelyKit = + object : MockOptimizelyKit() { + override fun logOptimizelyEvent(trackEvent: OptimizelyEvent) { + Assert.assertFalse(eventFound.value) + eventFound.value = true + Assert.assertEquals((trackEvent.eventAttributes?.get("value") as Double), 40.1, 0.0) + } + } + optimizelyKit.logEvent(randomEvent) + Assert.assertTrue(eventFound.value) + } + + /** + * Make sure the queueing is working. When the OptimizelyClient is not present, we should be queueing + * events. The queue should be emptied when the OptimizelyClient becomes available + */ + @Test + fun testQueueWorking() { + val userAttributes = randomUtils.getRandomAttributes(4) + val user: MParticleUser = + object : EmptyMParticleUser() { + override fun getUserAttributes(userAttributeListener: UserAttributeListenerType?): Map? { + (userAttributeListener as TypedUserAttributeListener?)!!.onUserAttributesReceived( + HashMap(userAttributes), + HashMap(), + 1L, + ) + return null + } + } + Mockito.`when`(MParticle.getInstance()!!.Identity().currentUser).thenReturn(user) + val product1 = Product.Builder("product1", "1234", 0.0).build() + val product2 = Product.Builder("product2", "9876", 1.0).build() + val product3 = Product.Builder("product3", "3333", 300.0).build() + val commerceEvent = + CommerceEvent + .Builder(Product.ADD_TO_CART, product1) + .build() + val commerceEvent1 = + CommerceEvent + .Builder(Product.CLICK, product2) + .addProduct(product3) + .build() + val optimizelyKit: OptimizelyKit = MockOptimizelyKit() + optimizelyKit.logEvent(commerceEvent) + optimizelyKit.logEvent(commerceEvent1) + val expectedEvents = + CommerceEventUtils.expand(commerceEvent).size + CommerceEventUtils.expand(commerceEvent1).size + Assert.assertEquals(expectedEvents.toLong(), optimizelyKit.mEventQueue.size.toLong()) + val optimizelyClient = Mockito.mock(OptimizelyClient::class.java) + Mockito.`when`(optimizelyClient.isValid).thenReturn(false) + optimizelyKit.onStart(optimizelyClient) + + // Events should NOT be dequeued if the OptimizelyClient is not valid + Assert.assertEquals(expectedEvents.toLong(), optimizelyKit.mEventQueue.size.toLong()) + var count = invocationCount(optimizelyClient, "track") + Assert.assertEquals(0, count.toLong()) + Mockito.`when`(optimizelyClient.isValid).thenReturn(true) + optimizelyKit.onStart(optimizelyClient) + Mockito.verify(optimizelyClient, Mockito.times(expectedEvents)).track( + Mockito.anyString(), + Mockito.anyString(), + Mockito.any>(), + Mockito.any>(), + ) + count = invocationCount(optimizelyClient, "track") + Assert.assertEquals(expectedEvents.toLong(), count.toLong()) + Assert.assertEquals(0, optimizelyKit.mEventQueue.size.toLong()) + } + + @Test + fun testCustomUserId() { + val event = + MPEvent + .Builder("Event Name", MParticle.EventType.Search) + .addCustomFlag(OptimizelyKit.OPTIMIZELY_USER_ID, "44") + .build() + val count = Mutable(0) + val optimizelyKit: OptimizelyKit = + object : MockOptimizelyKit() { + override fun getUserId(user: MParticleUser?): String = "should not be this userId" + + override fun logOptimizelyEvent(trackEvent: OptimizelyEvent) { + count.value++ + Assert.assertEquals("44", trackEvent.userId) + } + } + optimizelyKit.logEvent(event) + Assert.assertEquals(1, count.value.toLong()) + count.value = 0 + val product = Product.Builder("My Product", "12345", 1.0).build() + val product1 = Product.Builder("My Other Product", "2356", 2.0).build() + val impression = Impression("name", product).addProduct(product1) + val transactionAttributes = TransactionAttributes("123").setRevenue(43.2) + val commerceEvent = + CommerceEvent + .Builder(Product.DETAIL, product) + .addProduct(product1) + .addImpression(impression) + .addCustomFlag(OptimizelyKit.OPTIMIZELY_USER_ID, "44") + .transactionAttributes(transactionAttributes) // .addPromotion(promotion) + .build() + optimizelyKit.logEvent(commerceEvent) + Assert.assertEquals(4, count.value.toLong()) + } + + @Test + fun onCreateAfterDestroy() { + val optimizelyKit = OptimizelyKit() + val client = Mockito.mock(OptimizelyClient::class.java) + Mockito.`when`(client.isValid).thenReturn(true) + optimizelyClient = client + val minimalSettings: MutableMap = HashMap() + val e: Exception? = null + minimalSettings["projectId"] = "2234" + optimizelyKit.onKitCreate(minimalSettings, MockContext()) + optimizelyKit.onKitDestroy() + optimizelyKit.onKitCreate(minimalSettings, MockContext()) + } + + private fun invocationCount( + `object`: Any, + methodName: String, + ): Int { + val invocationList = Mockito.mockingDetails(`object`).invocations + var invocationCount = 0 + for (invocation in invocationList) { + if (invocation.method.name == methodName) { + invocationCount++ + } + } + return invocationCount + } + + internal open inner class MockOptimizelyKit : OptimizelyKit() { + override fun getConfiguration(): KitConfiguration? = + try { + MockKitConfiguration.createKitConfiguration( + JSONObject() + .put("id", MParticle.ServiceProviders.OPTIMIZELY) + .put("as", JSONObject().put(USER_ID_FIELD_KEY, USER_ID_MPID_VALUE)), + ) + } catch (e: JSONException) { + null + } + } + + class Mutable( + var value: T, + ) + + internal open inner class EmptyMParticleUser : MParticleUser { + override fun getId(): Long = 1L + + override fun getUserAttributes(): Map = HashMap() + + override fun getUserAttributes(userAttributeListener: UserAttributeListenerType?): Map? { + if (userAttributeListener is TypedUserAttributeListener) { + userAttributeListener.onUserAttributesReceived( + HashMap(), + HashMap(), + id, + ) + } + if (userAttributeListener is UserAttributeListener) { + userAttributeListener.onUserAttributesReceived( + HashMap(), + HashMap(), + id, + ) + } + return null + } + + override fun setUserAttributes(map: Map): Boolean = false + + override fun getUserIdentities(): Map = mapOf() + + override fun setUserAttribute( + s: String, + o: Any, + ): Boolean = false + + override fun setUserAttributeList( + s: String, + o: Any, + ): Boolean = false + + override fun incrementUserAttribute( + s: String, + i: Number, + ): Boolean = false + + override fun removeUserAttribute(s: String): Boolean = false + + override fun setUserTag(s: String): Boolean = false + + override fun getConsentState(): ConsentState = consentState + + override fun setConsentState(consentState: ConsentState?) {} + + override fun isLoggedIn(): Boolean = false + + override fun getFirstSeenTime(): Long = 0 + + override fun getLastSeenTime(): Long = 0 + + override fun getUserAudiences(): AudienceTask = throw NotImplementedError("getUserAudiences() is not implemented") + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 44bf2deae..289f99d20 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -24,7 +24,7 @@ include ( ':kits:leanplum:leanplum-7', //Neura hosts kit ':kits:onetrust-kit', - ':kits:optimizely-kit', + ':kits:optimizely:optimizely-3', // ':kits:pilgrim-kit', ':kits:radar:radar-3', ':kits:responsys-kit', From 46654ae7387c2f313f38535f707ae5492c245b53 Mon Sep 17 00:00:00 2001 From: denischilik Date: Thu, 12 Mar 2026 10:56:08 -0400 Subject: [PATCH 21/61] feat: Migrate Branch 5 kit (#666) * feat: migrate branch-kit from submodule to regular directory * feat: relocate branch-kit to kits/branch/branch-5 * feat: add branch-5 to settings-kits.gradle Made-with: Cursor * fix: remove old branch-kit path from settings-kits.gradle Made-with: Cursor * fix: resolve MobSF/mobsfscan security findings - Remove sensitive value from CustomDataParser log (android_kotlin_logging) - Add SampleApplication to ignore-paths and manifest rules to .mobsf (assetlinks, task hijacking for Branch sample app) Made-with: Cursor * Add nosemgrep to SampleApplication gradlew to fix Semgrep CI Made-with: Cursor --- .gitmodules | 3 - .mobsf | 4 + .trunk/trunk.yaml | 1 + .../com/mparticle/kits/CustomDataParser.kt | 2 +- kits/branch-kit | 1 - kits/branch/branch-5/README.md | 23 ++ .../branch-5/SampleApplication/.gitignore | 9 + .../branch-5/SampleApplication/README.md | 14 + .../branch-5/SampleApplication/app/.gitignore | 1 + .../SampleApplication/app/build.gradle | 43 +++ .../SampleApplication/app/proguard-rules.pro | 16 + .../branchsample/ExampleInstrumentedTest.java | 26 ++ .../app/src/main/AndroidManifest.xml | 42 +++ .../branchsample/SampleApplication.java | 101 ++++++ .../branchsample/activities/HomeActivity.java | 272 ++++++++++++++ .../activities/SplashActivity.java | 81 +++++ .../app/src/main/res/drawable/app_icon.png | Bin 0 -> 71876 bytes .../app/src/main/res/layout/home_activity.xml | 128 +++++++ .../src/main/res/layout/splash_activity.xml | 12 + .../app/src/main/res/menu/options_menu.xml | 4 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes .../app/src/main/res/values/arrays.xml | 15 + .../app/src/main/res/values/colors.xml | 6 + .../app/src/main/res/values/dimens.xml | 5 + .../app/src/main/res/values/mparticle.xml | 5 + .../app/src/main/res/values/strings.xml | 16 + .../app/src/main/res/values/styles.xml | 23 ++ .../branchsample/ExampleUnitTest.java | 17 + .../branch-5/SampleApplication/build.gradle | 32 ++ .../SampleApplication/gradle.properties | 20 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + .../branch/branch-5/SampleApplication/gradlew | 160 ++++++++ .../branch-5/SampleApplication/gradlew.bat | 90 +++++ .../SampleApplication/settings.gradle | 3 + kits/branch/branch-5/build.gradle | 61 ++++ kits/branch/branch-5/consumer-proguard.pro | 3 + kits/branch/branch-5/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/branch/branch-5/gradlew | 234 ++++++++++++ kits/branch/branch-5/gradlew.bat | 89 +++++ kits/branch/branch-5/settings.gradle.kts | 2 + .../branch-5/src/main/AndroidManifest.xml | 1 + .../com/mparticle/kits/BranchMetricsKit.kt | 289 +++++++++++++++ .../kotlin/com/mparticle/kits/BranchUtil.kt | 342 ++++++++++++++++++ .../com/mparticle/kits/BranchKitTests.kt | 53 +++ settings-kits.gradle | 2 +- 52 files changed, 2260 insertions(+), 6 deletions(-) delete mode 160000 kits/branch-kit create mode 100644 kits/branch/branch-5/README.md create mode 100644 kits/branch/branch-5/SampleApplication/.gitignore create mode 100644 kits/branch/branch-5/SampleApplication/README.md create mode 100644 kits/branch/branch-5/SampleApplication/app/.gitignore create mode 100644 kits/branch/branch-5/SampleApplication/app/build.gradle create mode 100644 kits/branch/branch-5/SampleApplication/app/proguard-rules.pro create mode 100644 kits/branch/branch-5/SampleApplication/app/src/androidTest/java/com/mparticle/branchsample/ExampleInstrumentedTest.java create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/AndroidManifest.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/SampleApplication.java create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/activities/HomeActivity.java create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/activities/SplashActivity.java create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/drawable/app_icon.png create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/layout/home_activity.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/layout/splash_activity.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/menu/options_menu.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/values/arrays.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/values/colors.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/values/dimens.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/values/mparticle.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/values/strings.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/main/res/values/styles.xml create mode 100644 kits/branch/branch-5/SampleApplication/app/src/test/java/com/mparticle/branchsample/ExampleUnitTest.java create mode 100644 kits/branch/branch-5/SampleApplication/build.gradle create mode 100644 kits/branch/branch-5/SampleApplication/gradle.properties create mode 100644 kits/branch/branch-5/SampleApplication/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/branch/branch-5/SampleApplication/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/branch/branch-5/SampleApplication/gradlew create mode 100644 kits/branch/branch-5/SampleApplication/gradlew.bat create mode 100644 kits/branch/branch-5/SampleApplication/settings.gradle create mode 100644 kits/branch/branch-5/build.gradle create mode 100644 kits/branch/branch-5/consumer-proguard.pro create mode 100644 kits/branch/branch-5/gradle.properties create mode 100644 kits/branch/branch-5/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/branch/branch-5/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/branch/branch-5/gradlew create mode 100644 kits/branch/branch-5/gradlew.bat create mode 100644 kits/branch/branch-5/settings.gradle.kts create mode 100644 kits/branch/branch-5/src/main/AndroidManifest.xml create mode 100644 kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt create mode 100644 kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchUtil.kt create mode 100644 kits/branch/branch-5/src/test/kotlin/com/mparticle/kits/BranchKitTests.kt diff --git a/.gitmodules b/.gitmodules index 7debf12bc..12fa86081 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,6 @@ [submodule "kits/apteligent-kit"] path = kits/apteligent-kit url = git@github.com:mParticle-integrations/mparticle-android-integration-apteligent.git -[submodule "kits/branch-kit"] - path = kits/branch-kit - url = git@github.com:mParticle-integrations/mparticle-android-integration-branch.git [submodule "kits/button-kit"] path = kits/button-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-button.git diff --git a/.mobsf b/.mobsf index 3afef2999..959a74975 100644 --- a/.mobsf +++ b/.mobsf @@ -8,6 +8,7 @@ - "**/src/test/**" - "**/example/**" - "**/*-example/**" + - "**/SampleApplication/**" ignore-rules: - webview_javascript_interface # Intentional: JS bridge for mParticle WebView SDK; workspace token controls access @@ -27,3 +28,6 @@ - android_certificate_pinning - android_ssl_pinning - accept_self_signed_certificate + - android_manifest_well_known_assetlinks # Sample apps use third-party domains (e.g. Branch mp-fortune.app.link) + - android_task_hijacking1 # Sample apps; targetSdk in build.gradle + - android_task_hijacking2 # Sample apps; targetSdk in build.gradle diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 9621ccb0b..87f9dad31 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -73,6 +73,7 @@ lint: - kits/apptentive/apptentive-6/** - kits/appsflyer/appsflyer-6/** - kits/apptimize/apptimize-3/** + - kits/branch/branch-5/** - kits/braze/braze-38/** - kits/clevertap/clevertap-7/** - kits/comscore/comscore-6/** diff --git a/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/CustomDataParser.kt b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/CustomDataParser.kt index 94d1bfa42..4926752d0 100644 --- a/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/CustomDataParser.kt +++ b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/CustomDataParser.kt @@ -22,7 +22,7 @@ internal object CustomDataParser { try { if (value != null) parseValueGuarded(value) else null } catch (e: Exception) { - Log.e(LogTag("pParticle"), "Unable to parse value: $value") + Log.e(LogTag("pParticle"), "Unable to parse custom data value") value } diff --git a/kits/branch-kit b/kits/branch-kit deleted file mode 160000 index 22f5de5b4..000000000 --- a/kits/branch-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 22f5de5b4cc892cbbd6fa9f65f922eebdd8a47ef diff --git a/kits/branch/branch-5/README.md b/kits/branch/branch-5/README.md new file mode 100644 index 000000000..7f7a4c253 --- /dev/null +++ b/kits/branch/branch-5/README.md @@ -0,0 +1,23 @@ +## Branch Kit Integration + +This repository contains the [Branch](https://www.branch.io/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-branch-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Branch Metrics detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Branch integration](https://docs.mparticle.com/integrations/branch-metrics/event/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/branch/branch-5/SampleApplication/.gitignore b/kits/branch/branch-5/SampleApplication/.gitignore new file mode 100644 index 000000000..39fb081a4 --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/kits/branch/branch-5/SampleApplication/README.md b/kits/branch/branch-5/SampleApplication/README.md new file mode 100644 index 000000000..c0077d0ac --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/README.md @@ -0,0 +1,14 @@ +##mParticle-Branch Example + +###Overview + +This sample app demonstrates: + +• How to use the mParticle and Branch in a simple Android application. + +• How to create and share Branch links in your app. + +• How to Branch deep links are handled in an app when using branch with mParticle. + +• How event tracking is handled in mParticle and Branch. + diff --git a/kits/branch/branch-5/SampleApplication/app/.gitignore b/kits/branch/branch-5/SampleApplication/app/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/kits/branch/branch-5/SampleApplication/app/build.gradle b/kits/branch/branch-5/SampleApplication/app/build.gradle new file mode 100644 index 000000000..4f749ed58 --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/app/build.gradle @@ -0,0 +1,43 @@ +apply plugin: 'com.android.application' + +android { + compileSdk = 34 + buildToolsVersion "27.0.3" + defaultConfig { + applicationId "com.mparticle.branchsample" + minSdk = 25 + targetSdk = 33 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + packagingOptions { + exclude 'META-INF/proguard/androidx-annotations.pro' + exclude 'META-INF/versions/9/module-info.class' + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.8.0' + implementation 'com.android.installreferrer:installreferrer:2.2' + + // Local project dependency + api project(':local-mParticle-Branch-kit') + + // Uncomment below to use published version instead + // implementation 'com.mparticle:android-branch-kit:5+' + + testImplementation 'junit:junit:4.13.2' + + androidTestImplementation('androidx.test.espresso:espresso-core:3.5.1', { + exclude group: 'androidx.test', module: 'runner' + }) +} diff --git a/kits/branch/branch-5/SampleApplication/app/proguard-rules.pro b/kits/branch/branch-5/SampleApplication/app/proguard-rules.pro new file mode 100644 index 000000000..2d3430033 --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/app/proguard-rules.pro @@ -0,0 +1,16 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/kits/branch/branch-5/SampleApplication/app/src/androidTest/java/com/mparticle/branchsample/ExampleInstrumentedTest.java b/kits/branch/branch-5/SampleApplication/app/src/androidTest/java/com/mparticle/branchsample/ExampleInstrumentedTest.java new file mode 100644 index 000000000..6cb710a35 --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/app/src/androidTest/java/com/mparticle/branchsample/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.mparticle.branchsample; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.mparticle.branchsample", appContext.getPackageName()); + } +} diff --git a/kits/branch/branch-5/SampleApplication/app/src/main/AndroidManifest.xml b/kits/branch/branch-5/SampleApplication/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..a81275e7e --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/app/src/main/AndroidManifest.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/SampleApplication.java b/kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/SampleApplication.java new file mode 100644 index 000000000..65b473293 --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/SampleApplication.java @@ -0,0 +1,101 @@ +package com.mparticle.branchsample; + +import android.app.Application; + +import com.mparticle.AttributionError; +import com.mparticle.AttributionListener; +import com.mparticle.AttributionResult; +import com.mparticle.MParticle; +import com.mparticle.MParticleOptions; + +import org.json.JSONObject; + +import io.branch.referral.Branch; + +public class SampleApplication extends Application implements AttributionListener { + private IBranchEvents branchEventCallback; + private static SampleApplication instance; + + @Override + public void onCreate() { + super.onCreate(); + instance = this; + MParticleOptions options = MParticleOptions.builder(this) + .credentials("REPLACE_ME_WITH_API_KEY", "REPLACE_ME_WITH_API_SECRET") + .attributionListener(this) + //Set an instance of AttributionListener + //this instance will continually be called whenever + //there is new attribution/deep linking information. + //It is essentially equivalent to the Branch SDK's BranchReferralInitListener class + //that is passed to the Branch SDK's initSession() API. + .logLevel(MParticle.LogLevel.VERBOSE) + .build(); + + MParticle.start(options); + } + + public static void setBranchEventCallback(IBranchEvents branchEventCallback) { + instance.branchEventCallback = branchEventCallback; + } + + + /** + * A few typical scenarios where this callback would be invoked: + *

+ * (1) Base case: + * - User does not tap on a link, and then opens the app (either after a fresh install or not) + * - This block will be invoked with Branch Metrics' response indicating that this user did not tap on a link. + *

+ * (2) Deferred deep link: + * - User without the app installed taps on a link + * - User is redirected from Branch Metrics to the App Store and installs the app + * - User opens the app + * - This block will be invoked with Branch Metrics' response containing the details of the link + *

+ * (3) Deep link with app installed: + * - User with the app already installed taps on a link + * - Application opens directly to an Activity via a link click, mParticle forwards the launch URI etc to Branch + * - This callback will be invoked with Branch Metrics' response containing the details of the link + *

+ * If the user navigates away from the app without killing it, this callback could be invoked several times: + * once for the initial launch, and then again each time the user taps on a link to re-open the app. + * + *

+ * This method is equivalent to {@link io.branch.referral.Branch#initSession(Branch.BranchReferralInitListener)}. + * This will return deep links params if the app is opened by a link click otherwise a JSONObject with ""+clicked_branch_link = false". + * The below example shows how you can message this to your Activities listening for Branch deep link params. + *

+ * + * @param attributionResult + **/ + @Override + public void onResult(AttributionResult attributionResult) { + //this will be invoked for + if (attributionResult.getServiceProviderId() == MParticle.ServiceProviders.BRANCH_METRICS) { + JSONObject params = attributionResult.getParameters(); + // The Branch SDK will return a response for all new session/app opens, even + // if the user did not click a branch link. + // The parameters supported by the Branch SDK are documented here: + // https://github.com/BranchMetrics/android-branch-deep-linking#branch-provided-data-parameters-in-initsession-callback + // For eg: +// if (params.optBoolean("+clicked_branch_link", false)) { +// //handle the Branch link click +// } + if (branchEventCallback != null) { + branchEventCallback.onBranchInitialised(params); + } + } + } + + @Override + public void onError(AttributionError attributionError) { + //if the Branch SDK returns an error, it will be surfaced here. + if (branchEventCallback != null) { + branchEventCallback.onBranchInitialised(new JSONObject()); + } + } + + public interface IBranchEvents { + void onBranchInitialised(JSONObject params); + } +} diff --git a/kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/activities/HomeActivity.java b/kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/activities/HomeActivity.java new file mode 100644 index 000000000..ee1e49062 --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/activities/HomeActivity.java @@ -0,0 +1,272 @@ +package com.mparticle.branchsample.activities; + +import android.content.Intent; +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import android.text.TextUtils; +import android.view.View; +import android.widget.CompoundButton; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.ToggleButton; + +import com.mparticle.MPEvent; +import com.mparticle.MParticle; +import com.mparticle.branchsample.R; +import com.mparticle.commerce.CommerceEvent; +import com.mparticle.commerce.Impression; +import com.mparticle.commerce.Product; +import com.mparticle.commerce.TransactionAttributes; +import com.mparticle.identity.IdentityApiRequest; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import io.branch.indexing.BranchUniversalObject; +import io.branch.referral.SharingHelper; +import io.branch.referral.util.BranchContentSchema; +import io.branch.referral.util.ContentMetadata; +import io.branch.referral.util.CurrencyType; +import io.branch.referral.util.LinkProperties; +import io.branch.referral.util.ProductCategory; +import io.branch.referral.util.ShareSheetStyle; + +public class HomeActivity extends AppCompatActivity { + public static final String BRANCH_PARAMS = "branch_params"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.home_activity); + ((ToggleButton) findViewById(R.id.tracking_cntrl_btn)).setChecked(MParticle.getInstance().getOptOut()); + + findViewById(R.id.cmdSetIdentity).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + MParticle.getInstance().Identity().login(IdentityApiRequest.withEmptyUser() + .email("foo@example.com") + .customerId("12332424555") + .build()); + } + }); + + findViewById(R.id.cmdLogout).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + MParticle.getInstance().Identity().logout(); + } + }); + + findViewById(R.id.cmdTrackView).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + logScreen(); + } + }); + + findViewById(R.id.cmdLogSimpleEvent).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + logSimpleEvent(); + } + }); + + findViewById(R.id.cmdShareBtn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + shareBranchLink(); + } + }); + + findViewById(R.id.cmdTrackEvent).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + logCommerceEvent((String) ((Spinner) findViewById(R.id.event_name_spinner)).getSelectedItem()); + } + }); + + ((ToggleButton) findViewById(R.id.tracking_cntrl_btn)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + MParticle.getInstance().setOptOut(isChecked); + } + }); + + } + + @Override + protected void onStart() { + super.onStart(); + ((TextView) findViewById(R.id.deep_link_params_txt)).setText(""); + } + + @Override + protected void onResume() { + super.onResume(); + Intent intent = getIntent(); + if (!TextUtils.isEmpty(intent.getStringExtra(BRANCH_PARAMS))) { + String deepLinkParams = getIntent().getStringExtra(BRANCH_PARAMS); + try { + String deepLikMsg = "Branch Deep Link Params \n\n" + new JSONObject(deepLinkParams).toString(4); + ((TextView) findViewById(R.id.deep_link_params_txt)).setText(deepLikMsg); + } catch (JSONException e) { + e.printStackTrace(); + } + intent.removeExtra(BRANCH_PARAMS); + setIntent(intent); + } else { + ((TextView) findViewById(R.id.deep_link_params_txt)).setText(""); + } + } + + @Override + protected void onNewIntent(Intent intent) { + setIntent(intent); + } + + private void logScreen() { + Map eventInfo = new HashMap<>(2); + eventInfo.put("screen_attr_key1", "screen_attr_val1"); + eventInfo.put("screen_attr_key2", "screen_attr_val2"); + MParticle.getInstance().logScreen("SecondActivity", eventInfo); + } + + private void logSimpleEvent() { + Map eventInfo = new HashMap<>(2); + eventInfo.put("custom_attr_key1", "custom_attr_val1"); + eventInfo.put("custom_attr_key2", "custom_attr_val2"); + + MPEvent event = new MPEvent.Builder("Simple Event", MParticle.EventType.Transaction) + .duration(100) + .info(eventInfo) + .category("Food and Beverages") + .build(); + MParticle.getInstance().logEvent(event); + } + + private void logCommerceEvent(String eventName) { + + Map customAttr = new HashMap<>(2); + customAttr.put("custom_attr_key1", "custom_attr_val1"); + customAttr.put("custom_attr_key2", "custom_attr_val2"); + + Product product1 = new Product.Builder("Prod1", "my_sku", 100.00) + .brand("my_prod_brand") + .category("my_prod_category") + .couponCode("my_coupon_code") + .customAttributes(customAttr) + .name("my_prod_name") + .position(1) + .quantity(2.5) + .sku("my_sku") + .unitPrice(12.5) + .variant("my_variant") + .quantity(4) + .build(); + + Product product2 = new Product.Builder("Impression_prod", "my_sku", 100.00) + .brand("my_prod_brand") + .category("my_prod_category") + .couponCode("my_coupon_code") + .customAttributes(customAttr) + .name("my_prod_name") + .position(1) + .quantity(2.5) + .sku("my_sku") + .unitPrice(12.5) + .variant("my_variant") + .quantity(4) + .build(); + + Product product3 = new Product.Builder("prod3", "my_sku", 100.00) + .brand("my_prod_brand") + .category("my_prod_category") + .couponCode("my_coupon_code") + .customAttributes(customAttr) + .name("my_prod_name") + .position(1) + .quantity(2.5) + .sku("my_sku") + .unitPrice(12.5) + .variant("my_variant") + .quantity(4) + .build(); + + TransactionAttributes attributes = new TransactionAttributes("foo-transaction-id") + .setCouponCode("transaction_coupon_code") + .setAffiliation("transaction_affiliation") + .setId("transaction_id") + .setRevenue(13.5) + .setShipping(3.5) + .setTax(4.5); + + Impression impression = new Impression("Impression", product2); + + CommerceEvent commerceEvent = new CommerceEvent.Builder(eventName, product1) + .currency("USD") + .customAttributes(customAttr) + .transactionAttributes(attributes) + .addImpression(impression) + .productListName("my_commerce_event_prod_list") + .addProduct(product3) + .build(); + MParticle.getInstance().logEvent(commerceEvent); + } + + private void shareBranchLink() { + BranchUniversalObject buo = new BranchUniversalObject() + .setCanonicalIdentifier("item/12345") + .setCanonicalUrl("https://branch.io/deepviews") + .setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PRIVATE) + .setLocalIndexMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC) + .setTitle("My Content Title") + .setContentDescription("my_product_description1") + .setContentImageUrl("https://example.com/mycontent-12345.png") + .setContentExpiration(new Date(1573415635000L)) + .setContentImageUrl("https://test_img_url") + .addKeyWord("My_Keyword1") + .addKeyWord("My_Keyword2") + .setContentMetadata( + new ContentMetadata().setProductName("my_product_name1") + .setProductBrand("my_prod_Brand1") + .setProductVariant("3T") + .setProductCategory(ProductCategory.BABY_AND_TODDLER) + .setProductCondition(ContentMetadata.CONDITION.EXCELLENT) + .setAddress("Street_name1", "city1", "Region1", "Country1", "postal_code") + .setLocation(12.07, -97.5) + .setSku("1994320302") + .setRating(6.0, 5.0, 7.0, 5) + .addImageCaptions("my_img_caption1", "my_img_caption_2") + .setQuantity(2.0) + .setPrice(23.2, CurrencyType.USD) + .setContentSchema(BranchContentSchema.COMMERCE_PRODUCT) + .addCustomMetadata("Custom_Content_metadata_key1", "Custom_Content_metadata_val1") + ); + + + LinkProperties linkProperties = new LinkProperties() + .addTag("Tag1") + .setChannel("Sharing_Channel_name") + .setFeature("my_feature_name") + .addControlParameter("$android_deeplink_path", "custom/path/*") + .addControlParameter("$ios_url", "http://example.com/ios") + .setDuration(100); + + ShareSheetStyle shareSheetStyle = new ShareSheetStyle(this, "My Sharing Message Title", "My Sharing message body") + .setCopyUrlStyle(getResources().getDrawable(android.R.drawable.ic_menu_send), "Save this URl", "Link added to clipboard") + .setMoreOptionStyle(getResources().getDrawable(android.R.drawable.ic_menu_search), "Show more") + .addPreferredSharingOption(SharingHelper.SHARE_WITH.FACEBOOK) + .addPreferredSharingOption(SharingHelper.SHARE_WITH.EMAIL) + .addPreferredSharingOption(SharingHelper.SHARE_WITH.MESSAGE) + .addPreferredSharingOption(SharingHelper.SHARE_WITH.TWITTER) + .setAsFullWidthStyle(true) + .setSharingTitle("Share With"); + + buo.showShareSheet(this, linkProperties, shareSheetStyle, null); + } + +} diff --git a/kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/activities/SplashActivity.java b/kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/activities/SplashActivity.java new file mode 100644 index 000000000..3e9b42f95 --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/app/src/main/java/com/mparticle/branchsample/activities/SplashActivity.java @@ -0,0 +1,81 @@ +package com.mparticle.branchsample.activities; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.mparticle.MPEvent; +import com.mparticle.MParticle; +import com.mparticle.branchsample.R; +import com.mparticle.branchsample.SampleApplication; + +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by sojanpr on 4/18/18. + *

+ * Splash Activity for MParticle-Branch Kit integration + *

+ */ + +public class SplashActivity extends AppCompatActivity implements SampleApplication.IBranchEvents { + + private static final int SPLASH_DELAY = 1500; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.splash_activity); + SampleApplication.setBranchEventCallback(this); + } + + @Override + protected void onStart() { + super.onStart(); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + + + } + }, SPLASH_DELAY); + } + + /** + * Note : Branch needs the new intents to be set to the activity if the launch mode is `SingleTask` + **/ + @Override + protected void onNewIntent(Intent intent) { + this.setIntent(intent); + } + + @Override + public void onBranchInitialised(JSONObject params) { + final Intent intent = new Intent(SplashActivity.this, HomeActivity.class); + if (params.optBoolean("+clicked_branch_link")) { + Map infoMap = new HashMap<>(); + infoMap.put("Referred Link", params.optString("~referring_link")); + + MPEvent event = new MPEvent.Builder("Referred Session", MParticle.EventType.UserContent) + .duration(300) + .info(infoMap) + .category("Session").build(); + MParticle.getInstance().logEvent(event); + intent.putExtra(HomeActivity.BRANCH_PARAMS, params.toString()); + } + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + SplashActivity.this.startActivity(intent); + SplashActivity.this.finish(); + } + }, 1500); + } + +} diff --git a/kits/branch/branch-5/SampleApplication/app/src/main/res/drawable/app_icon.png b/kits/branch/branch-5/SampleApplication/app/src/main/res/drawable/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e1148ad545b089d517138a2412e277d861ca3a72 GIT binary patch literal 71876 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 P00000NkvXXu0mjfjk-d| literal 0 HcmV?d00001 diff --git a/kits/branch/branch-5/SampleApplication/app/src/main/res/layout/home_activity.xml b/kits/branch/branch-5/SampleApplication/app/src/main/res/layout/home_activity.xml new file mode 100644 index 000000000..8bce436d0 --- /dev/null +++ b/kits/branch/branch-5/SampleApplication/app/src/main/res/layout/home_activity.xml @@ -0,0 +1,128 @@ + + + + + + + +

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M z2-IyZRfl{8UdLhHDGb??R57|yJubJDC`9kp?#BODv$ef> zgG;M5GQn*35<4UFaTCdUupX1}7XZ+!mO5Rk`qLvxq=^> zl>D14-M1S*#YM7k#(Gk&P;N_TTOrl5HX4UWjHsq(_=7D%^D6g1(SQW$>QTnr_m~$! zfLTw$W~gKjZU*br{g&}qj#RSYcoE(h;=r~fifsX*_5rJ#pb4n_CIIjm!e(+15|c%>Av})+D(zDBoyLOxL!--gGT;x)6mxnz*0_jkg&v=lTI zW547!YaRSZ;M`%zb zBgMXtJJl|DR;LY+oUt*tWq`Lzl83>ywBxiw8D%R}IYeD6>5IKaUMa=%COg8~ZQKRE zJ*m}Zn!YJ=H7TmcYXMeZ>G#N3P_GeblfZS_vQa5*8$SLJNDkVWDl26Uliw*ieNNi7 zD3xK6CoZSONRvgoc5iKqxv67i3zmL~QYXo!lA+auONsI!iN|AYPAN8e*cE|kH|s#M zPOH^jsj9m77aiKcH_g$3YYo!Z^Y4XG{oU4!8SVl zS6#KXsI&?^UGT-l?ByeU;Nk5ZQ}@Nu*D@*fcC5<9%2`rz4{qA-L?lm@{nD1&6eT#K zd-`5ak11J(R1b{T4o?Q#i(r-FCG_k9X)ZEhui;lXUh$E3F9dG~o2 zIkD%U=C!`DVF*QFwEoiLH$lWRnG?QNMjjohjH*|T5f_5B9_k0ofjdrOY?yW5QX3oiMeUhV&` zt1$jgUG-n!wf|_VX*F&63o!)W*rXqZXqTkmcMQ05WyA%>aKP4Z-1TDxJoXtfO^2?U zRkFN@pPlrl5l5inb8T9ZF6X!7hKK0H#>4Pxjxi%seyVg`7w+wuGs#xwgg0wKwF@M$ zafF%KnVJ1oid$P2l0-~;HX%wvW(25}uDu6!4OANHw}C*@encn8@eEXIJ3-0-)7rQP zAYuQkR2dT@ZNMOqK^JZdtr|q}anp8FQ1J^;hGG*U44?ravgJ^7QfkUQr6QgFJRRp# z(UC&-B}KHX;_a9*|0Hf)8`1U@RY*{EQ$i%5dI1wjEn14mY%Wx6L!r3N8a-ET2yIH5 zK&55_Vss+T(HsYiP8Z7SZWLdx<% zQM`Hv8=zYf;l#lK{eRFbuN*IgP;^FLzOEQ?s#9*^B38 z?xecw=uSYdN(#{wX$#*25o7W`wiq#(JYk?eRJ#KL*WiPUX;LLccym~@oImA7U9!oG z&-oY8$U5b&Mz|QcLPShRbfL)4|KaxhwE4FBpf3@#ZfQpzSJW2H@LPA0ui>X?ykcTAD4(mTPh2}%&$UC*DzCowL_SEy^ ztWW&d`HYfelBG6??OkJ#Cj2Lsyw{Z40e;Kqgkm`>v;1V=2=-@ki1_?!%#!w_1P7pYr{b z~h#s&Vby7S1+G;D|IXK~aKz=`u(XmP2U)pGo?;&~*w!Ugga^w1~x zT+6HNkJa^!BGwZ&;s>);tCw}!HdgEpW%C(3hO|Q^l~IW(OEX0A_i}(4Y{uJq(=I3( zl_5Hhyrz=yOHb7*??)OFhYdb*zTvpJ%KNNMxEu7Y!<)h7Pd2GDrSc4ubDySegUa1X z+GUUM`|XfE>c$?y!e&25I?s7&&3X27g%(}Bk(C|CN(vlb9y)0Ks?3|0+ppB1DV5Gn z!F1@f9AX3=LIUGAJQjLW&A8_Hf^#wF`cWtxoUu(g;nB9J(CuRP@}}STz}UfBxo&s` zFuhsmy!>P5@Hd?GTK$8rPaMDn)>QG1czM&D8z`vffvr2mDoHT*6FH#|2g!Oh;v8jC*Y1%A+v2mU=km zi8rgtV4<#?>8kFT#uzPKK|(7`eb=<76UR4J6h5hX;(gX9?|h84qQlK*4`4$}%O z(_}>wn~E6z6ts`!1s*DdIbxL}Ls151eDTJeQyx-quD~0T3GfyuP+|@ff-Fdgy~z}D zEmb+-kP9j5%7ZS0p^8^4T407VtnWrDA50G8@(y`XIm@Oia77ZMEfjG?C-@Ah(bOb* zps7=(b>He;-3Z#$?15x%6s6+~8-G(n%^trogfBNq7N(iPJ4Xu-hs8^zL+9X(MI)97%yO1>KqVd|hLvYke;^GOIOY^9P(hW%i>yIqyAv(=3_KdAliUY% zN1AX&tW&yBx4Y;&{N(*>$&;kuql^m z^$c*+Ot#(8-|UWzK;hGg?n82uaJeJ?K7G}kdH6a1lHKpmO1&3_tV3JJoK^xI8sSp6$t&-$9!l zceC_6diMnk4#q;*ZuUy|UE!Zgww{3??abJlKRTAqW;Wc##%`nip8qVF(&UBT<96kR ze@(aCX8(Q&@aAP?jPiM)es#>1Tjo+r=X0{MgC_#;OIi&}oLwz0pK&ysuU5dt(^_K6 zDzr}*+kP27ji>!~z#_?}J2+0F^zOxgcnqaRmk<<&w;W~YKUr%_K*-)*n5<$ED{eRN z0kA0@kM=wj#1jZh`}12})OG3$oI;*?RI&+f+W_Q%im&t81sv?JtVD5U(ki&J{n zKn8%B%TUcUrzFxLqo28@4p4N-hQ_Gc(yJ2kFocQnR3gMM08r+FX?vX|PgFjV{zzHh zz_uTSo#?8N`eoU@MsO{l1Yl$%50vmb8*D0R48xqf$xY9P7jQKxRG_{EUJ{Cd1Ce1Q zrxN+*m>=}|(dys1fDUkS6=GR&mnmj@tMY_4dJ?q=5(BQRhPh9EE*ZqE!U; ze_S=kv{$ zp@`8Ss+eq_M#RG_q$@V*QWVYUBNl{HlGRga_o`9@Le8Iq+sn=Uom0~hAi0xp&j&Vm zbK;ki^YRf>O%@h*b9V5#4bLxg;Le1f`^_S=3o|Rf8#TL(WsV^WI*@rTLuQTv9EO-{ zGh{|V#EFbO-b`b?dAJeDwwlpdRnt9l>3Y18ag=o)as`GfvnACy0wGSOB$;+08u8l$ z?7UehQvihCCPEve;*6PhAbzW;$!&56&h4(gK^l4(%jUC;f;Qe zF+_TszY8-|-4V6k-X%ihA*+1!T~Zlhk-Te#{aU!Wj#gWm?n6;I?-@0eb>ZvSiEIGN z+@#aJL_J1}%3_hKqXhtnCk(^yj>M520sgOR$D^0%1OfD3uLuG$XEb7iqeeXgwq&Ac zxG>#;6EuY!;mM--KoLD~rD??YveU=P(vx}AcLgYG2^&o)-qJM^v_-E^y?UNvbY&j# z4V5OtOA5Z)v*zOBc9lk!!8N0a?3{JA+9$>o_f1XaDM)@4TwCYJcK_l002&HPw8yC| z!>JQB<>AaaC#~@;ImZU%Tr-D0IXg9~c7o->Frt=5#jnYXNq7Ux>$XD`_;!(>@=*^BG$bktei3}VZk4N$De@F#&#@umEPXm z5DPd$QZYjBj%Hq`4%2%zl>Em{@6m{ru-eqwUMwi`uoKD;;f6smGoIp1fj!eC^G_?C z$DNIn?a~!pzgT^bT8ScMa=nCIm6vA%>BdKsC6x_vUuVKIbFTu$Ck(O7B>Gx`}U( zkFlYOGAM|)Cm6r)H`sqJeMa7#)n;%20DScSzuD}+J_=!ZtL!cw(atr_%`jWbGJJsq8eT*W>2{V_V@{L}@Ea;St* zG@-~d=4n?Yjd)j!5>Nv3BswHsblirBgoAW7A!5+-a#<6?NKVouBH2bj^-h2oMdnV) zCVzLaa7L1cc~}&dd0zFI9Ay&%QsM{21C`O963W)d?_idI zKFyh^-#tz{WoDsG=9vzq!?l1F-Mh-UP#u%(Oun!me&Riru*Yrp=`bU%(cJSfc z8l-V8J0=%lH2FTqUmb)~;MJGUO$5uW_={29qLApV+SfdbJ(#ep%5?`a1Oz70bI^ak zV;S}k3qW)~yV2WmorLHQGPXkdA+Xv@ARwhsK;G>@2cJrUYy+VEt>o z0?{1oDIKj~cY3+$;j(gApGLKjgE{iVEW0a0$R3PG5HXuR+_pD1KO|W^Q7|`It39!9 z*itg|r&Gqag>YCUTMT~1!kHLkDN2U+pQp&_C$JJd?!=Fbh*vo;>g)ORygt6&FCN+3 zfX_NjC`&nKNs3!uD}ScCBIZb8^P4XXGH7&<_>&C-4#*e}ARi1Crn$R+>kIH}u9&%` zDq2rFdz`xIbuT?W8*D0~YP{t#kyqe1j(D_Qgj7y^4J3 zy`DyHjb{}CcB;&oZNkzQSZ~?ESDw#uxMwzbUyg|KYbN0Tv_Pdy7_d4jk0{gf7`eH1isuIZ$#7j{*OJt{kUZ$&tGEh z;IF^*fA^Mt54ZohZuXztyr7elq33@son7%-yJLx`t?58bW~nB#4{BiPTu@<5hJ>rc=+s*Mj;P1((efw8_ z^^(acFnE^B2G7x-&HQ>GoX#_hl+ZblRr?MiuhAicLvIf>b;^*Az*1n+1km8XA!myN zF>HkSc*yb83$D+&aZWasMuT-Eq|318~s&9JTWH6L0nY5;-{GwnY=C~?4$CS`*CjAXeL`X6@dAw8Et-L1UL<P3`MTdU$JZ@b*l}q8)F9$8JytYims80;YiT`1KbRp<5fqXFK&4E@ zy=s?(Pp)jc3C14iGuMa%kqACHfyeCKI#m>ezHgdtfPSn<5a{uY|H0pGSYZX6zKQqM zoY0q#6q@z8@TXOVH-OjE0 zvwqONWZ2Ws$5)%5?~K^Lk-f{Wvpo1&u)%+e@Z>@J+Rs?;u;R#WTpZXk0H-EH2>Bqa zr@6#+jo+`YxIS0icv)~{y>3|cV2OkSKFnB+c;36%@?fL*a^A+z--EATr(N);@&K0( z3_i?YG+&M14hx`Fw^2`i0rZ!jx;Kv~imYDv{_l(nqcP$)ez@>EJ(+dxg^P)NJU-jt z6JE9QA3&%u=dVrd92a$oJDNAPxn9u#6Kw(0Ag-7HI{Em7e0X1X?@So54j5v@2gfmb z+zgWbg$^w(rrmtKTy_m}xy+@n@ZDt>Q|j!Ao%@IPnoHDKSh!&mHF ziN-g!?3O~7!SeEhTGM#C!?^Wt6Y+U*0{lkz#Yk&svQRmP?6EJk3EoJ|KG6ig4X`17gjDsF#6d#kfO!=TtJDS>4tAAUVl6@N z(uK`k}jDQ6+f5FgWM)^fbk0T9J?!3pPb2Z$`i%QuTi<;4C4Jr@PDOrtC1nQ-MG_dE>~ za3o603|qzZ1)zqLUDLH{B?3Dr>w5|GP)2u&2nE}%?Up=m)U?>@yHnjKi zhX45}rbsL4T;b!?SW$dv#*Nftd#EB#sS8|8FpG6P1J1RAf?Q@AJ4B{S1e;vt((My5c zNZm4vfZ{Xro)anPRhORxpX|%(<;Yo}SV4|OK5*#;l|ML;sF~;^ynoL>j2&7|IHFAm zxS}1n8V5-%E=@KdPDBP6(4@DNFkfhwUI0HSaD?zJ1Ma*SF_{>^R;UrSZ494TC(kl1 z&eNHYWZiCpUeI48j981xB<&f|?M`FOvWEQ>Y=Z(gwi*ZkV&&n^xyy;5#s#Gfw!7NH z{{eC|M1VXH=o=F3D{{MD{xXo)ytf{`YEZA9_!++>`6%zh@D-Ekdo~Lc1>%57N+GwN zQ5GEFk4v;tfJZF}T*mD5T*5pv_~3~d0VPEmZJvG=1_g09gXa8$1gsczE%;~>Ez zt$6GK7#Yqj>&4Evd+YK7nb?q6eoP!U1aiZuyT`{Lyo119v!W^j#Rogsy4m@WyG8yi z6dc(kS<*X95#|h+Pmk9@_+9+(lb0~Ru+dp;mR_fRFGD(uL){-M0Fu|jB$%JzR%ey# zFfl4veRnPbeu#%m5OZ3J_1Qh&j)ouScXw3J)jrpfM2Qw1Y)DhUvwA0Al*W`wlkELT zK{Vibdu>|`kVHR@hjXkn0Z(AxM8$b4e8tU9SrClNba4iI6nL_Ia~Qt}jA!_zO480` z%PODh-HEi=S{J(+Fz5Xnic%Fqe{n?&Tg<|MfbAAdN{38ntD-}-lPcFuSON?j;|Xw_ zk4IKAgmAT z-}YRbaXeSUwm2?FHwTy7f=fs8pSFxd^rNgH{`lTxm^(Z2P#NNDA3iGL2O|07Mx`XC zBU((Q^6O`NbpnN`@iB-fT>rB6fHQYa)}GDN@`xBBxW%!f6%nDwgdL%t(cYYl1|>VG zvw*b13OXV#A1YaOA3k{%uoB{sbBTad@WwS6Z#t>{zYD5(aV1{6b~1-@3D8el7#;S5 zAI&DaQ?WNBxm9-YsZo`?5@#rxzv&@s3jjiCFEw%;UhmKqi#%}h@b+l`TNzYk3^m6* zzm>X+adn^x<}`Uhxb=b3?GR*m!LQ&(ii`=fpDVf$V-3( zRSTHJ6q4#c+AQ?Ph>{nm2p~uqqF6>+tL9EU8s`X}-7WwmT|AvY-fpD(LA%mN5r0O3 zfB2w`mq&tOgT${V#UTEob;FSiPv$BTN=<6g-?UrS(9s(7Vc+pL1 zGgYKDiz5p5Brxmt)l`$SNnC5|Xcm!pZJ$(OnZgvs_tLxgS=ZeY{C4Y)LDO@}1e3{K z5*&eSi-Fbdvm=0vbpZ=$ic`j^%#crlWsyu0$pU0EY{nw8v)rIbprq1Ucx0qcW1$2P zWm@p6NGzC*-+m3EQqTHqqL zNO_QWE|?RHDuOnOY{yZRvz6_1#LciUBR+(OCI@wr(M?XEn8cz=MkBpPUtHtipI|`_ zgQa4Hz)RrgNtXi(UxtD--b-bWS&+b)Tdj)Goas_N?f~ayxp4HB(utImloMnfiGE;Q zYP4~B)@c7*o{pt0nq_MWJ5|J*c$>pYNv*jGF}RLmFOEAPD`a65zj7pm9vY|_^(Q3x2snvJsz zIcM*B#UCAcW9bE7aErsR#gQ`{F_+{(?%4Lyp{3sUU|9In8j9s#t4OXkj*4nX6`lHY z1@lRxB7d=x2NBx`36I3#vEHmkLh9ynO{SEdqbpK15y@BsH)4)r(z8&Xm)tD0w~M1&act{Lj* zHkuYQK(V=mmjD7XXD3j{q~2RKTQkt(9U5^zuup2_S;^_OCjdrJQ<)~JbXtj6<0HZP zdU0v~u&>KNt$dk6RcM%2*6A4wyoI0g4Xr5N*eq6?x0ks5;0#vx+6{h(iSMUYz{c9P zjFIhW+GUqc8Hge)MGfLcxqx%}1faeD?RTd?)+XzLFuI9Qx8tG8= ztsu&$$&#sWsZ^R42I6R2C@wcjuQBRPX6jowB7bgdUIIzP!cqV8Z_AX@LIQ_c!zBM+ zZ(0vj(%F;Q+cbaAvD^5mLUmawA<4p#@~odIdE2)oHPj959Ilf6r&JjK4zevpf0+{6 zw_$o_-X2}^)9-aN5rX^R?GKRw*$F>6h*qU=GL|tK?X5*40GV8EInvk4f~fj(^I0~X z;n0dv6o)irPIz(*2>fh>P#AVbhH>fw{Q+GUFlr;y;!3rIa|Ub5=)=NB zm?`?e>7r_YmDWL!#;)Q`MO4GginF(=4xV~|17+)$StK9=Q)H+H(Hvg2lu4$>(cF+# zGI|@LyAhswBtLk4#fSW=M~F~JRB-*1lfr{c@%_W`AtJnqhJZ}WzI4Euc_-Ls;QD4U zG>phpGLL62+4?Y22x!8kO3j~^9mQ?tgJD+a97p&5l}3dK$C2?8SSZcJ08ax?yb4#V z_<~3>?t7Vwc+L2YOe{?S*UW|D!G<>e(LvT1HGbr`m8S`0O@@TX_y!1)cQYJTr;p%K zi-Mgg>6PmA`A~&jWhg;4=e1NAnYb5|A~1y#Kc~p^!6tf!hUsp~T)_Jr;8}vC=q#if zZ&+{m7%LM!2<3zFnJm@h$Ut@PTUjirWaWg$De&_U*DV|KX^OQ#SUTzX=^*cl+6d8# zpQFtn13`<0-$z5I7e#)|>J3it-+|$P?%2z~l2O z9eaij5Khu{Q24mMNIE68`vktA^rU=ct0H$Ui>uuIW3WP`!82q_`E;)DVWtXPl2-49=0Xr@C}b^o zXiq6#Ms(-S_ku0qmAK=ve%uk^bes2CqZzx_Ggp+c&0DHYk+B_z;kTbx zs-#4w|2U`DJop6E8`!U&*|!0{**{|U;YNJIQ~ytB+FXfEHoW~ zRw4#uqdsmhh;s!48FKfcsdVsI-z4@jvgO!pfYO&y(3$gYHf-k+c*Bv?< z&h}}=W7CzMw-Q8U(>tSac+7}D1c;T%wt4_il4H$pZuJn)?m)=!?O1~eIPA;N426G0 z8RK@Mb|wE4E#U#d1+{#pSye|!Y?D+|D(*^<>C~Pi1ZzWHh0zRyA8nwDlz-=c@~VVtUL2EB7>;4__Nc+p1bTQ)KxHKZaI9 zRX8ERtn5acdwW_wlf(|kqca4?djqlS0hPlBI8)&jfeY5s$?6t+X+Kb)F*?-?)s=#m zea8w)SnVdZdcw6sb9u)?6VO689Xo9_h%1VUs4r=7wVYnDTz>tisOwH!>=k{j3zAqB-7m2LvWs-TNoQ*P=A{DYco=Y7DGq9IB?qy~!T}Cl8;{U_fIq=vPXkE5! z+qP}nwr$(Cb<4JG+qz}jcGWF*z3xsYUpjfeVV~@M)>?DSQEX5~JUJsjk@4xC8(R2tU%W%T6}iCsF3kyxvB zn*)(=w_BZ$=->mI>YaVJ_gGpd@|PaC7hXfNxCm}m`?Iu;=3B}MJ!$3TvgxmR($n#3 zT(%MT_{baD$ElY9O_`4+AttZ7t&%*UN2GW5TbUX$CxRe?&ws&NAGo(>1l@a(rK)0< zhnGuD(yEZaNK{vK5TF(9bo?U zE3P}6DNUHqv-=Ku@UCMJ8cgLI#E#sinGNr-6WU0QN|BYda>J5|;NBS~y~{mv({Uv5m8Zb;*`G#>3I$IB4Fud12nU{&4$ zyMbVT5pGKar(rvQ-S{u)>ZUyj@^mxQI=Nj9CO3oP82Fnj=Uq zQ1s#aBj!P{=@iIWC50$meIO zfq`@|Uc7m#tuZ|e!Rb?HY{s|owl(X~oB+a=G?ICdNQ%k-rNEi#E_e{pzh>7vYD&2D@^)SSOb?q~?#d$X*qS1pnL}Q5Ap@dj)N}#7ZdB~p~ zz{!6rJ{s8F^7#X&?$1`ge<|_U9T0zZuDgcY-1u4@fe1(YGryp}luu!Kd-`AdlHl39 zbYrt7Kt&DPeeF0;xHy;a@!;y@U;CIi`FubNA-A z<@{$|d0a1+ySPZRi+?e^9M-YBz7DGd?P1c?52yYP3qFuXxUJ#m#wA8M@55}JH*aNfd#iA>(;622NAz{iQF<&AzdIit^t2P1=n$KxDTyR$fuP;M>V=dbpi^-JCs zx}QX-5)U)ALdrOSy2UP>#tnpsf zA}u-c?;}bNLJYx#CD0o+kqCjC@i=#u#S-jDCsw5EVtGK` zD)e1Q!?A#|fN1x0GqcIwWxspf`vDGjyG~@}u{Xom83`J3&HvlL6o5|%{N5cTjW(j= z;5c_ejRI;*Ag1YfU`&|JuqmQW|6w^n)EXe3fbYaPydS3T(NBz&3)kJ8!J#91w2#pd zv`GXd<{|GG-M)_M^%ILjsIF_^WB#ZC6Q*P%g~kcvPGd}j?9OBiX&M7Wze5$p&@Vh_ zCrLa2MI0j}j$ix~U>L>gr zCSc$|Ba_^%26m-HVI)QDpooREk7?v2=f^qCvG$j1U;Sv|fG37Cy6LB$4GXYfmwcaD z5vDo99k_~xW5zxw2tq2r5{WNTk|?Tjc_5+o-GY|4J-p8JIuS3#$Ik)1Vrv6KU^;Zw z&~%u=fpdLR7xcCrx|=(E?7$oWnE%f<4hScN0gT^#Fg_eJ-cwpQrW&q>OFnZmtgD8R z`uMvsd%uHYj9RSOmenowcHwmk%DA`F$W8z96m3<#28ML&lEx)?iUDt&_})*^6I>W8#bs~-i*E$O-IeZFYceAZJ^^% z@)5uN1_``Wge+>fWTj)E$YLygw7i%^lTa!j*$E{!`4Br{zDE^s^2conJNI~cis%~m z$^=*xNw2a?ErW3I7V+l9uF0$`BS3-8n(#c>ND#kU1l@*peu~OOffBsq2}>RmRR*gu zq1&(a(4eU%vkPfn_xl$0q*Cqht@!i>%l2&_eB8DzHJ!m5#*>?gW?4|vy}C<>R4Ob; zs!Df8Wt}VbTHUygWpv3tGidAdq}7T+^7tAg^xdtGC1xy|iN^OKs(lagcg3g<0=b!B zT;jUii5D7nVu-v33&v-GcU7FLPd=O3t}VVEzWN7ABmCY5cy!w}9v z26fznRWVB3e305}8tO74=_`?Z3ktfsGuwycz}|=q2V`c@$cud9=;2Qs)rgv}FSj^X zWf4@yatN~p3e$8VgTxN>`3krTRJ|738Cf_Lqdl&JD`{3xr`;!=z#xQhvZn(o!wd(~ zGRij(x9nk%Ehe?z@TJPVczy!@LqmmZxFJgW=9$X!3uVeB#$2RA?@9(%Ell_aKtgmx zD#uj~QB)gBD(*fA+NFmtpe?K)u+TmY8Lkm1Q}z|bIz$9tlXQdJHm&Lt50crGEkvh; zRT#TBYDCN9tCF5LlYwjM4yhrvH6Vf8$II= zHMDJ4j_Q+Op9M{tWbzE<`-o0=js2u&@_sF0U3aERE#W-cBK2oAE6##qE07r}&p%D3 zr0FGcxX@tPS(3$Ihjl|kQ*~6` z)!J@bbN_4{8EkrL)I{5w|NcC5Ko-lPVpLbElZ17>)K9hE04R%1Z6_V>ieyYGRu*bZ zv#0Da_@ZV4jJKZx!1?lS7h1?S+@P7$&(c7*4jre7{J%vgxAIy=4+R>FxUjHP-HNEO zvH!@zI;68F(;~Ql@P|dv6VsFcIclO?>zJXBz@LFcSBU^G#26Fj>fX8* z_$R|n!`N_9j^Spe%C4m=LoAzwi&4cP8+y zArlui?C*jZ4wsG4MJ*I+@77hEd7xnPN;W?rL~xzc7&;(Vj5?W-(OY_sqorPWVC3X5 za3fHoC$_J?uv9l(8civemt?1`r?E^hWZ#WrkP|PXkCbwDHW+LqXl%1#U$Z7jygk6$<((=yQ zxP*?G#^x8pv0f`;sCT#g#oj}c9n(5nz)^D~YUjEoy3Hus6)!}0bwzp2_ zRxGUkNk=y`mXRy+wBRj{X80s`80ZfdDIEU$gD{+#CgpfC_Ukttn?XQGR`RtfL~*0 z#~?DgT8V8MSE@e4iKntuo{7X-l$r3Fs%OAk=TxdRo{aWPu$kd-$dEtPFvR;llVuMovdae%g#su4~jgpl)E=a z>?LS|PxriRO@o7db}}^`#m>}3rT$$Ik|GDyo`eKa>&wop0tk!rtKxcffjCh!SmQrG z+*~tbX{w;x78epS=Y@7UFR;!H#;k*L;NMKV6}r}H8TNGa>i(0YT=Kc(PfBT-{d@EM zKZiFxP6xR~uwZXau-Hgp%HRiGN6gU$cn*sV7f_dx)Vvn`*j0F~N2t!Ni5f>d*LBl= z%|Drm)Ub!Pm(*&9szYeKmdDw8#?)PBFK5RSR>W?QY9h7nw7nSdoN&#lpazr<%NIRl z#mkji3oDCM{|HqWB`{pCS7m0Djx7CLA3+a{P|HB&eHEj6MV>9xh_FH}1e$~g5zNmHV zdVEmp{X_{Kp3|pNb;iFuD3K0TL!&V&Q)zswpcV$#(+Sv6tMeZz=~%g0qR0U{3(8r} zMQBEhMyOLk`#e5~-qvWS73=BMQa;JpN&=3We?$pA)gdtWN@qwVd1-cF4$(@3^r4ga zw=z_GKg;}Biab9@$i`NyRIh&-%c*aWT5a6vchOZ;#nRlzMMu@Je-`t%ZoHfRdBlD-)doKv2_Z zi_Jow28h{P&-=yug{JU6{ESCU(~r+b-{gEKHuf5yE!Qmil83X8Le;;!#BXE$pXArr z`Tbu6DO;QFs7FsF6v@=eVg+PrMRS9?Wt}JmBUEEPauGo;(VsrG-ygvSOl9|P)R7%DcCcsju=m4eTrN?6w@dbAxqN0hh$q;)Ll5Bdjhs`lkHujm*2SU$N z(HhTkC1Uo`SQ*2AZHOgN{TB0<#)`YgQ%fcf3#XGA2QkV?aOYByuY$jMq)#H71C}k1 zM!*1c(HMZPP6cL~B$-D1jj>jYI5SB{Mg(M$KzOxM?;88l4mn1&7~-yJ)J1u+Yym<* z-erwjdWx9VoM2oJNN*nG5OEn>NkLmV+Xs#+J%MOS#XO<{ZA%oovy@<^@IN9`5 z>hC03l%r|NUMh!hoIcD*z-VM{K)kZ6^c!Iiz_nCA(k5W0`qtFT#^&aBu5zxbf|Z{y zj^0*-%|GT;>~B&0UcoMA2G*kwSIwcMvafJ+zJzi4f477`3jX{YUTg{jeQ_>;0qp^=|Tbd;$4i zb8&F+vcHV$??3mhAPo8V`4qh`mUkxB2NqYuy~!_@FO${B%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/localytics/localytics-6/libs/testutils.aar b/kits/localytics/localytics-6/libs/testutils.aar new file mode 100644 index 0000000000000000000000000000000000000000..cf49b418969034bad0f13e3bee536d9b7ba56833 GIT binary patch literal 47713 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 le<@PWyj%{{x-|yYK)2 literal 0 HcmV?d00001 diff --git a/kits/localytics/localytics-6/settings.gradle.kts b/kits/localytics/localytics-6/settings.gradle.kts new file mode 100644 index 000000000..b1915b013 --- /dev/null +++ b/kits/localytics/localytics-6/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-localytics-kit" +include(":") diff --git a/kits/localytics/localytics-6/src/main/AndroidManifest.xml b/kits/localytics/localytics-6/src/main/AndroidManifest.xml new file mode 100644 index 000000000..7dd27a1a1 --- /dev/null +++ b/kits/localytics/localytics-6/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt new file mode 100644 index 000000000..eb74d9429 --- /dev/null +++ b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt @@ -0,0 +1,356 @@ +package com.mparticle.kits + +import android.app.Application +import android.content.Context +import android.content.Intent +import android.location.Location +import com.localytics.androidx.CallToActionListener +import com.localytics.androidx.Campaign +import com.localytics.androidx.FirebaseService +import com.localytics.androidx.Localytics +import com.localytics.androidx.ReferralReceiver +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.internal.Logger +import com.mparticle.internal.MPUtility +import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.PushListener +import com.mparticle.kits.ReportingMessage +import org.json.JSONArray +import java.math.BigDecimal +import java.util.HashMap +import java.util.LinkedList + +class LocalyticsKit : + KitIntegration(), + KitIntegration.EventListener, + CommerceListener, + AttributeListener, + PushListener, + CallToActionListener { + private var customDimensionJson: JSONArray? = null + private var trackAsRawLtv = false + + override fun getName(): String = KIT_NAME + + public override fun onKitCreate( + settings: Map, + context: Context, + ): List { + try { + customDimensionJson = JSONArray(settings[CUSTOM_DIMENSIONS]) + } catch (jse: Exception) { + } + trackAsRawLtv = java.lang.Boolean.parseBoolean(settings[RAW_LTV]) + Localytics.setOption("ll_app_key", settings[API_KEY]) + Localytics.autoIntegrate((context.applicationContext as Application)) + + // after a reset() call, we need to set Provivacy OptedOut back to false, so the kit can run normally + Localytics.setCallToActionListener(this) + Localytics.setLoggingEnabled(MParticle.getInstance()!!.environment == MParticle.Environment.Development) + return emptyList() + } + + override fun setLocation(location: Location) { + Localytics.setLocation(location) + } + + override fun setInstallReferrer(intent: Intent) { + ReferralReceiver().onReceive(context, intent) + } + + override fun setUserIdentity( + identityType: IdentityType, + id: String, + ) { + when (identityType) { + IdentityType.Email -> { + Localytics.setCustomerEmail(id) + } + IdentityType.CustomerId -> { + Localytics.setCustomerId(id) + } + else -> { + Localytics.setIdentifier(identityType.name, id) + } + } + } + + override fun removeUserIdentity(identityType: IdentityType) { + when (identityType) { + IdentityType.Email -> { + Localytics.setCustomerEmail("") + } + IdentityType.CustomerId -> { + Localytics.setCustomerId("") + } + else -> { + Localytics.setIdentifier(identityType.name, "") + } + } + } + + override fun logout(): List = emptyList() + + fun getDimensionIndexForAttribute(key: String?): Int { + if (customDimensionJson == null) { + try { + customDimensionJson = JSONArray(settings[CUSTOM_DIMENSIONS]) + } catch (jse: Exception) { + } + } + customDimensionJson?.let { customDimensionJson -> + try { + for (i in 0 until customDimensionJson.length()) { + val dimension = customDimensionJson.getJSONObject(i) + if (dimension.getString("maptype") == "UserAttributeClass.Name") { + val attributeName = dimension.getString("map") + if (key.equals(attributeName, true)) { + return dimension + .getString("value") + .substring("Dimension ".length) + .toInt() + } + } + } + } catch (e: Exception) { + Logger.debug("Exception while mapping mParticle user attributes to Localytics custom dimensions: $e") + } + } + return -1 + } + + override fun setUserAttribute( + key: String, + value: String, + ) { + val dimensionIndex = getDimensionIndexForAttribute(key) + if (dimensionIndex >= 0) { + Localytics.setCustomDimension(dimensionIndex, value) + } + when { + key.equals(MParticle.UserAttributes.FIRSTNAME, true) -> { + Localytics.setCustomerFirstName(value) + } + key.equals(MParticle.UserAttributes.LASTNAME, true) -> { + Localytics.setCustomerLastName(value) + } + else -> { + Localytics.setProfileAttribute(KitUtils.sanitizeAttributeKey(key), value) + } + } + } + + override fun setUserAttributeList( + key: String, + list: List, + ) { + val array = list.toTypedArray() + Localytics.setProfileAttribute(key, array) + } + + override fun supportsAttributeLists(): Boolean = true + + override fun setAllUserAttributes( + attributes: Map, + attributeLists: Map>, + ) { + for ((key, value) in attributes) { + setUserAttribute(key, value) + } + for ((key, value) in attributeLists) { + setUserAttributeList(key, value) + } + } + + override fun removeUserAttribute(key: String) { + Localytics.deleteProfileAttribute(key) + } + + override fun setOptOut(optOutStatus: Boolean): List { + Localytics.setOptedOut(optOutStatus) + val messageList: MutableList = LinkedList() + messageList.add( + ReportingMessage( + this, + ReportingMessage.MessageType.OPT_OUT, + System.currentTimeMillis(), + null, + ), + ) + return messageList + } + + override fun leaveBreadcrumb(breadcrumb: String): List = emptyList() + + override fun logError( + message: String, + errorAttributes: Map, + ): List = emptyList() + + override fun logException( + exception: Exception, + exceptionAttributes: Map, + message: String, + ): List = emptyList() + + override fun logEvent(event: MPEvent): List { + val duration = event.length + var info = event.customAttributeStrings + if (duration != null) { + if (info == null) { + info = HashMap() + } + info["event_duration"] = duration.toString() + } + Localytics.tagEvent(event.eventName, info) + val messageList: MutableList = LinkedList() + messageList.add(ReportingMessage.fromEvent(this, event)) + return messageList + } + + override fun logScreen( + screenName: String, + eventAttributes: Map, + ): List { + Localytics.tagScreen(screenName) + val messageList: MutableList = LinkedList() + messageList.add( + ReportingMessage( + this, + ReportingMessage.MessageType.SCREEN_VIEW, + System.currentTimeMillis(), + eventAttributes, + ).setScreenName(screenName), + ) + return messageList + } + + override fun logLtvIncrease( + valueIncreased: BigDecimal, + totalValue: BigDecimal, + eventName: String, + contextInfo: Map, + ): List { + val multiplier = if (trackAsRawLtv) 1 else 100 + Localytics.tagEvent(eventName, contextInfo, valueIncreased.toDouble().toLong() * multiplier) + val messageList: MutableList = LinkedList() + messageList.add( + ReportingMessage.fromEvent( + this, + MPEvent + .Builder(eventName, MParticle.EventType.Transaction) + .customAttributes(contextInfo) + .build(), + ), + ) + return messageList + } + + override fun logEvent(event: CommerceEvent): List { + val messages: MutableList = LinkedList() + if (!KitUtils.isEmpty(event.productAction) && + event.productAction.equals( + Product.PURCHASE, + true, + ) || + event.productAction.equals(Product.REFUND, true) + ) { + val eventAttributes: Map = HashMap() + CommerceEventUtils.extractActionAttributes(event, eventAttributes) + var multiplier = if (trackAsRawLtv) 1 else 100 + if (event.productAction.equals(Product.REFUND, true)) { + multiplier *= -1 + } + val total = event.transactionAttributes?.revenue?.times(multiplier) + if (total != null) { + Localytics.tagEvent( + String.format("eCommerce - %s", event.productAction), + eventAttributes, + total.toLong(), + ) + } + messages.add(ReportingMessage.fromEvent(this, event)) + return messages + } + val eventList = CommerceEventUtils.expand(event) + if (eventList != null) { + for (i in eventList.indices) { + try { + logEvent(eventList[i]) + messages.add(ReportingMessage.fromEvent(this, event)) + } catch (e: Exception) { + Logger.warning("Failed to call tagEvent to Localytics kit: $e") + } + } + } + return messages + } + + override fun willHandlePushMessage(intent: Intent): Boolean = + ( + intent.extras?.containsKey("ll") == true || + intent.extras?.containsKey("localyticsUninstallTrackingPush") == true + ) && + MPUtility.isFirebaseAvailable() + + override fun onPushMessageReceived( + context: Context, + extras: Intent, + ) { + val service: Intent + if (MPUtility.isFirebaseAvailable()) { + service = Intent(context, FirebaseService::class.java) + service.action = "com.google.firebase.MESSAGING_EVENT" + service.putExtras(extras) + context.startService(service) + } + } + + override fun onPushRegistration( + token: String, + senderId: String, + ): Boolean { + Localytics.setPushRegistrationId(token) + return true + } + + public override fun reset() { + Localytics.setPrivacyOptedOut(true) + } + + override fun localyticsShouldDeeplink( + s: String, + campaign: Campaign, + ): Boolean = false + + override fun localyticsDidOptOut( + b: Boolean, + campaign: Campaign, + ) {} + + override fun localyticsDidPrivacyOptOut( + optedOut: Boolean, + campaign: Campaign, + ) { + if (optedOut && !kitManager.isOptedOut) { + Localytics.setPrivacyOptedOut(false) + } + } + + override fun localyticsShouldPromptForLocationPermissions(campaign: Campaign): Boolean = false + + override fun localyticsShouldPromptForNotificationPermissions(campaign: Campaign): Boolean = false + + companion object { + const val API_KEY = "appKey" + const val CUSTOM_DIMENSIONS = "customDimensions" + private const val RAW_LTV = "trackClvAsRawValue" + private const val KIT_NAME = "Localytics" + } +} diff --git a/kits/localytics/localytics-6/src/test/kotlin/com/mparticle/kits/LocalyticsKitTests.kt b/kits/localytics/localytics-6/src/test/kotlin/com/mparticle/kits/LocalyticsKitTests.kt new file mode 100644 index 000000000..152c0791c --- /dev/null +++ b/kits/localytics/localytics-6/src/test/kotlin/com/mparticle/kits/LocalyticsKitTests.kt @@ -0,0 +1,73 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MParticleOptions +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito + +class LocalyticsKitTests { + private val kit: KitIntegration + get() = LocalyticsKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(!name.isNullOrEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + @Test + @Throws(Exception::class) + fun testGetCustomDimensionIndex() { + val kit = kit as LocalyticsKit + val settings = HashMap() + kit.configuration = Mockito.mock(KitConfiguration::class.java) + settings[LocalyticsKit.API_KEY] = "test" + settings[LocalyticsKit.CUSTOM_DIMENSIONS] = + "[ { \"maptype\":\"UserAttributeClass.Name\", \"value\":\"Dimension 0\", \"map\":\"foo-key-0\" }, { \"maptype\":\"UserAttributeClass.Name\", \"value\":\"Dimension 1\", \"map\":\"foo-key-1\" }, ]" + Mockito.`when`(kit.settings).thenReturn(settings) + var index = kit.getDimensionIndexForAttribute(null) + Assert.assertEquals(-1, index.toLong()) + index = kit.getDimensionIndexForAttribute("foo-key-0") + Assert.assertEquals(0, index.toLong()) + index = kit.getDimensionIndexForAttribute("fOo-Key-0") + Assert.assertEquals(0, index.toLong()) + index = kit.getDimensionIndexForAttribute("fOo-Key-1") + Assert.assertEquals(1, index.toLong()) + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 3300df5fd..3c00228c4 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -21,7 +21,7 @@ include ( ':kits:iterable-kit', ':kits:kochava:kochava-5', ':kits:leanplum-kit', - ':kits:localytics-kit', + ':kits:localytics:localytics-6', //Neura hosts kit ':kits:onetrust-kit', ':kits:optimizely-kit', From 2c6543f51df4df287fb441d8f0b9e073aedf64f6 Mon Sep 17 00:00:00 2001 From: denischilik Date: Tue, 10 Mar 2026 10:57:02 -0400 Subject: [PATCH 09/61] feat: Split instrumented tests in CI for parallel execution (#662) * feat: split instrumented tests in CI for parallel execution - Split instrumented tests into 4 parallel jobs: core, kit-base, testutils, orchestrator - Reduced timeout from 30 to 20 min per job - Each job runs only its module for faster feedback - Add kit directories for isolated testing (adjust, googleanalyticsfirebase, kochava, localytics, rokt) - Replace 2 shard jobs with matrix strategy (shards 0-3) - Each shard runs ~25% of tests in parallel - Timeout 12 min per shard, fail-fast: false - extract common part in instrumented-tests.yml * chore: remove rokt-kit submodule (migrated to monorepo) Rokt kit is now in kits/rokt/rokt, no longer a submodule. Made-with: Cursor * fix: add explicit permissions to instrumented-tests workflow for Checkov CKV2_GHA_1 Made-with: Cursor * fix: remove actions: write permission from instrumented-tests workflow Made-with: Cursor --- .github/workflows/instrumented-tests.yml | 82 ++++++++++++ .github/workflows/pull-request.yml | 163 ++++++----------------- 2 files changed, 123 insertions(+), 122 deletions(-) create mode 100644 .github/workflows/instrumented-tests.yml diff --git a/.github/workflows/instrumented-tests.yml b/.github/workflows/instrumented-tests.yml new file mode 100644 index 000000000..12a1b83a6 --- /dev/null +++ b/.github/workflows/instrumented-tests.yml @@ -0,0 +1,82 @@ +name: Instrumented Tests (Reusable) + +on: + workflow_call: + inputs: + display_name: + required: true + type: string + gradle_command: + required: true + type: string + artifact_name: + required: true + type: string + artifact_path: + required: true + type: string + timeout_minutes: + required: false + type: number + default: 20 + +permissions: + contents: read + pull-requests: read + checks: write + +jobs: + instrumented: + name: "Instrumented Tests (${{ inputs.display_name }})" + timeout-minutes: ${{ inputs.timeout_minutes }} + runs-on: ubuntu-latest + steps: + - name: "Checkout Branch" + uses: actions/checkout@v6.0.2 + - name: "Install JDK 17" + uses: actions/setup-java@v5 + with: + distribution: "zulu" + java-version: "17" + - name: Gradle cache + uses: gradle/gradle-build-action@842c587ad8aa4c68eeba24c396e15af4c2e9f30a #v2.9.0 + - name: AVD cache + uses: actions/cache@v5 + id: avd-cache + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-29 + - name: create AVD and generate snapshot for caching + if: steps.avd-cache.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b #v2.35.0 + with: + api-level: 28 + force-avd-creation: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: false + script: echo "Generated AVD snapshot for caching." + - name: Enable KVM group perms + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + - name: "Run Instrumented Tests (${{ inputs.display_name }})" + uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b #v2.35.0 + with: + api-level: 28 + force-avd-creation: false + emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: true + script: | + adb shell settings put global transition_animation_scale 0.0 + adb shell settings put global animator_duration_scale 0.0 + for pkg in com.mparticle.kittests com.mparticle.kits.test com.mparticle.legacyTest com.mparticle.test; do if adb shell pm list packages | grep -q "$pkg"; then adb uninstall "$pkg"; fi; done + ./gradlew ${{ inputs.gradle_command }} + - name: "Archive ${{ inputs.display_name }} Results" + uses: actions/upload-artifact@v7 + if: always() + with: + name: ${{ inputs.artifact_name }} + path: ${{ inputs.artifact_path }} diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 2c09afd7b..ea40abc94 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -34,127 +34,41 @@ jobs: name: "Check PR for semantic title" uses: mParticle/mparticle-workflows/.github/workflows/pr-title-check.yml@main - instrumented-tests: - name: "Instrumented Tests" - timeout-minutes: 30 - runs-on: ubuntu-latest - steps: - - name: "Checkout Branch" - uses: actions/checkout@v6.0.2 - - name: "Install JDK 17" - uses: actions/setup-java@v5 - with: - distribution: "zulu" - java-version: "17" - - name: Gradle cache - uses: gradle/gradle-build-action@842c587ad8aa4c68eeba24c396e15af4c2e9f30a #v2.9.0 - - name: AVD cache - uses: actions/cache@v5 - id: avd-cache - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-29 - - name: create AVD and generate snapshot for caching - if: steps.avd-cache.outputs.cache-hit != 'true' - uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b #v2.35.0 - with: - api-level: 28 - force-avd-creation: false - emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: false - script: echo "Generated AVD snapshot for caching." - - name: Enable KVM group perms - run: | - echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules - sudo udevadm control --reload-rules - sudo udevadm trigger --name-match=kvm - - name: "Run Instrumented Tests" - uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b #v2.35.0 - with: - api-level: 28 - force-avd-creation: false - emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: | - # Disable animations and clean up test packages - adb shell settings put global transition_animation_scale 0.0 - adb shell settings put global animator_duration_scale 0.0 - - for pkg in com.mparticle.kittests com.mparticle.kits.test com.mparticle.legacyTest com.mparticle.test; do if adb shell pm list packages | grep -q "$pkg"; then adb uninstall "$pkg"; fi; done - - ./gradlew connectedCheck --info --stacktrace - - ./gradlew :android-core:cAT -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=none --info - ./gradlew :android-kit-base:cAT -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=none --info - - name: "Archive Instrumented Tests Results" - uses: actions/upload-artifact@v7 - if: always() - with: - name: "instrumented-tests-results" - path: android-core/build/reports/androidTests/connected/** - - instrumented-orchestrator-tests: - name: "Instrumented Orchestrator Tests" - timeout-minutes: 30 - runs-on: ubuntu-latest - steps: - - name: "Checkout Branch" - uses: actions/checkout@v6.0.2 - - name: "Install JDK 17" - uses: actions/setup-java@v5 - with: - distribution: "zulu" - java-version: "17" - - name: Gradle cache - uses: gradle/gradle-build-action@842c587ad8aa4c68eeba24c396e15af4c2e9f30a #v2.9.0 - - name: AVD cache - uses: actions/cache@v5 - id: avd-cache - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-29 - - - name: create AVD and generate snapshot for caching - if: steps.avd-cache.outputs.cache-hit != 'true' - uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b #v2.35.0 - with: - api-level: 28 - force-avd-creation: false - emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: false - script: echo "Generated AVD snapshot for caching." - - name: Enable KVM group perms - run: | - echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules - sudo udevadm control --reload-rules - sudo udevadm trigger --name-match=kvm - - name: "Run Instrumented Orchestrator Tests" - uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b #v2.35.0 - with: - api-level: 28 - force-avd-creation: false - emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: | - # Disable benchmark tests as they do not work on emulators - # Disable animations and clean up test packages - adb shell settings put global transition_animation_scale 0.0 - adb shell settings put global animator_duration_scale 0.0 + instrumented-core: + uses: ./.github/workflows/instrumented-tests.yml + with: + display_name: Core + gradle_command: ":android-core:cAT -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=none --info --stacktrace" + artifact_name: instrumented-core-results + artifact_path: android-core/build/reports/androidTests/connected/** + + instrumented-kit-base: + uses: ./.github/workflows/instrumented-tests.yml + strategy: + fail-fast: false + matrix: + shard: [0, 1, 2, 3] + with: + display_name: "Kit Base Shard ${{ matrix.shard }}/4" + gradle_command: ":android-kit-base:cAT -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=none -Pandroid.testInstrumentationRunnerArguments.numShards=4 -Pandroid.testInstrumentationRunnerArguments.shardIndex=${{ matrix.shard }}" + artifact_name: "instrumented-kit-base-results-shard-${{ matrix.shard }}" + artifact_path: android-kit-base/build/reports/androidTests/connected/** - for pkg in com.mparticle.kittests com.mparticle.kits.test com.mparticle.legacyTest com.mparticle.test; do if adb shell pm list packages | grep -q "$pkg"; then adb uninstall "$pkg"; fi; done + instrumented-testutils: + uses: ./.github/workflows/instrumented-tests.yml + with: + display_name: Testutils + gradle_command: ":testutils:cAT -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=none --info --stacktrace" + artifact_name: instrumented-testutils-results + artifact_path: testutils/build/reports/androidTests/connected/** - ./gradlew connectedCheck --stacktrace - ./gradlew -Porchestrator=true :android-core:cAT -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=none - - name: "Archive Instrumented Orchestrator Tests Results" - uses: actions/upload-artifact@v7 - if: always() - with: - name: "instrumented-orchestrator-tests-results" - path: android-core/build/orchestrator/** + instrumented-orchestrator: + uses: ./.github/workflows/instrumented-tests.yml + with: + display_name: Orchestrator + gradle_command: "-Porchestrator=true :android-core:cAT -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=none --stacktrace" + artifact_name: instrumented-orchestrator-results + artifact_path: android-core/build/orchestrator/** unit-tests: name: "Unit Tests" timeout-minutes: 15 @@ -270,8 +184,10 @@ jobs: name: "Save PR Number for Dependabot Automerge" needs: [ - instrumented-tests, - instrumented-orchestrator-tests, + instrumented-core, + instrumented-kit-base, + instrumented-testutils, + instrumented-orchestrator, unit-tests, lint-checks, kotlin-lint-checks, @@ -284,7 +200,10 @@ jobs: github.event_name == 'pull_request' && github.event.pull_request.draft == false needs: - - instrumented-tests + - instrumented-core + - instrumented-kit-base + - instrumented-testutils + - instrumented-orchestrator - unit-tests - lint-checks - kotlin-lint-checks From 255eefee54a149bf5e51dd5a8609d4406382d0cb Mon Sep 17 00:00:00 2001 From: denischilik Date: Tue, 10 Mar 2026 14:35:19 -0400 Subject: [PATCH 10/61] feat: Leanplum 7 Kit Migrate (#655) * feat: migrate leanplum-kit from submodule to regular directory feat: relocate leanplum-kit to kits/leanplum/leanplum-7 and update settings-kits.gradle fix: replace exposed Google API key with placeholder in leanplum example Made-with: Cursor * chore: update .mobsf to suppress MobSF false positives - Add ignore-paths for src/test, example apps - Add webview_javascript_interface ignore (intentional JS bridge for WebView SDK) Made-with: Cursor * fix security issues --- .gitmodules | 3 - .mobsf | 6 + .trunk/trunk.yaml | 1 + .../example/src/main/AndroidManifest.xml | 2 +- .../com/mparticle/kits/AppboyKitTests.kt | 4 +- .../kits/GoogleAnalyticsFirebaseKitTest.kt | 4 +- .../kits/GoogleAnalyticsFirebaseGA4KitTest.kt | 5 +- kits/leanplum-kit | 1 - kits/leanplum/leanplum-7/README.md | 47 ++ kits/leanplum/leanplum-7/build.gradle | 67 +++ .../leanplum/leanplum-7/consumer-proguard.pro | 6 + kits/leanplum/leanplum-7/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/leanplum/leanplum-7/gradlew | 234 ++++++++++ kits/leanplum/leanplum-7/gradlew.bat | 89 ++++ .../leanplum-7/leanplum-example/.gitignore | 1 + .../leanplum-7/leanplum-example/build.gradle | 74 +++ .../leanplum-example/google-services.json | 42 ++ .../leanplum-example/proguard-rules.pro | 21 + .../src/main/AndroidManifest.xml | 25 ++ .../example/leanplum/ExampleApplication.java | 28 ++ .../example/leanplum/MainActivity.java | 13 + .../drawable-v24/ic_launcher_foreground.xml | 34 ++ .../res/drawable/ic_launcher_background.xml | 170 +++++++ .../src/main/res/layout/activity_main.xml | 18 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes .../src/main/res/values/colors.xml | 6 + .../src/main/res/values/strings.xml | 3 + .../src/main/res/values/styles.xml | 11 + kits/leanplum/leanplum-7/settings.gradle.kts | 2 + .../leanplum-7/src/main/AndroidManifest.xml | 1 + .../kotlin/com/mparticle/kits/LeanplumKit.kt | 420 ++++++++++++++++++ .../src/test/kotlin/com/leanplum/Leanplum.kt | 31 ++ .../com/leanplum/LeanplumDeviceIdMode.kt | 7 + .../kotlin/com/mparticle/MockMParticle.kt | 14 + .../com/mparticle/kits/LeanplumKitTests.kt | 150 +++++++ settings-kits.gradle | 2 +- 49 files changed, 1548 insertions(+), 13 deletions(-) delete mode 160000 kits/leanplum-kit create mode 100644 kits/leanplum/leanplum-7/README.md create mode 100644 kits/leanplum/leanplum-7/build.gradle create mode 100644 kits/leanplum/leanplum-7/consumer-proguard.pro create mode 100644 kits/leanplum/leanplum-7/gradle.properties create mode 100644 kits/leanplum/leanplum-7/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/leanplum/leanplum-7/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/leanplum/leanplum-7/gradlew create mode 100644 kits/leanplum/leanplum-7/gradlew.bat create mode 100644 kits/leanplum/leanplum-7/leanplum-example/.gitignore create mode 100644 kits/leanplum/leanplum-7/leanplum-example/build.gradle create mode 100644 kits/leanplum/leanplum-7/leanplum-example/google-services.json create mode 100644 kits/leanplum/leanplum-7/leanplum-example/proguard-rules.pro create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/AndroidManifest.xml create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/java/com/mparticle/example/leanplum/ExampleApplication.java create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/java/com/mparticle/example/leanplum/MainActivity.java create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/drawable/ic_launcher_background.xml create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/layout/activity_main.xml create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/colors.xml create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/strings.xml create mode 100644 kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/styles.xml create mode 100644 kits/leanplum/leanplum-7/settings.gradle.kts create mode 100644 kits/leanplum/leanplum-7/src/main/AndroidManifest.xml create mode 100644 kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt create mode 100644 kits/leanplum/leanplum-7/src/test/kotlin/com/leanplum/Leanplum.kt create mode 100644 kits/leanplum/leanplum-7/src/test/kotlin/com/leanplum/LeanplumDeviceIdMode.kt create mode 100644 kits/leanplum/leanplum-7/src/test/kotlin/com/mparticle/MockMParticle.kt create mode 100644 kits/leanplum/leanplum-7/src/test/kotlin/com/mparticle/kits/LeanplumKitTests.kt diff --git a/.gitmodules b/.gitmodules index 228186f6b..1149281e4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -37,9 +37,6 @@ [submodule "kits/iterable-kit"] path = kits/iterable-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-iterable.git -[submodule "kits/leanplum-kit"] - path = kits/leanplum-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-leanplum.git [submodule "kits/onetrust-kit"] path = kits/onetrust-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-onetrust.git diff --git a/.mobsf b/.mobsf index f99e343d7..3afef2999 100644 --- a/.mobsf +++ b/.mobsf @@ -5,8 +5,14 @@ - android-kit-base/src/test/ - android-kit-base/src/androidTest/ - testutils/ + - "**/src/test/**" + - "**/example/**" + - "**/*-example/**" ignore-rules: + - webview_javascript_interface # Intentional: JS bridge for mParticle WebView SDK; workspace token controls access + - android_manifest_insecure_minsdk_error # Example apps; SDK minSdk 14+ per AGENTS.md + - android_manifest_allow_backup # Example apps only; acceptable for demo/debug - hardcoded_api_key - hardcoded_username - android_kotlin_hardcoded diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 095f63f17..acffddf5d 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -73,6 +73,7 @@ lint: - kits/ga/ga-23/** - kits/ga4/ga4-23/** - kits/kochava/kochava-5/** + - kits/leanplum/leanplum-7/** - kits/rokt/rokt/** - kits/localytics/localytics-6/** actions: diff --git a/kits/braze/braze-38/example/src/main/AndroidManifest.xml b/kits/braze/braze-38/example/src/main/AndroidManifest.xml index f17e78da8..d8192e240 100644 --- a/kits/braze/braze-38/example/src/main/AndroidManifest.xml +++ b/kits/braze/braze-38/example/src/main/AndroidManifest.xml @@ -3,7 +3,7 @@ package="com.mparticle.kits.braze.example"> ; + } + -keep class com.leanplum.** { *; } + -dontwarn com.leanplum.** \ No newline at end of file diff --git a/kits/leanplum/leanplum-7/gradle.properties b/kits/leanplum/leanplum-7/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/leanplum/leanplum-7/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/leanplum/leanplum-7/gradle/wrapper/gradle-wrapper.jar b/kits/leanplum/leanplum-7/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/leanplum/leanplum-7/gradle/wrapper/gradle-wrapper.properties b/kits/leanplum/leanplum-7/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/leanplum/leanplum-7/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/leanplum/leanplum-7/gradlew b/kits/leanplum/leanplum-7/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/leanplum/leanplum-7/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/leanplum/leanplum-7/gradlew.bat b/kits/leanplum/leanplum-7/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/leanplum/leanplum-7/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/leanplum/leanplum-7/leanplum-example/.gitignore b/kits/leanplum/leanplum-7/leanplum-example/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/.gitignore @@ -0,0 +1 @@ +/build diff --git a/kits/leanplum/leanplum-7/leanplum-example/build.gradle b/kits/leanplum/leanplum-7/leanplum-example/build.gradle new file mode 100644 index 000000000..643e9bc00 --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/build.gradle @@ -0,0 +1,74 @@ +apply plugin: 'com.android.application' + +buildscript { + repositories { + mavenCentral() + } + dependencies { + + // REQUIRED: + // For Firebase Cloud Messaging. + classpath 'com.google.gms:google-services:3.1.1' + } +} + +android { + compileSdkVersion 26 + + + + defaultConfig { + applicationId "com.mparticle.example.leanplum" + minSdkVersion 14 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + +} + +repositories { + // REQUIRED: + maven { + url "https://repo.leanplum.com/" + } +} + +dependencies { + + // REQUIRED: + // Firebase Cloud Messaging + implementation 'com.google.firebase:firebase-messaging:11.6.2' + // Only needed if you plan to use Location. + implementation 'com.google.android.gms:play-services-location:11.6.2' + + //In a typical app: + //implementation 'com.mparticle:android-leanplum-kit:+' + + //if you're building the entire mParticle SDK + implementation project(':kits:android-leanplum-kit') + + //if you're building just the Leanplum Kit + //implementation project(':leanplum-kit') + + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support.constraint:constraint-layout:1.0.2' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + +} +// REQUIRED: +// For Firebase Cloud Messaging. +apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/kits/leanplum/leanplum-7/leanplum-example/google-services.json b/kits/leanplum/leanplum-7/leanplum-example/google-services.json new file mode 100644 index 000000000..3ac43a6e5 --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/google-services.json @@ -0,0 +1,42 @@ +{ + "project_info": { + "project_number": "729939687029", + "firebase_url": "https://leanplum-example.firebaseio.com", + "project_id": "leanplum-example", + "storage_bucket": "leanplum-example.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:729939687029:android:ea702dd6ade00c98", + "android_client_info": { + "package_name": "com.mparticle.example.leanplum" + } + }, + "oauth_client": [ + { + "client_id": "729939687029-cjhjntccvnsq6c46ecb4o2a5pmdg4spd.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "YOUR_GOOGLE_API_KEY_HERE" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 2 + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/kits/leanplum/leanplum-7/leanplum-example/proguard-rules.pro b/kits/leanplum/leanplum-7/leanplum-example/proguard-rules.pro new file mode 100644 index 000000000..f1b424510 --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/AndroidManifest.xml b/kits/leanplum/leanplum-7/leanplum-example/src/main/AndroidManifest.xml new file mode 100644 index 000000000..471036fad --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/java/com/mparticle/example/leanplum/ExampleApplication.java b/kits/leanplum/leanplum-7/leanplum-example/src/main/java/com/mparticle/example/leanplum/ExampleApplication.java new file mode 100644 index 000000000..7fc3d9258 --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/java/com/mparticle/example/leanplum/ExampleApplication.java @@ -0,0 +1,28 @@ +package com.mparticle.example.leanplum; + +import android.app.Application; + +import com.mparticle.MParticle; +import com.mparticle.MParticleOptions; + +/** + * Leanplum Kit Example Application + */ +public class ExampleApplication extends Application { + + @Override + public void onCreate() { + super.onCreate(); + + //The Leanplum kit uses Firebase by default + //invoke this API *before* starting the mParticle SDK + //if you'd still like to use GCM + //LeanplumKit.disableFirebase = true; + + MParticle.start( + MParticleOptions.builder(this) + .credentials("REPLACE ME", "REPLACE ME") + .build() + ); + } +} diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/java/com/mparticle/example/leanplum/MainActivity.java b/kits/leanplum/leanplum-7/leanplum-example/src/main/java/com/mparticle/example/leanplum/MainActivity.java new file mode 100644 index 000000000..fcab56ead --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/java/com/mparticle/example/leanplum/MainActivity.java @@ -0,0 +1,13 @@ +package com.mparticle.example.leanplum; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + } +} diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/drawable-v24/ic_launcher_foreground.xml b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 000000000..c7bd21dbd --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/drawable/ic_launcher_background.xml b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000..d5fccc538 --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/layout/activity_main.xml b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/layout/activity_main.xml new file mode 100644 index 000000000..8fee980ca --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/layout/activity_main.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..eca70cfe5 --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..eca70cfe5 --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-hdpi/ic_launcher.png b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f5908281d070150700378b64a84c7db1f97aa1 GIT binary patch literal 3056 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 axPAxe%7rDusX+w*00006jj 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⁣ zwiG+x#%j}{0gU~J8;<|!B1@-XaB@{KORFwrYg_8rOv({b0EO#DbeQRm;B6_9=mXGf z-x|VL{zd`)#@yN}HkCSJbjbNlE|zL3Wm9Q8HY`sV)}3%pgN>cL^67{Z;PPL(*wT8N zUjXU{@|*hvm}({wsAC=x0^ok0%UAz0;sogW{B!nDqk|JJ5x~4NfTDgP49^zeu`csl?5mY@JdQdISc zFs!E{^grmkLnUk9 zny~m)1vws@5BFI<-0Tuo2JWX(0v`W|t(wg;s--L47WTvTMz-8l#TL^=OJNRS2?_Qj z3AKT+gvbyBi#H*-tJ%tWD|>EV3wy|8qxfzS!5RW;Jpl5*zo&^UBU=fG#2}UvRyNkK zA06Dy9;K1ca@r2T>yThYgI!ont$(G{6q#2QT+00r_x0(b)gsE`lBB?2gr55gq^D3Fi&p%E(p9>U%bv zkg1Jco(RbyTX7FDHOnl7-O@ zI$AaIl?9NJKPm(WiBP`1-#CB1QzU>&hKm)fpa5DKE{2$X0hGz-0uZ?cyTk(YC!Y&| zL=1VrNERSA5NA2jq7FACfX4JfPyj5XXl1yv0>~s;eF7L2$>&oMqeTFT2m$y7FlkON z_yurD1yIOvA;5C6016pyxBznGUt0kJ&k5r#;&>Jow`r)sp9R~PmK~lz$3xH%LT*1U zJdOyABZ3!FvNoR*vN$5ykHS8f`jA4zV+|L}i1C4`B2c{R0;UdYxaU|H)2avz@ z=mEYc|2S<+(B2Tj+FkX+2D+yFI!k9lWMA61DJ{)e;lum$(;O87?vGJJe!KtK04+N_ zI*P~t@dUb>9Xh{dbyl{-ZQ(UMgz7$|QfL5XSPkskt^NgctYC#;4WcZB1@%@wy@2t3 z2z0DI7&%b$*Aw~abe?GxE`ez@+6hOh-6*8fHRV{1os$EL@}uUZeG4h1&Be`98q*7j z=3-v+lhIjfWVo12!<>%V^a6lTgW3+_#W6n|p*~==zOH7z$0{LSZk(Tpd7EaD04hnA zL;#fxS0aD{`5^&D`}>0Uq?byDD-l2=!wm_bLcUl4gc(% za1p|itVANvFF>hghAS07Im1;IK;|b*W)}VDyI;BIp2=K*yu2a)j?B|f<44NI$NbmJ z#dE0>jI$fMr&@>4kN8MLFb4&2O9fEKaQg%(QO$4_1rVQywG^CmBLh#}_7gKW3vd?| z2?1^&KWq8}8I^_S0|)MowU_pw$q@nl@Nkn$z>BQq_KA^9yaR`(R3u{{Ig;cwt z@AJ^{ODQCm^neroM9nKNUAXi9RCK`OsP_LuR0PUR(YZCCX5dNF6VzcoK&=b^r`W?ltt|*F zpkoae%ZT{C1h~EcFui~b7fF`vb<<~j_VquuUA$}QqIKYELPp#;{u?q8Dz}WAG-(3; zjrm$i%7UbyZMM(Y{>!uJ#vNB?R~B{6Htp=>e*<{fQQ5W7V(1coCWlOON!MzZxhum| ztZBQpGR z;~#ur^&PockKdV{Q6R>o`Pl{0x!DEbpZ7y9Y;*ZvE!*gU`V1W3znva{f=?WO5I&>B z&hw6}tjECtaghm5z|C#%M;Yf_*pI^};h}Vl=^r9EN=tVDj86D;C$jIJ?K7VP+00000NkvXXu0mjf D5i!M* literal 0 HcmV?d00001 diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..459ca609d3ae0d3943ab44cdc27feef9256dc6d7 GIT binary patch literal 7098 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 literal 0 HcmV?d00001 diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxhdpi/ic_launcher.png b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca12fe024be86e868d14e91120a6902f8e88ac6 GIT binary patch literal 6464 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 B0*L?s literal 0 HcmV?d00001 diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8e19b410a1b15ff180f3dacac19395fe3046cdec GIT binary patch literal 10676 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 literal 0 HcmV?d00001 diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..4c19a13c239cb67b8a2134ddd5f325db1d2d5bee GIT binary patch literal 15523 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 BIP(Ai literal 0 HcmV?d00001 diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/colors.xml b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/colors.xml new file mode 100644 index 000000000..3ab3e9cbc --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/strings.xml b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/strings.xml new file mode 100644 index 000000000..19e58f4f6 --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Leanplum Example + diff --git a/kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/styles.xml b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/styles.xml new file mode 100644 index 000000000..5885930df --- /dev/null +++ b/kits/leanplum/leanplum-7/leanplum-example/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/kits/leanplum/leanplum-7/settings.gradle.kts b/kits/leanplum/leanplum-7/settings.gradle.kts new file mode 100644 index 000000000..2d0afaf64 --- /dev/null +++ b/kits/leanplum/leanplum-7/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-leanplum-kit" +include(":") diff --git a/kits/leanplum/leanplum-7/src/main/AndroidManifest.xml b/kits/leanplum/leanplum-7/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c4e6c98d7 --- /dev/null +++ b/kits/leanplum/leanplum-7/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt b/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt new file mode 100644 index 000000000..b0c137b24 --- /dev/null +++ b/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt @@ -0,0 +1,420 @@ +package com.mparticle.kits + +import android.R.attr +import android.app.Application +import android.content.Context +import android.content.Intent +import com.leanplum.Leanplum +import com.leanplum.LeanplumActivityHelper +import com.leanplum.LeanplumDeviceIdMode +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.TypedUserAttributeListener +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.consent.ConsentState +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.Logger +import com.mparticle.kits.FilteredIdentityApiRequest +import com.mparticle.kits.FilteredMParticleUser +import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.PushListener +import com.mparticle.kits.KitIntegration.UserAttributeListener +import com.mparticle.kits.ReportingMessage +import java.math.BigDecimal +import java.util.HashMap +import java.util.LinkedList + +class LeanplumKit : + KitIntegration(), + UserAttributeListener, + KitIntegration.EventListener, + CommerceListener, + IdentityListener, + PushListener { + public override fun onKitCreate( + settings: Map, + context: Context, + ): List { + val deviceIdType = settings[DEVICE_ID_TYPE] + + val userId = generateLeanplumId() + + if (deviceIdType != null) { + setDeviceIdType(deviceIdType) + } + if (MParticle.getInstance()?.environment == MParticle.Environment.Development) { + Leanplum.setLogLevel(3) + Leanplum.setAppIdForDevelopmentMode(settings[APP_ID_KEY], settings[CLIENT_KEY_KEY]) + } else { + Leanplum.setAppIdForProductionMode(settings[APP_ID_KEY], settings[CLIENT_KEY_KEY]) + } + + // Starting Leanplum with empty map to avoid db query, setting it after calling async fun + Leanplum.start(context, userId) + LeanplumActivityHelper.enableLifecycleCallbacks(context.applicationContext as Application) + MParticle + .getInstance() + ?.Identity() + ?.currentUser + ?.getUserAttributes() + + return listOf( + ReportingMessage( + this, + ReportingMessage.MessageType.APP_STATE_TRANSITION, + System.currentTimeMillis(), + null, + ), + ) + } + + private fun generateLeanplumId(): String? = + MParticle.getInstance()?.Identity()?.currentUser?.let { + generateLeanplumUserId( + it, + settings, + userIdentities, + )?.ifEmpty { null } + } + + override fun onIdentifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + // do nothing + } + + override fun onLoginCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + // do nothing + } + + override fun onLogoutCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + // do nothing + } + + override fun onModifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + // do nothing + } + + override fun onUserIdentified(mParticleUser: MParticleUser) { + val userIdentities = mParticleUser.userIdentities + val userId = generateLeanplumUserId(mParticleUser, settings, userIdentities) + // first set userId to effectively switch users + if (!KitUtils.isEmpty(userId)) { + Leanplum.setUserId(userId) + } + // then set the attributes of the new user + try { + mParticleUser.getUserAttributes( + object : TypedUserAttributeListener { + override fun onUserAttributesReceived( + userAttributes: Map, + userAttributeLists: Map?>, + mpid: Long, + ) { + val attributes: MutableMap = HashMap() + attributes.putAll(userAttributes) + attributes.putAll(userAttributeLists) + setLeanplumUserAttributes(userIdentities, attributes) + } + }, + ) + } catch (e: Exception) { + Logger.warning(e, "Unable to fetch User Attributes") + } + } + + private fun setLeanplumUserAttributes( + userIdentities: Map, + userAttributes: MutableMap, + ) { + if (!userAttributes.containsKey(LEANPLUM_EMAIL_USER_ATTRIBUTE) && + configuration.shouldSetIdentity( + IdentityType.Email, + ) + ) { + if (userIdentities.containsKey(IdentityType.Email)) { + userAttributes[LEANPLUM_EMAIL_USER_ATTRIBUTE] = + userIdentities[IdentityType.Email] + } else { + userAttributes[LEANPLUM_EMAIL_USER_ATTRIBUTE] = null + } + } + setAttributesAndCheckId(userAttributes) + } + + private fun setAttributesAndCheckId(userAttributes: MutableMap) { + // If by the time onKitCreated was called, userAttributes were not available to create a LeanplumId, creating and setting one + if (Leanplum.getUserId().isNullOrEmpty()) { + generateLeanplumId()?.let { id -> + Leanplum.setUserAttributes(id, userAttributes) + } ?: run { + Leanplum.setUserAttributes(userAttributes) + } + } else { + Leanplum.setUserAttributes(userAttributes) + } + // per Leanplum - it's a good idea to make sure the SDK refreshes itself + Leanplum.forceContentUpdate() + } + + fun generateLeanplumUserId( + user: MParticleUser?, + settings: Map, + userIdentities: Map, + ): String? { + var userId: String? = null + + if (USER_ID_CUSTOMER_ID_VALUE.equals( + settings[USER_ID_FIELD_KEY], + ignoreCase = true, + ) && + configuration.shouldSetIdentity( + IdentityType.CustomerId, + ) + ) { + userId = userIdentities[IdentityType.CustomerId] + } else if (USER_ID_EMAIL_VALUE.equals( + settings[USER_ID_FIELD_KEY], + ignoreCase = true, + ) && + configuration.shouldSetIdentity( + IdentityType.Email, + ) + ) { + userId = userIdentities[IdentityType.Email] + } else if (USER_ID_MPID_VALUE.equals( + settings[USER_ID_FIELD_KEY], + ignoreCase = true, + ) + ) { + if (user != null) { + userId = user.id.toString() + } + } + return userId + } + + override fun getName(): String = NAME + + // Leanplum doesn't have the notion of opt-out. + override fun setOptOut(optedOut: Boolean): List = emptyList() + + override fun onSetUserAttribute( + key: String, + value: Any, + user: FilteredMParticleUser, + ) { + val attributes = mutableMapOf() + attributes[key] = value + setAttributesAndCheckId(attributes) + } + + override fun onSetUserTag( + s: String, + filteredMParticleUser: FilteredMParticleUser, + ) {} + + override fun onSetUserAttributeList( + key: String, + list: List, + user: FilteredMParticleUser, + ) { + val attributes = mutableMapOf() + attributes[key] = list + setAttributesAndCheckId(attributes) + } + + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + newValue: String, + user: FilteredMParticleUser?, + ) { + val attributes = mutableMapOf() + attributes[attr.key.toString()] = newValue + setAttributesAndCheckId(attributes) + } + + override fun supportsAttributeLists(): Boolean = true + + override fun onConsentStateUpdated( + consentState: ConsentState, + consentState1: ConsentState, + filteredMParticleUser: FilteredMParticleUser, + ) { + } + + override fun onSetAllUserAttributes( + attributes: Map, + attributeLists: Map>, + user: FilteredMParticleUser, + ) { + val map = mutableMapOf() + map.putAll(attributes) + map.putAll(attributeLists) + setAttributesAndCheckId(map) + // we set user attributes on start so there's no point in doing it here as well. + } + + override fun onRemoveUserAttribute( + key: String, + user: FilteredMParticleUser, + ) { + val attributes = mutableMapOf() + attributes[key] = null + setAttributesAndCheckId(attributes) + } + + override fun leaveBreadcrumb(s: String): List = emptyList() + + override fun logError( + s: String, + map: Map, + ): List = emptyList() + + override fun logException( + e: Exception, + map: Map, + s: String, + ): List = emptyList() + + override fun logEvent(mpEvent: MPEvent): List { + Leanplum.track(mpEvent.eventName, mpEvent.customAttributes) + return listOf(ReportingMessage.fromEvent(this, mpEvent)) + } + + override fun logScreen( + screenName: String, + attributes: Map, + ): List { + Leanplum.advanceTo(screenName, attributes) + return listOf( + ReportingMessage( + this, + ReportingMessage.MessageType.SCREEN_VIEW, + System.currentTimeMillis(), + attributes, + ), + ) + } + + override fun logLtvIncrease( + valueIncreased: BigDecimal, + total: BigDecimal, + eventName: String, + attributes: Map, + ): List { + Leanplum.track(eventName, valueIncreased.toDouble(), attributes) + return listOf( + ReportingMessage.fromEvent( + this, + MPEvent + .Builder(eventName, MParticle.EventType.Transaction) + .customAttributes(attributes) + .build(), + ), + ) + } + + private fun logTransaction( + event: CommerceEvent, + product: Product, + ) { + val eventAttributes = HashMap() + CommerceEventUtils.extractActionAttributes(event, eventAttributes) + Leanplum.track( + Leanplum.PURCHASE_EVENT_NAME, + product.totalAmount, + product.name, + eventAttributes, + ) + } + + override fun logEvent(event: CommerceEvent): List { + val messages = LinkedList() + if (!KitUtils.isEmpty(event.productAction) && + event.productAction.equals( + Product.PURCHASE, + ignoreCase = true, + ) && + !event.products.isNullOrEmpty() + ) { + val productList = event.products + if (productList != null) { + for (product in productList) { + logTransaction(event, product) + } + } + messages.add(ReportingMessage.fromEvent(this, event)) + return messages + } + val eventList = CommerceEventUtils.expand(event) + if (eventList != null) { + for (i in eventList.indices) { + try { + logEvent(eventList[i]) + messages.add(ReportingMessage.fromEvent(this, event)) + } catch (e: Exception) { + Logger.warning("Failed to call track to Leanplum kit: $e") + } + } + } + return messages + } + + fun setDeviceIdType(deviceIdType: String?) { + if (DEVICE_ID_TYPE_ANDROID_ID == deviceIdType && MParticle.isAndroidIdEnabled()) { + Leanplum.setDeviceIdMode(LeanplumDeviceIdMode.ANDROID_ID) + } else if (DEVICE_ID_TYPE_GOOGLE_AD_ID == deviceIdType) { + Leanplum.setDeviceIdMode(LeanplumDeviceIdMode.ADVERTISING_ID) + } else if (DEVICE_ID_TYPE_DAS == deviceIdType) { + Leanplum.setDeviceId(MParticle.getInstance()?.Identity()?.deviceApplicationStamp) + } + } + + override fun willHandlePushMessage(intent: Intent): Boolean = intent.extras?.containsKey("lp_version") ?: false + + override fun onPushMessageReceived( + context: Context, + intent: Intent, + ) { + // Firebase only + } + + override fun onPushRegistration( + s: String, + s1: String, + ): Boolean { + // Firebase only + return false + } + + companion object { + private const val APP_ID_KEY = "appId" + private const val CLIENT_KEY_KEY = "clientKey" + const val USER_ID_FIELD_KEY = "userIdField" + const val USER_ID_CUSTOMER_ID_VALUE = "customerId" + const val USER_ID_EMAIL_VALUE = "email" + const val USER_ID_MPID_VALUE = "mpid" + const val LEANPLUM_EMAIL_USER_ATTRIBUTE = "email" + const val DEVICE_ID_TYPE = "androidDeviceId" + const val DEVICE_ID_TYPE_GOOGLE_AD_ID = "gaid" + const val DEVICE_ID_TYPE_ANDROID_ID = "androidId" + const val DEVICE_ID_TYPE_DAS = "das" + const val NAME = "Leanplum" + } +} diff --git a/kits/leanplum/leanplum-7/src/test/kotlin/com/leanplum/Leanplum.kt b/kits/leanplum/leanplum-7/src/test/kotlin/com/leanplum/Leanplum.kt new file mode 100644 index 000000000..8fe97d9d9 --- /dev/null +++ b/kits/leanplum/leanplum-7/src/test/kotlin/com/leanplum/Leanplum.kt @@ -0,0 +1,31 @@ +package com.leanplum + +object Leanplum { + var mMode: LeanplumDeviceIdMode? = null + var mAppID: String? = null + var mAccessKey: String? = null + + @JvmStatic + var deviceId: String? = null + + @JvmStatic + fun setDeviceIdMode(mode: LeanplumDeviceIdMode?) { + mMode = mode + } + + @JvmStatic + fun setAppIdForProductionMode( + appId: String?, + accessKey: String?, + ) { + mAppID = appId + mAccessKey = accessKey + } + + fun clear() { + mMode = null + deviceId = null + mAppID = null + mAccessKey = null + } +} diff --git a/kits/leanplum/leanplum-7/src/test/kotlin/com/leanplum/LeanplumDeviceIdMode.kt b/kits/leanplum/leanplum-7/src/test/kotlin/com/leanplum/LeanplumDeviceIdMode.kt new file mode 100644 index 000000000..2a473291e --- /dev/null +++ b/kits/leanplum/leanplum-7/src/test/kotlin/com/leanplum/LeanplumDeviceIdMode.kt @@ -0,0 +1,7 @@ +package com.leanplum + +enum class LeanplumDeviceIdMode { + MD5_MAC_ADDRESS, + ANDROID_ID, + ADVERTISING_ID, +} diff --git a/kits/leanplum/leanplum-7/src/test/kotlin/com/mparticle/MockMParticle.kt b/kits/leanplum/leanplum-7/src/test/kotlin/com/mparticle/MockMParticle.kt new file mode 100644 index 000000000..637f65d9e --- /dev/null +++ b/kits/leanplum/leanplum-7/src/test/kotlin/com/mparticle/MockMParticle.kt @@ -0,0 +1,14 @@ +package com.mparticle + +import com.mparticle.identity.IdentityApi +import org.mockito.Mockito + +class MockMParticle : MParticle() { + fun setAndroidIdDisabled(disabled: Boolean) { + sAndroidIdEnabled = !disabled + } + + init { + mIdentityApi = Mockito.mock(IdentityApi::class.java) + } +} diff --git a/kits/leanplum/leanplum-7/src/test/kotlin/com/mparticle/kits/LeanplumKitTests.kt b/kits/leanplum/leanplum-7/src/test/kotlin/com/mparticle/kits/LeanplumKitTests.kt new file mode 100644 index 000000000..251d7d882 --- /dev/null +++ b/kits/leanplum/leanplum-7/src/test/kotlin/com/mparticle/kits/LeanplumKitTests.kt @@ -0,0 +1,150 @@ +package com.mparticle.kits + +import com.leanplum.Leanplum +import com.leanplum.LeanplumDeviceIdMode +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.MParticleOptions +import com.mparticle.MockMParticle +import com.mparticle.identity.MParticleUser +import org.junit.Assert +import org.junit.Test +import org.mockito.ArgumentMatchers +import org.mockito.Mockito + +class LeanplumKitTests { + private val kit = LeanplumKit() + private val user: MParticleUser = Mockito.mock(MParticleUser::class.java) + private val settings = HashMap() + private val userIdentities = HashMap() + private val mockConfiguration = Mockito.mock(KitConfiguration::class.java) + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(name.isNotEmpty()) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + @Test + @Throws(Exception::class) + fun testGenerateMpidUserId() { + settings[LeanplumKit.USER_ID_FIELD_KEY] = LeanplumKit.USER_ID_MPID_VALUE + userIdentities[IdentityType.Email] = "foo email" + userIdentities[IdentityType.CustomerId] = "foo customer id" + + Mockito.`when`(user.id).thenReturn(5L) + + kit.configuration = mockConfiguration + var id = kit.generateLeanplumUserId(user, settings, userIdentities) + Assert.assertEquals("5", id) + id = kit.generateLeanplumUserId(null, settings, userIdentities) + Assert.assertNull(id) + } + + @Test + @Throws(Exception::class) + fun testGenerateEmailUserId() { + settings[LeanplumKit.USER_ID_FIELD_KEY] = LeanplumKit.USER_ID_EMAIL_VALUE + userIdentities[IdentityType.Email] = "foo email" + userIdentities[IdentityType.CustomerId] = "foo customer id" + + Mockito.`when`(user.id).thenReturn(5L) + + Mockito + .`when`( + mockConfiguration.shouldSetIdentity( + ArgumentMatchers.any( + IdentityType::class.java, + ), + ), + ).thenReturn(true) + kit.configuration = mockConfiguration + var id = kit.generateLeanplumUserId(user, settings, userIdentities) + Assert.assertEquals("foo email", id) + userIdentities.remove(IdentityType.Email) + id = kit.generateLeanplumUserId(user, settings, userIdentities) + Assert.assertNull(id) + } + + @Test + @Throws(Exception::class) + fun testGenerateCustomerIdlUserId() { + settings[LeanplumKit.USER_ID_FIELD_KEY] = LeanplumKit.USER_ID_CUSTOMER_ID_VALUE + userIdentities[IdentityType.Email] = "foo email" + userIdentities[IdentityType.CustomerId] = "foo customer id" + + Mockito.`when`(user.id).thenReturn(5L) + + Mockito + .`when`( + mockConfiguration.shouldSetIdentity( + ArgumentMatchers.any( + IdentityType::class.java, + ), + ), + ).thenReturn(true) + kit.configuration = mockConfiguration + var id = kit.generateLeanplumUserId(user, settings, userIdentities) + Assert.assertEquals("foo customer id", id) + userIdentities.remove(IdentityType.CustomerId) + id = kit.generateLeanplumUserId(user, settings, userIdentities) + Assert.assertNull(id) + } + + @Test + fun testDeviceIdType() { + val mparticle = MockMParticle() + MParticle.setInstance(mparticle) + val mockDas = "mockDasValue" + Mockito + .`when`(MParticle.getInstance()?.Identity()?.deviceApplicationStamp) + .thenReturn(mockDas) + mparticle.setAndroidIdDisabled(false) + + kit.setDeviceIdType(LeanplumKit.DEVICE_ID_TYPE_ANDROID_ID) + Assert.assertEquals(LeanplumDeviceIdMode.ANDROID_ID, Leanplum.mMode) + Assert.assertNull(Leanplum.deviceId) + Leanplum.clear() + + kit.setDeviceIdType(LeanplumKit.DEVICE_ID_TYPE_GOOGLE_AD_ID) + Assert.assertEquals(LeanplumDeviceIdMode.ADVERTISING_ID, Leanplum.mMode) + Assert.assertNull(Leanplum.deviceId) + Leanplum.clear() + + kit.setDeviceIdType(LeanplumKit.DEVICE_ID_TYPE_DAS) + Assert.assertEquals(mockDas, Leanplum.deviceId) + Assert.assertNull(Leanplum.mMode) + Leanplum.clear() + + kit.setDeviceIdType("adrbsdtb") + Assert.assertNull(Leanplum.deviceId) + Assert.assertNull(Leanplum.mMode) + Leanplum.clear() + + kit.setDeviceIdType(null) + Assert.assertNull(Leanplum.deviceId) + Assert.assertNull(Leanplum.mMode) + Leanplum.clear() + + mparticle.setAndroidIdDisabled(true) + kit.setDeviceIdType(LeanplumKit.DEVICE_ID_TYPE_ANDROID_ID) + Assert.assertNull(Leanplum.mMode) + Assert.assertNull(Leanplum.deviceId) + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 3c00228c4..85e957435 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -20,8 +20,8 @@ include ( ':kits:ga4:ga4-23', ':kits:iterable-kit', ':kits:kochava:kochava-5', - ':kits:leanplum-kit', ':kits:localytics:localytics-6', + ':kits:leanplum:leanplum-7', //Neura hosts kit ':kits:onetrust-kit', ':kits:optimizely-kit', From 512ff6f3e15dc698ec539ec968e9437b302d6feb Mon Sep 17 00:00:00 2001 From: denischilik Date: Tue, 10 Mar 2026 15:08:25 -0400 Subject: [PATCH 11/61] feat: Migrate CleverTap kit (#660) * feat: migrate clevertap-kit from submodule to regular directory * feat: relocate clevertap-kit to kits/clevertap/clevertap-7 Made-with: Cursor * feat: update settings-kits.gradle for clevertap-7 kit path Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 2 + kits/clevertap-kit | 1 - kits/clevertap/clevertap-7/README.md | 23 + kits/clevertap/clevertap-7/build.gradle | 61 +++ .../clevertap-7/consumer-proguard.pro | 2 + kits/clevertap/clevertap-7/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/clevertap/clevertap-7/gradlew | 234 ++++++++++ kits/clevertap/clevertap-7/gradlew.bat | 89 ++++ kits/clevertap/clevertap-7/libs/testutils.aar | Bin 0 -> 47713 bytes .../clevertap/clevertap-7/settings.gradle.kts | 2 + .../clevertap-7/src/main/AndroidManifest.xml | 1 + .../kotlin/com/mparticle/kits/CleverTapKit.kt | 425 ++++++++++++++++++ .../kotlin/com/mparticle/kits/KitTests.kt | 53 +++ settings-kits.gradle | 2 +- 17 files changed, 902 insertions(+), 5 deletions(-) delete mode 160000 kits/clevertap-kit create mode 100644 kits/clevertap/clevertap-7/README.md create mode 100644 kits/clevertap/clevertap-7/build.gradle create mode 100644 kits/clevertap/clevertap-7/consumer-proguard.pro create mode 100644 kits/clevertap/clevertap-7/gradle.properties create mode 100644 kits/clevertap/clevertap-7/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/clevertap/clevertap-7/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/clevertap/clevertap-7/gradlew create mode 100644 kits/clevertap/clevertap-7/gradlew.bat create mode 100644 kits/clevertap/clevertap-7/libs/testutils.aar create mode 100644 kits/clevertap/clevertap-7/settings.gradle.kts create mode 100644 kits/clevertap/clevertap-7/src/main/AndroidManifest.xml create mode 100644 kits/clevertap/clevertap-7/src/main/kotlin/com/mparticle/kits/CleverTapKit.kt create mode 100644 kits/clevertap/clevertap-7/src/test/kotlin/com/mparticle/kits/KitTests.kt diff --git a/.gitmodules b/.gitmodules index 1149281e4..9977d7d06 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,9 +19,6 @@ [submodule "kits/button-kit"] path = kits/button-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-button.git -[submodule "kits/clevertap-kit"] - path = kits/clevertap-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-clevertap.git [submodule "kits/comscore-kit"] path = kits/comscore-kit url = git@github.com:mParticle-integrations/mparticle-android-integration-comscore.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index acffddf5d..cb5bcd7db 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -70,12 +70,14 @@ lint: - kits/adjust/adjust-5/** - kits/appsflyer/appsflyer-6/** - kits/braze/braze-38/** + - kits/clevertap/clevertap-7/** - kits/ga/ga-23/** - kits/ga4/ga4-23/** - kits/kochava/kochava-5/** - kits/leanplum/leanplum-7/** - kits/rokt/rokt/** - kits/localytics/localytics-6/** + - kits/rokt/rokt/** actions: enabled: - trunk-announce diff --git a/kits/clevertap-kit b/kits/clevertap-kit deleted file mode 160000 index e2750d1c9..000000000 --- a/kits/clevertap-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e2750d1c9c6755a7880a197abcd87cdef26f4cf3 diff --git a/kits/clevertap/clevertap-7/README.md b/kits/clevertap/clevertap-7/README.md new file mode 100644 index 000000000..e9c2cb944 --- /dev/null +++ b/kits/clevertap/clevertap-7/README.md @@ -0,0 +1,23 @@ +## CleverTap Kit Integration + +This repository contains the [CleverTap](https://www.clevertap.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-clevertap-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"CleverTap detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Clevertap integration](https://docs.mparticle.com/integrations/clevertap/event/) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/clevertap/clevertap-7/build.gradle b/kits/clevertap/clevertap-7/build.gradle new file mode 100644 index 000000000..17577a54c --- /dev/null +++ b/kits/clevertap/clevertap-7/build.gradle @@ -0,0 +1,61 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-clevertap" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.clevertap' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 23 + } + 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 { + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + api 'com.clevertap.android:clevertap-android-sdk:7.5.0' +} diff --git a/kits/clevertap/clevertap-7/consumer-proguard.pro b/kits/clevertap/clevertap-7/consumer-proguard.pro new file mode 100644 index 000000000..27f754205 --- /dev/null +++ b/kits/clevertap/clevertap-7/consumer-proguard.pro @@ -0,0 +1,2 @@ +# For CleverTap SDK +-dontwarn com.clevertap.android.sdk.** \ No newline at end of file diff --git a/kits/clevertap/clevertap-7/gradle.properties b/kits/clevertap/clevertap-7/gradle.properties new file mode 100644 index 000000000..0b6a43f74 --- /dev/null +++ b/kits/clevertap/clevertap-7/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m diff --git a/kits/clevertap/clevertap-7/gradle/wrapper/gradle-wrapper.jar b/kits/clevertap/clevertap-7/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/clevertap/clevertap-7/gradle/wrapper/gradle-wrapper.properties b/kits/clevertap/clevertap-7/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/clevertap/clevertap-7/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/clevertap/clevertap-7/gradlew b/kits/clevertap/clevertap-7/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/clevertap/clevertap-7/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/clevertap/clevertap-7/gradlew.bat b/kits/clevertap/clevertap-7/gradlew.bat new file mode 100644 index 000000000..ac1b06f93 --- /dev/null +++ b/kits/clevertap/clevertap-7/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/clevertap/clevertap-7/libs/testutils.aar b/kits/clevertap/clevertap-7/libs/testutils.aar new file mode 100644 index 0000000000000000000000000000000000000000..cf49b418969034bad0f13e3bee536d9b7ba56833 GIT binary patch literal 47713 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 le<@PWyj%{{x-|yYK)2 literal 0 HcmV?d00001 diff --git a/kits/clevertap/clevertap-7/settings.gradle.kts b/kits/clevertap/clevertap-7/settings.gradle.kts new file mode 100644 index 000000000..bf5054b5c --- /dev/null +++ b/kits/clevertap/clevertap-7/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-clevertap-kit" +include(":") diff --git a/kits/clevertap/clevertap-7/src/main/AndroidManifest.xml b/kits/clevertap/clevertap-7/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c4e6c98d7 --- /dev/null +++ b/kits/clevertap/clevertap-7/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/kits/clevertap/clevertap-7/src/main/kotlin/com/mparticle/kits/CleverTapKit.kt b/kits/clevertap/clevertap-7/src/main/kotlin/com/mparticle/kits/CleverTapKit.kt new file mode 100644 index 000000000..0b84adf9a --- /dev/null +++ b/kits/clevertap/clevertap-7/src/main/kotlin/com/mparticle/kits/CleverTapKit.kt @@ -0,0 +1,425 @@ +package com.mparticle.kits + +import android.app.Application +import android.content.Context +import android.content.Intent +import android.location.Location +import android.os.Handler +import com.clevertap.android.sdk.ActivityLifecycleCallback +import com.clevertap.android.sdk.CleverTapAPI +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.UserAttributes +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.consent.ConsentState +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.Logger +import com.mparticle.internal.MPUtility +import com.mparticle.kits.CommerceEventUtils +import com.mparticle.kits.FilteredIdentityApiRequest +import com.mparticle.kits.FilteredMParticleUser +import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.PushListener +import com.mparticle.kits.KitIntegration.UserAttributeListener +import com.mparticle.kits.KitUtils +import com.mparticle.kits.ReportingMessage +import java.math.BigDecimal +import java.util.ArrayList +import java.util.HashMap +import java.util.LinkedList + +class CleverTapKit : + KitIntegration(), + UserAttributeListener, + CommerceListener, + KitIntegration.EventListener, + PushListener, + IdentityListener { + private var cleverTapInstance: CleverTapAPI? = null + + override fun onKitCreate( + settings: Map, + context: Context, + ): List { + val accountID = settings[ACCOUNT_ID_KEY] + require(!KitUtils.isEmpty(accountID)) { "CleverTap AccountID is empty." } + val accountToken = settings[ACCOUNT_TOKEN_KEY] + require(!KitUtils.isEmpty(accountToken)) { "CleverTap AccountToken is empty." } + val region = settings[ACCOUNT_REGION_KEY] + CleverTapAPI.changeCredentials(accountID, accountToken, region) + ActivityLifecycleCallback.register(context.applicationContext as Application) + cleverTapInstance = CleverTapAPI.getDefaultInstance(getContext()) + updateIntegrationAttributes() + return emptyList() + } + + /** + * Sets the CleverTap Device ID as an mParticle integration attribute. + * Need to poll for it as its set asynchronously within the SDK (on initial launch) + */ + private fun updateIntegrationAttributes() { + cleverTapInstance?.let { + it.getCleverTapID { id -> + if (!KitUtils.isEmpty(id)) { + val integrationAttributes = HashMap(1) + integrationAttributes[CLEVERTAPID_INTEGRATION_KEY] = id + } else { + if (handler == null) { + handler = Handler() + } + handler?.postDelayed({ updateIntegrationAttributes() }, 500) + } + } + } + } + + override fun getName(): String = KIT_NAME + + override fun setOptOut(optedOut: Boolean): List { + val messages: MutableList = LinkedList() + cleverTapInstance?.let { + it.setOptOut(optedOut) + messages.add( + ReportingMessage( + this, + ReportingMessage.MessageType.OPT_OUT, + System.currentTimeMillis(), + null, + ), + ) + } + return messages + } + + override fun setLocation(location: Location) { + cleverTapInstance?.location = location + } + + override fun setInstallReferrer(intent: Intent) { + cleverTapInstance?.pushInstallReferrer(intent.dataString) + } + + override fun leaveBreadcrumb(breadcrumb: String): List = emptyList() + + override fun logError( + message: String, + errorAttributes: Map, + ): List = emptyList() + + override fun logException( + exception: Exception, + exceptionAttributes: Map, + message: String, + ): List = emptyList() + + override fun logEvent(event: MPEvent): List { + val info = event.customAttributeStrings + val props = info?.let { HashMap(it) } + cleverTapInstance?.pushEvent(event.eventName, props) + val messages: MutableList = LinkedList() + messages.add(ReportingMessage.fromEvent(this, event)) + return messages + } + + override fun logScreen( + screenName: String, + screenAttributes: Map, + ): List { + cleverTapInstance?.recordScreen(screenName) + val messages: MutableList = LinkedList() + messages.add( + ReportingMessage( + this, + ReportingMessage.MessageType.SCREEN_VIEW, + System.currentTimeMillis(), + screenAttributes, + ), + ) + return messages + } + + override fun logEvent(event: CommerceEvent): List { + val messages: MutableList = LinkedList() + + if (!KitUtils.isEmpty(event.productAction) && + event.productAction.equals( + Product.PURCHASE, + true, + ) && + event.products?.isNotEmpty() == true + ) { + val details = HashMap() + val items = ArrayList>() + val eventAttributes = HashMap() + CommerceEventUtils.extractActionAttributes(event, eventAttributes) + for ((key, value) in eventAttributes) { + details[key] = value + } + val transactionId = + if ( + event.transactionAttributes != null && + !MPUtility.isEmpty( + event.transactionAttributes?.id, + ) + ) { + event.transactionAttributes?.id + } else { + null + } + if (transactionId != null) { + details["Charged ID"] = transactionId + } + val products = event.products + + products?.let { + for (i in products.indices) { + try { + val product = products[i] + val attrs = HashMap() + CommerceEventUtils.extractProductFields(product, attrs) + val item = HashMap(attrs) + items.add(item) + } catch (t: Throwable) { + cleverTapInstance?.pushError("Error handling Commerce Event product: " + t.message, 512) + } + } + } + cleverTapInstance?.pushChargedEvent(details, items) + messages.add(ReportingMessage.fromEvent(this, event)) + return messages + } + val eventList = CommerceEventUtils.expand(event) + for (i in eventList.indices) { + try { + logEvent(eventList[i]) + messages.add(ReportingMessage.fromEvent(this, event)) + } catch (e: Exception) { + Logger.warning("Failed to call logCustomEvent to CleverTap kit: $e") + } + } + return messages + } + + override fun onSetUserAttributeList( + attributeKey: String, + attributeValueList: List, + user: FilteredMParticleUser, + ) { + cleverTapInstance!!.setMultiValuesForKey(attributeKey, ArrayList(attributeValueList)) + } + + override fun supportsAttributeLists(): Boolean = true + + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + // not supported + } + + override fun onRemoveUserAttribute( + keyIn: String, + user: FilteredMParticleUser, + ) { + var key = keyIn + if (UserAttributes.MOBILE_NUMBER == key) { + key = PHONE + } else { + if (key.startsWith("$")) { + key = key.substring(1) + } + } + cleverTapInstance?.removeValueForKey(key) + } + + override fun onSetUserAttribute( + keyIn: String, + valueIn: Any, + user: FilteredMParticleUser, + ) { + var key = keyIn + var value = valueIn + val profile = + HashMap() + when { + BIRTHDAY == key -> { + key = DOB + } + "name" == key -> { + key = NAME + } + UserAttributes.GENDER == key -> { + val genderValue = value as String + value = + if (genderValue.contains("fe")) { + FEMALE + } else { + MALE + } + } + UserAttributes.MOBILE_NUMBER == key -> { + key = PHONE + } + else -> { + if (key.startsWith("$")) { + key = key.substring(1) + } + } + } + profile[key] = value + cleverTapInstance?.pushProfile(profile) + } + + override fun onSetUserTag( + key: String, + user: FilteredMParticleUser, + ) { + // not supported + } + + override fun onSetAllUserAttributes( + userAttributes: Map, + userAttributeLists: Map>, + user: FilteredMParticleUser, + ) { + if (!kitPreferences.getBoolean(PREF_KEY_HAS_SYNCED_ATTRIBUTES, false)) { + for ((key, value) in userAttributes) { + onSetUserAttribute(key, value, user) + } + for ((key, value) in userAttributeLists) { + onSetUserAttributeList(key, value, user) + } + kitPreferences.edit().putBoolean(PREF_KEY_HAS_SYNCED_ATTRIBUTES, true).apply() + } + } + + override fun onConsentStateUpdated( + oldState: ConsentState, + newState: ConsentState, + user: FilteredMParticleUser, + ) { + // not supported + } + + override fun logLtvIncrease( + valueIncreased: BigDecimal, + valueTotal: BigDecimal, + eventName: String, + contextInfo: Map, + ): List = emptyList() + + override fun willHandlePushMessage(intent: Intent): Boolean { + if (intent.extras == null) { + return false + } + val info = CleverTapAPI.getNotificationInfo(intent.extras) + return info.fromCleverTap + } + + override fun onPushMessageReceived( + context: Context, + pushIntent: Intent, + ) { + if (pushIntent.extras == null) { + return + } + val extras = pushIntent.extras + CleverTapAPI.createNotification(getContext(), extras) + } + + override fun onPushRegistration( + instanceId: String, + senderId: String, + ): Boolean { + cleverTapInstance?.pushFcmRegistrationId(instanceId, true) + return true + } + + override fun onUserIdentified(mParticleUser: MParticleUser) { + // not used + } + + override fun onIdentifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + updateUser(mParticleUser, false) + } + + override fun onLoginCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + updateUser(mParticleUser, true) + } + + override fun onLogoutCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + // not used + } + + override fun onModifyCompleted( + mParticleUser: MParticleUser, + filteredIdentityApiRequest: FilteredIdentityApiRequest, + ) { + updateUser(mParticleUser, false) + } + + private fun updateUser( + mParticleUser: MParticleUser, + isLogin: Boolean, + ) { + val profile = HashMap() + val customerId = mParticleUser.userIdentities[MParticle.IdentityType.CustomerId] + val email = mParticleUser.userIdentities[MParticle.IdentityType.Email] + val fbid = mParticleUser.userIdentities[MParticle.IdentityType.Facebook] + val gpid = mParticleUser.userIdentities[MParticle.IdentityType.Google] + if (customerId != null) { + profile[IDENTITY_IDENTITY] = customerId + } + if (email != null) { + profile[IDENTITY_EMAIL] = email + } + if (fbid != null) { + profile[IDENTITY_FACEBOOK] = fbid + } + if (gpid != null) { + profile[IDENTITY_GOOGLE] = gpid + } + if (profile.isEmpty()) { + return + } + if (isLogin) { + cleverTapInstance?.onUserLogin(profile) + } else { + cleverTapInstance?.pushProfile(profile) + } + } + + companion object { + private const val CLEVERTAP_KEY = "CleverTap" + private const val ACCOUNT_ID_KEY = "AccountID" + private const val ACCOUNT_TOKEN_KEY = "AccountToken" + private const val ACCOUNT_REGION_KEY = "Region" + private const val PREF_KEY_HAS_SYNCED_ATTRIBUTES = "clevertap::has_synced_attributes" + private const val CLEVERTAPID_INTEGRATION_KEY = "clevertap_id_integration_setting" + private const val IDENTITY_EMAIL = "Email" + private const val IDENTITY_FACEBOOK = "FBID" + private const val IDENTITY_GOOGLE = "GPID" + private const val IDENTITY_IDENTITY = "Identity" + private const val PHONE = "Phone" + private const val NAME = "Name" + private const val BIRTHDAY = "birthday" + private const val DOB = "DOB" + private const val MALE = "M" + private const val FEMALE = "F" + private const val KIT_NAME = CLEVERTAP_KEY + private var handler: Handler? = null + } +} diff --git a/kits/clevertap/clevertap-7/src/test/kotlin/com/mparticle/kits/KitTests.kt b/kits/clevertap/clevertap-7/src/test/kotlin/com/mparticle/kits/KitTests.kt new file mode 100644 index 000000000..513617227 --- /dev/null +++ b/kits/clevertap/clevertap-7/src/test/kotlin/com/mparticle/kits/KitTests.kt @@ -0,0 +1,53 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MParticleOptions +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito + +class KitTests { + private val kit: KitIntegration + get() = CleverTapKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(name != null && name.isNotEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 85e957435..01e5821c0 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -12,7 +12,7 @@ include ( //blueshift hosts kit ':kits:braze:braze-38', ':kits:button-kit', - ':kits:clevertap-kit', + ':kits:clevertap:clevertap-7', ':kits:comscore-kit', ':kits:flurry-kit', ':kits:foresee-kit', From 61e36d33775132f8ce40dc0f97b3f9331af0cc4d Mon Sep 17 00:00:00 2001 From: denischilik Date: Tue, 10 Mar 2026 15:10:09 -0400 Subject: [PATCH 12/61] feat: Migrate Apptentive kit (#657) feat: migrate apptentive-kit from submodule to regular directory feat: relocate apptentive-kit to kits/apptentive/apptentive-6 feat: add apptentive-6 to settings-kits.gradle --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/apptentive-kit | 1 - kits/apptentive/apptentive-6/README.md | 31 ++ kits/apptentive/apptentive-6/build.gradle | 69 ++++ .../apptentive-6/consumer-proguard.pro | 19 + .../apptentive/apptentive-6/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/apptentive/apptentive-6/gradlew | 234 +++++++++++ kits/apptentive/apptentive-6/gradlew.bat | 89 +++++ .../apptentive-6/libs/testutils.aar | Bin 0 -> 47713 bytes .../apptentive-6/settings.gradle.kts | 2 + .../apptentive-6/src/main/AndroidManifest.xml | 1 + .../com/mparticle/kits/ApptentiveKit.kt | 373 ++++++++++++++++++ .../com/mparticle/kits/ApptentiveKitUtils.kt | 47 +++ .../com/mparticle/kits/CustomDataParser.kt | 39 ++ .../kotlin/com/mparticle/kits/StringUtils.kt | 59 +++ .../com/mparticle/kits/ApptentiveKitTest.kt | 168 ++++++++ .../mparticle/kits/CustomDataParserTest.kt | 33 ++ .../com/mparticle/kits/StringUtilsTest.kt | 68 ++++ settings-kits.gradle | 2 +- 22 files changed, 1243 insertions(+), 5 deletions(-) delete mode 160000 kits/apptentive-kit create mode 100644 kits/apptentive/apptentive-6/README.md create mode 100644 kits/apptentive/apptentive-6/build.gradle create mode 100644 kits/apptentive/apptentive-6/consumer-proguard.pro create mode 100644 kits/apptentive/apptentive-6/gradle.properties create mode 100644 kits/apptentive/apptentive-6/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/apptentive/apptentive-6/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/apptentive/apptentive-6/gradlew create mode 100644 kits/apptentive/apptentive-6/gradlew.bat create mode 100644 kits/apptentive/apptentive-6/libs/testutils.aar create mode 100644 kits/apptentive/apptentive-6/settings.gradle.kts create mode 100644 kits/apptentive/apptentive-6/src/main/AndroidManifest.xml create mode 100644 kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/ApptentiveKit.kt create mode 100644 kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/ApptentiveKitUtils.kt create mode 100644 kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/CustomDataParser.kt create mode 100644 kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/StringUtils.kt create mode 100644 kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/ApptentiveKitTest.kt create mode 100644 kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/CustomDataParserTest.kt create mode 100644 kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/StringUtilsTest.kt diff --git a/.gitmodules b/.gitmodules index 9977d7d06..58d4b74ab 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,6 @@ [submodule "kits/adobemedia-kit"] path = kits/adobemedia-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-adobe-media.git -[submodule "kits/apptentive-kit"] - path = kits/apptentive-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-apptentive.git [submodule "kits/apptimize-kit"] path = kits/apptimize-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-apptimize.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index cb5bcd7db..7d6b90700 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -68,6 +68,7 @@ lint: - "**/gradlew" - scripts/install-start-emulator.sh - kits/adjust/adjust-5/** + - kits/apptentive/apptentive-6/** - kits/appsflyer/appsflyer-6/** - kits/braze/braze-38/** - kits/clevertap/clevertap-7/** diff --git a/kits/apptentive-kit b/kits/apptentive-kit deleted file mode 160000 index 09a489e3f..000000000 --- a/kits/apptentive-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 09a489e3ff50620cac902d89cbaee4b93e92096f diff --git a/kits/apptentive/apptentive-6/README.md b/kits/apptentive/apptentive-6/README.md new file mode 100644 index 000000000..75949b4b9 --- /dev/null +++ b/kits/apptentive/apptentive-6/README.md @@ -0,0 +1,31 @@ +## Apptentive Kit Integration + +This repository contains the [Apptentive](https://www.apptentive.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-apptentive-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Apptentive detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. +4. Reference Apptentive's integration doc below for more features. +5. Check out the example app below. + +### Documentation + +[Apptentive integration](https://docs.mparticle.com/integrations/apptentive/event/) + +[Apptentive-mParticle Integration](https://learn.apptentive.com/knowledge-base/mparticle-integration-android) + +### Example App + +[Apptentive Android mParticle Example](https://github.com/apptentive/android-mparticle-example) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/apptentive/apptentive-6/build.gradle b/kits/apptentive/apptentive-6/build.gradle new file mode 100644 index 000000000..426476841 --- /dev/null +++ b/kits/apptentive/apptentive-6/build.gradle @@ -0,0 +1,69 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-apptentive" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.apptentive' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 21 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } + testOptions { + unitTests.all { + jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] + } + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +dependencies { + api 'com.apptentive:apptentive-kit-android:6.9.1' + testImplementation 'io.mockk:mockk:1.13.3' +} diff --git a/kits/apptentive/apptentive-6/consumer-proguard.pro b/kits/apptentive/apptentive-6/consumer-proguard.pro new file mode 100644 index 000000000..e29dec0db --- /dev/null +++ b/kits/apptentive/apptentive-6/consumer-proguard.pro @@ -0,0 +1,19 @@ +# include in this file rules Apptentive want applied to a +# consumer of this library when the consumer proguards itself. + +# Marshmallow removed Notification.setLatestEventInfo() +-dontwarn android.app.Notification +-dontwarn android.support.v7.** +-keep class android.support.v7.** { *; } +-keep interface android.support.v7.** { *; } + +-dontwarn android.support.v4.app.** +-keep class android.support.v4.app.** { *; } +-keep interface android.support.v4.app.** { *; } + +-dontwarn com.google.android.gms.** +-keep public class com.google.android.gms.** + +-dontwarn com.apptentive.android.sdk.** +-keepattributes SourceFile,LineNumberTable +-keep class com.apptentive.android.sdk.** { *; } \ No newline at end of file diff --git a/kits/apptentive/apptentive-6/gradle.properties b/kits/apptentive/apptentive-6/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/apptentive/apptentive-6/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/apptentive/apptentive-6/gradle/wrapper/gradle-wrapper.jar b/kits/apptentive/apptentive-6/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/apptentive/apptentive-6/gradle/wrapper/gradle-wrapper.properties b/kits/apptentive/apptentive-6/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/apptentive/apptentive-6/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/apptentive/apptentive-6/gradlew b/kits/apptentive/apptentive-6/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/apptentive/apptentive-6/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/apptentive/apptentive-6/gradlew.bat b/kits/apptentive/apptentive-6/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/apptentive/apptentive-6/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/apptentive/apptentive-6/libs/testutils.aar b/kits/apptentive/apptentive-6/libs/testutils.aar new file mode 100644 index 0000000000000000000000000000000000000000..cf49b418969034bad0f13e3bee536d9b7ba56833 GIT binary patch literal 47713 zcmV)8K*qmNO9KQ7000OG0000%02jT2Oz{8!0LuXY022TJ06}hKa&Kv5O<`_nW@U49 zE_iKhZBff^!ypj6`ztK&fhMQOvYkWky;RD53u_yhS6N&&e_!h0$dSU0*_qj4XfMCk z)IS(Wd)Kiee`7T|>6Lb4$Cfl4&g{}xtp%qCq*Q0RqXwLcUaO8xDTPJ|k`r1WUT`kG z6%b|-kwn2*Rp%2x&M;!fGK1RyF==U#r)<3>ZRpM_lBVQ(_bMxnFJ~WMvE=TnmC!DP zbRadax4pz__o?RV_SjQ#+*1<75z`av%xbY&LkLDoNO{sfwD*NZe?^G52fBB4Ye*kQ z4!M8{`G0NP;0W@@UMeDfFFImwcmPAVMp$==rwCOmwx8+$08mQ<1PTBE2nYZG06_o% z0000200000000050000|E_8Tw0{~D<0|W{H00;;G002P%pF{1dF1P>ys?Pub3jhEB zV{Bn_b7gZbYGHDeyJL_hTeme@=(26wwr$(SQ?{$iwr$%+mu;I}w%v92K5^oUbK|{x z-|ys)j9eL+`D3gxX3jC^T8c8DKTv@nAt8Z)fQW$p=fMbs24rGy%V1$|Z((D`U=DCH zGd6NIV*mh58N~m4AZ6$5Vq|AxCS^)*Vq@g&tfmSF1o1yV@@E1FC?#Q18k7k&^t*Y{ zyJhEGZ(a}WjJ6XA6$2Wq;8Yk%w{($H{6f@Rxxekck&^Nih(Fnb8KuS&EJw`A>DcGn zPyYV>`4J>P;E0$xeb%TT9Q7EcnfADTD1QE2`3EdY4b0EMZF&Ts7s)W@+cwO`P3Cy7 zFd{u29wUcmRS8B_ZDvG>o~l;JIL|H`*lOM#zWoALi!7JNj%ZAF?c7c$-;&Q-hgnm~ z4PNBhWV|*2!iP|?=U&7YyjH4DfdDe>)5ga4tqa?2Jst_i9I|~ zm?fMDOn2F=8s!t6p6%}nYwSXgVy^;<%!RFqsoB;G@v>-MXxIzCyw+%1Cs>mpdiYI@ zfkn-d(doIOq$a8YN)e{JefxPSeL_`mkZplY;N@*otoFwNPMHvW4)*7IaG+-bgDNrCF#eZZ1 z2N2T#f(a^SPHq4bvwt8&N}`+s4ijSNE)h|d-JrxmsB-UyG_E9qo*J%@L%5(YG-?83 z#18H#Txbl3Hcy}Z*{@S7NYeHf3AN}&Ixfd@1eTu`ym4&!-+!E6fDBOxL{RV8MbTh@ zcfd4Z6JEH(UVu|UXi=ayH!Ryk#%z~1f_?bTs0VaKa9mk0-BmY`bJ9st#EHeW&?}y~ zVUD*uT7#!UW#5$;q`Vp;f1awk2CF5kY+DMTK#Xu36?31mt9g}_Y!IWinPqSDExHKn z<3|dOz-5gyrdSzxH#`&no(yS6ChHc)G%N{Lt42!op^XeV6QdA0bTPQvmSl6_W(rP` zYQ%@Jz8L5{X@>A6^!d8chkQV}Zkq{7jIF#E(NT&eImt7ol7x= zDdnz!L*Z{KbXu>{ru;>PpCJE61%m&kf~|v*lMBG)FE$97n3(-F&n^HP=YN>;9JNhl z6d^=D5yGtCBlHf)F)=Yo;zsI7j9U;S*5MXdVKnrJ(!f*~LebDP_XWgoI9Huo1Vad|)^2{QRmBv8fiu}R~W&OEW!n9IlVASU(A?i``s zOj`=^Ja&5l0b#K7RAH#8`pxxmLO*;$a^hTBo$?(Rle11*77s;1j1& zZY}9oa)WZuir5DAO7!H)V_tpKJZXKS?ZYGH{ihP-5bD=cv$F#ziqL~DXs$ONB)I-t^k^@j=ioPN$bU&GwlQMAuNx# zF(w{liYwK4ybGc$#cZ>7mARO8AnKAcfkUI!~P zhoWktsEUOt!r>Jd(9@rvWP>p8;1Fs10o5AhVg}b6kVWJHny_c%-#1T!nKv(`PkTEh z%bY9gBXZ~^-WK!2HtP)PU{_xDJzT8hOK|NcWx1K}(4l&tIp$Y?2 zA2kfK_LpMf!2eA(B>$lr;lDzripyUkR|i!yXP18pmYNVAxWj0FBs#nJYSfn-hdcI~ zww5kIH`g?o^X*LYNF@@F#^5Qdx>A~-&z{#dRUCz-0s+9nP{V?!Lqt%9mxPm$kN{Gm z6c<9MvmOm$<7|#DZ?Uo@0ja#+ikt6~>8zKXshvrCfe#S>m}==Et1XHHl6He3P!C23 zIuFU>10y6?kKi`^Ba^th6$#Ia@bI{OM-Kk$5eiY&gCvk#L?!=^Esw;PJmdyc3C}wh z`q=$;e}%huEF=`pex0Na&Ik)nCbB&)`q%C%JG3bQB!<1kZjX62i;}lUX21+lb;5u1LFm9AMo8WWR=^?4#EFZya)O?pI!3 z*Iqi75Po!17lPN_9k}X$#>;$3_Qip9Cj{l~l@X%}9D=`f;QVqpOau8jtaxg_qrbbh zxw>#}e{Ef7Z*5Nbe3K?&Y9I-Z@ZJfl2Zyl2jLLR>eQ9HNBah~Sz+q)1g2jT#`;!ZI ziH+?P=C+`Izo`uJe4{i}?NB)M@;(wDT%rhF6%+c?N)r$V_d?^huvPEyEZZcZ~8WcB|3obm;Kp z#ziYr>VAZ95NMkm(1$wpOrkpMU8Pb)FRg-O@;t_A=!>9k?Wx6Pu}`?8dvcQucwUC# z=C12=kFgGx-KjWyoge}?EoR9$Re~>nhDSYy{;t=77qBFp&AzYQBUYY-80ELN6V=4whlez|?PFx>?tTRLkwVH36>A;(n zQi{Mfw1kMqp%;4hrFk~y9iU-ca!IT2LE4HL_M=tQSZ19$w8=b56-wg}QDA>_9C&RV zS!X8P42MeG)S@hpC-Xr)&nsreNgS5C^tpcGdn8`Zj`d|!$4D!f`0-yqm+ zX(ORgQt6YfP;8v61yX>SsF0?Z)~NEZXf%)NeZROab&lp^0O|cCM-XH%A z4y;yl#+hDNo*C2MXI<(pwGaN)q2^4Uvya_u_-v@1iBXrMe?>=jHq?U~i!|H_N+ae! zom_ekZlzUnNqK5d#oe282XD^nw0~|^!67^)xr3zrY~l%Y!NU%{Y3TEQR_Rd4->n(; z(BK}SeVXm#F00|Y&fNRL=?+w!a=V8YvbMk7^%L;6QhKfzCd7w^zhPhw=180dTf;QHST)kLpPgmIpw9~eB``AVSq$9&>=Dapr^qIwhRHJn+ zi^x!B;@r;riE|e}=_UuNm+qO}$r5J@pTGOy3fv0)C~X_u`EerdO%?EQEQFJeW9#47?>Ps4BF-af=!)Mwv1J(sg`3M_3lDzKybfW> z8m8X)hPjnAw(bc_toBnHy5mK#y6~LwD0ITOg3})4ji>4|)DIf0heC19eDx}2SPX@- z*3ko(!N$$p-i^+M&V@f(4S!U4H59vGgGAQ2pHy1j*a-a@H=t?6w&t5y%kjc| zSS?SKYTMBKjqt}P5@#cYV=9|2Whv|tV)uwpB7P`#*{COS6c&6@bXzK8cX$aKeVhr% zBriR+smlA<*{W>%VrU0%?T@Jxe<*y4Feu0LBt!B=I5JM1tl%_GDx98;;jG)$6%{4&m9dzt`u&v6Uuud zLn>pP$jAPs6 z3*vEgL!vONQ-K2XqP~u=(q?N1fUTHpjJze=j5ZF%s)Ih=(tYmW7NkjngIF;|g0fE`>ANr7^S~C<=pcPTfm|-z7L}h4q370 z`Ao7&$~j-r*RmXXV?h4O6&r_LtIK2OpTW8%`n-3A->80z z$0V)&<_vh)SY3D04GvrPO3dmzhO%j}lzjFXu$41UV(u&o_!yr-AWS=`L`5({!52rt zFA)8p)cRyv1f`}UyP_pgEslnIRQ|+)x-y%G+)1@8u0IIo{4XVM}F- z{Ql*$M&6#pxUO24AuPvmR3Jy8ctHVb<2|#jE~e9AIEzYU;0uC*|AcXZ$M&!dz3@pa ze8)#iJ_w=^AIBd7_FD}fw`AQ!GvW|xo9w>e!V%O6Bj3MpPh8uZY~OxhntT^~A^GDn z+*S4qgg<%i8J+r!W@p7MC?|D0b>BJG_#M=ac@TwqJbBm;tZ_F0Ae*(2kvrK(dcTWl z^QoSMLYXeCcf+)#P#91fIpUIup<)SrY1?_XKjiFE!v*>qodYkdtNo30=rQa_+G#;; zsdKQnchTjT*lJtsX`9qjv!Ad1<@;}M0LHup-3bE(G=TMQ-T?nUyn(Elg^`J;f}M@$ zKiGnhcm<3)U7KASX?s5z)<_q~GXDEsA+qyR8gcnU-a+pmVzi8B>?Oa~2P5eg{o+Gdw3lH+&n8u#IZu{Ujv~u7Cl{>ED6R5n80`iV zk0O&X+E1tKzYVDg5pUOpRDivH^~3@1qNo$yxa}e#J~P^E@WW>!?ITJE{Eey(=jg)Q zUm(N*{~M~L|ADH4lZoYDPRq&2#op;(v7MC$WkMYJRc)(r@r&ByHXj{Y<%bGu?DzKQ|UfDAk8Y1U1Bs+D3@3b2WO8lbV34o&(9m1<^u5dCCF zrr*l`L=$l*b3yB#-Rw|R5gK{$k^;V#Q~sHy$Kvuj$!dn#8s&5^gi=X}^%W#rquvN_ zm@U9}+a=||m(nU3S>m8CB{#lXfCX+nY12x0hBc$@r)6(E)Q1?-6>uzi`Z+}JMT8)N z7PfOtLp*@~F1I!!{~)?HyuP#pk@c?#bN>gz08=wN7l4cB|11fSO8xgu zAqRkn4dAcqe<~6s*(#t2A&!3QY~U|ZqoU>!2(pU7S%`WDG4+dsN(lw6VH!toUTCA& zb)8(PAL*RYpcuRYe=3f2gsqgqo$W_$X5{32+aH_X{QQ1Uw4iYrc|zK| z8EGt&Vcde!o{DTBb2bJkxl#SaW%TL?Z}Y-K2#rce*S_aK`l|Z7Ip9arjN+}U4t40) zxnnT!a_#F9+DI)!+~jsM`x+Yg+yo@`L2yL;{xwu3V{)$Vlc*t?5iadKV};f>*_3JF zhl6NCtlhAD37rk~_V3E0sQ7&$*LF3sOANf9$(2|9N8*>Ho0+8mFD0T%ZKk69<^8+p zBhj`i+{eckg&py;l%RKyuOU*#n*2Y%7k?|`Louu?bj zwh9Ty9Yf6F0IlK&{5JzRiE~__K!AXx!Tybbl>b)@{0F|(Xu5l#oZ$VOP4&e-3Fs>| z9|ndnT_=o$f=U0;arNGb(n)w-0)xi1L0%R!C6!Am@R_;sbwd%G(!19Cbbum!nyWLMqSW5;@c z#;kufQgv(9;2DGSvfpxW$IYQ1$I*T#-YsRbdpYvu5f$CmsT2nB<6+aZTd%%b1hIE< zc(iNFgJb8gKgeS&=;go{zng#nG47C=|5ONupY(9h_$xd*ZsIi^C+bIR$ZPxFTQJTc zClTpSWk?<>d;}iH2{Ans`E2xyViXl)-=PQ=k82EItU9_u=Ll}4~ z*oQ4N0te`z$hw|KzI$euTaVr8F*ww6@AEb?F5exJoUn)_NAn*Sn_sE8$}bXZ1!VY2 zMP19q^v}-)gS`1DN;;ItabU(!Y=HBGa`ZV{9FQzxB)SxA_9x58bgNNTXHKk?`V9^g zC+`GU5tg{2q_9^i#2qR6dzq!R%>Cc1f|@b0BS}oQrXCuWlk?%Jj8E-C%w^`$qz9e1 zy1wXAD=AfzL~u9Fae-jC{hGp-wK%NHV+Hk@^_S+K8EmqgP(5U{<2+EqG)+@TGN&ZS z*il+$*-4CHb~FiS);`05G_2yWLvSiQ(nxef%a~FlPYM36rs)B>QxrzbapF%6^;YF3 z+R6h9#%83l*jB3bvWp3h!zEKK2pm;ZbU_j1KgCBZv=XPjctx7jOMT6l)WJ^y+yME? z;>9i>4a!;_)a3~pvqZ+cckdP@Hat2o6Cuw!NMATpe0jh)ZJ8y}^Tk}lk19*wie|c@ z^q`g0*^M5Nu{y45@kP|4Q!wQymEvef^m};lF2o{w?oAsU^-Q>+qn!Gd1VSkst5(yM zQsF}Oi*)6SMX>|y$YLo=dK+U=6OP6JW#&~4^I2I9yZlPSf}yH-vO{NN-JtjMg3L40 z{!rg#sCP4FIS6*$U1Hegwrd`&Ya8fSeeobrw`DCBLZ<6)P)4V zQEi6gkkR$L8lBLoIO7rIWwE8t})vydyZe4vuMmW%XV0P7SfAo?Zc0u=s z-8{G{O68$j+Ns^zT&C2YPw=!Feg^~+80Q5N?2j`4EZk%NOwK6YvuM{DnML~q`DIE) z^@{ehW{<-oF~Xqm6zx;p$BI@S59}ApiEWB0ei09yXICb-;2HGKI04F6l0QSR8jO(w zG_Nq%inkhDC42U-Jl0$6uE~U*^_du@f~@?dIMB5iJX)6r0G0mCDRy*%21|Ry&Ed3P zfoPg+_22pENF0Te4=pL_f=?kFXizyC%ui%fbS%HtP)hYMOiRnnv!9Nunk(x2U;?R) z)_bK#6KSMn+$_X#><4j`S3lf%YqHL_n6W+I(CPXmGb)kx?fyjb=*Frh-#>opYyW9X z!^pnA2gFMZcgP`nHt4zzb4XF2Pk}S0$devOu^3uWu@K72l$ww#iOsH+#58b36kL@~ z=!S=^AKB;5p? zqO43V_gQYHOPqOScKM19=;i!e-FtPa4b)&sEtG{qw7ko5s}_#~p;BuM?urimGtb)s zXD13d!;EZ?U+=?QN+}{x4Vy28Q3bF+Sj`n{T+d8VtY2C*bQhK*SX;JEvnouFrKCuA z4rnUEP5GG2crAk-hwkf8r@b;Vb`@Fg9O?YNAb>dckn!^D>E|zMTw{863~Qd^hq{lQ z@!WxHkyo+50g@E2${}|A)-@swD-RW>khiop^+OIrn^O{!debd-$Z7@f-#;ox2NyU6 zpi%AktLTjMdx0Nbb%E|~;1JNY0(IWDMUb-UGZZ3);zAT1UW{RmY+Bk&qD-q28{|gZ zB$)%z!|~X|y`>m_&k~0_Sd9LV%MiTs_yt!S3yuMzHE`m}s}~7Q+vNZ1xnKy2^gPuV z5Z=ZgY{LbjoB~!MC0HrZ0!Eb`7O6pqvwVn3D*7btn-ougLZ3*nm+fCQ>xZ9{pdnb0W9Kk)l+-S=WKISkviOCQx2-pRA#EBEjkwLu>Yqr>4W4=vK zQ+6#U`bB!gi|(5}k>=velhupDj=UGlrJo*FSsD%QdKi(4*_H~A(@2z)c~MC{mxviv@Dn+z6XOB;Ws_MASL|L9;^zGWD8L768eI6aJMb9bIQ zfXh2FI4PKlRp!)yKcoX0 zUl79}muMeXdxgshNE=rrodW(OstxSGcApJo;Vue8UelF1X9-laDQUhtL#mS|tTqM9 z5eR}VvW7FbJjA&wL|%9bUNv-LOlkPa$IzA^OicV>*9Nmq$4+vg7*%%DqO80y_2QgG zv-yR!7D}#=ZOhY5?Dwlsgv$7ci*DaCmIr(tJ3TAM*7x*$5oY?kQqA696!ZI6yb(tfPQ=Vm z%wg!PNU|(Eczi)=+8_oaBSb))Ys~8P3GHjSH-is$RzfiN!TJ{iUt0peXMTUDWK}cW z3bar_K=c^@mXcBbXG&)0V&-ILWb^+r1x)|c?^3ytM-f8(6N)aq3I#@m!EXgt(7?sL+3lKpl( zm0|G9@AF4}poADIlabMa@OnTH6~tn@wb95xdytj~*c2M0K_AHAEq~mEcftBxHxYty z&x`tlxr$Zjo8S=Kule5_!NiF_%cGYfCH@@m&c|VS>4Z@0-gQprbrb$V69tH6p*xbe zVU`B!_0E1R1t%~VlPTAfF#qw&rhZ`MR}6qF%C4m-fS#rv?4L5@Z0#?j18LfXeS2yr z$9fM`9LE3@Q9oJh$BeNc4h2eV>V~b@aXpw*$YO4tNK5tL-;pMm%6~`AWg;?5?I1=K zcgvnkpQ$3vti^b@!eV%%?bxKawH~O#bRcOLxzIb$pzFPA zI_(#ZiZQ(FCePg%0~LYMcD0A0VZ7Ab^$m+eGbe8rNM%{{M739bFjRFZV_J=5T&Ptp zK^;bXrxlryFWBVbl%7S|y+1zN_;o)+1R537&vpwS3Ets@L0m_QH#MPwo1F@{?6xc|8YD` zP%x;&DLnHL`?*T{j%|b?21>vvdTRbo7|JA^xDPI_({he#`<>EbZ#a6&8|+-@swGr) zhzW+=VdAp6(NX=3$PFcce4{XQgJ|*^E#<@2rqR)|s+l_Y4rOP)WVg>g&U)_%kr}*E`{QsHTlH_@(MRC;7?-V@L ztYjcykdRiv?G<=1C6Hz^sEWgY{^&!~#N-U8<(TdU4#_TI?XoL}LAAV642NM^o<)dL z5mzsDb-h)$P)s|Q=Blq>U$ePQ?-w__-#_ZZTZl{dI@+~@gX(l?JKL`g;0GJbDvCR1 z<7qT<8Gl=Ml3|+TC`XucY@yx3@4{IgyNG=7dJLEVM%PVuTucWTzX_wK7%sAS*%uH* z*%Dg>q0KPO&!r>U(QiqSnjJd!FXmv1Yzin+kQxpGG@g7DNOy6tNJ~TvWnf2Ng70|P zYMxEA3SRdt3`E7PQrg=u4sh;Oep)4^Z!9(_Jg=#QCPn=97Y}@B)jTA%;MB3Zd;q-$ z({1UoMUh$7uUx{~s&AVj=V|O4=EInTrBFs#wu|C@V=sGiDk(T@ZOgMf;@jD=w7a~9 z+1;RP4XFTp$!?fc#90w~Hj?GKiwTE0ljE_6yh)ADwu&MvkvG51aC(Q~ZJlzZj3|x& z<*=Szg@);ET~iVY%Bw&#BrC~`JSZWx)ueH9bE)a99hM_oY&@knB3*2FcfK##TCCiH z{O8Ij=V_}XNFhb19IALPwVr5|xOcD>M33VuD^A-XErrG@EgN{LMqB+i-!%N3op6S2 zw@bjiC~f2Na8IXkS{Yd!n5G@Rzo?C=s_1)7+F!2S1Gm0bse5`&%5m2*2X(2_Hmd9& z?USOY2hS6To*1E}FS2@c*25I(MyJ#$O0HduZDk3;F`Z2;G|0*9?-;S?W@D$aKXyy- zU*j28ZNv0@z1J~o6-;3?;>&hfzmm`L^ztQR#AiWbcq5|^mIiR@S04}ZC1*{}e#ddj z&t~j^L^h#Tut{DPA6TDZ776PAgUDL-@4~&1Y55a(Y$mgBxf$&dxERG@F5Yx}UlK5of&8Mv+aa}GW-n|KC%76Rt za|PZTR^Kz%CW2P!7FhbC|M7nixrTEZ^v3`lM|~ehy#)wl5HEKpmpov_=v^E=xa2V? z{;V2IGr?1@kEcSQ+pG&qzS8c@2)a0X$Ke!m4A`KK(|Prehd--R%pP2QO=WJEbc{G4 zi==74Mfh9KDg?BsN}xbMPLTi0BEkQMp8t9Mg%8Rq-k+INt`E+j2H><{e_+rN8Q_If zaA_MGlOK(8bU4t#3r#Kw2-Z(7AX_Qd39V3oMY$}zO!nqEJ68=Kba2Y{z@oFYYA`-}|6H4A>^M(zIK9#2VFR#2RhOe|359$s@?4OR0OiSa3k< z&aEjBI$QNtyjyC7ZrP(Lux+mfdMC7vW-Zt~{Lr16GsHb&vGtZ2nLmGzc4quFKXCaq-q1&XBOe=qx;-30;JQ}}a+ zz5nZrbW)%;kB%#iGvKTv!#lYZ>+6J zFlX$Osl$P~-*{&;b4Vd74s%Lc&7k5R92$>5PnUCUU=iH(*a9dk?te71UdLXPgIS>U zW|P5LOl)>X;yc)Lo3}?IG7^z#a2%$^qjaq%`LZNNUKQ55M|ZymA+1OwrRotSa_QV; z1-0E|V>nf8{UQjSLYugeCk070H`_{PD`HA>xGUx;YRa)b#F{!#MpSA~MbE~ZLzZ9R zupDJG3C&{3NZ59$iNu3di}h9$Z3;X@UU`qR8fCSQ941!gOJ|;TX)QBWxBv8*VlW({ z@udj#8em@I)J$om7DK9%L#th`caUMn#%ua5LRGi2P~~lDPj0f>A zgopp!g7uCgKV-VO?wd1g16U>LnDJ5{sxb3Udkc@4AgeFnc&m&%8p!g7J=G^PFW|bJ zA?d`>zpSL5MEjdzH#kJ#?Q;#++lS=SYny$^MhBl4M;;x$K`gtDzyNi<7! zrQMLH3G$kOKjnlwnFc3rVGV>81wrG$TIZ^e&H&A2>G>!O3*jo?`QoPDfuacv#i@Q`3MAaApa~4ls(pe8q0No}k2EVH$tY+S!iJc3od?@? z-}{vutiHlI3;8@(zS6~(zvBIz{h@RR(eNPgDK(tePi)Q5NH@f4=+n)AGJLJ{^Eh?} zNod4C^%Kp{+1*wDHj@L|^-t{q!E0GCT2oqDq#snzpP27*58Q7vY}6CvF80YHDjfnj z;!>}2l@S!`TvH^IE53Idjc3ezM)DoTO_0yQ$J%J>p#wfjAwfM|>xo!>i28*bpa?xkPk7$M(es`R3C~ z9gSz zE~dGc$H*ADxuJ$iR6VMbnBSJx`r$3?0n1qfKtWccKia%I7mVZ?>&x5DLHZjx3f`rhc$T9flf$e{P?G3FZ^(5 zTE5Zm#bwQVx5RqKks*!?SM!gfR~wZB*vZNC_lekW3M2*X=f1qEu6a;|;h=xSK#lRK;!sdOI@Vh28 zEhes029gRCyfn8MxvhzeBvL&*2AAEUbr8$$ah?$xyHV3?576YTi_N~`Eo?2d1KX<3 z!^&p+PxBowp4HXgHC^r3Gdeedc)MJj_v@p03`2cFTs0Vqo-?7Bznyb?I(~flR04q9 z`bTH6FGujhJe*TKuyb)6UQ-}6p%5~mF<+SsSuls1%q0clDx1U>R#6cVNDNWpl9T!C zG~d0X?Ww4IQ9p3O`9vd|#FFV{RLYMn-~>`|o4^nSHku2tuUvE`@CU`TVxBE>I%d%2 z&`Ozp^}0dBJm)p}=}%O+lHK9F%@VB@XaSr-e*+%o7y2(+Q!ISSA=AtVLLX&XGfC6-Z)#q7|hPxaa(w)W@uaJ zw{7(2)#Ggr?M2sVVOIv<%N%f-(Z2qsk;Z(69_zU$bX8c*ey#YA_1T zSP|B!V<2Y&%cRm9shH|Sdh(qQ7K10CYGB*e#tMJT%z^2z zIDI}7n#JT$t}nsvo*xV?hlGb_K2?O9X@_X=n@93e-sp!DEMks4lT8{MPWr>fC<)JV zOL896T-B`=m0E&j^=;NzIj)hrAtm4c)fB4ve3p%X0s^Z3*9rvvf8=|%_9oU0LdJi$ zeob8dk7ZMHHgozXx2A4ykHd!P=cARy<|4OgONSHvMWnN+>;`MeA$hiu;yO7tBHAe> z0y!>Ky?5n=vHeE<#1rtNF5aUbVo!wVXK$A|#%@S%Cq|3O$J>|Z=UVTdhZ_SwlzEJ$ zYQ+frWI&zlZt59P(HY&Dbjx(Ps)6tL=~V72N^~XNS)|2&KFKHOjw55!+I{Di=eTdh z==g7}rzlv=nwHL;K781YI@498=e~>H26vu-dru8M-(1;Wkiol#tjidc>rs!njMOI0 zVL;*<7ggYJ;-LHPAvK`>x`Nf@>uM8eIf_t{3_wqr1Wr7v3k`YqLCFYI!^*)5C z*`;Ubfi@}V7bEmFf5t57Sqm#OYILy$TqFh$gW4P?a@sWn&=faozHZn(Yj-M^h-{yK zxXDN%C7&S`t(*E3C(VgqfNeW_Af8VBn#^6edtmGoZDCa)xzMNJvRC(?m+p})|Vc)Hu)bsABDh`~fOJ%N^y$ zota&P)!gI=q;|^p*ly%P4_rs0U8lwJ3u|l`bpe~`q?}uLq!ImNTaf;Q_{3a%RfSy^!`<| z_>pEqS=!Vra18Ao@n$iFW~)bLnSFv&0W`>gs7G>K?8 zLvb>Ft9&gD43a>eaBGZYtGJ6ozl@?|^$g!PMRPs;n9BPluPnPh0Y%)vL?XlUy6qHa zQHs1JNS9(03_nSuW9$PgUf_g~PF1e0%LT?4%$jYZEQ=@Y59r^)f@+l#qVF$rI05s& zGl%~bEad(=2{|~}08ETr0QPqOv|>T^?`(RdZ>QwIletzbRNjynQ8Fc@W*=w_L6&|g3S>jN&l7d0JH zh~l(Ns5#heSGIONwkNmY`&*f4W4>6pOGmZ!@Zo4*Gln+pwYS#n_HAIc80TBtcYGZt z_v(|n)-5)GJ3+7O$2(#dGdHbHW=*4X>hE!bBQ%lH<15I}B-gXZ8a@l1SBAG%If_Bo z*@I`AYnc`V1eShlsg=?=m1{>Sb*GhCWxabbl~&OGZ~E`y`)||g#4(-y)O{C~AAD2g zS|&%*#kIB_0qa*P6?B0k*4I%vC%tQEy$*ECff@HmGYOQo`E_CtqUrBZ9-%__Yn=H` zoN)U$GBT%GJGZ`e8(X%SF@0%v&J_#Jk2W7M^~sCTlX%-XB>Tx?EKE^6P#ZWBRSCaY z4^PhwabQJA|71%~Wf>=R1@jLc1sAsBKCCh(Vx2m*HGe60BqsOW)=h6ZxbvxH4#^lh z4zY)S2{-rf8I8zwZJ%XdDd`wT|v@!t{Q0oxELxdfk;1qv#6P8F=9k38}!jC z`oPl70spYzSh_qz&FidIUnwuPFm6q+#-=!B7_3tYpf@C1?y7bpRq)QgFn*roSYzb! z6OJw2N_$KfMh~@;AR&`al-$k~*%SI2n@Ut1I(?wIH+_R(Vmog9Y4~djm&6s!j804h zRhqA)v($AuW$8`C^iaD=+qw{CS>+-&ReM_5Ou4zV0#@y0Q2Hq4oXE*>8i(&`LgJ|~ zK>qmT@KYz^lWSUL598p|JHp3HeEicm`&VY4LIO=l8$g;TiBA$qWPRYjsx;-i1D(Ww z3Gv6jR%!mTZ}5MFC}MAC4zQ3jvNN*y$3J$A^5)-*w)l!#sy3~9tb2&{6$!Q=2++_X z1M5=)m2a8s4zai8Nacoi7chkW*5T0lMw)U6Ib+&jhKM<{!R}2S&~wAN(H4Y}@sFhR z`-IWvFf4?o;Ln1E2|Oh5Huv*j-CI-GHq6tvlA#^>wdB*N;?y5rwX zGy{Y6VQ<9f4asDa!7)Ga=R{PhEm|Z4=`+L72D~_$v@b+)%HE~4ic~7_3g-TLyCtY#PBZ2 zbCKA!9g{LjUA|8q87%sl?7PTr#p<%4?S z>Sy0lHQzwkoCpMb%p8U|YTUz-^m^f1Q92*m#soDz#l8k#m0Z-SuJN;dz*z3B1@4n4Y=Y z`NrG**m>D`xx0T6_=5~&Gfc5b7}JHiwG9rnwG3_T7#HZhNqEHD9jgb9y0r>k!&$!f z6AYnwub*8rsEx*>9M0JzEYQ7mPm#vufUyf#-66O~V1VAeMTjT1v8%z2H`2Xn)P&9h z;iD%_FSc#Z7dqE6=*Ytlhu@z<=l02VZcx=rQAn-dF?i;_*$RLnL2Ikr#7a_^f@FuQ z90N7EMA7KESkE>%6AKpMM%=8ey0~Q7v zIOugHDz1FwGHK1s!%~+Kz9D-9#5AkGfNiH^H;gn7{6?ClK0ji1*HhS?qjFWBMpreV z<}ue1ZFbg!FR1xVG7$_Io1&`7*d+7ss2^xVl*G15@a!BL4FN$~AT?>m#-Jfhg&;A( zSGmw#Ux_ryWUD%1yMC*W>D3@PENkX{(4)A+C%UOn*{HXgTNc)&OVFY=w;m72kW!38 zcu>eIOi-&=?Q*-5auhC064!FKk^Ta%@-9vR|~!hf*Jn5~LW#{J%JYScP; zfrKe4M`RZ#mIR4sWJyh3ebk!1pB+;xLK|F(VjXDm(kkQf5pA)ww3)_cgk3!TNmf?< zESf@7k_cGWTK>r9)1^XPdvtG1U}7>(7|+~Yqo@;FMl1SUPf(#0bs z-qbKM-9m5%u+o4b$g#@}5Cg_3RqV3LQ86XjWI?qlG)GpK1C!3T%f2dW7G9&uKrL)# z$l~0jnjdCqGV<6*u!t+gswY(UPiL5%FHduKG_laB+3%+cm-1GiUbKx zpj12g%g*;XT57Ur?nuRWAh(z?zVDOqIYK5+tE`v1-LWI1?xN71?C*daY73l5drjoMX)z^DIuGA;D6GQiXI& z@%J{j77fXG(9~xsGL1zR^<^b$i&F-*RV5l&rRA^BJ!`T(r_+)a!hL*t7PE>_-?oy` zgD!m*Rvwv09#6U*tE@sWLvT%QE)r2m)oL1^Q_@m;nJhMoX8)mFey*RPJiLP4g2LI8 z4Kq!vyY=kEfgY(LSzACSGmI7_e=xX}0xIQS_qk^@JM~a#w~doQoK~f-k`W#cHUi)g zEFq<0n}pFBft&X)p2Kv_-E(zC@f|_NH>=i`*6ajbKMH$(--vH^(|11TuC55IxZcOC3?eF-`dR%3784J+L6;f@arQAC(JGB;I zTSb3IE0ZzDzS3+@c?Ca;sYLOhWfv~(2}i5i#3rPKbrTE`p;4k9#qP`~4?pLx4|uuIjF&<+E1)nm|z($r1(ufjSIidedin)(Wl+| zn`NlCvqiKp)VyH=dTbOypOD zA`uWTU!r;^{C_z6#^Bl(X4}}dZQHhO+qP{dJGO1_I9ais>{vU=j%~d2oqOy3d38?R zcmK^=HGj?3JsM+lw*+fBwjZXCW~x4duv*1*&7A2%H+o18M7E1IvE|V)f;;W5AeP1y zYpTraCv%&Uv4Hi`x&dXw0XiK~oL;{P^06mmqG2wHZJVI;jr~jBqH9E}RT($5tyqX& ztzQ*)UP+mBuA4h#wCCfsG3{KYfO)0I2uVs`5>A{%wKSw7H3)rdDS?Hnb6@{w<>mDH z;)wq!0xit!vB&bOep=LTa1(qDchhmUSG_;C&dF1GYt#5EsCdtO!xM^GXOQhaJdD3s z_>{_fgl6^8ook2sH4#fTM!70g^QQ0d-5pGJqyQA-DW;?f;-YO@IB!Py<_%Cj*HV=5 zpN#_WxJIODg0~gjr4T9on#1|^3rrGdNf&$W8*Hs?*;3k0WwI7aG6Mp+Qv~kUVCf+h zOIE}`U93MtdBTR<>8)Fh6>(^pPC*j|IAjm$wsJ;U*YihPycpsg2O`n@OmTL@5X)|j z|4NiL*kg0}`t6$AntP==slL&y^ko6geq`~92c~Rc7fW{`JoO8?*D1Nm<+skAnu8ss zw{6!>R%b+S(w-<%hD7Rk_ z{ZB>LFap7imp*4$YXx>qxVQVg_{Ofi%Uv;_T#SA?9@4uiuh{pA2rqASdG(dyMlGbX z?bK*d4^8FvJ{DP=Cg}tPA9+L`m9o*L2{w@h?I_ihHxUe&B1*Wmd*I~c1 zU^qG3$&q-@6!NoH$FX_MR^eaeX*bhuo%8(J%jMqiQRgn08jyK745gMUC2S#N-_3+( z^VHcbe>;EI59rD|*sdSl{PNbkoOn-SjV6CbLAlCqahx1BMI)huZBa$ubc?k4s){Mv z{3Y!%={MSH@d9GBFi%dY-ix%rr#i5$LeLDCko@!QIN zufLUVULDe`21%cDX^FX5>`i~?8^q{aT?#J{IGaH@#X;3=(+@f|pa+Z|GnxXJbAcUH zx~sn8oZ^%yS3ImGe5Vv2ZyjdyG=l`w0h#3q$ucA$=Y0*;1-&Z1e;bDSzzFIdpC)+V z%7Gj<>1!9E1G<(uW$K9TB9K5w02aU0^4xi`H{Q*xfx&4L`%UjE^s*4i5%c2VPp6X9 z`k-}Ftie^7z6g+Nc2%;K&#Y=|Rtx+~s+^Y$g%KzAcRLM~|(DWsq z#ZS?_!BVII#P9qNf3T#&_fIDwAd8ATf096SWj4{KZ#l` zc}nST^uxdaQp`eb`S98lqs zRzqB@tYL!l?ovRSLvyxfg8gyBBpd?>lDhz7IercxqXmV)i$Hc+ z(cwan91oY@67EfU0Ujhr$5J~;m~qZMDa*xymxZB&+VNneaV9))Q_btyjEC$utIrm?rWNo*T9BqRNOwE}@Y~2WXZj%ir==|AhXr ztxk1=UO%G~PB8bvR&5Y^Jv+qBESDVMMYD?N7!>JcRS?bz18{xFNDbzn8GH-JUNEYM z&F&PwlxMH*k0#kkzDK(6m78_doBf;}i#Y16SMaG<@UC}w(yQ~Tci7Lav%0m$_)2CvvbU2!H?m%x`Ne0 zkcil?$blE&7~C;B)2%o*+ijzz_uivh3$%Q@ws{cm|I^rX4uC2)GN1(wI0a~_Z=fA|#~pY-X5aG%5`c16 z{|sCi5q&}W=$xO3T}K-ABqe$BHz_9H1GGxLldkGU=9Z;>evy5oBB8MpWJX~jMkL^= z3Oiw*7epiuQzy(I#|VN8lA?WUD|3_WolvoI$9S>_*OI(=pB14z_Qqej`&I^lD*_my z2AF{;RU!Bn|Kzj>Bwk?5pbfG1WSMvp{?51boLgKg+`!JE?j=U#Tu~oln zG2rH;M0Q$Z964kRV1Ma{!xUSWR9EQaD|YER-T#L9sJ_{}-*SY?sHCdwKiE5iYQx6z zF@i?Gs4@L^KYanwLvA#vMjY8Ik5ap)$+|J2*dLJ#ku@5;V}9vO+M`b+hSnubpR5L3 zgV)3r+T3B4q z^94v#gk>?b&s~v#qgnf-N7GJVDpo#Baj;MWS8Zm+ zJa$Il{*k=Mo6U!37C#1uvN2R-+mUN0J;9CZq3e-ieyrdp?-!6Tjr`q6!6@)$5}^d{w8~hpnHU-VS&Tt861D-{c<^GPQbBJkrse+2_AEiflqW62_vOYb( znG>no1oNu?Bd&!%9JmpAy{q$`eRIl*(|E;Q<^B!w4HI1Fl?8%XrhEIn8niy8(zI(A zbYGo%uREL-wf~VC*3usQ_B=ZM6}NoxZ58+Gs&f2YI!ZU)LoxmVPJQ38-yfRAX!b!1 zZvhc@J@5>sbCeGrz+9XRQ{2>j4M2Q(`^E=j7E9hlc`1w1VaLfRB65#W2xJ}m6?22( zW@lrh{325l3qpY_m1bC1aLlwKRQ(|VC*f+ka7VA*S{Op#^y6Z)SvsN)-YGzF@|Q%O z({y#dloa<8yc3PeEH@YCnIjX~@i-?|Bj`zR$BW9+%m9nCQ5IAq!v#Xn<9s8x(K&Y= zm|gH38Rj%1v!KU2S5xWN6Z7mCxKcm8Vr|r>@<=!n?7k}A#fZ4`SzWZ#nu*@f%J~Rx zVZeKy7Ne%3klKohxoW3gP#sat&-Ttm`^g)Lj^_dOo@b{qEB0q; z$;o?YsO|IvoFeIEZLx#n%9beG#bNe-?m|^XS0zej3)`l|aSqpoui@n*Rr^Rj=6#+E z%CJX+@n%joLubJyJR`(qSJ@?7Yx!G?BR?OPC|l4xs9eW3Yn}dj4G-OsWfM!!kS;yw_JpikH}Y3OjQ5) z0qbm<1}iv_*xbXYihq<86>F`zf%h7b>+ zNQ=qgU`4=hF}5>Nbs?iw-mF({*~fs6bMXX?On2i`wsbdqKn-pkS+1Wtim>F!yelyW zk-ieZ)PcOG&@Z19VU|@H!EdThJz`g6MkAcdpoM&3W#=2QH~qm8yD?@ITEhYYjUs)er#rtDb@YC}C zw@6|#CI4Wb>};{x#E%r{HV2xotQt}f)mIVSb~E2mND18Qbpin24`RF5Z|oX$nzO}y z_fU?UQRpT{FKBRDwBE`!y)?Y0F?zhc=}XSyn|X_CBh{^~hXm5oc(V$LZn@kvO^QwQMME7h% zy3nI!MGjSstB|?$A)Nk-Ma2(- z_WMUgLUbzJ6ig7&!I6Let#~()u~?7+1p;dRSMG)ApIuhg`X9%&Rc0KPgpl&vmdNBm z!&^&R!KA395I~-S_JoQJLXwaaXxS?xciNvO_0PQMedG6_y|58}hYbfq?iC@m*rMi^ zrqTGV=jFZjIR^0c2YkOk1I_I#gVM~`077vtR`-a5&y>VOE|DAazL0|_rQUJ}x@bxI z3gi{N?(*}(POX0~n(iaZh6P~G#_*t12Pd3QQ0I-(DG$MN=gC~hCER*ZE(ZzG@7WZ{ zBlrJ#*hah{Eg_Bt;Zcr`0s*U?fJ!b2V+}9VR7jXeh5C~@0-7NnKoYLVk4;TL&9nGS z$$pv4l9M7|_jC zN@5~61LJRWzJBZg5vw`W24IflSY01p3-uKl3**mKJ98MX(tp-mOM9=MYjTQLvbJlgTcFlPHI_N0zxW#V7XX>i1q` zyXwMnmV)53BzJyyw=j_$CF|$FFW6e zi>{jFEjXh%%`kl`$RZSBzIWXWGi!@>mE-%k=sDwwB|-Go?dV&Y$RnWE1Tu=s*^-NV z8p=ZvA&%&L=1?47Kla@M5(Q7H+DmY&Kpe}lhs1jwTq^8gBXmD&WOtVLEcnw{@s%+> zy2jcpv?KN`ctoj8XX|&eyJwTeHR~j*7mnIXG~ttNv{pXVf~U)`%;;Su8#?T-PSdGF z)7?}(S>QAeDHCK;u_T%`8FATf?M_q^C~l2~ zCij+ECyxBnpEPr_i_66;?KLL)880Uh__hWT)}2Ax@R-g&_NU*o*Z1o5Q!0#cSaDJ^ zHI-Ix;C7ki;8W__+)F5=PQo%sIk{U>u_H0AkzSr(gtH0Rw?^^71+Dk~syu8eg{jsT zl*a1K782PWH1Z<&FQ)1uBEZ?${GxMk9E_ENs|HNQKl*LWItOO5?f|ne%*AB)QPhR|AsY?g2tINK%65xwUM64&V ztFR?B&Sa~r@IZV;ipL8R_wS%>AzGH}=2Qg{=M#58umoHz2_;GH ze$Q(a?TY(}&=xFK3i%sck0ckxK-6ik^&DUzKk{sg``lN&GNC zVju?YB!yO(2{9N!C*-*lrJeX=1Zm3HWn|h4taS#g(j^2_e~^vHb`AO|A|(7){{j3P zUWAMRPn{R5;7aIxPYsfg?0fk1!8TVwj4a5I`7t1XA}A2)lIY1q0tTuJq!^31Tc%2f zbb~J4c@CZRe8Fv`_Qm9gD*T-6(G@e4{)cPu7c0MiqQ8F==|n(6Km~{q{r*c*AAv6Q%_1}RHPU^TF>@NuN{nx-p z|38PJf6^Uj=xU;BqJ1G`F%c(FK>@3wA=^S(U2Kzxq?yETZ9p^?+T&Ath7wQ0NicC4G>Pqop!v0_>9Zri0H`TQ`~nQZ}3(DaR!)&CS4* z-+R^BMWth|v%Zg}u*^=k%anWjzLavF%Wk7wkOV2_c@CP&R6zpfBAd;gTfY&bjJJmI zczluP50;OEf~S0bMqEt48H&Vr>Ase9Y{+YQ@(<})5lZf_us@01PwcF^PVT#I7ph^X zrL7}0On3!uTXrtLTrZBoAEqCs51QFNR98A_%dg4Ljc9t53ws%&gxo&LiSI9De~!Xw zp7qsAAamjDI&@M+QWe9tVkh|PcYW2W(s@)(QWAQSY|nNkWJzQAv1Zg>A`V7s9MP=# zYWLSux_0Hsm;0}^w)C`KD6jB#h-4^AA|Nkiq*ffNn1}}vDO8)8L&?s;;%!I}G}Yl7 z&NzDT8$fz@a%>|Ht!F*Co0`kaLF%e=(cFmzlJFzvWXg@m@q(`cMFAPE!;5d zEZqnQ6yjKQh9k23g(ZS}Xlg2qP~r%T*uxj>bF9R91}J=1?z#sj*aWqJvt}d@2bWOK z(T?Zi%BpP>)I-oeA=UZDO_oObu=xcuvipVe;`EK;qwiY1VC+KU?Tn%lJKY41i`mti z#|;?yZ9YR7%4d(@krg8ajV)Pk`>@$J&Azz3jD&oTuiBLTvCeqH7)wZLTJ4?bI+f;3 zOKx|3t1)-=HL7>NZXU&(N)g-HXw&kx_oLOKG9=<5J7`P%3+tHIGDMz%MHfHSo})D~ z+#Gdw9ztpTfe7Tf<2f>D>W@imv(8CqmfBo~^pl>t^KY6Zm`qH7;OBc1r#2DYu1 z@4c-p!4g(Bl}%}sQydjVvQzRaEY00he)}>U@QUjf`qGNaP5x?o)N@&!fcP0%cFvMz zay#XImkA*DnRp5gG=}OElX_aBlP)o`JrEe4D`g`RZf0g`Hwh}$a2p^>SfF~LAY$D4 zK!ULj%F&Vp@DYav1gjK9(mssB=-17YqWh?Z6V%Ons-5bX>c|bpH{_=IWwpNlB5L& zx{~)F{ueT}#?QUgH2C$EDHw%CFqc^<8*n1Qn$J8sP<8Gk3tg6+!tMIiu)A_sg$Cl4 zy7XX;*c2fie7fioMQR0%Pik~ZEkms&oHZQmjS)|OO#4YFZa^)h{vf@e=7~-kW!wSj zgX&M>Jkbb>s9%Xd*BS3_$M;8|{q}U5ja*%jufn(D?~EXL;uSl@@mWH2dbt`^41K1u zf{bwDkqTJ~2$_X5kw#T-3SGP?V~eEPUs8)!t{zcegqKNAWEEk*D67vKhHdptwc-g= zEnSEtaldg>0@A)pqkF7|*0egIO8YaSA|3N(IsQ$jeT@7CIYTq5*3&8s4p)Pv>0EE6 zbjyMxg^oLYc9w?JFt36o^BW~B=05NcDqIfy^QX`lm~!HdHQEQ%4dH(fT0#ZdkpmnE z2=ia{nJoW`(9#ZW=9d43&l1L_ZjLVhloqC`3_74PBl#;V+T}P2X#S` zF^KEYkhGKSBdJwwZN;Z`ZMSI}Fopyk0AbPu4@2H4N8M7usFz0V0pd=)cXDpm`vU^M zq4%%}R+L84Bj4Fm8-Gu?M?w;0!>wSdNWZ5PZP^gAsv$foG1a=4p?vajqaWi7#zR}X zxep(jI+Vsz8ja*n#2NSF{vnf6aj1$WerZt6{-C zvaXIt7gezizkCKWklI`V@L>=K)0uT*U=P+osayPvsWe#6t`bY7E2QDCf04>$l0FP= z6^9U~v;v?;UctN?KwU?<(uEW@a(U^EU1iN#; zdvI^$AQq%Fbjh7O!M5l%a)?u;lx4wi@l+ZItQ+=?T3{r*`%E_e=m{hR?w&Fc47nzuqtS_dx&O(n4u_ zC%b=KOc1X!^_K;q@hgawhY87A;}+6sDJ7E(LlJ8T(_sZyW};E6ZS&^WEaNBQ^AVgn zHi?`S6AnlcU&%>`RH~f~J$ujkuYWzhe}D|o^5GQ5=0TM}J(Kbwo%SziM0S8|-+na- zF*;*I*H&yS8mmuF5KjEuAGbJ5WgA;O-*61=bt;w(-Vbg&LM5F_S>IMnqdhR8_Me|r z(&I`SQ^hE7%aozTJVJ~q^S*N-X_U7ttrm(z>*Fn$JGB)zN5YCnZPs%X*TuD2G= zU4EmJTcqWgwfe&~Dq9bu4=tBlA%??xf-Ku-%_kB04I{`Bn2SKzhyFy;Zn9dO!1oS) zTO!@ibip}@?9hx?4}{eS-tKs)ARDlq-YvFeAH`c^CRXcul5e9DEi_9ePP;k5QrOx zTM2PtP_7W31jWt9)p<7Kl)5*~4@7~=L%2%Tgt;%Ou@-9x>n4TA!D%zeK0h7#F!JmQQ@0fH8fYp)=U^7L1ML#t8IQ zl!sa)Y;o#YvF`IJLz<@mN?~wW)?=<@e}04~kHJ+n_tRjxq#s6)Nc56~pc^<#FFC$) zcoNVpeQLXwfdaqzrm6-lQ6wB&%2;XdLEJY~!C2toYioeA2 z0B(=!qkw=~=|(SHrYaZu7zAD1kGvcU0>AGabpp0NGp2-erO#Wh76cfWE6pc7kh-O~ z^`=H(q0yqe*D?Q7<@h>7k5^?w^@T%GdX5yh}AcGvqqy-WLZj{INm| zw*zw<;QYSSUzxCts9hOw^s1rdtDQl{&0t!|xkPN)y5lKCzA9l1@=Zx57_v% zK#)ln0PNcpEEed3TIDG9R6&}xBUJu^yg_+kvMx3Ud0H@^Gw|aXEp-5>PMgg7att{n zk7y6Hl{LGND@v41eF)$@WI3)RL!^m^kNXW0>T(gan#?v_}z+)v7d zGk7w7=yj9_fQCbfPwlEMRgSJtN^CBZHwHW)fd&#NUCRBOt-MD(Ua0T>7|BOxmfog_bHp8?xxn z1A&tlIW70eh)L3U1NuRAJF8WRUMeN!GCRZlO!1Sj!0{SLL5Y?qRt6bD18fznI!upm zQTZ^lamf{A?uo!0%XUn?9g_>uqafq!k<4xKjP>&TC3k+SfKd<&DNezu0_u1E)5^*^ zZuN}@f_{RUPcZ3rFr51kr7-DFxIwu)w@N2L2+Ch=ONZ zMxnm)>1lj4!hGO&J(yVfBmhvVwhhKYjd%1c%W`ZqZ+#Qid9y=?d;ZkSy1*&pVz^Q& zX<58Bm0gzZAea(5ji&K+qdADvzbPQnSqEU=zwp)lU-6aVfADAhV?BMYvMGV~b;JdA z1m77VRG&(wKtgMsnr>h!BWrCfXXnHWU$!>>WCE6cG|57CsrnH3j+7N0oSvl+_-y_L zk(Zx#X{6iPWZ83aamL%hkNM|1@cRXIfG$A83BQG9N8<)z2Y-;gr-CTt8Qm`k@_>%q zRAG?GV&u*k?*2t;bPS}E=nz#H)7+2d)RH9~>{D-4RCtLc-JDN_DO|g0j;hrRz1B#5 zkj&-a0v6jAraUL8C(a$)aMFt|*nIoIVdM7aNhbP6Iew&XEP9K^Av?6FYr5&{J<6<= zG>9bTHcAFldJ|rsN(bzgE+;HHk20&nLMq;lXU3H}h!Qpoy5!)9~-v;m7%K473vHuF}aWw&vS!hM(yBd z{hh5%=4ZJG-A?%ppVYRi2`#rg`kGvJ{FZ5cY+N`);~)FBet;YLz8|;z07S1Lqhcar z1~we`-D)h`a#a`mh+?2LtWK}`=cc>yy9~aiGt^7y_ag70vO&W0hYl3e}vK0T@TFBs3Asz>Y* zmM_vn(=}(xLu#C*hZDFBC<<c@HkK%BY_}SG&3G+TNqgWv z9s1`L|6nxpTX;T$$)^XvbOoD8tuwxdR@ZvQJzA5d;5LUk6v@C&xN)KyOI~x+{(`xfcUyq5=}s9I^Yo1O{BnB^{8h{#&Jq4^ZY%Y?s?#}Q{#PW#BH!BSuAmNK@& z#f#6i$)K?W(YRG-G3H>d*+T(;kLiVzaZ$Yi9)<&Gh6US0 zmViO@kC>Wy=$UNb1B5G-vOyW0?7_Jot56HXp9t7|O~qgptX#4g6l`)F%JlFdtmDmM z6^;-rj{6kKX`Q%a$wUF+44a`3e;1OU=GUW)V1Ge7^#2l*RLor+-Ca!0|A~^0SG83{ z6-MJj(T@uw-#G z;Ro;+)nT4>U1fZ>yv6J^|MOP&$yLDT(<^LH4i%OZ3FcUCFyHZ^mejz2`cJyaDD1H| zuKM%NqC*PNY85)o_H<5;_I$Jg)>2Kw+qEsXPF>ciBFFAF5YfO$Rfc*#S`93pbh|YK zLKdr^KjkA%V>Ho+b=<c4{4A`-eL4iGTCO^5$%H{Ql{W4exmwWNfo?cV^K$_&MK> zXS~X9JEvFjI}56(+%Y;x=6O|2s~U#0)zfaDb!+bP*WUNmbXsNo)VZ2LLrmVJaA=aS zRj96Sk3{5-ivNPi;>pqiMjXCPB-&EyF_b!F6}c3-G!MXyHAK0rz|p$(k-SUjlORB1Pn42lNm|K{;m^=Kl|J7-}Yocl*eQ|`@ zp=byz(Mi#2#7K)R>D($Kp_9RctcO&#>SQ#ArI~R$aJ*FdTkT%23S7S5*7!W+a`>Ea z*9kr+p8eU{HgC~RZ*JwsyV}X)eSSZlo!!d%cwKYs2lYY`lx!k^L1d2sN`)d2&WAr) zuNjR1!F3}Tp(4pVbQXxg(c5!ojzRAnJ`AU_an2fxdB+eI(;OSA5q zTsAOmUi)R-OZ=T6bBNz3Dxc)2!VsvydzZYjh8oL+vi^@WxeQSj7H?uXH5SVm(N(z zrp{7bYMC&`k+2k#&*rI?UP_^$wyqL-5Vn?CjqWHQs2&x@QbLnHpNa_wX{jK^AVf){ zmQSllu~uIo7guBmvS#H()ye!5)hxohHjLpzBp?i#lg7aEj!Bn-j4i!eFyo>nUTdD1 z{pH{}#mARxgbi*QvG|9DY&$`y3$v) z^niLJgGHV|31a~#3NZ=e^S+e5lm^?eZSaMtY9TOeSq?i=pCE<+;nAhU2oNV@_N!ey z8BQ@pL38U-p?tc#VxV}gcS8%?AM^emxwA=S+OiMoH~t`ia>HCdLyMcPi%q(Rnp@W0 z*kd%@6Qp>n9WEf=kebW}TyO}BKsyCXhXL*veU5jwl~4qtc8kqrM^l5R3Nzwou;ONI zL&j)b%uplq9p0L1i3)7EZwtJ;r_1r40KeO^4+*@~Nnr%R3@ms+3Cz+Wc-+BW$+T#v z$z`W?ca9vo%Q#*1+`k*VEI8AF7pZNiyx^{-j{%$gmRVC|^z5u2;oY@uJ0*f_{-+ch zMq?8x&jQ$}SIJ6+6Db`%G6*J+OqQ^ht_Wui_a_(2j7~5#Wjwm&u&Q`Ra1C&y-Hr9> znbssVCrFz5<$92+9XJg=+b~2PES=KKgDQG-k#~|2sQdJJmAgZkcF-49+CWjf&MOc> z$@f#tvqZKk#v&Hw1XHyYM6K)=ct&U9z(jZD8~Wf~>svw-v+$ve3dG~3u+65ea^%bd zMds#0F#W?(Bf6s2JpO~3ZSb%?F0q*u4jwP))2#i&6kzM;7#9SR^he0vF^UMM9*`}3 zkc8?4h*8VsDVvn15oH~7CI0FwmW>o zL|Zo9zeyY@59G!0o`riFQoICx{E-`|jDHWIIuak$iG6e;9`wl^fS!6HL1L2E(-&P? zoXcb0dXQX^9pni_siqA>I**g&Hz{nXQPk6;Hgs(}Z;ot;*KVUF`Qp{ebJ+fv*$~Ul zGhb~Z!y70>FU$B!Zrd?~=h5evcZ)U2zsre_FWRJ`V18iz5Ec^d&a(*+g~6|g#rh2Hf+l+VBU0aow?T)?t7C)B!^sI>|U;TK8i5s}Y|U^h65VP_ZI z$P0fV-3*BPWQ{e_XE026Zz zHHVYaI?BMt>e04otdea@ty6x|G-t`hc`n1!j|Mz zP$vz0w&B7*c~6aa9zh_K#)kqZai$wG zW%g4CtQ~YJ%&r}ryIiu~-Ns|}QM31vv-jbT9eRlXJi&@zgD+k(ssD<#!+aJ`X7ZFv zEo0Ailr08@9`o*ZeScowr|kw~_ParvJ`zM6*6;3^bIs>8?yY5w{wQtCJRXh8&vh(m z*HE66CqAM1@#b9rvgaXnxI*|-ngjsNv8@=uIfuUT1PxJ@nQ-> zGQyraPuHJnq46(9&6)^GYflK6%%f@=1k|vWP5zSsA1D(ifggg>90Aj zqhf9TX;=TS6idGJxxoa<^?9B}hm*g2!wERi74&U5JIx5`F>rF~ zG?=kze=0YVU~^i@PK?A&!99z$Zdb7#atJ#-1GCM}+MCmMrI&A&iKfMA`>SRd!|Fgl zErx}YZcYKS0_$#8ZQ}SLSKbUgD`M*~y(4QAiyCp8S-^n6<}6p2HygeZOEEDkKkF&$ z56Fho;B10czR(n1*~|#F!vpXrYhfQ4BMCoQ5uhYL2etA}KbvvZH6=c-)Koh-4%w=7 zmaQ`8qduL&1CyO?7hZ?h0;a&bYMnjuU<(Yb5|#)aDXnHUTD<3UGl}*#!OdZFwJrW( zuOZzJYP`$?XV-$BqRK0$0L$j!kwGmP@bPTr!BP(VRhc z^7(}`tieXtNIE#RvT}olRE1luaKkLBB|GbdO*NkE8XBDL%m>z=@2b~AhEP~6Bc!GS@<_Bap{K{$;ZK{ zNQ2|(cYVxu*w}L{6Pf@*R{WA_tmxfqu&ZZ_afRpdQ;q@v}I=rL|QvnALoL-TqpQpXWooV4!9(SKEN|xnfoA7dve2hlki7gk2#Zz z#VpOSnt0NaPrA4?KI8r~&sR`}`v)>3EZNNdLlk>9c1t4O%rTzlhXCU>W&*w-v$KoQ zec?jy!Dx;~y-shr=Ve!p`v-Jj`st@Qz|j2zK9I4fR%wgdZ&>C>)#!J#6o&%#%1xqn zZcaB8D`k0FhqZs&FL>2YG+-wGwVY$)s`{A%oa!idHT097>HB)#hAXY4j30L*GfT7S zDWItfqthP<=V1*Fq>);+cq>^3$T6qXv4iST(Jk%aqp*E+*Dc|eiPP51EJu+T72XJ&rR?r@69X=H!HhImW9W!cX$~pm%Uq*Lb=5&oaMra~`)6PV6~d&VsE_TXsfv#z>4j^u?-apyxqw&rnnZ^PVAnGBo+KYzxVVC}QN}s}mt!D+EDr zj-Fv8U@J)U^eB41Ea{xUbEy!`6^S)T&A+ zy6#VdnC6*W+DXR>KW7KX6Edp0%B~^v5*!bkb@H%?P4?`;nz$_j@Dqcxtzds(i}+TC zPc9^*cK+qvg(s?Z_UUWbdraww&hK^6N(}#f)=Fs#9B4_yP7^K`cDz3h(6V&oS{0%P z(`m5Vs#K3ImPGv~W@`N0tOXxBLIK!ED=H?9At<)59m!nw#KIoVW(8;H$~kjS0SVz% z?yLxn=){DPQL7l@3826!&F)dA(>NQQKQc9_mmluN_3@Im=*1q~hsos{O5_3CcY%3N zjwrQJ%f>cap}wHS2+rm|74%uMw73)t$K$ADF#ZS>ez3=+m?xeY(IlGLYK>^9_vacG{|22k_$E#t5$NQ=h>mPv=}r!9O3^^Z^tUFk~FF>Uz4%3w$cSx zORnHbQH6~T*L)mf+-abDU8_p@?D}BayX8)-IwP+=c(!)L$JNkpy}!hNQRvhX#=y5@V%XcTJQbF- zHfqA_j5|NwPw8{2Nptp+o3hNOw|wAgS*UD^sU~TB#t_oF!5w=m~xe;1L-% zw1QSd_95Q}QKc5iUj5-VBeqJ^+a=YQ)|rFLBX_V3xXi};85>NfjJqRa`L0D{=Rh_& zv{^$!BHTDhq}9m?G#FALlvLLPQWOh5%!mmpeSRQS1;$3KQ{aWqF6V!XgTZR_R>Nj^ z#HQJVtZoL3Ja$2Sx$1Vw(EHyrCEGsXkV!KAugoUf*oHL&J6z zBTI1_$}gSkcV?f0_}=D}uY={DV)f$&wRZ~6u=U(r_Op41qKMn3ibc5Q{!gt>h@omr?7*Wi=(yKf8TES zXOV>J=6_}a_;D+oQ?e=Gl}`EXMV(Q?LcQojszIcXgEK^s6Ll?f7+gH)eM8^0ZkW9y_7h_`Sy*(`WPI7L&c8VG*_DGMDl70$#Neo-qm?8N_+Mro;`xJoHQ9=&i$d-*(b-MV(*y9@N|T{fbH|cSud>BZ>HM|Qh8gz=LvK3)-XdZgrD3= zDExfsl+jYJ(W4Iw^Bv3sPbYW;`5gqBZYzUF7p763WCoR=e5{R`tQuHtkwQB+Er10_ z=#1Qr?$O~8f!In`Yr@J+>=O)E>7C7R{Y zAMrVQe#j<97r;{|uGSb#;|)KlzGyMIZ1eU3@gL(FGbGKv0R{qs_*cO{-T&CQ{>ij{ z=sNyoTH$k}*155|k>!{^MMBWz87h?XL!g}Mz@=TCQ;;ZIu%_F#ZQJH<+qP|+yKURH zZSJ;h+xG1<6Z0@PDAvg@A(}?pfb}`niVn@qpIA?e`SQW@H ziAS}DK;`BYt45EWMVn$281Q`q;ROV8BvHu5v8qKi7EutCYJS_oqE`GXe7?VUr=Q4D zd9HQ*VD_YxyH>K>7p6`Vf5y-C%6cPCjuq{U12ALgPZ96QmZ>`|Op`QZzfQaq)@bA*2~mrwMIL6u64FO{A$4-I-GWTo7!BT8t|#OB@98Ee+gsc+B&fRk44SRO$NUQ5 z6>?T@Ola026>KT&gCxX+pd{gx?2^9~hwC=lMWqX;r8T!+)j;&!!kT+O>@IxEy4xDq zb6<-gRn=_oafc*U$0W7J3km0jS^U*@9!&7+D+BSgQf|P;12(KB#s(9?i^ywn zB5fj=bRi1Ax1X5I$6>XUqR!(UTDQ{ZbkC%jh6%JZxMnv(gkC_0=S>_SQ9cRCPJa|g z;}c?T1aSfIq~{LuJLrTN`g^__4_AZ4*|;Kg zIG>~cf*H~Bq52@?ZF92kq@I2zMPm6m1kgf>i`ZLg<{)jof_OkNj@D6%z6`@(OJtK7 z0&)TnuL~U@m;}njZ)FM(XR)KSA26XW9|{h6k>YRyUXoD92(@2IrA|4kK9DNjEqRlF z7y<2Hwap@-E7(KGFPQi$Ehv12ZfvPG+Fo#lt#I99+t|{VI%bYilv5_MbbibDf;8sc zo8q`iq|yN*0s(=#pY_IXKatQM{i^$G+Yz##e&k1NsJjQS|eoP7s-T;uYp8b;HXHq6|A17Zb1}7eVUT;BEfLR7< z^s3H$H!f zY>xRQbk<@Xl;+Ql{(XJRnb~2+tu$0!6!dRxW$)Jf`d_0J4C<7!cXM+K>;zxg4Ib3C z+Hp#3M;qh8_VqTpJ@DzdKDX@{Ij#6Z$nLc{k=wqced!OKW-GH(SU|ZKaT&&3T9C`C zgr}$p3SNsM>w@g@2#3>8^ADm>OgV% ze0Co2<1>7_S^g3#=?AVPeoEwvWTUeulmcm@!Xrh1vj1k&dvbbL!8kszH?TS)x1<+7 zRBMbV)kyJ9Vg)voHYF!ELOIx*(*XZv^q`8u3dz(>RyIwttz2A`z}OEosdoaQuA&qP zl)Vg~5-s8nA(Fny671?Wn6jutUC24fGZ?!xZ8d>n+b^c>OxeZXYRK?%oS_dX{z8Ihhx*P*)bg zncy1Qj7EZ0YCe@f(IqaC~<>dUb)1r>$GI!~lPRBTxX`3gA{OtvsPDOYddg{K|nxhf(39pNFCQv?^3%+C8= zwQ4+AmeVS$?V6!(hTVR)Zc&wCS!OZ;n%%0TSgyBFA=)@nD0yB52f38;tlvLsIP|Ca zpQ#0vNzU6ciVh@wzg8syzi%OIJ8`!M5pF}2EN2j{Yiu__RY2%WxD zxdWlp;i!Lw94(pJJComU&5ikA5ZVYSa=4}?>%7V9!mrjS5K@_@yEQJ655`JC4>v#= z$(*K#fViT+P37-@*OzUt-yG9yWYy?y)&A9_Q61-epVgB`!p$ zBjI5^x9@p&&k+wwY)%(7Z9@Q(Ko$7b*~IpcU=Y3OqVlqSN5~P`@MgXHkv5%Aj$7P4 zQZ*o0Zo4uI`fuLXu&JmYC2wFuREvz=otu5MgDgf!k9cD7*w>DL`7fswj9P$(hDkAA zwx2H4f7^^|Bw?9~91#t{fh}>)5qJ_#I=c}G2W90NF0~>CU>)5~;SV`K<^*+;>0>z_ z3;Ec9yX$x}yUsZu`~wiSMqjP?!i$Deic2^LNVykfrY917aval9`ijjqQYDa z2VTw+X5Yy#UFu(s?Q4Ox1Ph%Jjfnk=4qF2Yq0%egFYO^H@f692nR|p!IE+imOM3Pa z6aP>>L0g(&LaF+)ih(wCmJROG%zSEHE_sb^e#@Suf&Ia)d|FPxWhUyTfyV#*!+;M1 zWW3ZQ8|nT>+$jtLBa{_`I7O)Hoc^c`zB8O(-nVP3rT}T@6ZUn971JGDvJ-=Edi=Fv zKke?`8@{<8lajA&V?Pt_5N57u)9{2KX?QHxZ#O_%yF(O~-o(Xw z7Kt!F>hcd@_h(kq5AdqJC6;6|1ZQKjF(mWx`c%R!pKr_EJR%9BB_c(6DR>cB_%M@w}a7V5t z=x*PHZm+{3V=5>c9UH+?-|)Hk0&YaRcGV`6By4Ah-I55no|v>Y4I%S8qsb#FNP;HP zIegv`Mwgu**2>QCye1#LE1HLm=B!J0*OY|hMJE=9FPXDGKknQK4@<2yMoi6l_Fb5)87EKA zzE5zcxg3+&>^`m04#!ub9aX9kF!ptIO7*ODsrl)c$q}~v7aDmlOz)dvh|oczdSc>| znA9V@hYe7tZ}_*uW(ld$Kwy(rusQp))B`pXObnorv6J+gNF&?l#6;3Y&mTTfD3kSz zk81P&FzzU=;v;BeNkowQFh=%~R8?rPjFroh*)BrNh=VKnMO@MpS5$^ViZ~$yh)vWz zct|pggDw2FG?(?2_qCycohIBiZz;_3E=BO*X5#>$#a0#9BayGOk>tcSMOqwvzEeyK zpHtI)@XetlD`|imB(+K;=>>Sl;9_}@p+$TVZpFFd#hA8ZOVdMaT2X$2Gr{_svwy|w z9&Ly(lmwPQx~~U}N=P2Xl?Y!Jxz@l*S5mVG%8!9AYcDHUP3-}f&B9D5q65~8%zEAp ztY<3allf=Mx<}Sjz)tvpm}U0pmCA@#-f9-pLTedUB$Is3s`rPyUCW&1X_n)yF1i-8 zaF8;vo7QIPj|))?ETs(&tx4* zdBgqiY(NDY@iJe(&d%T666$mi>y}|_;5rSc9Nq1%n(!Dc9e)(U-9Q)7&33d?BjGtX zyV;m)GT`{o2^uHu#Q;je9t%Bsr}Q-4<{+&+8kbE@izbtj7-IWYoha)2f#&-&79ccx zX z%ia!vdPY0qI`bSIY`^)G$KcFnscR@|#=_Kn`r`g^&vM+FTVFP8XY$Pc8;qA$L;UB} z6I4|j?PI>5ZljNWQHar|69&Rf`jURX9?q+70<52x`Udv6rfyUXjv)jcB5U(gn-RMj z6op*CZFApybT#$jec%fe`ZQy>d0BEd)624XeGXMj)wxP+M!jutRZ0}wb&Wv6>!MhH z1y6b8{hxUJ@i}X2K9YhbrcuO1SmHSg%*DT@xD*+61~i2!XQ*)z^o#46vgY{nmy;x( z;#Q;CYk40Sv7t?`GjWw3gukpD)sOr5P0i=>)0`T%0)jl_@LhTeJz+0)<+FBCRc&E$ zJgGST=xn^{rOzE!=uy>w(Okz1=_miDVBGF!BmpazQ!)8#9uq8aYo1cQ(5H&iUhhSw z2FJ{cVM2alLT;CAqg472?=TOnWZ1B&|Q9*0oi^^!ocpvE3|EM>(?6P{cdctv+CGF#Es zlCCdlraqk=!_n%YvdLi2YRP^n{#72bB4{DLIB!@*67|(|Z_OUKoie03qmV}(NX3gd zSxB!d9EqmVAj)PE`26MGMY*&pbpvAn0le5nSD!r48ayu&F7BR4)-B?sAHbzB;x;Wn znUVruJlML)_fSz(pIXdj&^3BPxSWj*mQUdnr{?9Y#gCTl8e6yLt+u$7=l}%d z@+OM7DW684GfX5SS8nLb_5}+tfGasKz87iz^jFZ%1>CpO&7NLF@-T@c9=X-cJ`l)3 z`B}LbxfT47xnpTx?VYqO=R(UDX1oKyus%-T?6e9%X*wup^;>Lz<;`!9r>t@UbuWHmD9UxRQ0swTwc9M3+iglm7=zdCSO`RfFvS4~ljuNJJ@9Ft z-bel7_M=~VcW||4Nlr+3dC_#e_}J)jq8cMU$ztXbhvZg|UiOQ}CT;oot-9P2^!5ED zcl(uP`_wIl9aFoU8^=M%DcK)jimM}3`6nxgf4l1evBc)|(B2xPAyucI zvk>`#C`X1rh&_K%AAC#U6eSl5$!8g3_Vsd33~46@N+z=wy9_xPhDst@wdb?|@FG@c zQZtwRBw`U^#b~sz84hF^B!0yQS=$~2mnwFBlUwV8@&X%ti{pfmV;s!hd8awRVqoen1*?OEgIn8|^RBA(ixiiC+oMj#IQ&5sR$<&Z@n&obhB2p@5mZ6|@EU-z9J()?* z?_?7bmX9sY)#vEBh@dUY$OHHyPv=q^1$gI*4JXD=5i-~v#w8_!ewK2g^EL(23F6N; z)|L}0G}@~u?8!N@-FgrmiGk--48Zv+9%OB}Q~y3*<6GCK3`Q_04oEw<;!yr3tI(cw z&*z|>iz5)m3>(k2e2fz$eVeFSzOrsfkFhQ52o_C|flT*tlE{jr4i`ifk}r4U3@m~= zj68xWjUXKQTKdB4QAC~kPk^#dzXN0)AoJWb;V!`@(|1fwf;PXD`Hpll!rA#DkCKbr z!+p5XrGMWzdU!Y+7#Ohh=}Y{Lb?Y%9-WlAlcjAbg1lKyy*QXxz8be(y%#v3zpHby4 zVz9fuQuM=JyB&QaD4=Vza$G?vZ;b!9hg&qbiif?XZf_5s$mmfMz+8U@6y8BEj3|SS zL|10`eOJTB`^VU;cGiCgiUkP0JCmXv?JTKT%-;}fr_HQOk$xy2A^)^~s#ip}KUo@< z$Zy8A+;hVn5GULTx!<3w8f{E}!DSuO)3_E}^C005fsq({cn#4Vxw9Xhds|{ zw~Mw34GWGjMPYGUGDLGY)l-v$B4T%)vCvzwEp4H~`1A^N9eI1eq!Tg@e(+=rE%qPp z+;F!=RIJLjG0gvmz?4RlKD!^p)WUH_^KT-Iv?-QRNT zEw5M_V>1EicHl#0#$KW97=;_#5ItNt^)H?oREFyNnyJ#Pfw}qCxr-91WeiaS#}CbH z5UAeJCSNk89ab^3(dUrr4MbDK(C6<)bOmE{FJ^MY#TgvI!vB?*o=q;#Ux=XBp9Tg#UBgnVV`Xf@RQBsSG)Or5-t@ zn49R1p8?uBSt37#<$dpB1mOC5aT34Pcr~|ll+RY3Tqy7&hx;kXKs!0A)Dm@JZlN3= zP-z>O{+iU(fywEK+OLZorM4Wzwl-NUY13`;#zC^`Qo_-9iFfP;x!-!60cio1wycLH z)SGoPZs)lWLLg6s?A_U{$HA3An{K139;cMSyZX}4A8h!#m$303q;7ES&t9NL?uN5B1fJO;@MKx~dKGavViThpjT*M!wa0@g0p(Z3BoC^Ty9 z#0T@IP#9qicECW;0&76=m&Zohi2m)(a?K#j@BzFc?{V{Q(GumAsVaaaOo8+>a_Ol0 zGNpn~AH9@bDuZ-hqn|0FPK}^lUW`mFJ44uI9cjWTD)>Q(Sj@E#H(0Xv8MUW#*C%CObPJj5d)63Jx;b*FvBPe{TSpay=wA(mO>qZscbmHFfH=}8hEV!H0IIvjwnI{N>-hk`d&!2 zB80Y$Xf$mDK*!##uhx=6nu!g>r|NgS$WBV)ILL)Z_O6dnL})x|2A0}ZP4QYX=^t1H zJI_*}uzv*=$4~47F#V8Od(=|T@@hKp%Cg!Xi%oz&E;BkU!A&`5Hw-)3{!XQKId(5j zr-Pc@4#XOmHas}$haA!&{+gv$Fo4Y;iv$^2suXoeX*t zMqIR3d_`nY8PD(~(`Z5X_-Vp}KI?m7 zm@_>lGYySbxStF~*TEd#10W*N(;LOh!}2w52wY=|e|xLY67kFtdNvT^Z-h;ry?I*y z`I)*8kyGv`gTWP;CHj~FJG=d27w#+YFQ-)ROe99rSZ%^P`lwo=cFluxg)!ACh zo$A3OOm-Z9Sv!l^_+A5!e-XcKha@3%;c#-$5v5j&8v1U_Ue~+aylVs4k>g2l)f?iQ80}wet5;~r zb;_M#39KLM<o`SMmyXP9il8_8_HKeYB}@>{Cu*9- zlDJz88pnHiEG!yG5SqY5i;#^_rjBaPy7~b6v2r@ruC4)AT{|Jeb(15}+v#_QO0%(e zi><|o2Y~kGXkekP5@)Eo#0&q*YQT+x*OXfVz^5(P>`)?e@a~+NRQq*1c6l;l0D*x3 zq=9|z^bEbWPwbptaG}C#75OCLk2AV3R?|G`)M5+diwdG~3;OQ(Dq8fyzf(!vq?o9Q z!$a)s=tm^uqyi5yMF*5r%`r9iSJEFTs0%3~^qoQ#jqmeG-*cePmcVP+Ps2p5l#D*{ z$Ks#w$cc5JV)2sec6V*YenfRfrF!kiE^Ps+KgZ1F+xo#wiS%77fbR8+VjBwUrz7y0 zohU-C&MTl#My=ahO|72;n^}q+4<^tV51tZ9e^}=|c+5bEkk>>{eg+OH(H8%Cv_$K{ zZMOObGQHEFT5kk-nrKf>Z`l;#^5#}~S*zlc;J!-3loVmqx<fdA0TVq2L=HUaTl6!!KuB2u$Oz~qvW>&^@7|cvusi_S<5g)HA=ETl5@WVZ z;i(x#qFF>RC4yQ`64-DGkGqhv{vzewI-7R zc=((Qn|)Uea!D0;MMpGQ}!j`)Q8hTTxJR`~jY`_K1_ zM(%S;IW}=*wq7ogX0_*n0IjnW{6!#u4g+~+DOm9r$XCUePM7Xf5QJ#jY3nXxy!bS( z&U0jA1vArW$q!9Fyh%B@QB`{Dmwq%&ek`uQTUV?zR6Ja2xahLc;)6#_*bVD47XI1Z zVacj!*m`3xOq%=Rd-#g4O6Q7*^Q>LYp@%cr50fwPL7#(I_P!4O@y65b>ZWe*av2AO z3KEVeQCUh9gD(u(9j!QBaE|5}UcQ%MQVYOqa012P*jn8Uhh;l24ny3QI@{> zM=gGYZ<;!c9pWjNu zeqQO?T0(Z!utcuV&mzRh+)b<@1XxmU{z&gY0~fM8zATib*4+T79%O7mmCPru*ueWy zloD^z$A=W41iN;~kpYj`wT3Tg>YvabqtR0xc!qly)xJ#JbSw~OnwA}pX*$Ghn}+Od zMLugpe7ayXcCQhMC`b8O&qgh5D;hb|kR-3)@vi85Mu9O>-0x}kYB{4a=$kcM-Qvm;=I2b-2FqYG@0u3M)sFgPVHfeca4B zak48JFz4?xc?bvOA2&jcwro43S=5n^94c+^nkY%9?t)#? zk%^a;EcLG>|4nL&C|%Wr-DBI1&w(A2F|HPFLBpAY?YD82;xy+e!Vy<&H!|iPhs|_; zq$!B|Yc(@Eb`wdo?o!XrZh6+vCOb>e{{9y+K+c6jmK+@{Psb;U>cF2P2OtCKmTsIs zbhmqgK?v#|(`3NM_soxnE|r*}Ohk}dSOg2CPTavmdA*JZjnnKZC_g7(H^It^6Wipp$ptRzZubq>c5{{e-s$8L??0;mq zQEeHKlTes<&^3DLb*WLoN)mb^kuRPWx4cp_X;nSbr|*m0IO0OYgSW%CNLfcOO*2|VQI@VYYyKc}&H=N` zai;cj=GWOstvp)iy~v>{N%BcoEQjUp@q<%_ASv!8tu zu>ocku@LJnM|5T8q?s1nkvj*c>ODeVkj;I%xX>Oqf>rtw1Cr~?x=C*kTIWNt=YZFQ z7eK>xFuzh~WpvR8`k_0;Wq2G=dFa4|5_sLo!BzI|W@==68(b3{Ryn~mc*Un-w24;^ zGw!(83(VjbTpTqGNQ=;lP(tvQmpcYU#?3+1HJT`oLFSK8;;i!okx)WNzWdkl6k&G~ z%1z1JMI-SV!pnwdYd!B^r@hht(Ga;eVGh*_8>?B#WeIR!97C%LGJALqCk({xG{ZJ8 zPz~y2;mV?)Y1Ie9oyhnJQeZ?aEOn@C{WZXAR9XMhILMvhhIZ2rYt=fiigfC=-xAcW zg;fUOmbq@ls@}iowz4AyN?b&J$HC`?4-S}P?_Sfnw*!(BY@)$Japi9*7-PH%G-iI* zQ10G7IV`x+EN~M}FD!H-S^$g3TT2=|^F;d3cr~6A?5zyKbTLSRI;$=4GS+7FFZEfQ zhnDIP6nb|0v1(+&AVP?9J+SjHbRZkjwu9#p%PGxtbvkSeEo)T!OxaX)f)HBh#fMi^ zH=?=F*47k81IbRi_NqCh6e*mIfU%P(94Da1O*d@b`66=<%1&vgR9ud5C3x--7GE=l z@s~G3t77*U>OXGMxCsI;61_D>C0BXblukk#Iv z_?_=y(c!2r|JUd5aee#K{RR2TKI;9~>g%ObNPQSnodv1#rKaT+AV#fK`R<|r4dO-_ z;LLTg`5{K$7A%4{)xaI`GuDdkAE!x(m>k0)1)I)|XrqR0Dlsk~e&g9mR}_X1lQj{* z-k37Q5_qa)%ofo!=DJg#ZVH&orD-3;J6+KOa}^iO32L?9X5^EQ6W#l9rBrv{nj1KUYD%cs6k9VzQS)pV ztUOj$(w;9}erolyC=^y$-)>%P?INI)(p@mDKrr zE#W7Ex$xJ6;DUq{{r0JLMoyJ~U5y9mJ*`bhNmnQNZN9AHBVX+3sfLP9x8;`mSb_ZhdZ}>s z1ObS5;lAx^mt-#lY#VtwT;)ynf&my6#9P=c5OoDK=<^@@hzF?eG(v>7@bT)I%3VR? zh8i#(u+g_SaEb7|KeCT6mllV)7)qY)F!`FT+6`{twh-dMXy++za61YrX6&)#mPIgR?kY!gS_SY1--ucA@VZ`l>;sptM+92MiePWz)c1RV+`xVS zj%Paz8PiETc7pR3vm2iF7$1j!!prPhk6Ck)eMYy*d%l<9=$oVC+2t<6U&S}{`klf_ zXSX=|^4?G7p1judUa2Eiq`O88D>#eu54;RZVTf6rWI>RXxCn%8Yh-Q;uVQ86H&l)V zEg3C0#s<6)1+WN`IEB(=QHBkOBqa>maHnKGGmueHoZVs%EL+8bY?daLnzUG5dJH3z zu*P-^r3XCg?ZvO2k+>bdEmo{Xyg5A1MxG#~RQk50bUH|L4j`hL$1dI3ptZ(`ovj-@ zc&yG*d14Z;)Mtea!0ARQ)K)ehiYRNgyv$rgNp_!)<}G!Z{S~5qCd(;J7qJ+-jL5e) zXrw#0{KYFIAe-iEd!et(r;uR#*qfDa7cKWt1@!1c_jY_g+{z)m; zTgWJ@BPEm(M9r@+so|=?PWCt#Ap`>XvnSp*?wfL|zWrYG=B7ecJdHXeZb)Kc=}=py zP!L9o_X8fyQMt7jU0iA#$;SLjk!7M}Fye~#IK#9Qb}0?MxN_#$OuNCTie$d5aBEb_ucXOp9caFoH$sSMRF5Ob1lfQ?? zh220dA*;Z$Il^iX5sw%Hr43(F>rBsF{PM3)mR*C(KIi2%+XKM_uk4K~w+EJ~;y>)z zb$`d{SzKNAX$v17YIBySvUSJk`20?+I5@6R_s=EDF%i~-{-Ht_#%-Q<_R_s(dUOoN z*6xzQ7kfx;NGk%Mmz;%_!AyR;S3-yq*LGN#3LY1s>M|!tuqY8?S_eDT9pxpOoP_4g z5qzw-Kh6=ax0$8B^m*qfiH|w#KZIs{fES0`a0Nr#=a97wZJ?u9(aFqqq71_qfgcF(=i(H|A`Uy7EuIgPt}IBq{N!zt$4zF7M-A@RTwN{prjVvqV-7f;if<9cKRA2A+;(6rlClO++LG z20!7$OmHd>*S;BHI?ow+ka8vMUh{{gj?74D16gd{n_53^k17&KPa30SLouLdX+s|Q z;|Q)wKXgqXmeL|Xa%jpNJq1}bl#fCMTLq@tEz|HX zv?J4maxfaY1L+jMrKBMvigtVWZjREUHYW|7UyFD z7BNyAer%A&L7YYg--4XnUA=7RSP7X0MG-lsasHULbLJ>vT}PJNIYmmPkWqs|vBp|k zEO~W%g_=#=9FRb@pG;*I*YFk=`i)V`_$`X!S(IdFEN{Fj#6#S>vsZdqBIjpCau7-j z`qG6l-9s~=KV3sF`QOzDcdQM)lA4#Uj_#?Q_gjIj*GW|XpxiIYj zvetIT@xpepW|i750O{R1XpL08=jg;XO>!oo`3mh!wuchqE&D?Kdg7|S${t27SlfH0K3bq57{7re`~G$$_GhcwTDV8dkm*FLK!=3Dk8r1>%pCxs zbmbuan~%~9fQ3b5rxBHU-D+bSOJe~1F^YZh58y3$(fmgSZoW7$S8qF*`uP!0Tc}v4 z8(=Q0D>9Ck@ymUOY9R)^aH9u_QY187Pb@OOm`=Gzy~l25@!OqP#cIol_WI$7XZ}js zF)dTHhh|1qOHo!wpSea*ajyLJex|+dv6N+4MALwyqI-Ov>KqR8O#~_IobM4&UX{X; zYs&_$eA_HVI}({VJOZ#;cJ={S?~~R(<`kB(cU_Q-v9@S!4I|E_-FjN?YO2mG9-@IE zaa!(WlFMkc{ak7kIwmodM*6=Rtn0Cn%JwN$U85;}ndIK&4r}^>4SvK|d4#jV!UR03M67;@}+0uTw= z9PXLM;Dk)p_Y&zYIU{psRfSMuCfXFG?HI_^6KT5Xrn?9)Ww>R`=ocyMQ%v+IDex%x zT?rEigw95*;Np`DN!6u;_M%ZILue$%4v1!wn_0);E2N@&*X0$p(1NzrFIlqexr4}t z%od_y4$OH{!cNoT_k71Omgn=Vhz*#oUl2;#&Ok}MXJsVkOL$~$w8pfw1|C%O-0S{n z0p|8R5kg;eAlxR&aiPVKQ@$^QsdAWhl6V3>-B^wwee3C#zXpqa&XrgRc>QM?3fveH zodkL;R({;Vvk$%E5@x*vi#vdxj+2s<65|G)S1<7;_ovnDbCSGtp_yL4`TZ0r6>jKPS-v z-y7H;jGwt>rjZ`M{Z>ir2mk=o07G&Z;(0&lNrCa*jp+e%J7IpM{UJ|+v|Z<--CUXO zy|eNH0N=;@_m~(M-I8CIDn0p7<8?r5FrWal(SQH~kC7E1t2-)hdcDno2N&6iS9-n| z_(`m*U?n$twFSCf5HIK^$VI)>QdsGym~CU~S{+}4Ow)o!r1%3tb z4D)cRpIB9fpuqp20HU@8JUx-Doqc2WM^*cbeigWQ7m&6p_oWryHs z_X2ZZwSSLw@u%8-K6Nrre2c#KDr@)v-#Rt(ed+=1plpMDDkI;+uH{zRL4Ffe)_iiW z{iF`~+2#4sQ9pd6KbE}ni~a=MIZYvk=wSeM^cr>P)EvXk&K%MB+Dz7c-w6CP=Z#@U zqK z5C0IiK4S0xPHlg>6r(ozDSb|Xbl3^_P6Iz&IPUL0>k-<8P<8>na-#pMt>%Dz<=&kc zGuih4%o+@MU(wOL<^TH$c;`eEphy0?HR>1ks%06*F2FC=_G1~}KI;ee4!nD!f361z zy4MT%nOgV84!}Qp^ZmZVO?xlrpG(}dvwrZ6!X|ka>3w?Adh{bDevAFi4~~}bRbYqz z(DLmUT+oyM?G%PEMt`2{;HUf(^gJWR>34qPKk^R1R(El6$k1q-!`aM#S&e`4hf2ZUMT~*Sx0RU9Y002P$ le<@PWyj%{{x-|yYK)2 literal 0 HcmV?d00001 diff --git a/kits/apptentive/apptentive-6/settings.gradle.kts b/kits/apptentive/apptentive-6/settings.gradle.kts new file mode 100644 index 000000000..09e637bfe --- /dev/null +++ b/kits/apptentive/apptentive-6/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-apptentive-kit" +include(":") diff --git a/kits/apptentive/apptentive-6/src/main/AndroidManifest.xml b/kits/apptentive/apptentive-6/src/main/AndroidManifest.xml new file mode 100644 index 000000000..61363294b --- /dev/null +++ b/kits/apptentive/apptentive-6/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/ApptentiveKit.kt b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/ApptentiveKit.kt new file mode 100644 index 000000000..e36762893 --- /dev/null +++ b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/ApptentiveKit.kt @@ -0,0 +1,373 @@ +package com.mparticle.kits + +import android.app.Application +import android.content.Context +import apptentive.com.android.feedback.Apptentive +import apptentive.com.android.feedback.ApptentiveConfiguration +import apptentive.com.android.feedback.RegisterResult +import apptentive.com.android.util.InternalUseOnly +import apptentive.com.android.util.LogLevel +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.consent.ConsentState +import com.mparticle.identity.MParticleUser +import com.mparticle.internal.Logger +import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.UserAttributeListener +import java.util.LinkedList +import java.util.concurrent.TimeUnit +import kotlin.collections.HashMap + +@OptIn(InternalUseOnly::class) +class ApptentiveKit : + KitIntegration(), + KitIntegration.EventListener, + IdentityListener, + UserAttributeListener { + private var enableTypeDetection = true + private var lastKnownFirstName: String? = null + private var lastKnownLastName: String? = null + + //region KitIntegration + override fun getName(): String = NAME + + override fun onKitCreate( + settings: Map, + context: Context, + ): List { + val apptentiveAppKey = settings[APPTENTIVE_APP_KEY] + val apptentiveAppSignature = settings[APPTENTIVE_APP_SIGNATURE] + require(!KitUtils.isEmpty(apptentiveAppKey)) { KEY_REQUIRED } + require(!KitUtils.isEmpty(apptentiveAppSignature)) { SIGNATURE_REQUIRED } + enableTypeDetection = StringUtils.tryParseSettingFlag(settings, ENABLE_TYPE_DETECTION, true) + + if (apptentiveAppKey != null && apptentiveAppSignature != null) { + val configuration = ApptentiveConfiguration(apptentiveAppKey, apptentiveAppSignature) + configuration.logLevel = getApptentiveLogLevel() + configuration.distributionVersion = com.mparticle.BuildConfig.VERSION_NAME + configuration.distributionName = "mParticle" + configuration.shouldSanitizeLogMessages = + StringUtils.tryParseSettingFlag(settings, SHOULD_SANITIZE_LOG_MESSAGES, true) + configuration.shouldEncryptStorage = + StringUtils.tryParseSettingFlag(settings, SHOULD_ENCRYPT_STORAGE, false) + configuration.shouldInheritAppTheme = + StringUtils.tryParseSettingFlag(settings, SHOULD_INHERIT_APP_THEME, true) + configuration.customAppStoreURL = settings[CUSTOM_APP_STORE_URL] + configuration.ratingInteractionThrottleLength = + StringUtils.tryParseLongSettingFlag( + settings, + RATING_INTERACTION_THROTTLE_LENGTH, + TimeUnit.DAYS.toMillis(7), + ) + Apptentive.register( + context.applicationContext as Application, + configuration, + ) { registerResult -> + if (registerResult is RegisterResult.Success) { + Apptentive.setMParticleId(currentUser?.id.toString()) + } + } + } + return emptyList() + } + + override fun setOptOut(optedOut: Boolean): List = emptyList() + + override fun supportsAttributeLists(): Boolean = false + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + // Ignored + } + + //endregion + + //region UserAttributeListener + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + // Ignored + } + + override fun onRemoveUserAttribute( + key: String?, + user: FilteredMParticleUser?, + ) { + key?.let { + Apptentive.removeCustomPersonData(it) + } + } + + override fun onSetUserAttribute( + key: String?, + value: Any?, + user: FilteredMParticleUser?, + ) { + if (key != null && value != null) { + when (key.lowercase()) { + MParticle.UserAttributes.FIRSTNAME.lowercase() -> { + lastKnownFirstName = value.toString() + } + MParticle.UserAttributes.LASTNAME.lowercase() -> { + lastKnownLastName = value.toString() + } + else -> { + addCustomPersonData(key, value.toString()) + return + } + } + val fullName = + listOfNotNull(lastKnownFirstName, lastKnownLastName) + .joinToString(separator = " ") + .trim() + if (fullName.isNotBlank()) { + Logger.debug("Setting user name $fullName") + Apptentive.setPersonName(fullName) + } + } + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + // Ignored + } + + override fun onSetUserAttributeList( + attributeKey: String?, + attributeValueList: MutableList?, + user: FilteredMParticleUser?, + ) { + // Ignored + } + + override fun onSetAllUserAttributes( + userAttributes: MutableMap?, + userAttributeLists: MutableMap>?, + user: FilteredMParticleUser?, + ) { + userAttributes?.let { userAttribute -> + val firstName = userAttribute[MParticle.UserAttributes.FIRSTNAME] ?: "" + val lastName = userAttribute[MParticle.UserAttributes.LASTNAME] ?: "" + val fullName = + listOfNotNull(firstName, lastName) + .joinToString(separator = " ") + .trim() + if (fullName.isNotBlank()) { + Logger.debug("Setting user name $fullName") + Apptentive.setPersonName(fullName) + } + userAttribute + .filterKeys { key -> + key != MParticle.UserAttributes.FIRSTNAME && key != MParticle.UserAttributes.LASTNAME + }.map { + addCustomPersonData(it.key, it.value) + } + } + } + + //endregion + + //region EventListener + override fun leaveBreadcrumb(breadcrumb: String): List = emptyList() + + override fun logError( + message: String, + errorAttributes: Map, + ): List = emptyList() + + override fun logException( + exception: Exception, + exceptionAttributes: Map, + message: String, + ): List = emptyList() + + override fun logEvent(event: MPEvent): List { + engage(event.eventName, event.customAttributeStrings) + val messageList = LinkedList() + messageList.add(ReportingMessage.fromEvent(this, event)) + return messageList + } + + override fun logScreen( + screenName: String, + eventAttributes: Map, + ): List { + engage(screenName, eventAttributes) + val messages = LinkedList() + messages.add( + ReportingMessage( + this, + ReportingMessage.MessageType.SCREEN_VIEW, + System.currentTimeMillis(), + eventAttributes, + ), + ) + return messages + } //endregion + + //region IdentityListener + override fun onIdentifyCompleted( + mParticleUser: MParticleUser?, + identityApiRequest: FilteredIdentityApiRequest?, + ) { + setUserIdentity(mParticleUser) + } + + override fun onLoginCompleted( + mParticleUser: MParticleUser?, + identityApiRequest: FilteredIdentityApiRequest?, + ) { + setUserIdentity(mParticleUser) + } + + override fun onLogoutCompleted( + mParticleUser: MParticleUser?, + identityApiRequest: FilteredIdentityApiRequest?, + ) { + setUserIdentity(mParticleUser) + } + + override fun onModifyCompleted( + mParticleUser: MParticleUser?, + identityApiRequest: FilteredIdentityApiRequest?, + ) { + setUserIdentity(mParticleUser) + } + + override fun onUserIdentified(mParticleUser: MParticleUser?) { + // Ignored + } + + //endregion + + //region Helpers + private fun getApptentiveLogLevel(): LogLevel = + when (Logger.getMinLogLevel()) { + MParticle.LogLevel.VERBOSE -> LogLevel.Verbose + MParticle.LogLevel.DEBUG -> LogLevel.Debug + MParticle.LogLevel.INFO -> LogLevel.Info + MParticle.LogLevel.WARNING -> LogLevel.Warning + MParticle.LogLevel.ERROR -> LogLevel.Error + MParticle.LogLevel.NONE -> LogLevel.Info + null -> LogLevel.Info + } + + private fun setUserIdentity(user: MParticleUser?) { + user?.userIdentities?.entries?.let { + for (i in it.indices) { + val entry = it.elementAt(i) + when (entry.key) { + IdentityType.CustomerId -> { + if (KitUtils.isEmpty(Apptentive.getPersonName())) { + // Use id as customer name if no full name is set yet. + Logger.debug("Setting customer id as user name ${entry.value}") + Apptentive.setPersonName(entry.value) + } + } + IdentityType.Email -> { + Logger.debug("Setting customer email ${entry.value}") + Apptentive.setPersonEmail(entry.value) + } + else -> Logger.debug("Other identity type") + } + } + } + } + + private fun engage( + event: String, + customData: Map?, + ) { + Apptentive.engage(event, parseCustomData(customData)) + } + + // Apptentive SDK does not provide a function which accepts Object as custom data so we need to cast + private fun addCustomPersonData( + key: String, + value: String, + ) { + // original key + Logger.debug("Adding custom person data $key to $value") + Apptentive.addCustomPersonData(key, value) + + // typed key + if (enableTypeDetection) { + when (val typedValue = CustomDataParser.parseValue(value)) { + is String -> { + // the value is already set + } + is Boolean -> { + Apptentive.addCustomPersonData(key + SUFFIX_KEY_FLAG, typedValue) + } + is Number -> { + Apptentive.addCustomPersonData(key + SUFFIX_KEY_NUMBER, typedValue) + } + else -> { + Logger.error( + "Unexpected custom person data type:${typedValue?.javaClass}", + ) + } + } + } + } + + private fun parseCustomData(map: Map?): Map? { + if (map != null) { + val res: MutableMap = HashMap() + for ((key, value) in map) { + // original key + res[key] = value + + // typed key + if (enableTypeDetection) { + when (val typedValue = CustomDataParser.parseValue(value)) { + is String -> { + // the value is already set + } + is Boolean -> { + res[key + SUFFIX_KEY_FLAG] = typedValue + } + is Number -> { + res[key + SUFFIX_KEY_NUMBER] = typedValue + } + else -> { + Logger.error( + "Unexpected custom data type:${typedValue?.javaClass}", + ) + } + } + } + } + return res + } + return null + } + //endregion + + companion object { + private const val APPTENTIVE_APP_KEY = "apptentiveAppKey" + private const val APPTENTIVE_APP_SIGNATURE = "apptentiveAppSignature" + private const val ENABLE_TYPE_DETECTION = "enableTypeDetection" + private const val SHOULD_INHERIT_APP_THEME = "shouldInheritAppTheme" + private const val SHOULD_SANITIZE_LOG_MESSAGES = "shouldSanitizeLogMessages" + private const val SHOULD_ENCRYPT_STORAGE = "shouldEncryptStorage" + private const val RATING_INTERACTION_THROTTLE_LENGTH = "ratingInteractionThrottleLength" + private const val CUSTOM_APP_STORE_URL = "customAppStoreURL" + private const val SUFFIX_KEY_FLAG = "_flag" + private const val SUFFIX_KEY_NUMBER = "_number" + private const val KEY_REQUIRED = + "Apptentive App Key is required. If you are migrating from a previous version, you may need to enter the new Apptentive App Key and Signature on the mParticle website." + private const val SIGNATURE_REQUIRED = + "Apptentive App Signature is required. If you are migrating from a previous version, you may need to enter the new Apptentive App Key and Signature on the mParticle website." + const val NAME = "Apptentive" + } +} diff --git a/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/ApptentiveKitUtils.kt b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/ApptentiveKitUtils.kt new file mode 100644 index 000000000..ecf7c818f --- /dev/null +++ b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/ApptentiveKitUtils.kt @@ -0,0 +1,47 @@ +package com.mparticle.kits + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Context.RECEIVER_EXPORTED +import android.content.Intent +import android.content.IntentFilter +import android.os.Build +import apptentive.com.android.feedback.Apptentive +import apptentive.com.android.feedback.ApptentiveActivityInfo +import com.mparticle.MParticle +import com.mparticle.internal.Logger + +object ApptentiveKitUtils { + @JvmStatic + fun registerApptentiveActivityContext(callback: ApptentiveActivityInfo) { + val broadcastReceiver = + object : BroadcastReceiver() { + override fun onReceive( + context: Context, + intent: Intent, + ) { + if (intent.action?.startsWith(MParticle.ServiceProviders.BROADCAST_ACTIVE) == true) { + Apptentive.registerApptentiveActivityInfoCallback(callback) + } + } + } + if (MParticle.getInstance()?.isKitActive(MParticle.ServiceProviders.APPTENTIVE) == true) { + Apptentive.registerApptentiveActivityInfoCallback(callback) + Logger.debug("ApptentiveKitUtils", "registerApptentiveActivityContext: kit is active") + } else { + val filter = + IntentFilter(MParticle.ServiceProviders.BROADCAST_ACTIVE + MParticle.ServiceProviders.APPTENTIVE) + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU) { + callback + .getApptentiveActivityInfo() + ?.registerReceiver(broadcastReceiver, filter, RECEIVER_EXPORTED) + Logger.debug("ApptentiveKitUtils", "registerApptentiveActivityContext: SDK 33+") + } else { + callback + .getApptentiveActivityInfo() + ?.registerReceiver(broadcastReceiver, filter) + Logger.debug("ApptentiveKitUtils", "registerApptentiveActivityContext: SDK < 33") + } + } + } +} diff --git a/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/CustomDataParser.kt b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/CustomDataParser.kt new file mode 100644 index 000000000..94d1bfa42 --- /dev/null +++ b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/CustomDataParser.kt @@ -0,0 +1,39 @@ +package com.mparticle.kits + +import apptentive.com.android.util.InternalUseOnly +import apptentive.com.android.util.Log +import apptentive.com.android.util.LogTag +import kotlin.Any +import kotlin.Exception +import kotlin.String + +@OptIn(InternalUseOnly::class) +internal object CustomDataParser { + fun parseCustomData(map: Map): Map { + val res = HashMap() + for ((key, value) in map) { + res[key] = parseValue(value) + } + return res + } + + @JvmStatic + fun parseValue(value: String?): Any? = + try { + if (value != null) parseValueGuarded(value) else null + } catch (e: Exception) { + Log.e(LogTag("pParticle"), "Unable to parse value: $value") + value + } + + private fun parseValueGuarded(value: String): Any { + // check for boolean + if ("true".equals(value, true) || "false".equals(value, true)) { + return value.toBoolean() + } + + // check for number + val number = StringUtils.tryParseNumber(value) + return number ?: value + } +} diff --git a/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/StringUtils.kt b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/StringUtils.kt new file mode 100644 index 000000000..11c8dbd7d --- /dev/null +++ b/kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/StringUtils.kt @@ -0,0 +1,59 @@ +package com.mparticle.kits + +internal object StringUtils { + @JvmStatic + fun tryParseSettingFlag( + settings: Map, + key: String?, + defaultValue: Boolean, + ): Boolean { + val value = settings[key] + return value?.toBoolean() ?: defaultValue + } + + fun tryParseLongSettingFlag( + settings: Map, + key: String?, + defaultValue: Long, + ): Long { + val value = + key?.let { + settings[key] + } + return try { + value?.toLong() ?: defaultValue + } catch (e: NumberFormatException) { + defaultValue + } + } + + @JvmStatic + fun tryParseNumber(value: String): Number? { + val longValue = tryParseLong(value) + return if (longValue != null) { + if (isInIntegerRange(longValue)) { + longValue.toInt() + } else { + longValue + } + } else { + tryParseDouble(value) + } + } + + private fun isInIntegerRange(value: Long): Boolean = value >= Int.MIN_VALUE && value <= Int.MAX_VALUE + + private fun tryParseLong(value: String): Long? = + try { + value.toLong() + } catch (e: NumberFormatException) { + null + } + + private fun tryParseDouble(value: String): Double? = + try { + value.toDouble() + } catch (e: NumberFormatException) { + null + } +} diff --git a/kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/ApptentiveKitTest.kt b/kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/ApptentiveKitTest.kt new file mode 100644 index 000000000..46645a995 --- /dev/null +++ b/kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/ApptentiveKitTest.kt @@ -0,0 +1,168 @@ +package com.mparticle.kits + +import android.content.Context +import apptentive.com.android.feedback.Apptentive +import apptentive.com.android.util.InternalUseOnly +import com.mparticle.MParticle +import com.mparticle.MParticleOptions +import io.mockk.every +import io.mockk.mockk +import io.mockk.mockkStatic +import io.mockk.verify +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito + +class ApptentiveKitTest { + private val kit: ApptentiveKit + get() = ApptentiveKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(!name.isNullOrEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + (kit as KitIntegration).onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + @Test + fun testLastNameValueOnSetUserAttribute() { + val user = mockk() + mockkStatic(Apptentive::class) + every { Apptentive.setPersonName(any()) } returns Unit + val key = MParticle.UserAttributes.LASTNAME + val value = "Doe" + + // when + kit.onSetUserAttribute(key, value, user) + + // then + verify { Apptentive.setPersonName("Doe") } + } + + @OptIn(InternalUseOnly::class) + @Test + fun testFirstNameValueOnSetUserAttribute() { + val user = mockk() + mockkStatic(Apptentive::class) + every { Apptentive.setPersonName(any()) } returns Unit + + val key = MParticle.UserAttributes.FIRSTNAME + val value = "John" + + // when + kit.onSetUserAttribute(key, value, user) + + // then + verify { Apptentive.setPersonName("John") } + } + + @Test + fun testPersonCustomData() { + val user = mockk() + mockkStatic(Apptentive::class) + every { Apptentive.addCustomPersonData(any(), any()) } returns Unit + every { Apptentive.addCustomPersonData(any(), 30) } returns Unit + val key = "age" + val value = "30" + + // when + kit.onSetUserAttribute(key, value, user) + + // then + // enableTypeDetection is false & 30 will be passed as string + verify { Apptentive.addCustomPersonData("age", "30") } + } + + @Test + fun testOnSetUserAttributeWithNullKey() { + val user = mockk() + mockkStatic(Apptentive::class) + + val key = null + val value = "30" + + // when + kit.onSetUserAttribute(key, value, user) + + // then + verify(exactly = 0) { Apptentive.setPersonName(any()) } + verify(exactly = 0) { Apptentive.addCustomPersonData(any(), any()) } + verify(exactly = 0) { Apptentive.addCustomPersonData(any(), any()) } + verify(exactly = 0) { Apptentive.addCustomPersonData(any(), any()) } + } + + // onSetAllUserAttributes test + + @Test + fun testFullNameInTheUserAttributes() { + val userAttributes = + mutableMapOf( + MParticle.UserAttributes.FIRSTNAME to "John", + MParticle.UserAttributes.LASTNAME to "Doe", + ) + + val user = mockk() + mockkStatic(Apptentive::class) + every { Apptentive.setPersonName(any()) } returns Unit + + // when + kit.onSetAllUserAttributes(userAttributes, null, user) + + verify { + Apptentive.setPersonName("John Doe") + } + } + + @Test + fun testListOfCustomPersonData() { + val userAttributes = + mutableMapOf( + "key1" to "value1", + "key2" to "20", + ) + val user = mockk() + mockkStatic(Apptentive::class) + every { Apptentive.addCustomPersonData(any(), any()) } returns Unit + every { Apptentive.addCustomPersonData(any(), 20) } returns Unit + kit.onSetAllUserAttributes(userAttributes, null, user) + + verify { + Apptentive.addCustomPersonData("key1", "value1") + Apptentive.addCustomPersonData("key2", "20") + } + } +} diff --git a/kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/CustomDataParserTest.kt b/kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/CustomDataParserTest.kt new file mode 100644 index 000000000..8f720ee76 --- /dev/null +++ b/kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/CustomDataParserTest.kt @@ -0,0 +1,33 @@ +package com.mparticle.kits + +import com.mparticle.kits.CustomDataParser.parseValue +import org.junit.Assert +import org.junit.Test + +class CustomDataParserTest { + @Test + fun testParseData() { + // boolean + Assert.assertEquals(true, parseValue("true")) + Assert.assertEquals(true, parseValue("True")) + Assert.assertEquals(false, parseValue("false")) + Assert.assertEquals(false, parseValue("False")) + + // integer + Assert.assertEquals(12345, parseValue("12345")) + Assert.assertEquals(-12345, parseValue("-12345")) + Assert.assertEquals(Int.MIN_VALUE, parseValue(Int.MIN_VALUE.toString())) + Assert.assertEquals(Int.MAX_VALUE, parseValue(Int.MAX_VALUE.toString())) + + // long + Assert.assertEquals(Long.MIN_VALUE, parseValue(Long.MIN_VALUE.toString())) + Assert.assertEquals(Long.MAX_VALUE, parseValue(Long.MAX_VALUE.toString())) + + // double + Assert.assertEquals(3.14, parseValue("3.14")) + Assert.assertEquals(-3.14, parseValue("-3.14")) + + // string + Assert.assertEquals("test", parseValue("test")) + } +} diff --git a/kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/StringUtilsTest.kt b/kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/StringUtilsTest.kt new file mode 100644 index 000000000..565906c1d --- /dev/null +++ b/kits/apptentive/apptentive-6/src/test/kotlin/com/mparticle/kits/StringUtilsTest.kt @@ -0,0 +1,68 @@ +package com.mparticle.kits + +import com.mparticle.kits.StringUtils.tryParseLongSettingFlag +import com.mparticle.kits.StringUtils.tryParseNumber +import com.mparticle.kits.StringUtils.tryParseSettingFlag +import org.junit.Assert +import org.junit.Test +import java.util.HashMap +import java.util.concurrent.TimeUnit + +class StringUtilsTest { + @Test + fun testParseNumber() { + Assert.assertEquals(Integer.valueOf(12345), tryParseNumber("12345") as Int?) + Assert.assertEquals( + java.lang.Long.valueOf(21474836479L), + tryParseNumber("21474836479") as Long?, + ) + Assert.assertEquals( + java.lang.Long.valueOf(-21474836489L), + tryParseNumber("-21474836489") as Long?, + ) + Assert.assertEquals(java.lang.Double.valueOf(12345.0), tryParseNumber("12345.0") as Double?) + Assert.assertNull(tryParseNumber("test")) + } + + @Test + fun testSettingsFlag() { + val data = HashMap() + data["key"] = "true" + Assert.assertTrue(tryParseSettingFlag(data, "key", false)) + } + + @Test + fun testLongSettingFlag() { + // key is not available + var data = mapOf() + val default = TimeUnit.DAYS.toMillis(7) + Assert.assertEquals(default, tryParseLongSettingFlag(data, "key", default)) + + // key with a long value + data = mapOf("key" to "500") + Assert.assertEquals(500L, tryParseLongSettingFlag(data, "key", default)) + + // key with a invalid type + data = mapOf("key" to "value") + Assert.assertEquals(default, tryParseLongSettingFlag(data, "key", default)) + + // key that is not available in the map + Assert.assertEquals(default, tryParseLongSettingFlag(data, "key_1", default)) + + // null key + Assert.assertEquals(default, tryParseLongSettingFlag(data, "null", default)) + } + + @Test + fun testMissingSettingsFlag() { + val data = HashMap() + Assert.assertFalse(tryParseSettingFlag(data, "key", false)) + } + + @Test + fun testMissingCorruptedSettingsFlag() { + val data = HashMap() + data["key"] = "123" + Assert.assertFalse(tryParseSettingFlag(data, "key", false)) + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index 01e5821c0..af191b0ab 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -5,7 +5,7 @@ include ( ':kits:adobe-kit', ':kits:adobemedia-kit', ':kits:appsflyer:appsflyer-6', - ':kits:apptentive-kit', + ':kits:apptentive:apptentive-6', ':kits:apptimize-kit', ':kits:apteligent-kit', ':kits:branch-kit', From 7d6add017160e74170f69a946a1b7664af851900 Mon Sep 17 00:00:00 2001 From: denischilik Date: Tue, 10 Mar 2026 15:43:23 -0400 Subject: [PATCH 13/61] feat: Migrate Apptimize kit (#658) * feat: migrate apptimize-kit from submodule to regular directory * feat: relocate apptimize-kit to kits/apptimize/apptimize-3 * feat: add apptimize-3 to settings-kits.gradle Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/apptimize-kit | 1 - kits/apptimize/apptimize-3/README.md | 32 ++ kits/apptimize/apptimize-3/build.gradle | 66 ++++ .../apptimize-3/consumer-proguard.pro | 18 + kits/apptimize/apptimize-3/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/apptimize/apptimize-3/gradlew | 234 +++++++++++++ kits/apptimize/apptimize-3/gradlew.bat | 89 +++++ .../apptimize/apptimize-3/settings.gradle.kts | 2 + .../apptimize-3/src/main/AndroidManifest.xml | 1 + .../kotlin/com/mparticle/kits/ApptimizeKit.kt | 322 ++++++++++++++++++ .../com/mparticle/kits/ApptimizeKitTests.kt | 53 +++ settings-kits.gradle | 2 +- 16 files changed, 828 insertions(+), 5 deletions(-) delete mode 160000 kits/apptimize-kit create mode 100644 kits/apptimize/apptimize-3/README.md create mode 100644 kits/apptimize/apptimize-3/build.gradle create mode 100644 kits/apptimize/apptimize-3/consumer-proguard.pro create mode 100644 kits/apptimize/apptimize-3/gradle.properties create mode 100644 kits/apptimize/apptimize-3/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/apptimize/apptimize-3/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/apptimize/apptimize-3/gradlew create mode 100644 kits/apptimize/apptimize-3/gradlew.bat create mode 100644 kits/apptimize/apptimize-3/settings.gradle.kts create mode 100644 kits/apptimize/apptimize-3/src/main/AndroidManifest.xml create mode 100644 kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt create mode 100644 kits/apptimize/apptimize-3/src/test/kotlin/com/mparticle/kits/ApptimizeKitTests.kt diff --git a/.gitmodules b/.gitmodules index 58d4b74ab..3ff36f43f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,6 @@ [submodule "kits/adobemedia-kit"] path = kits/adobemedia-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-adobe-media.git -[submodule "kits/apptimize-kit"] - path = kits/apptimize-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-apptimize.git [submodule "kits/apteligent-kit"] path = kits/apteligent-kit url = git@github.com:mParticle-integrations/mparticle-android-integration-apteligent.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 7d6b90700..d672a7781 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -70,6 +70,7 @@ lint: - kits/adjust/adjust-5/** - kits/apptentive/apptentive-6/** - kits/appsflyer/appsflyer-6/** + - kits/apptimize/apptimize-3/** - kits/braze/braze-38/** - kits/clevertap/clevertap-7/** - kits/ga/ga-23/** diff --git a/kits/apptimize-kit b/kits/apptimize-kit deleted file mode 160000 index 8de020118..000000000 --- a/kits/apptimize-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8de020118e1cea732749fcdf7cd6b88a255e5be6 diff --git a/kits/apptimize/apptimize-3/README.md b/kits/apptimize/apptimize-3/README.md new file mode 100644 index 000000000..29b317350 --- /dev/null +++ b/kits/apptimize/apptimize-3/README.md @@ -0,0 +1,32 @@ +## Apptimize Kit Integration + +This repository contains the [Apptimize](https://www.apptimize.com/) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +### Adding the integration + +1. The Apptimize Kit requires that you add Apptimize's Maven server to your buildscript: + + ```groovy + repositories { + maven { + url 'https://maven.apptimize.com/artifactory/repo' + } + } + ``` +2. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-apptimize-kit:5+' + } + ``` +3. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Apptimize detected"` in the output of `adb logcat`. +4. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Apptimize integration](https://docs.mparticle.com/integrations/apptimize) + +### License + +[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/apptimize/apptimize-3/build.gradle b/kits/apptimize/apptimize-3/build.gradle new file mode 100644 index 000000000..3cfb38c70 --- /dev/null +++ b/kits/apptimize/apptimize-3/build.gradle @@ -0,0 +1,66 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-apptimize" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.apptimize' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 17 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } + testOptions { + unitTests.all { + jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] + } + } +} + +repositories { + maven { url 'https://maven.apptimize.com/artifactory/repo' } + mavenCentral() +} + +dependencies { + api 'com.apptimize:apptimize-android:3.10.18@aar' +} diff --git a/kits/apptimize/apptimize-3/consumer-proguard.pro b/kits/apptimize/apptimize-3/consumer-proguard.pro new file mode 100644 index 000000000..0c29d3aa5 --- /dev/null +++ b/kits/apptimize/apptimize-3/consumer-proguard.pro @@ -0,0 +1,18 @@ +-keep class com.apptimize.** { *; } +-keepclassmembers class * extends com.apptimize.ApptimizeTest { + ; +} + +-keep class android.support.v4.view.ViewPager +-keepclassmembers class android.support.v4.view.ViewPager$LayoutParams { *; } +-keep class android.support.v4.app.Fragment { *; } + +-keep class com.mixpanel.android.mpmetrics.MixpanelAPI { *; } +-keep class com.google.android.gms.analytics.Tracker { *; } +-keep class com.google.analytics.tracking.android.Tracker { *; } +-keep class com.flurry.android.FlurryAgent { *; } +-keep class com.omniture.AppMeasurementBase { *; } +-keep class com.adobe.adms.measurement.ADMS_Measurement { *; } +-keep class com.adobe.mobile.Analytics { *; } +-keep class com.adobe.mobile.Config { *; } +-keep class com.localytics.android.Localytics { *; } \ No newline at end of file diff --git a/kits/apptimize/apptimize-3/gradle.properties b/kits/apptimize/apptimize-3/gradle.properties new file mode 100644 index 000000000..edb1202c3 --- /dev/null +++ b/kits/apptimize/apptimize-3/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx2560m \ No newline at end of file diff --git a/kits/apptimize/apptimize-3/gradle/wrapper/gradle-wrapper.jar b/kits/apptimize/apptimize-3/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/apptimize/apptimize-3/gradle/wrapper/gradle-wrapper.properties b/kits/apptimize/apptimize-3/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/apptimize/apptimize-3/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/apptimize/apptimize-3/gradlew b/kits/apptimize/apptimize-3/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/apptimize/apptimize-3/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/apptimize/apptimize-3/gradlew.bat b/kits/apptimize/apptimize-3/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/apptimize/apptimize-3/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/apptimize/apptimize-3/settings.gradle.kts b/kits/apptimize/apptimize-3/settings.gradle.kts new file mode 100644 index 000000000..8d6361219 --- /dev/null +++ b/kits/apptimize/apptimize-3/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "android-apptimize-kit" +include(":") diff --git a/kits/apptimize/apptimize-3/src/main/AndroidManifest.xml b/kits/apptimize/apptimize-3/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c4e6c98d7 --- /dev/null +++ b/kits/apptimize/apptimize-3/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt new file mode 100644 index 000000000..770ecf20e --- /dev/null +++ b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt @@ -0,0 +1,322 @@ +package com.mparticle.kits + +import android.content.Context +import android.text.TextUtils +import com.apptimize.Apptimize +import com.apptimize.Apptimize.IsFirstTestRun +import com.apptimize.Apptimize.OnTestRunListener +import com.apptimize.ApptimizeOptions +import com.apptimize.ApptimizeTestInfo +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticle.IdentityType +import com.mparticle.commerce.CommerceEvent +import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.CommerceListener +import java.math.BigDecimal + +class ApptimizeKit : + KitIntegration(), + AttributeListener, + KitIntegration.EventListener, + CommerceListener, + OnTestRunListener { + private fun toMessageList(message: ReportingMessage): List = listOf(message) + + private fun createReportingMessage(messageType: String): ReportingMessage = + ReportingMessage( + this, + messageType, + System.currentTimeMillis(), + null, + ) + + override fun onKitCreate( + settings: Map, + context: Context, + ): List { + val appKey = getSettings()[APP_MP_KEY] + require(!TextUtils.isEmpty(appKey)) { APP_MP_KEY } + val options = buildApptimizeOptions(settings) + Apptimize.setup(context, appKey, options) + if (java.lang.Boolean.parseBoolean(settings[TRACK_EXPERIMENTS])) { + Apptimize.setOnTestRunListener(this) + } + return emptyList() + } + + private fun buildApptimizeOptions(settings: Map): ApptimizeOptions { + val o = ApptimizeOptions() + o.isThirdPartyEventImportingEnabled = false + o.isThirdPartyEventExportingEnabled = false + configureApptimizeUpdateMetaDataTimeout(o, settings) + configureApptimizeDeviceName(o, settings) + configureApptimizeDeveloperModeDisabled(o, settings) + configureApptimizeExplicitEnablingRequired(o, settings) + configureApptimizeMultiprocessModeEnabled(o, settings) + configureApptimizeLogLevel(o, settings) + return o + } + + private fun configureApptimizeUpdateMetaDataTimeout( + o: ApptimizeOptions, + settings: Map, + ) { + try { + settings[UPDATE_METDATA_TIMEOUT_MP_KEY]?.let { + val l = it.toLong() + o.setUpdateMetadataTimeout(l) + } + } catch (nfe: NumberFormatException) { + } + } + + private fun configureApptimizeDeviceName( + o: ApptimizeOptions, + settings: Map, + ) { + val v = settings[DEVICE_NAME_MP_KEY] + o.deviceName = v + } + + private fun configureApptimizeDeveloperModeDisabled( + o: ApptimizeOptions, + settings: Map, + ) { + val b = settings[DEVELOPER_MODE_DISABLED_MP_KEY] + o.isDeveloperModeDisabled = b.toBoolean() + } + + private fun configureApptimizeExplicitEnablingRequired( + o: ApptimizeOptions, + settings: Map, + ) { + val b = settings[EXPLICIT_ENABLING_REQUIRED_MP_KEY] + o.isExplicitEnablingRequired = b.toBoolean() + } + + private fun configureApptimizeMultiprocessModeEnabled( + o: ApptimizeOptions, + settings: Map, + ) { + val b = settings[MULTIPROCESS_MODE_ENABLED_MP_KEY] + o.setMultiprocessMode(b.toBoolean()) + } + + private fun configureApptimizeLogLevel( + o: ApptimizeOptions, + settings: Map, + ) { + try { + val l = + settings[LOG_LEVEL_MP_KEY] + ?.let { ApptimizeOptions.LogLevel.valueOf(it) } + ?.let { o.logLevel = it } + } catch (iae: IllegalArgumentException) { + } catch (npe: NullPointerException) { + } + } + + override fun getName(): String = KIT_NAME + + override fun setUserAttribute( + key: String, + value: String, + ) { + Apptimize.setUserAttribute(key, value) + } + + /** + * Not supported by the Apptimize kit. + */ + override fun setUserAttributeList( + key: String, + list: List, + ) { + // not supported + } + + override fun supportsAttributeLists(): Boolean = false + + /** + * @param attributeLists is ignored by the Apptimize kit. + */ + override fun setAllUserAttributes( + attributes: Map, + attributeLists: Map>, + ) { + for ((key, value) in attributes) { + setUserAttribute(key, value) + } + } + + override fun removeUserAttribute(key: String) { + Apptimize.clearUserAttribute(key) + } + + /** + * @param identityType only Alias and CustomerId are suppoted by the Apptimize kit. + */ + override fun setUserIdentity( + identityType: IdentityType, + id: String?, + ) { + when (identityType) { + IdentityType.Alias, IdentityType.CustomerId -> { + Apptimize.setPilotTargetingId(id) + } + else -> {} + } + } + + override fun removeUserIdentity(identityType: IdentityType) { + setUserIdentity(identityType, null) + } + + override fun logout(): List { + Apptimize.track(LOGOUT_TAG) + return toMessageList(ReportingMessage.logoutMessage(this)) + } + + /** + * Not supported by the Apptimize kit. + */ + override fun leaveBreadcrumb(s: String): List = emptyList() + + /** + * Not supported by the Apptimize kit. + */ + override fun logError( + s: String, + map: Map, + ): List = emptyList() + + /** + * Not supported by the Apptimize kit. + */ + override fun logException( + e: Exception, + map: Map, + s: String, + ): List = emptyList() + + override fun logEvent(mpEvent: MPEvent): List { + Apptimize.track(mpEvent.eventName) + return toMessageList(ReportingMessage.fromEvent(this, mpEvent)) + } + + /** + * @param eventAttributes is ignored by the Apptimize kit. + */ + override fun logScreen( + screenName: String, + eventAttributes: Map, + ): List { + val event = String.format(VIEWED_EVENT_FORMAT, screenName) + Apptimize.track(event) + return toMessageList( + createReportingMessage(ReportingMessage.MessageType.SCREEN_VIEW).setScreenName( + screenName, + ), + ) + } + + /** + * @param valueTotal is ignored by the Apptimize kit. + * @param contextInfo is ignored by the Apptimize kit. + */ + override fun logLtvIncrease( + valueIncreased: BigDecimal, + valueTotal: BigDecimal, + eventName: String, + contextInfo: Map, + ): List { + // match the iOS style, where only the delta is sent rather than an absolute final value. + Apptimize.track(LTV_TAG, valueIncreased.toDouble()) + return toMessageList(createReportingMessage(ReportingMessage.MessageType.COMMERCE_EVENT)) + } + + override fun logEvent(commerceEvent: CommerceEvent): List? { + val customEvents = CommerceEventUtils.expand(commerceEvent) + if (customEvents.size == 0) { + return null + } + for (event in customEvents) { + Apptimize.track(event.eventName) + } + return toMessageList(ReportingMessage.fromEvent(this, commerceEvent)) + } + + /** + * After opting out, it is not possible to opt back in via the Apptimize kit. + * @param optedOut only a value of 'true' supported by the Apptimize kit. + */ + override fun setOptOut(optedOut: Boolean): List? { + var ret: List? = null + if (optedOut) { + Apptimize.disable() + ret = + toMessageList( + createReportingMessage(ReportingMessage.MessageType.OPT_OUT).setOptOut(optedOut), + ) + } + return ret + } + + override fun onTestRun( + apptimizeTestInfo: ApptimizeTestInfo, + isFirstTestRun: IsFirstTestRun, + ) { + if (isFirstTestRun != IsFirstTestRun.YES) { + return + } + val testInfoMap = Apptimize.getTestInfo() + val participatedExperiments: MutableList = ArrayList() + if (testInfoMap == null) { + return + } + for (key in testInfoMap.keys) { + val testInfo = testInfoMap[key] + if (testInfo != null) { + if (testInfo.userHasParticipated()) { + val nameAndVariation = testInfo.testName + "-" + testInfo.enrolledVariantName + participatedExperiments.add(nameAndVariation) + } + } + } + val user = MParticle.getInstance()!!.Identity().currentUser + user?.setUserAttributeList("Apptimize experiment", participatedExperiments) + val eventInfo = HashMap(5) + eventInfo["VariationID"] = apptimizeTestInfo.enrolledVariantId.toString() + eventInfo["ID"] = apptimizeTestInfo.testId.toString() + eventInfo["Name"] = apptimizeTestInfo.testName + eventInfo["Variation"] = apptimizeTestInfo.enrolledVariantName + eventInfo["Name and Variation"] = + apptimizeTestInfo.testName + "-" + + apptimizeTestInfo.enrolledVariantName + val event = + MPEvent + .Builder( + "Apptimize experiment", + MParticle.EventType + .Other, + ).customAttributes(eventInfo) + .build() + MParticle.getInstance()?.logEvent(event) + } + + companion object { + private const val APP_MP_KEY = "appKey" + private const val UPDATE_METDATA_TIMEOUT_MP_KEY = "metadataTimeout" + private const val DEVICE_NAME_MP_KEY = "deviceName" + private const val DEVELOPER_MODE_DISABLED_MP_KEY = "developerModeDisabled" + private const val EXPLICIT_ENABLING_REQUIRED_MP_KEY = "explicitEnablingRequired" + private const val MULTIPROCESS_MODE_ENABLED_MP_KEY = "multiprocessModeEnabled" + private const val LOG_LEVEL_MP_KEY = "logLevel" + private const val LOGOUT_TAG = "logout" + private const val LTV_TAG = "ltv" + private const val VIEWED_EVENT_FORMAT = "screenView %s" + private const val TRACK_EXPERIMENTS = "trackExperiments" + private const val KIT_NAME = "Apptimize" + } +} diff --git a/kits/apptimize/apptimize-3/src/test/kotlin/com/mparticle/kits/ApptimizeKitTests.kt b/kits/apptimize/apptimize-3/src/test/kotlin/com/mparticle/kits/ApptimizeKitTests.kt new file mode 100644 index 000000000..e79045702 --- /dev/null +++ b/kits/apptimize/apptimize-3/src/test/kotlin/com/mparticle/kits/ApptimizeKitTests.kt @@ -0,0 +1,53 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MParticleOptions +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito + +class ApptimizeKitTests { + private val kit: KitIntegration + get() = ApptimizeKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(!name.isNullOrEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } +} diff --git a/settings-kits.gradle b/settings-kits.gradle index af191b0ab..a10b5484d 100644 --- a/settings-kits.gradle +++ b/settings-kits.gradle @@ -6,7 +6,7 @@ include ( ':kits:adobemedia-kit', ':kits:appsflyer:appsflyer-6', ':kits:apptentive:apptentive-6', - ':kits:apptimize-kit', + ':kits:apptimize:apptimize-3', ':kits:apteligent-kit', ':kits:branch-kit', //blueshift hosts kit From 7dbbdb9e5c2d9662b3ffba7a9fe9b4ae49bb6b10 Mon Sep 17 00:00:00 2001 From: denischilik Date: Wed, 11 Mar 2026 12:45:11 -0400 Subject: [PATCH 14/61] feat: Migrate Adobe Media 5 kit (#671) * feat: migrate adobemedia-kit from submodule to regular directory * feat: relocate adobemedia-kit to kits/adobemedia/adobemedia-5 Made-with: Cursor * feat: add adobemedia-5 to settings-kits.gradle Made-with: Cursor --- .gitmodules | 3 - .trunk/trunk.yaml | 1 + kits/adobemedia-kit | 1 - kits/adobemedia/adobemedia-5/README.md | 25 ++ kits/adobemedia/adobemedia-5/build.gradle | 96 ++++ .../adobemedia-5/consumer-proguard.pro | 1 + .../adobemedia/adobemedia-5/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kits/adobemedia/adobemedia-5/gradlew | 234 ++++++++++ kits/adobemedia/adobemedia-5/gradlew.bat | 89 ++++ .../adobemedia-5/libs/java-json.jar | Bin 0 -> 84697 bytes .../adobemedia-5/settings.gradle.kts | 2 + .../adobemedia-5/src/main/AndroidManifest.xml | 1 + .../kotlin/com/mparticle/kits/AdobeApi.kt | 5 + .../kotlin/com/mparticle/kits/AdobeKit.kt | 414 ++++++++++++++++++ .../com/adobe/marketing/mobile/MobileCore.kt | 89 ++++ .../com/mparticle/kits/AdobeMediaKitTests.kt | 108 +++++ settings-kits.gradle | 2 +- 19 files changed, 1074 insertions(+), 5 deletions(-) delete mode 160000 kits/adobemedia-kit create mode 100644 kits/adobemedia/adobemedia-5/README.md create mode 100644 kits/adobemedia/adobemedia-5/build.gradle create mode 100644 kits/adobemedia/adobemedia-5/consumer-proguard.pro create mode 100644 kits/adobemedia/adobemedia-5/gradle.properties create mode 100644 kits/adobemedia/adobemedia-5/gradle/wrapper/gradle-wrapper.jar create mode 100644 kits/adobemedia/adobemedia-5/gradle/wrapper/gradle-wrapper.properties create mode 100755 kits/adobemedia/adobemedia-5/gradlew create mode 100644 kits/adobemedia/adobemedia-5/gradlew.bat create mode 100755 kits/adobemedia/adobemedia-5/libs/java-json.jar create mode 100644 kits/adobemedia/adobemedia-5/settings.gradle.kts create mode 100644 kits/adobemedia/adobemedia-5/src/main/AndroidManifest.xml create mode 100644 kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeApi.kt create mode 100644 kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt create mode 100644 kits/adobemedia/adobemedia-5/src/test/kotlin/com/adobe/marketing/mobile/MobileCore.kt create mode 100644 kits/adobemedia/adobemedia-5/src/test/kotlin/com/mparticle/kits/AdobeMediaKitTests.kt diff --git a/.gitmodules b/.gitmodules index 3ff36f43f..f377b6258 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,6 @@ [submodule "kits/adobe-kit"] path = kits/adobe-kit url = git@github.com:mparticle-integrations/mparticle-android-integration-adobe.git -[submodule "kits/adobemedia-kit"] - path = kits/adobemedia-kit - url = git@github.com:mparticle-integrations/mparticle-android-integration-adobe-media.git [submodule "kits/apteligent-kit"] path = kits/apteligent-kit url = git@github.com:mParticle-integrations/mparticle-android-integration-apteligent.git diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index d672a7781..734a0a575 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -80,6 +80,7 @@ lint: - kits/rokt/rokt/** - kits/localytics/localytics-6/** - kits/rokt/rokt/** + - kits/adobemedia/adobemedia-5/** actions: enabled: - trunk-announce diff --git a/kits/adobemedia-kit b/kits/adobemedia-kit deleted file mode 160000 index 9ee884afb..000000000 --- a/kits/adobemedia-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9ee884afb53b715c92b89486bad3b55b44d47268 diff --git a/kits/adobemedia/adobemedia-5/README.md b/kits/adobemedia/adobemedia-5/README.md new file mode 100644 index 000000000..50ad688c1 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/README.md @@ -0,0 +1,25 @@ +## Adobe Media Kit Integration + +This repository contains the [Adobe Media](https://docs.adobe.com/content/help/en/media-analytics/using/media-overview.html) integration for the [mParticle Android SDK](https://github.com/mParticle/mparticle-android-sdk). + +Please note that the `adobemedia-kit` contains all the functionality of the `adobe-kit`. The presence of both will result in Duplicate Class errors and a failed build due to the overlap. + +### Adding the integration + +1. Add the kit dependency to your app's build.gradle: + + ```groovy + dependencies { + implementation 'com.mparticle:android-adobemedia-kit:5+' + } + ``` +2. Follow the mParticle Android SDK [quick-start](https://github.com/mParticle/mparticle-android-sdk), then rebuild and launch your app, and verify that you see `"Adobe Media detected"` in the output of `adb logcat`. +3. Reference mParticle's integration docs below to enable the integration. + +### Documentation + +[Example integration](https://github.com/mParticle/mparticle-media-samples/tree/master/android) + +### License + +[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/kits/adobemedia/adobemedia-5/build.gradle b/kits/adobemedia/adobemedia-5/build.gradle new file mode 100644 index 000000000..7eef79e48 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/build.gradle @@ -0,0 +1,96 @@ +buildscript { + ext.kotlin_version = '2.0.20' + if (!project.hasProperty('version') || project.version.equals('unspecified')) { + project.version = '+' + } + + repositories { + google() + mavenLocal() + mavenCentral() + } + + dependencies { + 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 "13.0.0" +} + +sonarqube { + properties { + property "sonar.projectKey", "mparticle-android-integration-adobe-media" + property "sonar.organization", "mparticle" + property "sonar.host.url", "https://sonarcloud.io" + } +} + +apply plugin: 'org.jlleitschuh.gradle.ktlint' +apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' + +android { + namespace 'com.mparticle.kits.adobemedia' + buildFeatures { + buildConfig = true + } + defaultConfig { + minSdkVersion 21 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } + testOptions { + unitTests.all { + jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] + } + } + lint { + // Workaround for lint internal crash + abortOnError false + // Ignore obsolete custom lint checks from older fragment library + disable 'ObsoleteLintCustomCheck' + } +} + +repositories { + google() + mavenCentral() +} + +configurations.all { + resolutionStrategy { + force "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + force "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version" + // Force Kotlin compiler version to match stdlib + eachDependency { DependencyResolveDetails details -> + if (details.requested.group == 'org.jetbrains.kotlin' && details.requested.name.startsWith('kotlin-')) { + details.useVersion kotlin_version + } + } + } +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + api 'com.mparticle:android-media:1.5.0' + api 'com.adobe.marketing.mobile:mobileservices:1.1.5' + api 'com.adobe.marketing.mobile:analytics:3.0.1' + api 'com.adobe.marketing.mobile:media:3.1.0' + api 'com.adobe.marketing.mobile:userprofile:3.0.0' + api 'com.adobe.marketing.mobile:lifecycle:3.0.0' + api 'com.adobe.marketing.mobile:identity:3.0.0' + api 'com.adobe.marketing.mobile:signal:3.0.0' + api 'com.adobe.marketing.mobile:sdk-core:1.11.7' +} diff --git a/kits/adobemedia/adobemedia-5/consumer-proguard.pro b/kits/adobemedia/adobemedia-5/consumer-proguard.pro new file mode 100644 index 000000000..2a90e0f4c --- /dev/null +++ b/kits/adobemedia/adobemedia-5/consumer-proguard.pro @@ -0,0 +1 @@ +# TODO: Add rules to exclude your SDK classes from proguard in implementing apps \ No newline at end of file diff --git a/kits/adobemedia/adobemedia-5/gradle.properties b/kits/adobemedia/adobemedia-5/gradle.properties new file mode 100644 index 000000000..7f4668fd7 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/gradle.properties @@ -0,0 +1,3 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.daemon=true diff --git a/kits/adobemedia/adobemedia-5/gradle/wrapper/gradle-wrapper.jar b/kits/adobemedia/adobemedia-5/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/kits/adobemedia/adobemedia-5/gradle/wrapper/gradle-wrapper.properties b/kits/adobemedia/adobemedia-5/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e1bef7e87 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/kits/adobemedia/adobemedia-5/gradlew b/kits/adobemedia/adobemedia-5/gradlew new file mode 100755 index 000000000..1b6c78733 --- /dev/null +++ b/kits/adobemedia/adobemedia-5/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kits/adobemedia/adobemedia-5/gradlew.bat b/kits/adobemedia/adobemedia-5/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/kits/adobemedia/adobemedia-5/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kits/adobemedia/adobemedia-5/libs/java-json.jar b/kits/adobemedia/adobemedia-5/libs/java-json.jar new file mode 100755 index 0000000000000000000000000000000000000000..2f211e3660a0f7637cd055e3dfb011fcc5b4f167 GIT binary patch literal 84697 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%0A^eARL~vZq+#%}VrSrx_m=pVc%a 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

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M 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%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/ga4/ga4-23/libs/test-utils.aar b/kits/ga4/ga4-23/libs/test-utils.aar new file mode 100644 index 0000000000000000000000000000000000000000..a13382c7d880d4b793c0ca38bdd359e4f4179f69 GIT binary patch literal 104495 zcmV)OK(@b7O9KQ7000OG0000%0HcMa;5rEa0R1%p00jU508%b=cyy&(+j84D5`CYq z&3RWRfQdR^e{2QUg$&sB_ zAnjdKlT3b7^yRmA`G4ES>EW52OUj5dUil=kaGJD%5oQ?}Y~j`41%C1D*&z<(1TSak zInN97z#1a|1`n=421EPT!MEL9>~}CXN%E&m@Ur}slGlI%epg2Q3XeoEXWS;^HTjpI zZZk|&X07~!!K=QJ-&-n3?m#4#ZSx6>PvBF9;4O0iQf3bF>rpdS z>7`??QH-Ik(TriHs)jOmYK%*Iq?rza{R+@;(2XdKdCsG;r56CD$>A4ZC7s$h) z$4E|%bEpi8+bp>1xVdr!2orOyI1T^2kk|u}l4bCYp5`_x?fkN{Q&N7%hJjVUIUC zuNmLvR3DND-sqF+K)bb58JZibNgryv+tl%ey(Lxc&6#CZLo508^P%L~^K?I_+PDN= zOj|O{GDt^8BJ0ITaKV-K27%`x&X! zUVE*aO}?5?jqGS?fJzJrbJ|jpqov%^)wVi#-?NETJfCbrfkEuUf#g1;7mN|aK z;zA~;3^ACn(+YQr^GstysRt$oSrvd}QsRh8xh;Iwwvt^!B_nxfiAyw#)Lx9kMARXdkwa_%fv zVFm%rli!B+v-BkI6sC_^8-y7|LlaAJSt@V0@J>WjpRJlf(#oE*XDe<^>4lP4m@^?D z-;rczb)d*!9b>#&?hTeulkFm4e@LuCII_QO?vdS|5jF&8)DZDP!K2g(Z)2&y15Z|k zUF$=TQb(?=9pkY1;&0PsDic!Omw~Ne1O!2c2k3PYnnK`dP>TSDlST+X?4Q&*uO=tL zyY!vPGUu%8SV=>6HiJIm@PTx;h}Yk0r)Vw}nl#%QLO%*s2A5gZf`%>e=9!RD2aOae zX4{7|_Cg~}X8@y=Bh~0yUyd(}hIbO1XG*5q_lQ`fjfxL5B z*zgx5Hl{x!HTiL&GarabJ}JaH^f9Z@u`3C}9$4Z7DP7uPKIM>wkJGcwMqiKl4l>-; zHRwVmEOc+a2mQx{o=iXw(@jPa3w^Odb2Rr6Qow#CZS9yVY2T?8I}%vyN3@qz3N1M1 zZ!|B643X}1xpVJrvf_B(?S(U;Jee>CROcFE5C8Xn3_UGzb-w{A_ z8LT7h;tA#^%08Z8t`c5dCK%v#Kx?jbm(1sa(Rjh}A~bYmFJwiRHxWx2Ysg9nIW+jw6`6(5@Y4!1m2(*L+K){+_gJxfxD>YuYu`4BXtIc5O2Q z_HI-!*+xAL%kbuE|89630_)BD?bv!XJl-DH7*jnBYt&qHkH?ye$n&=J2>u=Md7FCV z?)Lb+MJ>i~H+kNq8n5R(Z^;2;=6ZV>=+E)}Wl}e{56j45P9HrFf)JNe!lcehg9Gii zhcO-R$H&2Ib|1;$K)cb|b|U~^kJx+!j4rs_y&Fc`jkKNTbe4!?Hij063g*sg0^^70 zcT4D>o}-1)gylvQ*UM(%KRgGUh5q#XEDSBW)^G5yZ9Ja~ll0NNk=^yT1;P){d09ACd19Co=h$QO@FF%3G4kx#`XP+jP8dsdv797uycQ4pUi2@3IG5I2mk;8K>!TmI4t}C006!L000vJ002R5WO8q5WKCgi zX=Y_}bS`*pY;BRTZiFxlhIgJK%6>^{mkPn%)UDe|-Q8dyA_>$n)!o}Sq;NuNy~Y0h z`?FJDZr+J+q-dwm$WlE?fx%3z4SgdQ?oO}raxQ8Q!FCu~BzcGxgq9}THgaH|E3Km$ z&_h&PUYW^jm`6<*^_G)`NHK#Mp~prhh4M2HTjNl1vR>G_D8;$R!g`4qPq7{IYmLpP z@-|%C@nc7RF6AEy1NF#9)k`Ub-mPJtoi)Iz@@OIaS`x%N_F(RBH%1EJt~^nuWm<4W z+Xwy9Ir~XK_eb`K5WuItiFyTT=K%b8s*3lWu%s z+qP}nc5-6d`NXzu+b4ETY$qqSZR4J;{q5cT-mP18_fFMJO?TDIAJ6pD&)ePaD9V6> z0sTE7fruc9Kp=hsG0=ko0kJ>;0dfEJ8r$14nA_W%+n6$#Svr{-89JLXSX!Dei2uuw zvU7GZv@#{$3J>n>U`X!PP4zCcxU^>&wrVf%~Rog*)qL$_O@I!-H zogFi%bxL9bq5bT=*R@4VV||nf)h}84EDzJEd1#6mnzCbbz-;tfg4wif?G0DB<3#o6 zNvpe|W-T2)NO-@wPLO7p^6Prh=uaH6^GxeivXOT6?1xX=0v@O|>c@8FhT9?1R^v_l zP@){|w+Eed&b@vX1vljaj=cay*b(cRAeWkR(aNv0J#vx9@0Ey5cVVH2ud)U6VD?xP zpIQCwwmG}6@p`9l6H}ln)9gN7sK#`LqQD}0DGDrTz&BS)+)okG<}qBE60t&$lW$`D zJHzsF*N!)$sXq1X?kuL+7Q_Zp=5yOoGA9l8Vfj*q zR-_p)C{Fxm1FLpU@fP&J=Vs1AEt`3JYHR1dHat`@<{XawLNS+@f|GM64_wu>-CAt( zvw6aXb!?hW{n_jKllBlzys8anZg+g1vFmY5_j8jbGcKH2Is;xItjjBjb}^vbG@bt> zV!D1t5x^0+s7#=6awoWu&$geNzmuw3$QR8`yvnFIsAxH)hi`W$itS^Q{q0lU6g^lf zOQvOy>mo2P*1(`x^nIf)@UV3V6$hsF$rtaGpDdY4q@W^ne_cB=P)uVtrf3i{p2xvf zu*BR8Ej`y-{8}p6gpsP>{~84r^`)lTJE__4PMY?NkPnvDge99mmIlso(gfwEKhXJ% z%rYaH8=aRK?mm30aT+c39r$!Ta>shfQu;X3CV&zt#(vC&PT$j)_T!mZ4^}n^LSP_w zQ-EW*6f(QtQaI0~T^wog6?OzD?g-jklHI;nwljdm{(Ib^9%{0mXA)$3&-(7rA!oWx zD_#OBX9S^G$HK%0cy$KJ!xg3-=or)+We3EH)QG7Mncgm-q%C+t$3f+uu8guYU3#~y z+~lmnrsf+)@gFQKftx9q_{&27A3#8i|05RuJNHu5HdS!cP`@|jM(JhNAVAm@Yvza# zWl{;3wd_6!EU&~!Xxw-cleIDYRc-@zM}7jSH%u{Ji{X`_iPZ>lDtv0PwxPyebL32^I*3$woItf&1~Q?- zzaqJV;J0MgVTbjrkTb)!y9zukiG)sGZ0O^QjINIMn~YY1{$!?IuDvpg`E3Q&jMFSO z%E-^7!Qzimh(Gv;_XtlY64w2P@#Uk( zWuj)ql>HtZPOC$fp(J3A#js$K(M>7MFc=%aE(t5MxKPCr`m0k5XVm<>ys=2<^0cW+ z=@<*4;u7{*AJn?G<7f$B`UgS@j|4 zyNw!S7X@*%htjyH4%^yu89IIq$-#S9q7c>P*t79as9ID?*p^8U320qFysg!D(dlHlZP*Q88V?@#+eX}1hn!U)zJNK$kjJM#ouel(hhDofI+X(aX!zqg^-m!a7 z(N~Mx^4iT)vTfHm|Np_V#?pUZXByQ$ON8yVJ`sVv4lyE&A(h2}P=*Z!P#A|U&HF6_ z1`XJP&z4Ow=}=`bT-{YkgCI;N)B4MIFJRPSc(Dd!F~AD$l3~XfT79;w-U8VGfu04v~g+en4rXEDSF~z*bAWcvX;Sf+`bM@((t2~!D8napeq zO&QlNBbWlN=^A$FCL%LhQlF38UKDHIG{8Lf!<>*CV(i|8Pqu;L;EZo5mf3F81mg>s zs;8H%B?VQoYpo<+TZ)={hqTW9c}rZekI(6+c3y(vNmn5HkXGJ}(o&SUlBjL*Yoy{q zZG_skKObj5eKD$_ArdviMSjlm{PAahEs~icefLjc3`(by;&nl%U9e?yCrfL{LJFHGdkzwDgatzlSsc92~&7tNmH z9UM1@;4nBGqjWdin4;SG>M`%z8h`LCZ*O9nMa%xdicW}S!Zjux?%w`qYsCq{x4&tB{0cIn%c`-E7lyh!(nOA~58?5Eby3g2?ekrum>Q7;=OQJ<%Xm*=}mAj~dN?Q{JDjH)=JCIag||Ld6?th=tU|yyK^NVw0>9~V9vj#sKUae?Ax}FGH##( zEWOs#Tx(4+X~P20c`^+PIrVmhNT5vzs&E)*^%F^#L!>d;y5$P2kmDg_-8Lu(h$izbGLk;-kSYyCe-L1PLa}q&lUqrp2V4*U?H_GeVA5JK?+KB_)8 zH~d&$nvRSW1(eJ)01VBudhT`aB?bD@suqVkz3sZ)%-1`uk4Y8N$mH+P7r#6T-?%bvaRMGg7H;X%fpluxyWI_$HeO zr`ZH)Qu}s@xl=4NNsk%Iw%im4-)Okbg4mxa_j79lU70Ol%`e0*rDMZ`L^ zLtm+wF#=l=F*Zdz@8H8Z%E)m4^xgA`BqAY~S+cn~2tRN$XrdIn#HqZLZ^Rc$ zF3EoS;K3AW{kw(rP_ta|2Qe%ONpvJ71KYW)QmqX4Q4~yMkj9zmTtqFq!@+1+&xNtc zp7h!QxrkZ9^bBvonMYI#ph}S+O3AfL*wV+iqUnP+%J)Ux$KUYcXAg;SP12>eBLy=l zdbKo3Wj|!UhcScLr5Sr0yMMqXVo%*gWT?N!G1js?Jiv#)&nK6M>!w{ILeInUdYy=X zlS^~Q`NDE|zwBB!ci)<%eKDS;?wy(R>AM!#@9cW>1Dp0svNOG>-c~T z(i+`2gt_fjP)Fc%!pVY0*7sofIqH0YC9u;9V-EtV-Skq6R;WRr$W>B%5-!3xH(`&c zztqW581>8Vj?#Sw`STm=c_XtqL4pH-oD)_&041Y9K=fS}!BWuE2pSRJyu1!rg`KmI zwA`Y)b-4U9@TLQn{|WO_W&D6=I7_XQ)L6qQWd8$N6py?)fvy<3O}{S&#BLA0q)o4n za=4|Bb=c7yrl)0F4^E>J!fBgUtjz6c)jdd=Xpa3mRX={CQZt>%FmEGsZ(dLYhO1i zTdD*hLgvV2D>Rj&WK=AB4bNap$pmTiZD)-aSMvkgtK2sbj_>^04I*dG(VsvktS=cOb0y4Soa&}IK@x>z z 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

8NQ;9Ans?P}n^>gcO>e>oYyAlbCB*-T|9&C$M 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%0A{lnE||A9G*TwwATGQ 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 CY#!SH literal 0 HcmV?d00001 diff --git a/kits/ga/ga-23/libs/test-utils.aar b/kits/ga/ga-23/libs/test-utils.aar new file mode 100644 index 0000000000000000000000000000000000000000..a13382c7d880d4b793c0ca38bdd359e4f4179f69 GIT binary patch literal 104495 zcmV)OK(@b7O9KQ7000OG0000%0HcMa;5rEa0R1%p00jU508%b=cyy&(+j84D5`CYq z&3RWRfQdR^e{2QUg$&sB_ zAnjdKlT3b7^yRmA`G4ES>EW52OUj5dUil=kaGJD%5oQ?}Y~j`41%C1D*&z<(1TSak zInN97z#1a|1`n=421EPT!MEL9>~}CXN%E&m@Ur}slGlI%epg2Q3XeoEXWS;^HTjpI zZZk|&X07~!!K=QJ-&-n3?m#4#ZSx6>PvBF9;4O0iQf3bF>rpdS z>7`??QH-Ik(TriHs)jOmYK%*Iq?rza{R+@;(2XdKdCsG;r56CD$>A4ZC7s$h) z$4E|%bEpi8+bp>1xVdr!2orOyI1T^2kk|u}l4bCYp5`_x?fkN{Q&N7%hJjVUIUC zuNmLvR3DND-sqF+K)bb58JZibNgryv+tl%ey(Lxc&6#CZLo508^P%L~^K?I_+PDN= zOj|O{GDt^8BJ0ITaKV-K27%`x&X! zUVE*aO}?5?jqGS?fJzJrbJ|jpqov%^)wVi#-?NETJfCbrfkEuUf#g1;7mN|aK z;zA~;3^ACn(+YQr^GstysRt$oSrvd}QsRh8xh;Iwwvt^!B_nxfiAyw#)Lx9kMARXdkwa_%fv zVFm%rli!B+v-BkI6sC_^8-y7|LlaAJSt@V0@J>WjpRJlf(#oE*XDe<^>4lP4m@^?D z-;rczb)d*!9b>#&?hTeulkFm4e@LuCII_QO?vdS|5jF&8)DZDP!K2g(Z)2&y15Z|k zUF$=TQb(?=9pkY1;&0PsDic!Omw~Ne1O!2c2k3PYnnK`dP>TSDlST+X?4Q&*uO=tL zyY!vPGUu%8SV=>6HiJIm@PTx;h}Yk0r)Vw}nl#%QLO%*s2A5gZf`%>e=9!RD2aOae zX4{7|_Cg~}X8@y=Bh~0yUyd(}hIbO1XG*5q_lQ`fjfxL5B z*zgx5Hl{x!HTiL&GarabJ}JaH^f9Z@u`3C}9$4Z7DP7uPKIM>wkJGcwMqiKl4l>-; zHRwVmEOc+a2mQx{o=iXw(@jPa3w^Odb2Rr6Qow#CZS9yVY2T?8I}%vyN3@qz3N1M1 zZ!|B643X}1xpVJrvf_B(?S(U;Jee>CROcFE5C8Xn3_UGzb-w{A_ z8LT7h;tA#^%08Z8t`c5dCK%v#Kx?jbm(1sa(Rjh}A~bYmFJwiRHxWx2Ysg9nIW+jw6`6(5@Y4!1m2(*L+K){+_gJxfxD>YuYu`4BXtIc5O2Q z_HI-!*+xAL%kbuE|89630_)BD?bv!XJl-DH7*jnBYt&qHkH?ye$n&=J2>u=Md7FCV z?)Lb+MJ>i~H+kNq8n5R(Z^;2;=6ZV>=+E)}Wl}e{56j45P9HrFf)JNe!lcehg9Gii zhcO-R$H&2Ib|1;$K)cb|b|U~^kJx+!j4rs_y&Fc`jkKNTbe4!?Hij063g*sg0^^70 zcT4D>o}-1)gylvQ*UM(%KRgGUh5q#XEDSBW)^G5yZ9Ja~ll0NNk=^yT1;P){d09ACd19Co=h$QO@FF%3G4kx#`XP+jP8dsdv797uycQ4pUi2@3IG5I2mk;8K>!TmI4t}C006!L000vJ002R5WO8q5WKCgi zX=Y_}bS`*pY;BRTZiFxlhIgJK%6>^{mkPn%)UDe|-Q8dyA_>$n)!o}Sq;NuNy~Y0h z`?FJDZr+J+q-dwm$WlE?fx%3z4SgdQ?oO}raxQ8Q!FCu~BzcGxgq9}THgaH|E3Km$ z&_h&PUYW^jm`6<*^_G)`NHK#Mp~prhh4M2HTjNl1vR>G_D8;$R!g`4qPq7{IYmLpP z@-|%C@nc7RF6AEy1NF#9)k`Ub-mPJtoi)Iz@@OIaS`x%N_F(RBH%1EJt~^nuWm<4W z+Xwy9Ir~XK_eb`K5WuItiFyTT=K%b8s*3lWu%s z+qP}nc5-6d`NXzu+b4ETY$qqSZR4J;{q5cT-mP18_fFMJO?TDIAJ6pD&)ePaD9V6> z0sTE7fruc9Kp=hsG0=ko0kJ>;0dfEJ8r$14nA_W%+n6$#Svr{-89JLXSX!Dei2uuw zvU7GZv@#{$3J>n>U`X!PP4zCcxU^>&wrVf%~Rog*)qL$_O@I!-H zogFi%bxL9bq5bT=*R@4VV||nf)h}84EDzJEd1#6mnzCbbz-;tfg4wif?G0DB<3#o6 zNvpe|W-T2)NO-@wPLO7p^6Prh=uaH6^GxeivXOT6?1xX=0v@O|>c@8FhT9?1R^v_l zP@){|w+Eed&b@vX1vljaj=cay*b(cRAeWkR(aNv0J#vx9@0Ey5cVVH2ud)U6VD?xP zpIQCwwmG}6@p`9l6H}ln)9gN7sK#`LqQD}0DGDrTz&BS)+)okG<}qBE60t&$lW$`D zJHzsF*N!)$sXq1X?kuL+7Q_Zp=5yOoGA9l8Vfj*q zR-_p)C{Fxm1FLpU@fP&J=Vs1AEt`3JYHR1dHat`@<{XawLNS+@f|GM64_wu>-CAt( zvw6aXb!?hW{n_jKllBlzys8anZg+g1vFmY5_j8jbGcKH2Is;xItjjBjb}^vbG@bt> zV!D1t5x^0+s7#=6awoWu&$geNzmuw3$QR8`yvnFIsAxH)hi`W$itS^Q{q0lU6g^lf zOQvOy>mo2P*1(`x^nIf)@UV3V6$hsF$rtaGpDdY4q@W^ne_cB=P)uVtrf3i{p2xvf zu*BR8Ej`y-{8}p6gpsP>{~84r^`)lTJE__4PMY?NkPnvDge99mmIlso(gfwEKhXJ% z%rYaH8=aRK?mm30aT+c39r$!Ta>shfQu;X3CV&zt#(vC&PT$j)_T!mZ4^}n^LSP_w zQ-EW*6f(QtQaI0~T^wog6?OzD?g-jklHI;nwljdm{(Ib^9%{0mXA)$3&-(7rA!oWx zD_#OBX9S^G$HK%0cy$KJ!xg3-=or)+We3EH)QG7Mncgm-q%C+t$3f+uu8guYU3#~y z+~lmnrsf+)@gFQKftx9q_{&27A3#8i|05RuJNHu5HdS!cP`@|jM(JhNAVAm@Yvza# zWl{;3wd_6!EU&~!Xxw-cleIDYRc-@zM}7jSH%u{Ji{X`_iPZ>lDtv0PwxPyebL32^I*3$woItf&1~Q?- zzaqJV;J0MgVTbjrkTb)!y9zukiG)sGZ0O^QjINIMn~YY1{$!?IuDvpg`E3Q&jMFSO z%E-^7!Qzimh(Gv;_XtlY64w2P@#Uk( zWuj)ql>HtZPOC$fp(J3A#js$K(M>7MFc=%aE(t5MxKPCr`m0k5XVm<>ys=2<^0cW+ z=@<*4;u7{*AJn?G<7f$B`UgS@j|4 zyNw!S7X@*%htjyH4%^yu89IIq$-#S9q7c>P*t79as9ID?*p^8U320qFysg!D(dlHlZP*Q88V?@#+eX}1hn!U)zJNK$kjJM#ouel(hhDofI+X(aX!zqg^-m!a7 z(N~Mx^4iT)vTfHm|Np_V#?pUZXByQ$ON8yVJ`sVv4lyE&A(h2}P=*Z!P#A|U&HF6_ z1`XJP&z4Ow=}=`bT-{YkgCI;N)B4MIFJRPSc(Dd!F~AD$l3~XfT79;w-U8VGfu04v~g+en4rXEDSF~z*bAWcvX;Sf+`bM@((t2~!D8napeq zO&QlNBbWlN=^A$FCL%LhQlF38UKDHIG{8Lf!<>*CV(i|8Pqu;L;EZo5mf3F81mg>s zs;8H%B?VQoYpo<+TZ)={hqTW9c}rZekI(6+c3y(vNmn5HkXGJ}(o&SUlBjL*Yoy{q zZG_skKObj5eKD$_ArdviMSjlm{PAahEs~icefLjc3`(by;&nl%U9e?yCrfL{LJFHGdkzwDgatzlSsc92~&7tNmH z9UM1@;4nBGqjWdin4;SG>M`%z8h`LCZ*O9nMa%xdicW}S!Zjux?%w`qYsCq{x4&tB{0cIn%c`-E7lyh!(nOA~58?5Eby3g2?ekrum>Q7;=OQJ<%Xm*=}mAj~dN?Q{JDjH)=JCIag||Ld6?th=tU|yyK^NVw0>9~V9vj#sKUae?Ax}FGH##( zEWOs#Tx(4+X~P20c`^+PIrVmhNT5vzs&E)*^%F^#L!>d;y5$P2kmDg_-8Lu(h$izbGLk;-kSYyCe-L1PLa}q&lUqrp2V4*U?H_GeVA5JK?+KB_)8 zH~d&$nvRSW1(eJ)01VBudhT`aB?bD@suqVkz3sZ)%-1`uk4Y8N$mH+P7r#6T-?%bvaRMGg7H;X%fpluxyWI_$HeO zr`ZH)Qu}s@xl=4NNsk%Iw%im4-)Okbg4mxa_j79lU70Ol%`e0*rDMZ`L^ zLtm+wF#=l=F*Zdz@8H8Z%E)m4^xgA`BqAY~S+cn~2tRN$XrdIn#HqZLZ^Rc$ zF3EoS;K3AW{kw(rP_ta|2Qe%ONpvJ71KYW)QmqX4Q4~yMkj9zmTtqFq!@+1+&xNtc zp7h!QxrkZ9^bBvonMYI#ph}S+O3AfL*wV+iqUnP+%J)Ux$KUYcXAg;SP12>eBLy=l zdbKo3Wj|!UhcScLr5Sr0yMMqXVo%*gWT?N!G1js?Jiv#)&nK6M>!w{ILeInUdYy=X zlS^~Q`NDE|zwBB!ci)<%eKDS;?wy(R>AM!#@9cW>1Dp0svNOG>-c~T z(i+`2gt_fjP)Fc%!pVY0*7sofIqH0YC9u;9V-EtV-Skq6R;WRr$W>B%5-!3xH(`&c zztqW581>8Vj?#Sw`STm=c_XtqL4pH-oD)_&041Y9K=fS}!BWuE2pSRJyu1!rg`KmI zwA`Y)b-4U9@TLQn{|WO_W&D6=I7_XQ)L6qQWd8$N6py?)fvy<3O}{S&#BLA0q)o4n za=4|Bb=c7yrl)0F4^E>J!fBgUtjz6c)jdd=Xpa3mRX={CQZt>%FmEGsZ(dLYhO1i zTdD*hLgvV2D>Rj&WK=AB4bNap$pmTiZD)-aSMvkgtK2sbj_>^04I*dG(VsvktS=cOb0y4Soa&}IK@x>z z zt(D4UN<7A`iY0Z5unYHguM7(gdynK-sCko`o!%<{V)O#rTB|UHna;OsON@!Y4 zftk0SnW@m8eh@vzDzaXg`V8UtqmY~3C`nKetHE0N5++|Lf2-zrCnO`=FcWsPK@_kI zX%tm6pl+6|<6qPoN={FCXqI7E^VzPux92c!qTGD4LXTo$>*z|Dm8zZ49-0Gk9wnY~ zQdN)wm~R_cjX*`4n&U4$R7AWCKeZ4E6WqM(_Oyc20|`j>G;!n2k!B9c3e8l2n2Xuu z-dibJ7B`(I3tF*Ocv2QLG74nUA!2uOCb+8Xqu-!YRAU`!an2KLE1yIZ$;MQ`!G4kv zx|(4+Jn4Gagi7c=)pC717`}&ciHjDmeJ~D&W73HY^K3xbRbW_VY|v>W0t~p3>=MT zXI5FxAe1Lk4@mN0DN7_hD-)h?1{L~%l%GgxJyH=0h%!l*oCn4p2B%g&@?l{Sw<9#f zcG~uTI0J*llagJ-j@8TFozLtlvLUYw4&n?-UVOKK@?K3TB$890a2nqEY=naUS=NR7 zEP0D%V(K}?D3RmTf>iQY-p>jboz=3PE<0Ijc|N?G5{{kYDn8$D!zG(t=4p0@oZ}w-xccOiCK0KmA@9~1ee_#`-d zA{%*fr$WiHIL4C1n5}gB-fuZ6YMCiV6qRe$LI!t&`7Y+pn@0BFd07^-G-bRziAtb# z`lt-LDcl5AcXv;!+|5}v(xzcbws@gx4O2xO9`ZztBz-B8=@|*$wicHr6-T$FohEf{ zBU8ngb#sUWL8rAV4{^gFD}}vUZR*UVyQ7O7I0@NGH}H}rvy^$HgedsU0UtQIEQfDu zg4}CU_fE61HSS{~F;NMTV4yDfKK`4H+R$9BcL)^Vz06EmQX0IwI|$3+#*pJY;lR8? zwv>@T{09xjdz{gfLJ&5C*xz@9%3?`HZ{e0#-@tEQkpkwpU{!mP@*YuPW_#yWQx~5s zcO!{La1O$~07JM;ai9Chb#gZ}W=i@@&J(d$^Fk}qCZ+JTQF1^A*~O!;CmI~W#KOd- z+Rwy*FkD$P@g@7BmVd^`ffg?-M+#@We%pvlhqep86;9r> z!~1-a^;qaxl9)_kVtcrXyC-~`2)TMkL|kd?1v$sg^tGj!h_-DUSUJUj`9bJ|zo&Zt z`Q}Gc0*^VJXDAJXlEe(i`qD(DvyI&c|n^9gVhG=alJ5i%xRk?)gO$8GgB& zdb6U9<`?)kHBOxU&4ya$_5ivGs28#Zh&1EhJe9P+eJdyRMF0Z1qw}lekc%s|`M%qc zc$=u}ME+E`mTouWx@Lnv?U%m0uZ5bpJlUvy!q{r`S>4n!=ybVHotJSzb>y*cfmLtJ zck1k|fM{gO!b(FLm9Fi6-;QT#?q-Xv;ZaR0Jvj5xV(A~U`5V7qDX+kuss|KFCv14% zaboPTE%G1Y+39lHuh+9NC3i3CFUiR!nKy`MfTWMq{XcbJbiNJM?zqyS$djfnvDB;> zz7a>Dpl2{zU@ip_P9T@EfYgfZd%zrnNidGk;w?HVTAjQ+r&#k^J~w z^_cO#;efO(X*Jj}@4|6+7ck=82!mhW(JAgRL-BzQjs!~dwgv|N)dC+5ZwE!wP5l+r zs8I5EAgsOvS z<0|ndtjiTxOmF$9NVh^RhhYc7vX1xixUAJY@KbJpj_hDrtwI_xk!z;qccLMaf&%7# zqsnB~`@wpx^M%ZL+%$4fFz+6+)nx($W=~>7#?P89}$exU*f=Va$vi zd=4k$yXu5XEA|XY0+|ElyUmR1gD|VR4MThccBOq~t`M&f7zGDX0^76{8{gz~wSsbPU};eKSon z>#ebSuPX^-S6vgWy3wZtmMg4MT-b64fs8*`WmUDewB=FW z0>D@CK+b%oewavEJe=Uy)$&e+hOhyzqwjeRTduW5yPOUwJ9hj|8LDer?X_woxE=Q4 zsoMpNaSq*~K-z&PtL zf3zYzZQ|OhX@XwUZ=>Ullv67P2bydov)5PV#1^)mezl}2!+-AizBp-JP83VfXXm>< zatnEX$NaP-a`HP0*Dr!YdHdjgy__iY8JZxkxlLv9cIymYU&Bs3?_^MKk8}jRu898b z6L~p2tX`dW;JC3o)s-l;A;RhG78BoG3U6m=8|8&6bww}v-Phayaenf>0KsV~t_HK@ zgIv7}_mkB(bm7m1*B1EXR$;;=2Wl^PBt`8B-g_xouO0#lHWZu^A=VO|SF+}$gw z249o*2!oXG9%q8&EsBIiMH8i9??vNlgqwajm9JGXZQ=2j$vujazS`;s{$9!!LsFgs z@8|;{u>2^6(y%B3dugv|@E4`?tO!D4KA=gK#Xp1%-emtkTFI?W-(G57i@WES%=ZBrB zK#oM{jF>mP-PAt9@om{qV0D;z!tJsuUCOd110S53GMC?Z1N`U8SQ{+T_pl}m*M<4j z^S;o=^vNF@_pXd4W5|7)Xi=^!(_y~fO8#Cgdo!GSdQ4mX0>|aBbe!S62J{|FlH$t} zSo<&38dyYIlwV{T5zrn@gWbJ7gWW%A+MelL?BgHeruGR!@9Cdp>^b@QbvX&#+Hzv2WPB5=_~`-3yVf2h0v1q~`PX4vz)q9l2$S^trmT zz1%3vevBH5a&69J^?Ri(_*j{Mitb zABsh~%zqLn)z&@Btwel^aQT>sl`YJSXa&wcPCKlQC1nrvPVEbj3^DR*K#IKdq90i9 zpb;-p9Np#^-PtDtM^yNaD$+uYq|fKgf zwcFp^q?byS@$ZGnaSoJ~~UWW*}yQ`=|=heIV>RF-UyUf;DF$-Yri`adl z<;6T$-CX;UI{Goyu)Dj!M?ynFp>u1lyR(XDd10x--L0vaZP3kOqr`oL2ZtNb(eb#c zr{`3k6~y`D*3Fy>zcEb`|9W=4le_cKDs2njetUDaA!y&j&`rUyrISuzeM--B?MlA8 zyT)2UqztvE?8Ni2ps;l#@V!LrHq^~B^z&j3X<@zdP`34c!&bl&n9b(80QjjfD49u0 z>hjXuTOw?0j>`OLW#)=~+NH%YRC|3!etPBO*}-ojpFT5PiTs{6m|4jgdW#4NAK5x| zP+MuDK$C-XISQ_fP!u8ChH{~+rfKjaDhB`sy9@2G4rK7;ySZ%Yw(Y( zV-{6#1T;z>o1=7M#Ck8nKN|v&$TK#nz(7F0AV5GI|D&1AKbq1h$}$Q#La<-i!8RRm zbxpgUm5ZPcvua}Y5hp|-P*hFf!IBPHvZ0JFEI604l)WY2g=MN@)X!g(!DX9?C_lXG zKUeR}UvH1U{@4Q%G@um*{~@Z>gsjIjpc4JP&zlNb4W>zkdcJ1SDluw*?E)DhKCcqI zTFQQQZ!xQ8spDcCtC|^s>L^jXwoj|+khX^Gmc@)E`bl~^LftW2aRyyQT;nw-1OXr8 z+Arz4VqNi|Eu%(~e8xNtP-xAL{~0&PxDTf@MwxOZ_&$xJkl59W{HHJ)0}`}4r6Crs zKQd0Nf${Ui#3UQP{1c}lRGuQVo?VLF$k0|q^Ev%VG%FZkCO3qUWA}5uTX`O73y}F+ zu~=SaD^g`SCOg)4(M%!htKvtnr|ox~dp30yY}y^!G?dKx6qNNlvs};X&>uH$k0Ae< zGqN9d3yr>GltwZ(Wm_>q0$-&Q)luJp>1MszuPo`Ns{I?rw-jHn3@`!-@3G@_cjm2> z*)dFP;;p6VG*KIEqc`ozh`E;Reu8hZ^9ybipe6aY69f&HyoR&pfH9vAhZ0kRVZOO| zJ9ReOEEm)3qM*iDl@zFt%yaT8 z-SpF?>#K;0Qc!y+v2dA1x%`n!c+)61#7}hk(>DlmsS-6=u?TMs&N5yj6=A*n>L_a7 z`(}!@_Iaz{7_P5H$Jh36g>&(~N;0|Y3T@k;3|n2qCO>PLqNu$ahys036w(J?OP#FV z2-R0zOMW_uB1%fDNIC21N7+wUkto~KKGF8Ld~t^I&A3p2Dg!&evu@A~;Iv7vO7}z? zgrFqn@l|v5V?Zqb#3GSvxYSB7lBTSDpD0Aqm{h9>D#3$AUB?*d6)S>okNopc)1^QDAKqkoG!tGD@Q0!i8bHuEXyD~zJZJCBfI8JbX4Kv+q z8uj}{8|=J>f_vbt+lMyX>AH@B8?X#nWFj0H+&#kK;=oo@Im?FMJbjU_n()td9$4qb z82Ab6j)g{;dVDoR3>9BuV5K!Q-w-`TNzrEudR{=ZPxn4hbR$>_`RHm zg6U*g4ir!hZLKmoxa2Rt!<;RJNETGrLhu=ekxPIc^DY1Ni^Y4_h)q=6(Dnn(hY}Do zqf7H0*J#Sr+|G*L3*0b6wu?ddOs<79P@SV)4(1NF{xNlxOg7J&XX-NET1UKq_(;1u z{TiMy$0u9=P6S%0V-QUYe_+<&XyP&@H%avzC3HNG_%TsO?Cd8Co#(}B^n2Kt!5ae6mSILI-|)CS&Sy^XA9T3;^GNh%p6Doo z8JtRZl*pB!ENvr965p0z?Or&my}m0$5H+#6vS$2ixeY~+@HJQEz#6TtCYc} zCaQR0OOb*@Xw-2vW$0v5)REtUmNHZ&6x{(^&prgn?8V;~wI*6_eYa)yZf-~2ep_Dm zN8PRa7~39qSU?kEazIfIy@5Yac~3?}fW46sF!GV&UT(|1eX0FN99aF0Ir01UUz%{e zi2F(f{OLG}yg;2UiZA%6yn=vvL&`oqhT~?y;=|0*yxIN7+P33n#-3+>F#ebsJAw&m zgPx&zDfI3^>`S{Tyzps9{If&z>$NhlPO87|oqejH=>ukmu!krs%{%J?xG&D0`XyEL z%MEDzw>#(yeh)*5r`B&8VA>RzUg|u7_$dU_`ywFU=se1o3exus8(;iB><{6<59KFc zvJqdp3g4ogR$$eA_g}BwHeZAlU*$Ur&|kX#y*qWl?0!khFP#M6H~V?eUu25772C>s z>pjlSBE`PuDz3)ef|e$&EgCQ*O&%I;OUyAIf3yP<*P?W^&$8BjL5Y;sx-MV0y0FwX zYeT7=&oj(V;ge*rBHyN}%3@H)S=`FA7`j{`=m6%SvvA?;nVQ?!vJ+{*bd((@PUc#% zrHV*OHAeQKWE#Vhla1_lFv?Or`Tgaqy|U}wQZ`*u=-5*)ot~&9wZv(0nJ(~fubE9OpmB4TRS{y&<<}VKH6Qi$@FRC6 zD(MpnpB-Qp9Iz^X?S3u&$$DzgiY3R=T0XRD32@kNTb<*J(XP8pht^lQApozVd8q?R zV4+v-j{3oVX)z=NSpzmti*Z|TgtJYrgAV!LH#>{n#xO2M5qCBK;r zxLPuz%JecrN8+HX%^Is0SWGwyrc|Ejne7h=C5W~!me2>b4*!Hz#V%K)fDcesttiw? zE-zG-RU8s!l0q{zV(zvawUUor$!7ForP-IS#Kys!gYeKhR38AR$FD8kG!HcBI3*eG?wjG}`W0tU>7(UfZgLUEMh7 zpY5?DS)=m=q}vLsx0;1i`-rO|SdJ-1M~#^e!Uu^|A37(Y4e%DU8@J*&t1|serYRIg zOEC%{Mz1tNIvj+XwD8wFi6xMT)~S`llcZ}iwnmI6YFg|PR@!UH7VpOXK5ME= zeu)T69=+9w$@)yp?q|gvr94gH4ohD(>PP zv>aH|d2GA5Dj6(^-N}LmzU9h)iDOzawv^yPNlFl6h+i`;2sXEt;jMC?3^hynHm?&#!Zf?dR5WSe0_o1wtl8g zFAvCryQ+0Gnr9=YdO5Py-}esYed<2s`Ak4!h~Ltf(_iAhdSk#pT!f3F6ye<9{|76j zEt;hgG!oB)XB)ac3Fc@OCiI2=n-`Qa-lKmw=@0zQrYL_Ub7a>*?h}5%*x7&0b9RYHn`2qih(;)%Q>yVzH!i|$jXXVANk+sWL73- zKw8{w>Z$s#@K|hs#T*p0zVOBKKtf}2Vv9V0$T09Fs0fgTL!jIV>;2;fZg8t;b2Pat z2uv~P9e5IiWbFh3oUu2}RZK1G2~;Y1g=Sc2x?gF0lDw0;o(<(^S;ktMq_r?rAsAhO z7UYcp_$_z=t>b<%3ba>YkEg z*FDtsvtG!JVDQGN7gOjS=+2eiLJ9&$5I#1nS#P7K8aC{86Gt#_%r+P8Hqx^+tI4cc zX*TThk0?wGO#V(FGLe&2#FjJ%+-T8vUUr>0zvn}?${Nb~1j?IQyaM^n!iGR035>nB zguZ1MQ8og9I0P%i;cafmV8J?S2>#~DpxX+uY(rkS#h)Ai4)&z#f!1KLAs~HjKIo0* z@j-mQ0WQQPo`&-X{~U23$sLjNz#`b4dYs}6(HZ32ppJCxq#Q78z;zGj-k@sPp>IHQ zhrxRe_i59>?f-0v)BBy>6y!N>GOrq*eU&53lvuw*61bp}A8wuSE9u9XZ&wY!RTkF zD|uPY5KHL0mjO%KfV~GaUDNMcbXnyxOVRIe$1x(*?04=#>zkecV(?;o7~4~FrC(Bt zKH$!%y7%1U3WmDsc^Y&-UI#`m9{3}(De5Fw#LtkIS~xGzL!+O!nAyNh2sE=PyW&pl7N6}DO74VJoji0 z5ZdUi8GU>%Y6m_aIzLIvI0=1fMggw_IEad{Nu+ppkyUs#4UsVqU zSvQ7v@`6YTzo&G)*kA2`*RXH#N>jrKpDNLU@t_u#m2}5++`|v1xKW*!fccKxkV&k% zpK)smg3OqSnf6-O5f$@#Du{EpKXOT0J16AgfKw6LTj+kVCCk)mvWC-LjyQe+VQX^f z#lzeSqst~#mFA6*>kUn}3Ta}e>c4PC%8Z)+bEhr8QI6a@r0H3u)Vp(R z3y6<{s#SL6*la3xcK?kiUS4$!vAkon5?O}p|PieosH+e z7hoarz48N$h{L@!wxEX!FetF$kp(1LE9vprV9GL;i1CO?);Yu)u`12-C0*E{2z??% z^svDN$U!s5o!joq?s-4234m%Hk@E=*5O>mNy{N}ij(ChSX7e0MUC?-R^yn7Fk){*p zJ(KREw6fX{b&jFyx~MiX9r!CUW~tLc&RUU5tx_6#iCoynQ<)!~crdi4S6`d7fAwuz zCU1=x3-kEohz0MuDfR2K-t|g~e-k$LW9va-lFr1P4ycyqo)IJ5muPzy(S^n6_2)C8 z%wSaW?G{pf-u}5T5G8CnxER$Y(t4+Gn@#beycPs>+FLL^%~lQY!=EAVBTD=q+ko4{ z)Hp%@f|m97B>iu|DL5Hh{4HCZ3|;J<{wsVl(x6O#;ahB}di;sT>!BDGhQArbp%6#| zy-asb9bU!?%SM)!Y|~O-cl7(mO~IfRf_m`|QPSAt05(9$zjfBl)X4EVkH7PU#7fL; zTs_6CmqUt%OAQ&Iy|#ijG`FeM}C+KQUYc77ZW(0RoZ+|IdH?{u4t>6H_}E zOBc`o+Rh}E`j=D4!BWJ=^6&k>8k{QszNfRXiFT116}4ADkW~!M8rAc6x2O%L`_%=X`BARd@pE2YFHrTa8!$?n zo$=goVoVlDQk+`;14=-|owOXG1{996L1`sO`?}?lY18$x&()-w$jqa)U9oJo-O)oq zB)IfC9F|2%9LIX)9!)KHQY?Wv&Tg>(t({%Vffa%=EK7? z+)RY7n51pe#1}ad^CKgRW-Xi`gzrh}JV4k4!M2b3dN8!97xNcU427 zrI|P;#x!zlA{0+uAZ77+H{GkIzF@L&F_}BWu3cy#Euk;yZbuEYqBnR>0*y7N%#PMQ zsUBHbZU%R7J$28pFf8aU`jBa}1;GoWT|n_!lQYT>&5c-rU&D;o?ES3`aNz3}HEKLR zOc&7neaedk7q#Dsx+nG-J_J)8Yp~{-5vyj83J~G^j@vI*0g)lGc$4lUrsYTN`O$-& zl{+-M7L5xK%Im!c-Q&SPFSVGmHy~JO8X^S-&o(1Sq=HE-hJH(5!Sv=y-+>TCTzWHh2ar11@@hpgTone+WXJ2Ga1?g5rPH+ zV#EXjqWpgfyMJvQ*7Wp7)xi6f|21~OBsD4=2rR6ekH{WS5`@f&P#4Vseq+`p#@MS?-$mCqvL58|V+*TaXal3a^X3Xs z*(1)QOJjHr(QMy`d5d8fVe}TJGXcXbb>+12E(C2y(H(wn>#%WKe}C-7%r-7MuhRoqb%luvtW^q!{_7=-}R;B2g z0Fz6TEH?e7NeW)&?Uh(BIzmz5@|E|j3co)a~ja&aSjkhUu&@Q?AwUP>VEu9_yVIz30L(x8pZ9 zPBp4yIC}a-bjO;vlBtTW9u<)kwhRo0ts%v&B2@*MbIgdX>4T$bwVuktAj??cmEMt4Z?MoW0z%1wsUCA1%M1a-WhpRdE}8T(If-W9#bX?@ld7q z&YoD}I0bUakBOJ!XoaztreFvSK13ulEscIFhF{FFTD+?)v{uobzMGWjY<2a*cvQ+6 zZ{W|JZAV_sE|GCj5kpHQK=yDVQKwuY`=3*qb>^4s*H$dCVQfK63zvHLfEEK;3JRHG zw}`g;x(JF39bV4tY4d&UI{K>%%i4GM3Qo=6RxVVSeffcQ8I`_|AsvG$ZN(D(x*T3i}Yv{pA(sc1a z=4+r^jKhKt@k3=6wH&!7UUCBocEW@w<4`{^dC)$<1X6BUz*~2Zp?w27O+J)=8^5Fk z{@mw)_Kn(ZxIq2vD>Odr3EYmVu{=tx%2B@g(Qu_?eg;&W6qU$P(cYb0yA$`46ezII z04;v20q!?|2mKZM_qCwk#qYEj*Id;*+SMj=GQ}eg$${sC#hFPiTZ#_dTr#B+u0n0n zlSe5HX%m-ZXRw!BWkah#F8Y~u4xnw?achN!qG2QjMXJ+7b>2`c6HR#4P-0n+x8fQx ztX0xF6%WGrsIb?lXyhIVc~7bJC+G^b=pN93h`s(rDAMvVw{t7wACod?Yb{er*5R#1 zluAoy^5&`iblH?dq|(CF=H(TfNls725VeBT%By2eE&552Fys#5C%AXXFrXM{*S3KU zuTGwxyWpJgy_>(71Z;ocM`CMFhnpc+5^>*@XO4-61g?4~KDSW6-PEjMp69mp541eh z%0bcbZbgJrwN)%$MA_V5!-cHLRhcSOS6k#ZSM4qZE&<41;=YdHhW*iK))cO1nPWA0C!fo0duSu2 zM1-;00cr93t8zfuot78*4ZY?`WaC_;F`c)XE5g*{C7}JIk3HnOkrZ`(p7fz%@umu`xido=Y z@)uP%jt_gd7bnKuIh0X;kxzDIbkW;NK3s7qbQ(y;%YO9|xaH!NjX*?4z*8)gEDt(Y)SEG?DV8(WC$J0RCGtx{@{v}kct;P` z#A}QVINN!#ipJd~_nQTp&ypIW8;g5beF&lsBLRmYO^K@FAAMMrQbspWZv{eHy8Q`_CR@ud)8^8FR&q z87sCQgV;!TwC1s1dExsy|3;>Zldb0^%Y~ch27$mENhyr?%~*RsPvblh%Ph$+JenC} zCI2#mGFn?S3t^y88jyK6=12qaRwpao*;__1%>qoKy{vZpKH4@HOU4CMLpH^!Qe?&f zbipZ`HIpc;Qb$(?C^z2lP;swI4s17f#%Ck!-l)hYLp^88L zIu#=d#Z!Yk`H@C;N2sQf93f@mnA(oeGRQZ>&^=R$_UMgjpEOR00!g>1C*i}U_iSoi z%}tQvV)WS<<=(ZpI7FGW&hIkL7c0OWs#AmbSFC84A+bJ3M8GI`b#y&2Vj9X3z$%HC zL?r12asmknAM9F3EErVr1(L1AR-0F#aPrg7GmGZi9>{9LWDIushf^C9DLvqNk3QxX z=6AGuI?FrCq&Wj$l2>h;cJHq`Q?2yN+T3TnnoULL2R*7P@Z7FxJ`4V5TFmC zL0pL-f{OCmi5x;?=dlr!j?X`9e1>ae3N!b75fpA+-V2nE$qCa!@O#mWl zp8yzS{cTsi_XvURnK-e6Y{eTrus`D17{nU|kaRt96at5n4p0p+n|Fc-S{Qd1ncR8b zsO{NmqJ-PqaaN5(4_NMFe3#W(6=uL2R&({qeTu#9DjlqT5x@O(l#>680qV{Dd(`?L z_0#sx8rA=qhT1xtINBOm{}=Vc_&*cT7^O?uB>~hQQ#XTcP5nQh4)?%Xh!Z6T&k&)( z`6MHS5fo%US=X|uf^HodvV=X65fP$3Kq&n~1bqGoCOk^${V>!ro^(l0Jx&>RJ%8Um z;QDB{XbXZJh$}@o&}pRA(}!4zOQSIx8Q@yOGl)#1(v2{8_7fWME>woI4B1sT=~3;P zgALQ4gWAqnwY1L}!h(P4gk$w!V_G?Fbb>qea!_r-zW+t{OF_xh;MWf=_U^Cv5or-YM7{C0aN4owXb zAQ^Yk6gr@p>+(pEOjIhhpY1s5f5EnEE~t6tPzg|nlevEYOnEd)UEBr07IHwD7|EPX zx9JXb!6B^LtepYoqxf)4o;EQBO2WZ#*zFg|Y!jR|NAQ#}vr*g~s?!? zEVYQ{nxcz}$|{l}aIpXK_lxjVzMxm&}!KEXodG@d*Xw^8A``Vl3#8zC5@ksdJV3KvE!5mO_a zwr2G|&phES`!3ibf42A{iyuBYjOrg5)`ZT8-cvt(#lE{oDfsdu<3=qxuQiJ_;4jOD zq>NAOvDCyd%&!==e@{m163Oh!{a4J&Zwy#>{Q?5Q1o^+lEYp8rR?)@^xfySms&gE--}AdBX$d9_X1Xz%d8Xvv zC}$<>oXM(@OccZq8+&MD{4Dr0sI24m5137o{buH_=|a{xO~XH2DX>(XOpZ1knc{~D z3CtgwoT%IQPC}qxmayIdj8t>YJ!u}SoAQ1E-!+R=UYhk zt~okH>6(pydpScr*%`!lHX9HhnxR#+oZ?3dtO{QyAZ>D(ia^dsT`>=JBR}2aiA0G- zP_8kvC|l-C&uD~#E0rIYwxS!{f>0=V24{eeqU~z4)0WrWJ4-eB)~iy(hSXMz`k_F1(5tYkRq;sN&b!s`AS}&P zrYDmWi2IH}k2iUew?(6Cz^cvVnz~DJ4Y7Le_RT2d?I%$^VpM**(1{sk7R9m(F59DB z787d^x>PSvGen6mzGD1W418=9TDkr6{jDH@fCT>UFd$-M@9ZHX{~vq)rFN5|tmCvO zipopP4Vje;6d(`X6w*McQ_w(Cvsw;tSvqJC{{ll99t9+qttkbB(vctur*H;fXJR}U;ez6GCrHKr%N4SAhr<$ zY{R3cc}IJ9J*g($ISLO;Eod)=$p9)YvTVy-spn=ge3&!OI*aLt5K_-(qFjvBxSKa( zr)eMtqniaP#rn$Lz7~$HvuS-5@L(cyTO|%CxXQVdaxE%!LF|-J0jpin*@g#M_C0J9 z>Rp6&ZoKsv;*koe$To|9GN!N(d*;|O;gug_;ZNZrap6W>`^g2m^BW4NX-b-SmU6)JFD;5ha~`@fgb~6$bk{cfJ|m`T(QP( zwu9lpW%V7PcQ_aW-br-8WNm!hW2}`y@d>bsPhPtejg0K^!hT;JgX$f(m2Yk{gd543 z+MnX!pmbG@itIRl>w>$~0vHc8IGnSX3*H^4rPrP*$xS!N?42a%-07vU9N;{9X1!zH z)iKOD&9z~+IGX}pP0wkE2)^p&k35MSB(o1*uYUWx#&XAkC)JR=i#C+mu>i6pj;M1; za%J>svj@F_9r?i8<$6v0MgM$(8XMd(gE5}!^#QLA+GE`NLcjX|h0RX+r2XYvcH#m) zi+!Nc7L1_Sl{A*HW1_wPL&bMwDft9eLzzJ8OYmoFc8o^=_3aEYgI{Lq3v+e6FS}jR zN*VPh@Y&~v*0D(JZ#I$=W+dfaQb9VAm#*Zow)P<=E zn@`rktNhoKIUET>+AR_=m{$8t*9fJIQM@iOCiJiy>}#H$0e0(KlMRy%>ZYo;CxZVP z)PTEdByAWVphN8cwkG!91oeN=x(0;z(hA;BuFr3+)EGejUa&zQlo?K&-~vfZW3`z5p`SE|imf6&GHSOje7;hBK+nB3qG{X_EzWxPxF)DYeaF_p9#tPN&QVuS8jr zGhZKn{8R3a7ymYj9Pbx}ztgZISe?op7uxCJGnMTK4)(ohmjvH7QJ$>|p?#KjhmHuI ztDayG0r5oGDC@kSBdInegdA5S8E(x%ncqU0YOaNE*~F>UL~-Nk;^*SLU)>Iknf@HDN$cm!t z0K@2W1gzTz@_TXadO?;&yDK~K$`1?cr7X$gx_ZlA=I_)QjnIrmWw`Tx>OE(&@)!8v6me5^u2LYERL(m7{nczS|~jCh7cV1nv&Q^ z9ejB!E!X*-2^hDCL)l_-XE8P1)Y3uRc8=CZkbXhR$pR_uo@|5NC>@x0zTVLQOGmzP zRr2dPL|RwQ<7|H8?3cLVEPdi9Y(#x&i>%6A%cmLnHtI!{#kQsJ2=qGwDzs6mZ3^CH z1t1^U{@t*;8h~f@IhmSyI-H3hOjcV$jsSlN#(uH+Jm}dmF?Bq4$FVXM`RuHs0TiHt zwJmvr!9ndHz+XHnDUF_iJf3L5rJ*pPf%6dN1O+8ZTqPuyDB3UCXixEmjk1_Zwg(-l z4b25`(c6*6PQxMDAIb}?qkbc^LdCnG)~K@L?%V*NmS&u3nZuArl?$W&^f#$Qs|Xyd z3yL1hE2YQ;G+K#@gH6Q3rabZ3Qd^3IAw+nHB~QxmTH(%QLAYgl7W{5BT$ZpOoMURD z_C}e4CpPH}3Q7DN?vrKC83m=!=y*!#>k{6{j>e-naRN*m5o(Jwv4T(m=@c|e=hK_PAoTW zSR{l}cUvqm140WEq_9f8=`Z^P79^9=JjK*6ky_6$SEJtOfB?zeR=i9@t^m4(P)9h1Kp6VE;t;S-i3T6z%n5|AdvX z@We>KsqIOAkWl2Cpweb!4zJy@Z9XT**hoUkEJb+g)=Quuk)Sb3p)`gR?$?{o2@}_% ztD}>U5|bq(Wy+KKqEr~DAadmxqUB>4I=uGR+Cqtj_wNfLO=p@TIjsc=nKL)--83tn zsme^D*<_kyOq?6kB&jPqmBkiuS z39xb0hOja@lxUFEc_pn*OsZYcqz~n}^r&1VmIO|c=U2=P0qTX}C7EXfa5QMmsBq}M z0msci)It&hQ3(+sqKPP@A!Q?%wVaPNkVIZ0i~ORHG!<)fba*DI(5VRz(A-w3aPc#v z2gEzIM5$2P*u{G1M=Ia)sv9@^HnQ!n;r7Dm2K1-}_$pk()Gght94I4B?P@w|YY%x{ zX#i*ywUG_NbBcoqC492QYSl6dF8tWkXE>*ZLvWSMd5!9Cr-uCtm&$^=h3#2}80(*S z#xW$9Kp|m=-)W8!4l7v%&nX7vUsq(SiEzn(M!dxpXaD@-i0qibtBe~m?vF%c>KLBM zivgSu7vGptPC6R8k+n|OH?#uQ!gL#c07;!grUPVk%yJJK=f4j-Bo>^rvo9m|h{u%? zoEZb80%z`&rP~K>qM2<+;-6P}O_R%Z9OJA>>flhc*3Z_R$14+!Z1s*b%4rt%Xea0O9 zu~Ux~K6DhXP-*lbW+pfFIzS8WICpwrI*g9d*p1&rQC>^hSloixY^q~oessp&rY+G{ z(t5T%u(7PJ8fq@KWL}+ zCV)xDGT5Amf4mM&Iv|-*Artj1{N_HRNW1l@Nsp@D9$V2bAmB_|yApW%RALqOxJ4vF zbv3?xC8A`TckxY*xw%5QEEiX=K6>|S=G3fO<4l;J?w}PA)m}MBs;zgSr8n~IZ`YlB z`DfP?WL2o=`PiJ87N5>NCdn|`jqv>mU+mk5Eo!=JriGomK4dl%#2+-Y-Ev4Z+Fpz( zZ?H3nCq^7h!`BS71F-6BK-0Hj=;f6?2wZ$$YOn!L3=a8tg&qfQm(*RTD5GW=}VPe0?9i zZbc2>Bwb_yy}^=MHrJq}h|;1PYp_y?b!je!-=h5|b;A&7g5^XW)dCWt-(ip$YHD#a zx-Z6H&kX6UeNJcZQ5y}Xbbf<7q#bPf|tY-OhZ>fRSis?@0Nr{Ce9?ThFGKsCw6~oOh{ch%wAiXVKK2~ zsu4;zSfoOV4VFwbVjR0I<0~sN))I6T>H_&YP1;cB8opM=yr(ZSk#)Ns;L#0Q?<=tKVZ$f zh}afF*Mmme1}A0Dt@?nG0`nF$D$=)%cZyxjqzBK>--V^S8*f&c0UABE@_DdY?Z1_ zw*UF1H|;)#e@izOM_X)2;tx7fNvqv5%Zduo#&}X+`M|P|Jlcm%B9~ruhoskv&AH#oZIWcnnUrJlW z$;9zLylWL3C0r52n|7FXdt`WVLFq9V1wr`0_40rre^8P_40>~q^ah&Vsco5@q^oPi z&c@^~@|p!X)%Sm^!8CY#y4f|-i#3!Gq??$2ocn&9-?aDseSf4U@)Xcps*vPn-Kd#2 zW8FY;c9r7Zu!gB*Q`3dyYCL^O$rsh)zW9yln&L*$$tHWUVJo*mUtH!vK##}BX zl4dU0++d&hHE#IkWj#NcNDoch6R;5>pC|+ zUmms6SXx5ro=mKWJmy>%w>s*gPBg}BIjO4m$D}AluV@xbX81EnsQ$Dj$aTH3U18lsd{|w$Np1m0Wcp zQM&~D8iNKUNO~5!BikiCeV(>*j~u+0ti%$pXd4TO63AERvOSwooBQbdt>bC zAi`dlBadC9%zwig2G30Q1%bjnc_=h2?t zBde`4O_IYMEAC`5dO;5wp>ysIu-4JY8Ac_IPR+hAe+J+SCDzhMu+(yZnx$Y=Gd=u-UrUpsU zC>7Z}{}_ck2HA9HMi7jNaf~9Q#_uD6b|%k4_v{iU6{`9tI+SQ#!7{ZcHNBgNj@Kt7 z>FRtVLnI6tngZ34RrJYvNa_2ynBD?CB!za zLoCF#-22I19zKau0DvyK0o}JgqQr0SukI%ezcJ)Z9E2{Q_Shz z-D2l(k#oKr_$gva_~@^T3^$|BA0Fwk0N z6s93d3jHI&@fYIaDW9#01K9z|Hx8k;d{t$PL6rg1!I4SHio7Lt8ydt4uHUdFG^^Xe zRyOIZi6;7EB|5!9ov0*F=B3q}5@`8_8nf~Es6*Hr14R1NxJoLhRJ(VFBU(+{mA`TRYrJCCzjpqc!IJXd z8Z7@SUWM#zO)bo13~UX|{_}*7QQDNnVMOGGr<4+GV__+vOhXr^-V5;Ax2dXBG%pd) zLWT++Dq2t1@30b!4SJ*fK(0u6^Zya@E4ko^kaW_h(7j$`&gFFC!TCdIgf6i45d zAWMMN_#*0xwG)yc`&B#`lcGTLB`l`*4IYuHy4tY47ugyDh52CCVMcVX!8P=dJUUO? zdkDLEZmznu3Cu&|?yk`X&X)6#S&)hUAgn(jLq#2Z0N@{49K;FjcIXpza&EaGcOj2a zjgU_@aFC{6Nr(&`?QtijxoO*SXf-!n+F^c$eP9n#Km)uti*-au%# z#G=*mEskhxhy_%M-09U9R8`4^+x(rvuGr{@m6`|;BdJ6wHYMaSsX*a$JN#RW#r|9! z{VnfmvzKYhOWGR78(Ne+jcTZL{n)xt1a!5B#S6ra>9Zt7;#8c|$BUHj{RVQ?5I4m> z1=v3${uJQGdI0*yO5{v7Zx*i_V2C^^37CBlsNF-G7I~mG#7l`ovsO5g>`c2zbQ+o^plu4kI_7|BrPP5*NL{x|X({K>74uCfrC^c; z3s5Bk(8UAjzD{>Oce*@YV?}-w*T`x_y zjvp>t;HTard0buQ%i^cleR99M^8Mx?-FVCQ#!npGXX_!Jt~<|H@h%R!Ju0&CR)cts z5O-_6=f!J^y_I?Nv2acAkQ&9^%~`wcOsc&_ceIT-Z!joh*vIIOu&!07=nQdmrQx&i zuh@2z8jh@^P}M|r&)`Lr?z@sTGbOt{&TdenVW`2IK`U!qWRBH)ar9v4)|tu~i`@eh zalr`JuzP^jb;VRv_zfDAp7b9CPqO%}QMY|kEgshT&0)?};Cu@T!fP4#)}FR~mbk-%UO z+>8fPnC)q&vF+_BL9%?eXr-dxjO_gFyU%6aiV_*Mb$)McP7C8FIRnbB)mKIfeW8S< zu^D5<_+Ic!!S1QR(yQb^@aw=@$qd>~{TZR}S!F4Dn2N@I#LnD{7ogLJ2>^j1E+wkY zMWb53g~?xtsjV*2uraX&ZcYd7wsSXO&)Jl2LzH{x%r#PboXj~jIpCV$MLm#bH;bHZ zq5~+m3yZ%pb6_OYr*#b)C;;ek*%wEIQ;5b#0p2ON;_0|h1VRjTl?Qw#*CBJW4e*XY zkA_Qz;+qMGlxzrw&4gg^_)aP8pJB@KgK|5dJ3wmP5>D_1wqz!u&|s?sQ`{wq%F)kI z-j-ios`CK}9yri`kTttbBCRrtK8=w^QhWh`HB=?i#PK7#cB`o4lmq%+Dfk9cp-v-YD?Vc1|q~m z=M|{Y#!ssEE@jH{unwhk%x42|_R8ZddVvvt5%mfoD?ElkgkYt}k}KU{?VV?cP-~l_ zMORhhOr{H-HbA17tQ9i}Ej*hP4LqqbAOhO`&oqVe?_a8*71y~*t0KH_&6AWyDi=(* zu6cBy@Y3rzAq)$QI@r-G*lp^FIDnrm(Py}(BpUUxW%W$fm zzY|+#-O8fKb)PqO+5Y-ccF-uy3+#aPa333hy;NEF zE~yeenK4vpY61gXSa%MO16cLxc}vxe6z&H-7q}`+#U@PDCoSjXzYk4XOE-3&C%|OS zJOv}P$R1}I!<@32o@ba%EFZlK7sG`~TQDd$c&%e6eIuGS2D~x^A zymH@E%Qi)dqTx(gCfG@=;X;u&uoQYNM6uUOBY74VZ7YJ|fIEbOEM3(V?w+CcT4+H% zMQFpjWiB%was=PwZ&`;BGGha^W(fy)UZ1Ad2tkcGB_uc$JgZDb1T!vN+Pkm zHX@?1+;IKyyUuAOpGik0<)ZjBcOvt(5jrt1B)d`G5RfKfos)wjPJiqd42DvtnEFUr z3ov?L(AAU4%mth%4g7OkhL@{&996%DEd7z_iT@UKw1A5O)S8 zIwFS1;Xnq*A^npW$(SZM9D)p0^pj5&d=TMKc2tV>bBSI3R#MnII!>52!;pe3&4vp8 z5==OqdLx$L*l5&>a7YZKtrdhO@xDI(ThEhe&u@G9-q3UQZ_Zu|WI$-APp|omP$5od z=!c2CxsYHs%1i=Cq6oBVpU!H92N!A3A8k-^8qCqN;wezz^WTY!XWaJje1}tG<8n_d zsMqULjPz;~vTrk#oN<#kOnQ4MwOFgXNQBy0!|NeV3b<=Ad*PNHOg>@kgv&rG=(Mwy zACE5`J4=j1F5nO~NJq!ZD#Xd=Woo&urcVhcZ6C28c-VA&wA1GBY3Y~(CJHKx$&41j znZqPwWeo2{DDqSe-v@6<5gkjp1`sb)m!y$~-?Upj_nG zz>2>@DGUy7uUUi?gcd1GJ_v!;;91si@nbqjlFL6YzYfaw5V4&LD4lRuM#(Yn#OikG zyDX_;@XzC*ZyVP{p~Jh}#ZH(sTT>Y?t7^(5#E84ZmL|TGoB+d1CACj!V&-`-j@UFj zM0+TKm1*Atf}gbv$FhYbPO4}{nodVkOQ_%qb!`WqUi1~5KaofiqL7z6P?uy>@VoPA z(p@wcFGwn2e&acG4cH@1LYLQzi^$Z5G1?)WWYm88w}UJ{OSp$!zkzZ&Rp2$i-uCfI zV)fUv1!9tfvlLu(w;uop#WK1)Qe6W{mS|^F#mJ_$hO;s`lj?vCuCyC9djeo>ie<`m zT}~jVl9`$^YRBf#CknqSm^mGrK^ZZxk1yQc%XcC|++3p$ouauMTRmY%xv=OMYNu8} z7bncAj)ya@`uDQ>B_E|jZ_PN&L>M^hjZ*4*{H1KVxdur$a`&08WBtWW#F~&YVb#v$ zL**Q`LgntyVe|GO7QXaD^(GOF-(0>tl{wZ-q}&1BC0D5vT0FRY`e=^duy`lz#&3ka zm~_c%RrY8{Ck{Ufa0m8oDf?n)@|gtFcSc{LTf*yo;xZy;9}-V;fgZQP5Ta_((}7gg zGjQr9vAfazi(h0ULR*f=0S2gNRXn9?!)7YiR^9;Bi>V$%k2u`U5Klszi)cOU<&i?E z$3tl?kkWoZ{SEfsIsnZRx7Ap5)5G z`ok_W$?*`tipg@LWfw}dvEyztl|`j+yYhJR6q^93C0_$qbD7zD86*n8xlM1cw zt_nimY2SeDO(QD8c;WGhR4XqoJ}ArAL>|Y6$5+UYp>7Lq-sf6CTn{Os;t!Q^ z#(A@&x7kVHC#pgLoMM=T!$d~v!pANSzo%fNW> zFU~=qqLw(f7HfK(f%8oRg(O?4vssi)S^PR&E6G%Eb~MReHN=xzAKs%956Wo89(pPl(rBw%UwJ@H)j zJ;;^0Bj>uKQs=gt0&n`OKM_&kW8~pyq2{CmCQ6c6B^agdxu3*>D~d zKbtE~8`{*$h;?nCyFJry7>d=Z5D6{40zTr)tqz}jgL`O;{osn17(Ho=lgsxk`7Rjz ze1<-8J@X6(wk0=;oa+MCs(nF3MHE>^2qG8|6hjQ`%LtDTBa#p86+r;InqpT_Z_3d; z@V%wVt~q(;-N4YBL;P~Yi;K|NgP|)a`MIQ+1)18}fUQvRz%$FBn;3rg6wt*)xI_M-RmMdlJ zp?&}IoV)WtEV_Om%SD!>=5sqwivW*(L~>_rM%K#E#8H>7fukvvrDhyjvXN|9KG+dx zcr(+#SY?|DF-z(4i zDM}mmV5|{uTU;MrXzLRj5-JKDVmd|Y+IsPeTCoXl0uU3SS`hUV1+5qD=;a}iq^su* zHHy@nE78P!yJLJI*y79EZh^{hgRQIfqqRS0-3s#QH&(nR4 z;oW!JfVv1u2$-otA2f8nCmRnKyOVZIoMDMq2Hsi*>WNh^DRMp7yCG)##1dS@>1z(+ z2+CfuMW4U=E5fViJLt};6KQE{Vs)!`#rWsN?QLs_-{cnLeu)kF@EhvD{QO#Spmnb+ zPTNNMYT7tk78cr4+`^jwjSc6CKzdA6*grcriw!q&Cs@eQ!{pRDuxNqP96o~5_=D>x zh^p@?xeWdO@+e=au?|y#?Jl4zK5h5`_8~IZs*5uig{tR;SMh*`-=T7qXiH{Ut7jSA zdzG@sFVhPfdk{|eRkm`t_Apb0+Oy614PA^r%KS~mYjpKe-GH+QalQ&`t@6V#N0AEN2H7w$ub_|P?)lr7X-9je00fThrPatV3+A3{X2?=_wy zzuzr8YlX9IV;bd#;H$KEc|{ujN5SKWct!ASBVPA#nfFTdLU4W?jxch6o&IQL&3;0B1pG`iAJ&pP&8R9EyK9{D8zjJ<|2w{E96w**jZo2tN`hja! z{BoqB1pAyle*~v}N)K@@jg@$sCtJigqsPu<_54CrCyWmo#QcyNdr*542|~Xx8=fn2 zd4hr0QaY(;4JYgWzT`Cj5C)Oy74}1EO(osb!q)$y^;y>s&TVDbsbx4|d~_o`Rz0eI z0~~^Bx)q;3oLcx?WykMg{W)Xsf-mhwK)QJJwF_ptLtRwMZ{Lv&bug5uK?t~-`hiGU zmlNDM16Onj?!fg)`I%2Y0{1Ru0F;~;HPO{3@nI~y^+&X^#AD~3=bhx|@I6Loy;wcX ziu&J)^GN{t02M`m{7UcPgJ}8KBAt2BI}xam6FW%$3oY3#vI*O-BB^!r<{n5~B&+|? z+FtQJ4k@p4Z8sJ3wiq$ATkI#t;O@6|m?uN>gYY3Iq}?lcwg}z{JVFh+IQg^-PP+xA zS^CwLIJg5fGGAQyjo_nYayt2hcUV|&)@|8T zDtI`&KN(qJgKg!YpDQ%}RVmn*q+8Xuw#7!5p=akm&(doCUK$utLeAd!6wgXsa~x(T zLNS;*TH}=eB}-(Ixp}~ISY;`B`(YF@eeIMlP5yAzN2i?@>zCq52_>N8Z_?lxaL$BvX`ChwiAv<1NRLqBWHgD=8?BexxZv~PG+fXGzV=t4AZTnE`sZKKI3~-0vzUgxjdVOS@ZHD z{mztHIsiT_IDVnunn8OVQKR=}P}@(mxrKi%ZAQ`ClXSlLBUbJlW|Thv{>wkTzAMm_{>|G^ zgZlsRHyllb46LmU4UDY*v(s30(-B1s@j4+G4Qn0v*9b{)m67ppT_FZ`PBKw}6oDT9 zHsuF4&6s1rN@L}^M&*~BhksWw6~eo}w=$KPYE)qgTLL}{^X6umoZIXiUS{V{^H~td&D6jxyHtB$>GH_;8tJB|@XXRcMzqDH@Nl-xV^AMAN7l z#grS+KW8BNJMD&g{PU>$-uC|TvSDjCH`8yz-#%y42UN9)VF;}4wMjinW@gsCn2=xT zG1Gx6_-s4CgXnS6XLWLGX+9eHTc^&p?emf}Z8l~?J~aK>kHy47yOe~|d2~lqZ{HFb zD%Na$HQXL?NEH?Iw~+<+GO%ZeH-franL~{Sv~Y1}QSh&T7A*pdbin?R>?_Tf%Q#f8 zdpW79z0^TF6b87M{pMKMTU_h9@6e4PFxX4+0Z0@Sa{NqOoW}ajcGWD@-ZgEfB;XDf zkYJVTr3990UGc6{7$YOD%kXLmrWAU`GM)qGlDw*c0OPoi#%HhP7hx=j+Gk z85k4b?LSWU*2@biY4sZv_%e6vd4~R_60;y+9 z!bk7QN9U9r^rb|T&fppA)_R9&!}L_l+{stXknSaanPgYcJyT~yj{k%?Z+wX7TRqLcM_TPbJqSE*xFbc; zntwn=xJ`5wKvru`GoUF63Jaz}MzpGwK&_-bf2e#U)4`hXC_(k`f;whaF?MU=LS)8^ zb}rrDo)oEFL|`a8X#+w2ieng45qfK5&g6Zx~t1bzAE5@fN(@%C{3yGKS(%O3c*x8%{p zt0fHv0+WIKa|q7^86tcftmqK-`Ti1ifqUIdx*$V}DWtsL?c%Dp=7C4 zL%}jN42=XZwhZSkW~t1qj#qH*OV91t!7B7) zSuBHGPrTXXH3la!O`2Q1R|I;LQas2nT7LtEkRQhM1lZl|6owbR9?H@-+gZ~)J z6r*CJgrbJ(YYS}MPz{C>K-6R?#Tp?=(;NvN7%wRyArLbX>C-7eXJF8nwQikVz+bfc zLGU%_YKfY2{^aDRTy}b6I{l{tP3N;n4%G@;B^xL1l-4wR6v}wql%7`t6 z^y zSVrc%N83DsfYsb#3CUr0uOc10`O&DDdVwf*3b`C0OpWk%%tHSR46NrF)Fd znMZxigmSDkWwTb}y&7|P!ZkIK@O$|=7?YG%FU;J5(*-2KlMX?{47Lod!Au9_L ziRe(BXmn|svoA=5MUhfQYH2xcxv2suophFYshZ5TMubaaDB5STWzOcmNO#%UAoav9 zWvC$x;RM^n*4^U{g<74kL8D)@)MB>`bdU9raBJih%5VtZUs{!IGk`zW>}*ev52#qrig`zk&PjQi<5NKzAR5cC&QY zrD@d1yKsHYL~c13*7}oLAW6qZUxGJUjL~qX>V%{C)(F|{{gCV3*LGHzK>@;*#Zvx1 zN<7~)H+KI5%L|;@Sxc|@lSdd~8W@w$QH>xjc4EB1E+lvIE!dT>q>gC&alw_w<(gIf z0#2~v6_VdCC}0)yD~C-mowTAu)D5X5>W5h~&P%o}kfdg88?0qNf0K?IHNJR6Zxc83r(P(&z(${0_0;Q6Xb<(0&Dc6a0+J-Jc6N zSlRC3F+x$HH#8Kn%SXbm7{MdHS*q=Gr| zL$dk5Tf_QNL)Q3uZ(q3|UkBUui*^qCh(-oH+!_7A->^{u>i4?U?)0kJz9UTNN$g<+ zh5ZyHMw}Q9hR(6QG0Rg~^{pbF62?Q=gDX<3< ze#A@q3VNVl#C$=BOts5I$Pb{w3=w8+&|m*@;8`g?Bg=vT0fE5)0nz^7bJ2e$v|4Ka zkj{@Rlf&;=3dmo|R8*Fb=AM8RU_&&!c_5o0^?Ho3BTVqb3}+^V^KVnTzxj4Pk2RBg zs5Tnc7mc&utU6UCyBWdp@y_EDnx9urGkm){X18{E(E9Q)@ngLwtu5$Sj*NGsm_5v^pjy}ubWQ>W5+Y%Iq%K@|WnI>A8EcfZ5YOibLUBLc9 zkyWmTo{LzI9Vjrqp%~j+!o$KtUxKW6p^j53T`iVFKzVr}h@PAfSYPT@shQBLMOAzgjhuqL z7&0fpW=&_Evj&1v9?Rv5NAdY2=b@=agU`{oz3CeEay|2Hg2mxp^rKNoz<7e$nIwI> z$0T5?sqr@HSleCQjt*TbBInIp-9aJ{V?0r|d7rtC`PVgtl9n2hXCsj#U^mQC31`N-CXL)t0#^S2?}I4rc+#{yOQh zpvw?Vk{Kvh7E7E)pL(BCLEgZ-bel9<@=X$FI45+y+#e9{%s34qLo>J}$K@Wr4UW11 zL^z+YSgZ+Jnc%J|Tc%Kqc=-k9ox3onZSXT!=-+a?U<^*(s97+tChVLzs`?cD& zsG?Jg>4(IEOg_#zhaFfSs~s9%#v3+*lb4~M)))C5$u&56>Y>9}t4qKfc0%k`XrI)Yw1ewP92X-}X2PzkKR?FD#8W^~fJog+Cb8@Cd zms(rWi%O|~HY~R?a~S!L}QC?L)=+wS&mfz6*QEh1`_ zOfXiJ-U_s`5}u*QA-!{+S_Dov>YlSzXV*AJ6YBWV)mW`=4GiU9joHI(8GB=e)xCZT zQD&rREUp+~z|2iSWm&ox^(i%p+&e&>T74;^_&jJfk+^fZ$JdZLBok9LfiIX)E%U-pMpKV{uVI`k2Iqf?*Z&>Fp_>da2 zwHF9Zx`Vq5sCb@jU-LIVxG#sGrkGtarn5~Zh(;3B&FeFb2+Y~Vv2L`E9`U}(wn}o$ z>(03MP1lUnFX8kLPhE;mp~TCZcOhs1OA5cLmZa6K7smwr_L~rP*o-OtQZA?Gzd$sO zklrBexXE30buB176}4ooOT@WipOPmF?!7K_OVLN zfwBp~zy4-xsva+{vJVUdQ~?SE#Qbj)vy{E7nZ^H1%i=~Rt`5%sq=d@7|52Oxo)^%0jTx7%f_byQzAFWG>74*=7vf`lXP6e2ZBL6wjw z`=+(B_}#mkyZe2;J%RS9@IEN^heUc4;Mr<6p6>mQ#1Oe`mo4_}RkZRzz^-_=CdE?s zW=0Pr;lg;M6NsT|SW-cbMQl%5$_1}H5MT;a-n$?=2xYy2LWHYX6 zkEg!88=?GkiZv2D>L(dbVmB7`Xz8Egfyt4Y*C-^xAO_bOaU`1yz(p=;-?b7I3%Z2m zP?9E?q4UkTtDiAS81y!>04`UBS==F?#|yax|7f5T;Y(jW>i$3qpJ++yTyehr)r(sp zEKxvnS;da|^xJ!E+l7$+4DLKK^vDF42TlQlMY?-pXl&*y^~-|&yO2GZ0J5}QIxuiI zv$qRBB!!MK%#$18$t33()U2aIQi4qS2j%us#USCT>kKo5WmX?jZTc#OC6OA<{;!PoD9nsLD2R zuBN*-`J6>gqAH}f?OnX=!n+rmid=@WYPkh%l`Y-LVfYPFIvt}#SNx3vm*^YzD@7mQ z0_SIre}zo&`qTUHUvOFYtFEB=w~+Zq+pUzHqwPPMFV*!_*2U5IBJI#@!SN{k=VFUk z!QjY|^B)4!$nA9J5?0cHh>c1Z8dh+Obc{{g4+S1-AM!6kSha9ptyjTYH4`UbIgfsu-4nW_S z&I?n6&nmEGCJMH{*y0_p7Yerp0KbZh4)TX`xvj zjF&WCw?F+hYL8*S-=-{oU11nvwAJPtw#Cu88zHMvxh95prESllO`kNMY{I!LpcaR9 z#(M`z1f7R5?bd|wZ--4pZnF)(hnawjh`vL`YUQWZq6G2yY_+=ZI^Hm{_C#SWToTwq z-7)Uj*-AcS?0WqrP%CI%-O%1hQRkX(9^;hr8;ap6cY3a+X!}-k2hrieI7$s|*=lCA zUL2;9*yX1T2)?f})%;maee8x`&lrBw1OT$CPt zq8t@&`WxmFE)`6k=?-?zVgzn?a2gJ$&n>1<(s5!JKY$*^HH)SjHUhe9Fj<;&Rptf$ zPpH&d!+mft4;PxJJNM-C8;c<4L$Q`GG7dT;S6 zSoYMaZUqKz1TNh(p;_pd)s7)d{(yQG-sDxJAJx;6Ca=Ln*L`BWFkm__3U$OO1uxrT z>5XsK4Sgz}+`M;xo2IvnEp03I*B0Ui0tCeJ-{*t>(%Sv!0fW>(j57Y=_pG!o-zSK~ zr$T+G41NyIz>7o|F5JZb5^@_XDxw?}9`amlzh})*g7!TQX|fkcxFdmGDk;bqV(b2# zwaUf9!}6bo+44%0KR_#i@NFR2;Z&hk5A@+LQ2TPu#r#ou!#S057_y1(2(sx3H_z+K z2e&M!RY$q<{pwae>m+8@XR}F@bkWBujb>7Bt54o->o-PF{S*eM4^0Yl{6Y*%tayw_ z_7z`bd5kFcTNoffM{B40CY~JlzB?RI;Y}3u%ar!gGhzq_8X4<@s-QvFA>5%PB5{~d zw|nUG*=f?7CUVr{GyBeb?#aKZn=D*<0|WwzRKG?;aS%0+wN%=(Fp^2OAe?=UvGs)a z!O?IhH53b9AufZ&B>ijFWn~Q?Spg zRzZCKwy`VU*0`GfwVsCt0wVu^_$vQ(ccA`Pg5G3C0LcflMu93K_UANABDX%}D`7>G zHmPF*hbi`0C5Y-t(Dj7Nzl40~{)~5D6dc#q^Su&yC?=d+WD#CT!K+S&w6cHKJ(}RR zIJ*A+dO_{MeG%&AG&k+4nc11t-x$<^F$U=L@&Gg@_)_B4X9BTrGcWtS(-Log1M$Z* zF{~k)(uTP!4TToyCEUhGmBQE?ibt`)e5RmR5v@n!siW&k=+jn>zG(Jd!Y*_~!DDAK z^T+2MW$g(K9ZfVx!@#q&Ol|~6C{@;H1YK#(v%h8q)hs-u1ib{P7^A#3mQ1RjtNXWS zisuWngjcDsQtO1+MAQplAA6IZrj20W%d}R6j87T|pJHGy1TSu62qdRCRu2J625jx` z_FpTgjHuC3SU%Od;Zrc=AN6Vg&ZC&fiFvl1ZmlCJveWOsIAWioMMMUDWu+w{^f*2_ zPhn%aZBkr9?2^)HOk@Vx`PJ$Jr&WDo7)*W2_h@{o_i(XLAcDlZrzRtQ+pmxfD=Q)8 z6+|RxE|XMMrTL7q(YhbBL9W**RWoaV_tylyBcpJsSH{cyHlZF{No2$Z(;*mY8uzll z1X1{WZH|ILeMcGUJ4vttNLuqP0Ebba3N0KWHxbI0R*VOho;W>4Rn{3+Iw~gLR>NSj zVY7OM{XqV-ppMCxkp!n>TWzejXsc>EYS24k?i{hE{@wqKawWc#X`9H17t~bE3s=J$ z%|BgRQm*=#yX|zLzi5R&Rc7k9(8A?Y(XmrizQ9lo`XI`O6bEfb`^!7)%)z7E!%Ee zCwdtcyf?i|&%JE(X1J(uxTLX*G1UhdS(;y7eHpv9)3kG%B;!3O`9^wSDK`<;v~wGV zIp<6~DS#->6x|@jU4#}kT#O8Q)GZP35QM2(gglKp2*2*AauMGCW<2SlX`zaWm{jVy zDJ(@+F0`td(leYS9O;#Z=>Wxve4te|^sYn&m=rq=hFo%7Fef6h7n~)=CQHke6`$qq z<8051zmbyIi-DN9;YER3hHc($B0(R`t^cUtE#fU6L9FQ1l`}!94T-G4uop`-Uz--; z9UYtW`c1jI1vZ-Au(G;Hs%^RcHKrqVh*R%o|6u^Ao4oA8FyTvu^$oLo0n~3vp4cjU z1-s)*xXQon33rd8%{krFz6B;ZpNG;ocp<~nO1;uM=?v;X1IhN8_g0QpS+6TPssZLw!Os8cSj9^&d_&oi^& z4@B@6^Z-*BuvcxDbZoj7+%8o}eR!s8aLkTG)E>n~A1m=9x|&;JtGs5(&G{ z(UI?e%~PRk)5=VLvB^^Kf19V2&0HMZoK4LBdB>@0=P<91=4YR^P@i~%V!2!mE_^DT z0b<^xuQ^jx0jn$ugB~6SL0F-4%$~;WUWYIGY$ssy$LMp$pS8$$1#u-d<4Koi5=M31 z^zfyN|M-^c`Dpr&-#2IvKC4}lB7^awIH--7ZlmFT2L^}h0M(v3vO!v#*)-Iq=n`L2;7ph22zQ z$Z6@^r^tyIbsTE_HpGaIAHl)$FPCgIqEQ&&j8Q$n&K{o{O~7N_^(i^5a>9(RLuM7p z&u4$JaCrzP3*P3OD;(K*%+GE-&z=6}sK)hjG0PfS-k5f5>Mnhf^HCYn^Pw@EMW*3U zmclku9pfw>BuN329(7SmEL4gH2PuuIqSeWJGSES3BMS6G^YR^r4-D#bCPC+!r-R}A z#xd~2B7g38n#r9~+_`}M?aTwE+O#{)sg9Ri;UOQOXTiFf1nhysR*JnpaG!nM4LBJ8 zlpA!p9Qp=}ZQOzi)N^2rDcUkq$-QJD)Q6JS=*E-D#WRo19V#Rf7&O~zM!7adNFiWn zlbO!E1_8)8hTPFs*T$7Xpy3LKc_95!p3axHx`$s%o8XtI&N|%XHMfGE*iD2Uik+C4 z=lG*O`3bRafp!OJv*=TTfe-~c6ouvzvnj+HNlCVsMKOlQFL#TJJp`6(=|gQb?P;#6 z%zpn8mEjLwa1c+k8pW^&V)CY=KR1`9f#H`AR&!Ho_vzaqe4e_M=lBA_61o?sK2(w6 z{#&vLCzp(N|2}C}H-z1+DIl^uISG^^c?6N4>@Mj|bDD8}>HW>R0J1*?m}=|JTn~ zt@-YPyNLd!p3qk7zV^S0A2eV&2+)ah!gD(6Gnc$c`93 z!|6*+%ylsngpTMRhIf68T@BGYNRlTJt@n7i+OZq$3|WDtTU303#akA9f#p06hRo!U z=4vC`*N%3RBiu)4vhTL`?snrPbGD+TF|ze44qci4z)rHM7a8<<`orZj`&IhM5OwwC zTAkpx3p}TgiqtCW>cM1Am6q{GE_l$@({Y@=d-?d6^uq=_JxkSPy61#;{oS#X1{Fq{ zRJm5#X=^6^ZCaJ>4d>qSqe`~<>Qq>C8Ur^NomX@Oo6Hg$bcT+lkV9?v-ZgUH4eFG0 z9F*gi!#12KvGtaX*NFCRI*Z&OqW?`|)B{jyV)XVDh1A;J? zMWan;*KVR}g!cDuv^QyOrQ(7kOy*dXkYMLwH-=-&x-7TFt)0B$l|N3BwB0Y1 zSy$#BPzGP5lqOn}LLf=dw(VHVO5|B^?9$jGGd4YRNEr&KSa4ffcvX^9JWobtM=-zE zZ>LT=m2AXzHnR(m=}{2%&dZe!hUn>jn6aAbRjO{)=v-B7;+NfLPKeuRZ7~nIeF*of zGEl+Cn!S(w(r0W;m>i8LSh_j+22CvAs(a_7M=e}}LfPMiBGg@1sX@FN`5aL}Rxg%D zJL$_2L~BkpBw9zEBZ^ENO-M52s+5j5mOD`6vs|)9Pl_i>e1!>Mzp#9fG`5-nBtrh+tn{2iu*b9AaC~eEYCTLpt>d^- zp0?89AUwlyGe0CLT?T|Sc8hs$R$k<4(+zu`(r|YmESgEpL{%6*ph)7tw8uhfQnKN} z4_n#DQ06b9=oGsBsZ_KR@e+9hee9Vr<%pwQ&j-i&QVo_z6xG~!W5CqlC_>-y#RX^$ zVvp|wIRw@~2%aLLeA9|OTX>#AjOgc~c<_$HvTCaPk71fKwViQ9_JDAZn zu`F$Q68_{Py-KtvAfn$Yu4VH;)Z7aYJ%!C3 zfoA&tLMT6#8c~B0!1?e!GVy{$}CJCH`g_=_}K> zM`q75=|dfte@ds_EUR26EiA}@!YBW)R}tZ-`&4f*lP=+>pIG8o$ck2X!9pB1i%S219;d&P^ZlGce3!hM}fE4(oh46u2DD)y*;TfE5 zJPA1_LQZ_j0yCj&@vKD%MYlcG)*cx>%9lmv@a$R&fz5#`1#?rl3bMVyF zN4%Y&Ke!0Z?ougU1>*i?2Sdat}+3GgRN6#elqclQv!p;CB9GXK5ryM68Z z^ZMHRkHgdIGT~2<9_0_3pZSYz&fyyOn&XLMU#EB1+Lj@3K#Kh4h5frsIA~ILMzb3Eq?QSZIUNpvj(%X?yCl zUQ~N^7>eGSfzN()2$w9692UO7EV^_orcNd;z_z5@Z=FOb@mX`PQHk_+<*2gHXJIe7 zw4_VpPNv&hYcxt8^WD`4}pZWmHpRZT2)>Ibo^-_Ez+t zn`EmJHqWwFinGa}x}9*aO*C>D#NN*@5ToElH&Ds*91=GrKGjZ%KbJm#?OHh_xYm4^ z;;h-+DR!yZ9)mGhAxPvt8Pv_Cdt1Cpqz;&`7am+zm3WK~PQW4MqIhkMVz1wPr;Ce5;WKx^PP^j*V@@;HTm#JhJm2{t{!g`v*? zTKu++T`x+Ckl!=GM|&z z@mwO<(%zL#mFK)Uph{F$MIQ}UA^*fe)H9GK?V|T2pR&?x-QMRTQ4+NFMLCo5WnRJE=K%>n!C###$xV8Iru?&-&~t&zJ*ehKqUjDrEl?etJ&_r)G$U zwF~l{%?Eed>IETZ`9{yDwrp4Q8n}2DysNBth#!7?7?Je@Nnq~A>hLc{Wf%5TV5 zMZZkdWGLGG$oVbI)(l=C)otU%htlQ+Tz~FHCOs(R+$k^sXShOP#3VTc+38f{r8#7K z#|-|@AUuv=D5lznem~)j1h~ss#pY=fQ(h^L3+M(-ik@_KfD11O88fYaxc(2OI2KoD z9wWpv^@4$>;DmSqsg=B&~U4{l4hmj^_blw zlhM&mr4vvX+-Cj2|Hev9d+ZhwkFZtv;NUTB+FlT#xVc{lWpO~-w`8fA)&#(%9Cu?PTxln;dr$tYYm5Va1>F|$Mz_xQKA@p{y9mmM!-zqc{g z2J>i6(3Z0Nc5Pcx%6OK49y$wad;$-JRn^^K67zb$jOUxrc9fEL37)3L}U*ut~9Vf zFv*8CsBl^^Mw4(a^Am{X)R*UPKipx>B`(awu_+HSGf$wK)lq%O09)YO10%}OLMU5- zs2vk1zJYom^?ND<-5%E()j;|dRt*9Nrz$l=_^D^xYFARKcgDVH!#O2UOIcqqqbEYz z)yxU>-q;Q(^Lw33INcrs->~_S;FA*Qj^eKHd1{KcSQ6tWD^pw(4plrQ*}}Mk4;}9}>eC8(7gXeO-MaxJ)tKL=mo-|LZ|KH#dv{~hMW}FRTOjp zaY0W^g-#+}*%^Odmk~bVG!Qg6tW;W{|3zN;ee~rKKc>^v+l}7z}=u$1n=_~QU(A_Cd3L?fB*hy~% z1EwXUvOh~Fp(?R&6Q>+rO(G`G6Ydy7vx){GNC8i{i?uDR_((9#Q9uKidO3K|6&9;N zrgP*7uD1ox5_hzA&{PxG!<%EZF(-X{v|eAB7T7@2Vx4gqnyOEF=B!9WkWrcli&Kzq z5W6#kj_VXocU(OV{15&$9lG^y6OS_O^kSH7IH3gDc*7me5u?r;6Za{~8+XPYMM!EJ zxX(CAZ^a-*JLgR@Jg5HETz(tMo^)F#GgE*EAg_X~ZWJpHzDNH~JG=rTdemOPUuYj{ zwpwcAxt^_s49d5En-p+&IGVu-0tB@BSB&ZZ;Q01tt{x7~Hdgi)4FA;cD4V%BI@r6I z{d0OzvZ{^4oFbN=yb+ovK4x}5PltTF?RnaJ$XjrmDYR^V3Yp)H2o*(5VOF4B@3vWk znG)*HUjkz<1Z4?GJQk=^hnM%f*UcXVCta z;&SJl0ZIz{>X_^K=HrDODO`&U>(*lMwEN>PLu>Y(WNvN}A0TU94BfU`zJOvqkqF=< z^b?8Eb2|Ln`xRqLTWqJ#SEusE1LM(vHJUJM9Q!rku4%q|BSXK~I?kX)8pz(Wh?m{L z1@I8PHw0R|3A7^YPFJ?VFFVf&uoJ0qA@+Ys@3r#sKym7|?tRjin6p#12MLsDlT(lV ze3Fdu4ZZFhJ3b@vd7sExLEE(11u*9^djJ5`@7xs-)@8VD{^+3NjBp2v%yr>*AcbOqB+YYZa^(HEAQj z-y8h+T@l`*am5*xXW+fn%(ZoC$jL*`Eo;2{BM zuxD_%8b!GNnbw+1wY%76Z!Ii&qX8+?m8(FOr9%1F289L)o?be6Dv?*vX61_vJ=U3+ zGuEk+J~<$fO(jrJBwIy~?xMfNC>{?=5~7f7D8&NaCFQY;*SJ==61M9eVq(_FlnwH1 z(r8p1iTKk4VWc{w!G?^tMxEI^GncZP zn@ih=flHEmh&K}0*GU*q$^&hPoi5iK-bWiQ*B8?U+dqK-A*C3!8`3|b*U7Im+akqa zp*L9SO^Jg8*sn4HhI_<;-SlLLHvX7myvAuy-9(mNe(R#)M)|!0PXIKIwrR24R_j8! z5X_odZu!#l;QAZTD@lT%%0@aPe5ExXPZ)^rytJ~Cwai61uvB}gaJ3QN!K!OUl1r+Q zEE65VchUN#qy2WZ*m1`Zm1SA@3}|ZvT#2`kLc!|fggiA3y@fRi$P^ve#P1c8!#r@6 z$Fo~iR49wF!3pa{TVAEOs%%Q*0(UH&iO>tvAbAgTi?F`G$zAQ*nNpd?4}EK|S4RqL z`-f=Nu1D3&M8}ol?=zNw5#>~EdHYQ8TV!!$FLteN`Xc0=Ykqz=#Xqwca(0*UuBT7W zt&}RhS9*7=+||(L2dO)TJ6OGx&w#5_wwP%31hHx7Hd{_=5}`Vlo0u)L$s*U}mvB}g ze5>z(s&rpL_U{>wsJmHQ--TYKgeCV;jz%&BqQqm=-|9okqGmAS2#xHGt+A2?1dX3@ z6F_D0iJEn4;0*l+AJ+F#tBiC*oR8)6j$>!;+d|HRtal)?&34G^fo|DPj$L0S^1@`P z|L)Pax`K3%_7?h%HpowK*fKB_!X63Y82q)0B=EX) zm+SO&m)z~2KCcjlxH{ZpWtA&4`FSTjTCX$L7-H1mfrpw znR0K;Ub_#z%;-F>_`e#?oXs!iZ;!07w&-K6Z$=ukM+{3M|$v5cqrnh|T0xD%G9Lg%~p`)9ms zV)oH@_*wasuCU=_>{!(xU$xlJkE!JOAm0eJ4U_$jU0UZuR0g||F^5-&5^e8_j&X2|`13n+I0iA@qo%T;C9-upgkq>10W26nvio-dfp3sJ!sm~Zfwq9FwV_6HdU>3s-hxAV{WNPa3G8DCg=pk#zn zmW)fR@FW6uH;ciBR5%xY-mD_neyz+Ihogt8c_nvdqC8UC`B@Eoe?eCzouxjiXbh&| z65?1~SC`c~Iu<#^t}S{1mOKnA`l-|pxm;~-ky&;`rSWD5ZRTop7JD=jM$^3a!W2G2 z{RwUJ7i(KvS6g=_1u^z@?RBu7_Nq^h3b&R@Rr$TEuVN6qLVqk5!)nB(2#F78ZuijfdNQgkM zs?hB3q^95DL#LRj-t*m1o()W-_By=t=e_L54$-B3Z&Rsw2XI&JvD;IQ9w(U_v~A>_6<^bPE$}@%vzy)+>}R5-?YOW!h#!AyucX1;+0vZFt30> zwsyFY3_r=AABu$U=(UWeh*MGcc7{~*{#XG=Cq|PgY8TeLBiyL|i7_8Q9xCLxK0zs; zJp*sdR?DL^FGQp&SKELz9(b^Z`Yiu?TV<7->;&Tv?W!Ja41099Vp}x(bmQwIKRTL2 z=gURP6_DDjDo>b+dh$Z}J(%xR6QPZc^-Z%EM+c!kVO$qcsz_E_NY_LP=_OVXImWzLy>61GTUU+FWeX{+!r3Plu31aa6<({kAWm2;i3tJ^klI zQZTzT{cL9{cWQWC-lo&mJ&cl%V3U5aLin?Yu3MvP^n(%LOSm(jueFFU_SzP}Q z4FF#v1dr2ZQVGXZQ!zM)q-F)cMva(+xEO|xr1(0fF-Y!m)0ijk3*Fa>hTsK=ABM?2 z3QRpJF7EJg>LQ(m#lrUI_w6I@uVY7AthQA8XS$6ZP*`$;3{94Ld*i^m6>O;Fk%N!w z7fuYPJ7vTvXm<%JyMMZWHMU1V)~g4pr6@~?cmOj%%)bnzc+c=~^Pa^5e5w>5eTzi;cr4Cd ze#fAC>{!~?VVG|myR0$O8X41Uded4YHA=z-sNX{UR{6ymgvK8=9|gR`z0^J3Hw z;888#vDQe(+xWL9>QoCXMe_`s&4ndEnOw-gejaefRJ^ z|8}eAQ87ghh+~N|@{l!N)xaw!X==aoYghzNf0<**bwYfn$V=JAb^Lg@(MIUI2!JTc z6QC$gP|?@_k`@tLi3R;5AW*Gr@CWmYC06XNlP6AceO5$0QcTe7ufn^ppa>^mfbt+k zALpXhZ8>Aiu2s8_@?fcHyh5lG4*w6uT=etlU`O7d>Co4gV5A)6NQSWshVmC@EF~YY zL5+URn83R`w$~3g&(Dx9KbENV!v?%<fg0{kko!!swT2O&PW#)>8a+_buK zx74jHb`@^E1s0eRt{bg!Nl|ZOs;Tk|7KlV9n#?8iDuyqwoMFsmjaZ@9`1&!;DtiMt zRk~^mWpn1jS~f_is#&WL2_!!DsvT9xA;v=dcRF7=Zv6G@fom*DQt>$xfu9Y&8oNA` zr54QL{4BpUTDeV}#$~Tl*CY#S<1$2F+18eq^-O!U^1BjY0*;fE zexWWk+5aeam_WFmo7XY!M1fW-!C_8&KN*c%<_2eP;_7?*ac`BUy08dR>+J?K+mvbH(}qc4*|3E}NWPZf<)UmqI_ZBWdTyq>$;69Fr_HP9v4Y z+FEsTsR7=2e`0HOjfoSwtcSd;f)Oq^O{%YOOr3U^e)8JmY1~1d%|7or8>i+SsTwTT zyC%xJ&*w#sic9KZUYAjf@4)dq9u_cpwdo0;E_5xU2um1WvM1Hv&X zO9dlC&Lf8$T8ZA^B()iyvRarzQw&Mz7Bc& zTpjwfbsN+>a0hV;wlRzKNna(~!-$6EN;KoHfhaM3u>U|{dacqRBh1GTIlIDeFGb>RQ>U$cD(iGPKi zqfgXZtRO#`Cz3d$aw*R&B+6-uQ|EIatm3b?>1eahucfh8iw6c&Bc5-BL#9YorADay zEO10e!rz>)L(W8-XdEtG17fosBBTDQ+GTjD4EeKr4I`h<+AjhN|J`%na3#R@0lRE- zB1VYqvAFo~3%&kCbG^fK18>Jur2nujKxc*Mw0L(L<>Tj#&sK4H7{v}loq^20(_g_q z043Y6(p|Ew8O?4BHnI2!E;FPdOe_hR!BT2JbwOxKOP*0CYv%ljh7PM`f}BXStgi^7 zt}QeKq^Bq8;@qDoaMYdi3kdW5*pZ>XC*1pSj8&3R?d+Eq-5c&mCe+HH$xyD_wy%-_ z9$`oIz)$YTfUT?@zxOskjfd59r3A>`Q)1}dq($Q9<~nv>_pbfg$;3R^Ka!)OV%gHp^Zdyty zJZt>m7v7*At-UfeQ|HCLC}WEBsg$4feaaMaC5GF7{vr!A)HppeR2ZKxifT|@>2u{xqFfr@Q>mq92j~*^q&t(_MX9EmA<9s>mFk*zNOCV9x!aj zx)T-!5F@AA-%*GVMr@^r`DIX`vkqgh(-Pq|;XaKl=ngsharcM~HG=>1ci zR3BoAIbqbcMCjtjl!A0pVhYZXuPO67_VihiBo?)O<&O-0|#<=n>aC)5J zwZp~qBi7n7szOfg+P$lFd>u&w**bg(;1qZ;d+-zSoM`0Dy-a`5OT`yu2n?hf*u`+}vPWHK0GnCo=g%03ZPpT4$s ztcnx8$K{W>da`|@jNaM}OLhFU`0;uw3Y;J6KpM+!JPN(=;6LNJOwzn3@Oh##)W4Oo zNZc|x3P#T4jgCYP@7+}!WnE7DPhEM(+;v7nI>T&J_gI||+ie#}ir&k&%@LT#JcnC19>R!_*9@eGs|cl_=3o2I-Td#)Ndo6KU+r(MvLPqY$SJl1>Q3 z;8e_(n;P#^9*u|fyxCnXu7t1m3qB`!_Y=Hm*%R&2_L8)PAOaWE9BgOaVt5oM@j*19 zc=S5a?$Np8?f%eQN!VZKls`XKVV`hv>nmf9*=SAqGC0@)fe@9eaM*| zu9p8#ws*Sesrbf$vFGTL>e*binXd9pjL$SRhjMF?kiGGqWP@RmXAxOn1w(Yx(TqD# zrx|ak*`{znG40Q3&VtWs6Hb%;han1)N|1d`dF2{SbXyy!gPV%4MjD?`#!h0+7|&05 z;GcSfSW^?bRhQ2>fEv2c#&9or5yns#iLe!-u*#V5^3DmYH3_UGTb*6?4zcqdS1$n1 zC+{yt{()MLIy1xuBSa%`gniu&slo0@0h_BMbr(dlPkr}3--VHPsd31aWW;r?lVUXX zJINdQjS04lS5QZmt-+3(Jp1jwp!e`5l5%EdGko{(Bm&=4|_~{5e_KPGMdVi_gQst(dV&1R1#(*k0rU z@-u{qNfaefK0J`j=R$guTCX#S$KY#GRux6+1Ne(_zg=fjQ7YQXYyG%=n(LVBxqbVm z&nLtVa*Nx9VKWrI4bIisNI`*-o&*7|_3DD7f^Q{`HO?8xst_Jj+7s?^wF$WVN___N zQ~y+q;BGzP+g*5%@Z z1S#H){C0Pd`kBa$G^>cd#idq#l11o;EYFykg=w3tzxLh#I2-tXW6s#k)aw7do1}4}foh4i1xhSR zF+h)0WQ88mObkr2S^-`OVgoA=B>l_8QK275ltGjdRj*sv5a18=9!BUaYgv! zQTiQCe{07qJA%F_erVE@_anPuM!@j?WT)o~VplX7?Qyp`khitc2#1x}%~Ye0e-pD1 z5=LOi66TnRu_P~SE-V?V*qkoBOB|dgwciU9(VT8#lmKe9ePT=l8QKSeeSu@ zOqte^oVD3Jxut}RYE#D6MOk)~aBBQ2nTVIcYJ5VO-f8UBNVI~+bKqPMCIAbTo>ZSD`y89&p|m_Tns zkT_T4br*2EFhDU9udAI8bnA)!|7|L*<9Pb9)c=j@6Ijc=fcN@{^` z$Tt6SE!OuTB1B1wSiXzjYM!Jdp%gZXFu%XTSuq+DJmrp`O|5J4Bd)$`M>EG6I*saQ zJa7Vq;A0WxMQ^yQkLS+{<5|lY6Ic4KsX*7>vZ{)$9@<3Ub`MXMZE~W*|0{PqK3Yds z8L%5{j-DVxXXDSss&q{YX4K&J__5>E{32@2{%c0juW}y-!kkY7KwL@^X@KpGjyr2^ zSJ4`fMKitE8L4bn-ug=xrCr{Zmikl*2EjH~-46DF7;B%*^x~O!qmonox^}yTZUF@Y z+~)R?;YX5lsiXD-RS@Rr>RITI;!hqaEdHnfO8Dp68;*xYlM8Za{kID9GjrYv21VSV zf>X)nd%mGdLX58I;kAWGb${n1x54AEi^y{Wa7@KGiAPG{X15NFv0SaLE>CTa(UV|@ z1SGQEahFI=s5=~AOV4G?8@(CJcD2=el56bkhVS`$+~!t~caw5dv%}GBU4evLuk4Ax ze-_{6bHLIQ;`55W-2d}DLlFv^*AZsb8}T;zwea-~P6VZ^@8ly}zA%F{pY#V9^%sad z0R*T%2#)MHSFkXU4N z#<~X-8PsjN;5g>Vm|NPii%mOTkq=q7)(=4d{U?n61*v3sCj#E=0a@(`4 zdrT=>|=Ro;v5Q;_eUN7Btqa9Wt<+!^+!qYF{h{2mvg}8X*zI%abSFA&();I+O z(E_RuD`-46!r3wj+gj3H+@dFn5T-FX0b+Si{&h8(7t;!PB&KU~j_D*-IFVTiY|1wO zr~wL`mk0d4vbg9TRJgmeH5>*A(eHnI7L2r?6lEV62q*{ie_BxSf79E4%{ZC6c$mBV zv*jX2^}nm$3-tOP<;@y*sL194^kg+;o$B7!WY+a%(gA}bXKo;{8`vzo;-8xDMpA5d zkgtW&o>IkR?V($fBm8YI*}f;!fBrmOLH?p|1fASf4#&ap<3rdpo*O|WloiNjUc6M+ z5M#vBPytAeohIXEMd(q;tRt>xo1HVQE$tUEPGzv+!+2$sPdcy;-Zhb|L&7c95Xgi| zWKzFb@Zm@`j6iY|SF6G15;`Su`+{ib%fLP5s?58&8lWXkHeHm7XC?1#0vh?%wQ9hm z?S{^n1rMaB%M-iV)s#v<32Qt*C@4`J?Of7!4C~;G4dY_sc{3{WnfbF%rqkkAWDeVj za`dg^9%m)hB*Rm9ERb8bXa;QFw0S@IwO6-K**v#x7c*UMCZ@%*;HIqW9U(_lvp5r@RO*5TAuijsKNRBX1CUK(XL+ug$GU}f)LtQ>S76efCdl^td=#AyiMZ1*M;sW>}mA&DHV^wE093)f%H0{i+P!ub?ln^ z?K!()=k4w7;sX(=MJbjvmKq$UhN?AE4bNJRHhqvCoON_C|IJooxGMUB#eqqzD|4>| z7H$EzU4Lc;ck>Qz3(Z^Bi_z|6^f$six~^aa%!w8kInQq+t-NCG41><%C^UdwEBf^r zd#IXL_y%vR_Ixgjl>CTUI!qm*5H>^w!AcxW=Ny7s`MSI$rfulY6tS@4O=7|0BJC!( z1&@fn$XlD|?&!`)kYlwnEG6dfg6J$7^Q-3Q4w_?ULvd(W7J@RZL6m`T2i=+IAd_o0 zTJG_LNOQg-zo+;bw*=xd$RtkgBWK$irBi|+$0NrK1yo+(sD5Lm_7FA1(y?mV&YWS> zZL3Z?$d-IKi$^+#<&=FXcu;cN7YkJPm*xO@w9efxJC17tu?SK@-ygV2L>VPmSM5q zPFTa99VH#(h2psGtzO%Q6iu5_B~gnScVO_Sh3${6#>i#`xGFWyr7~e5#Zf?7ubTJF z;t#UGqJmm1XD`q(O#(iU2}JgZ9#Lc;IOMz^;B+78{)C{D+V2w3pq&Fq{*t;>*#l70 z!H8ANBGLPP8>zt5Le>qG@%4Fq0>t<5mQq~8kMJnnK2ie0m+Xh5x?)9$W>O*}OCJoH z>*ciYm`oB3!_fF4$%(1fqeg*60(yhwI;3ogjHc-x2al8rmEVs^9GFj*&-k0V1RwDK zihuD3xnRD(_%{Ok&+*Ut&k<~WN0h%*37Sm5VGmIHV`E>Z)bR_X*`Jx+pBRTdpTdgp zodeEvt^RWVQfZ-Q-|;jmLgOGvu$R!hQ#Rr@KUm)5WIM}sCWrfF`s@Akfbth89vRYz zJ}Lx zTJohfwXo#d!8<(vL8A>_qsHq}tHWW;I9ejbf?xJ=kjk*Q4MsE-cuV zL8Go)zVdShL=frgYrZ9zk4Dh}=uEvR2GJkO7(1P+*T#3j#5`&Yq7D$>P~*Qh=k*>l z{g}4P*6zb(MlBV*k`Kj-$FT)Z(7ex~R}iK8N*48dOnaM^#KuHGN0?D7fXH!jBtv*vh3bxN%uZBn+KLO_YG-Za0E}LQItj(J%JJ1b9MY zh^LM5kO)Sn7vF3Cp63)3h-0FCj6sF41C_3K)GLe^$>i&gTg4(~(ZY4jiEgVuq7{=h z?CmD?2nkWt3O5*Lpr($D_XyGWO-PO{Ny$48av|p z-}Fm=i4i{}-?K?W61E|}*|!Ch1zZ7a0~f*_XUptqGWdIm|In3SDm#+YxG`Ouwke9o zqGSuTVOIZU*lag!)qSdNsTdt8{Z{{K-MnK#F7g4W^~t={;E2CN%8KT2bX*p(UrAGAPP$@g;^Gw< z@siGCw0q&pQAb90yFYbN<^*x^ZZu|f_J+WG@0T!(UG9$^=3f9WBMXgD{v$$F9_eF$ zL*jbAB@zx*88^lD1Z;>_OcUHEB=Kz61W97CaEV_Q;rMJ+lVBkgO<3a-2;to7w@155 zFe9@HAfJqk_yi-M48w4^rMYUTw=7lktuDU9&&BGsJFI+yq&xgOd5caF8M#S}WkOe5tYDYPHh@Q|hP)iD08seZ=8a?t3eV7sce;C3A$(vfVrYEn@D^#6k4v<+xxc_Wh~^ohaZ2{U-$pGqU?W06#GAK zx%RF&>S#Y00Br#d21Fdq%BrU2xp8fC!Gf-J*G0l3l~){&gb7_W=EgbeU?U;J6QiED&-!)4;at%!TVT|H<{&=M3Wv@MIyL5EN$+)B(nb9}=k4 z_{azF;H@yw!YflaxF4DrUO5rQU7a7@*cGM95ywa=-h^;8$>O&kX&(>^jKs`T*b8VL>q_{Nv(M|=1>%XpOhy^tccSuK z3r=YH`nssf!Tr#cv7CI2C*5TSUSMS7$(r7PLs$ z=#Ik;h-)rAyVx}Skix@`RgYyHb)2hM%WN&2c)+u78i$X_;-W3F&_ZZZR%q?e&=$tv z2Cv-<41}&y#(lEuh^>(N>f-HCc@c4LylV7$z8VBX zqU0#1p|Hp`w}#;08;Y}C(282Kq3{Em=A+55hjnuAi^CS_;l>)$j}<@Is&OPD#wU=@ z`*knRDhoxn-ouUCOW&+LnFf8&-E1Lk+P2@PIs*6ZW1Vg)md=eKr#0GP=Q0FxR^8Cw z4ArebAPQWN9G|go9ag)}$c?t+x33}dK|NaTQ4o&YP`YGe&BN83hPoY=vh~y%Rev^4 zIW4nzj#?Ehu_TJ7r3z1k+ALZ{QZ=aK(5Wv3ABZ_j&0TfQGEQ0KsIVFoWme)w1lpul z!wlW8H^fM`gi#~tG2VJhGw7xgt2Ge#RHFMBgev6FKb~uldVN;Vv~$Gx`MP)dgl)*o zEw*9VAJp8eFO$A;P3y0#uDR{>*bOFLA!?F zek2ay*7Z));V&_JoOyC;*u65#Cym5R}Rr%5e@P98u10GPbzOyyOk_vUqQ!jJ>GeJO))rENwQHPP5TK-;TAbXe~B|p1@&?whceX z4uw9Yajt^YcbD>LsRoE-q_UabU($W{^swzFXbJ=yUH`#xs7KFXfWiuwSQP+(5t|yq-BB5ZqS^yqCC&xjb zM^gM;NrU(|yoLKj7#8kx_(&X>R+Y``%henA} zq)SW+YeC=L>|QjBaMDsxDIXLmS7WHx$lX6k<^7ygzE~fDQa=y@FNFCtgn(ed1cqqS z!yU?aRmoB6BBunTlTjZyz}ko!s2&ML@I#)wcls+Gx@`;|s45xa&C%W3Y1DNl!o&y^KN zAdEUZF{C>r5vfN}aTReIDDVa1Nh6IRz3|Bg8Vt2fjk-}JBwh=8ju9qprfivZl_h;+ z91O(`y-v4H{so3oPJGka(JlXL3v1EoM)?HG@Dar((z>DiDlYPACM_oWuSSEl<7-#{ z4U#FPK4v#tSx@;k2WoWb2w~k8`|BDlpXy<2ZuiUu6Ks<*6(TfhXU@BzbHaPvE{~(HK7Gt#1oGy#sd?(H znP$&6;(Biway_*6I>~6=a%haH`s%25xNG;B{AsVnpJw!^Tub}MF{QjBXWBO!zO7Yk zH07`(Q{IhNFuBZH8EZ;&)S$L5=$PSNPQ~F(Tct$3Saf_LOtC|yK>L&QLlY2e zC~e_TONGc}7)sA-?#w$L3v}kecXru02DTAs)7cYJ1}@_!Jo6{T2dv3*PZ@|smD14- zP<@JJ?D!GDM;KJ!A$fqM;NNr~*XFBvQi2q`M7nmM!(n2n^!13D9)rY5>S5fr-p;Ul ziL6P}jiUIH`(vP(UG`St!V3O}qX!3<@Vp}lv^XTHzJiI+F&D&ETXkvS#P#A>riM0`g4#Z3wJ>FffPfR^a6jMNNfhBABv<<5(`jRa1C}% zl=75lgm7vV7qjl$8WbDg4V8YUX$_%{j%O2t5`G`gi)3Q}3+(x~LvsS=4UYf!&>a0g zWDdFhkq%O|cbr%Hs~g?WexnYS+jYyIaiq5^6iTo*Z~@XK4CKa{Ebo&}nhJ-7KwUd~ec5;~gke%)O{dpuFAmM@T2V4-IPo+KVvI-!p&!GP> ziy6*!c>i?XeMc7E?=_JUbmm*}EYuG*YnwM$st`70I>f1A)LBqg494Gnpi;2{LwITD zb0g1%#JmdU6~!@&ZSY`%$5-|=7q7wQ64ebJA=%{FAIT;ux$)`?KDLdtLV8qBR;#jJ z71AESw!)!VU37wN!PYQ~*mM4#wE}-$#9q|jdzxZ`6M^?MTTfMk;J{wCf*+1!$GXFb z_5%Av4zhUbhN>jUlN$^sCRA>B%vHDgkVT1InpXb{Um5(Z|zER!&l#SOQ3&){+b+tm*pw5on{Oxi0 zhbG56bvpMb>VB*^j19v%)h>1xmuw95Jg--w$4rpu&fv#boKo_$E)}B%leiOcC{3Rl z+ydAVwjX53YwGEXwh%ITRnk^3KOfNtl5bgpJc*(o^;qWW2=_fI8F*rpRF4XE;afvN zOhxgJra5`j}tkx&YD{b*@~^2qzb(apc2%rT@OpYJcih@k)fIw$`>l!-f-IXPN8 zxcy@bNREcRDvC1NkLwDeR%mVQ^(<@(6PQfL;FNGHw1Q&pg%Na(_V!Db37O?Efmgte zs(g$B;XCkWS&6H+Hn#Y>S!lzF-n92M_YC(7L(li0Kj20%Sq5&VlcFY@u!Q{vVobz? zMM!bM=_n>T;n;{4%#@8~vjninuBO{DlyD3e_>ABraH3~b%21e*k=A!rC86$1K91?W zdNW~~F_+t+HmT~Y62K37C(Ej#MzhL;qZp#T{iEe@-E1pMlRu1g**R0}V>Eo`B{b%m z(UM?0npYWAOm4}Z^yYTk#oM#z-IwI7WXg*Yu|4Wtdt*zhIvy%g#>?A>JOw(L*+ctw zrC{UT?*U~Dkutd6HJT!a73P<^&22V^=f9Hr9&1!I`ZGnMi{beRU4IMv0!Cfoz7_y# z%=W2ts{Q1?4Z(n$TfZT+h#~fxaKf#8iz;qgiKxUY0!Rvz0?T<|_z*XyKBh~i$i5Ea z%Pej8jHvB*g<%UlCelJkO|w^LZL670t$5^-f@rW*GqR9oy1_`KnFN=E;%Idvv5FCo$e?)6lW7s) z4mVXgET*IefsOLlHV-II)Pd3aIqp<=%=xfgA@iD*SV$jZrlM%*v_cpz?%=`OV(p4U zg?Moh1)G8-xjL1N#{o9a1tyTb&RDgXMbfPay~P{hFZi4cBsn}Dv;BT_t~MdPh^9#w zn-BnLuEJ1x@94KfnC~OT-JEX7+vmPh;&A}kG!0fw;!`qRMDF(NDWVjBw9%hjwx2zb z;Xa@-%wXQP(x5f=NBw9|;PB`Hg~QVCf;dPCrk_5<`&73dis2$YZi?1a1zh!sbR7qi8%wf>|mJP2nLHOkn(0kUWFT2?NmvTx!EWI zbELl)TnA|9K-CemkT3(;LQG`zu!O_Q;+b@?E8p%{U092fA+xtOL@Hbze-2SNc;;99oOwTz)|6bL{zX6FT(yH z^2vi>szi08L5?jOw43!?QJ#*>e<%(8lm|fni~qCjC&FT~ko+^+Sh-zUT#u(`3?)Z^ za)}?6`x@hT9NwIqHiq;uU-TxCDrjlcpUDAu3=XK->RYM7I-b4dgn|mczI_ z7-P*$G;v|lBi9wtbGG&wI_8KgAu*oC#9+48G*dPt^>Qq`-lWT0WgU#s>dqvEYU?xW zm*sAhIxBYus+pkH$C6s9&^6=l$-(8n0aFT#V{SNI_6`nq%{(m46H$avKXUN~gWnB} zHw(tU@;#X))48O(lJb058fx7?;%{l_u04u&8;@MUf^sw4Elu7ej^>x9E&S$@AxVBk z$pRnW5%s!nI^D(JJ`#eF=uMmzi2aVG1mWw3Qm)xm(zQ=^J@NXn`mLS%N5hY+kU_p*v*K)=-j=jT>B-i#a6_i9kKRptx*n(F~>pX zS@-#+X`Ln@(5Y0PvcvPpw@^1V^&{sYrY_}==M2JPkL6kfgF%(~_hJPS7g7zP(prU= zZ?sT)uCO9>urM8@l1Qr%$`a7PP6kOFZ(QsumUiaVzp14f(_xX-zn0ctm+=0FE>U#& z$Kc36r;h*Ons|8|5MiVc!#CE#LgG6(XJd{G`Fa;_A}Hh_!L=57;)6%GxUIrAT?~R= z(GWEd;w&hKbMzs}E=~8ZKU~0G{qoTY(FA~t%fJ^%1a@P7pSc>j37I#Zl~C1*r;Z14 zhnBNI(IdOvJ9D$=Om184m9_?2Z7zCR)*oJ^WU`*OnUrnD{a2G`CSzZtU(ThmG!l8Y zeseEz1k*p0EXLDg=E03`XQ~8KkOWw1zz~8v9FrEQ+Kju`qKOY7{v zo<#cYGR{Df$j{fXYoZb+1{N06Xd;S|5LN3ZvC$1P3r>jNH4B_yva!9Y*=lO?wY?}^ zRu#VB=Knkl`vU*e@86fcW(20yHMg0ArvH!hamB(tc1ypT;B2FbwKq=b)mkb@+)73P~|bn z*j@!bX65DP1|du&(ok~%APnNEC=bc&fn?Av0Fc0ghf~Mq2>VPD5YJL(>o(59QF+3L zt6tK+lA5n8v`8mz;l(5RjN-SEx|1j!MzdEUfSs2rr@TxH8mKS1?`BV*P$y%7K7)QNg1&{XB+~9_gkjQ&FkAunzI((VTs3LQ+C@UPo1TCz*w6JxAjZ)3bb12AyF}oPAr)3?h zY|e}l2j#C1R`SUowAP;E$i=);C0Nww;aAsEfDZYHi_L^FW?3TE>{mwgiAbE#@}I62 z6t-cFMl|&_sp|tyci(E%vYD6NPHGRd{xm)KQ6C4GcNDp$C^oyvyZzds^=Du6+Tj4n3!UE$+raCX}7@B z5wA-9lCS9i9{NP@fwP8X_uiBbv3_#B)LUwZ*3b`fzu{uq&bMq%!(CYcW~x0}Kl(jf zJ&e2R;G5g7;L6tk0Lhi}GBcdKbs8C$z8d!FyNq7g$8fCbn_1Z;NCbdt58)cRT^kkD zL4VGSzbfK20YJ~ciJ}Rz<+jx6l+0KqxV2|ATXio1Xqx!ZgA&2j%%K$GIDxivHyTMk z(;t;Y46!&FV3LEeU00sUt;R)IrpV0d4W1ECYH)-$CqzS7@J`6WGhuoW(;ydU?Jl6d zD+)>w`oxwOK#+R|XUkffKL9;FnFl!&wbGK#9kZDYPQZy7AL2G6A))3UXe?f_E(F1D zQNW>Yei%EE02)9h6$Lu2{Nu){)^k=;Ckrq|gzZYk^*T{872pH-V6xsO{mxtNY^yfiEyuV_R_{oQn5f>-CP{P;FU?TlYU zkqgq^c`$E0c2IR~uE%T}I&2F~! zE@C}pw2+lXiKwd2#TZ`$`eF|WudK8U1{Dc@RfIo~1HmG6QH%z9Ri<97;;xNCZ9$54 ztk~#9`UMX;g+xc}{Rvd|jYDT67D4vN;{Di{yz~L{cNWr#@khjaAV6Cn50wKaGu=`u zm4X6!!|I2xPE{b9R!y`P@4U&Hs?n0=pbtyz6Xl&8+`+FSIK+%hPuLK+&!!e4<_ZUT zGCI>&eDUpeZnPOd5q}HcO3`5gcd~&<`31+g#Km#l9}EpBtTvzT*eF!Qyo}(~en?xYsAc&M8TG#gub7>}Nml&(3 z4YSKNAUT`5p!SO4jcPAM-`N(IK5jjGrOt&Qj>6Y<1Z3GRs~s}rQW-Y|ZyB2He*{xohJFM*!MA$XfvsDZD6 zcP_SH6WT9VEnjHg+5_knJQ@yt(rktITfM2`8Ju^vK>>F@wuuLnx(F5=9ZR_CxR8sG zcCl6mA>fb;ppZ&L_I@IsU}8LU2_||xF)^;dhJNL2RI`D7it!vAJeI%|%elAKs}uT- zH!aH0Q5#$ZT;Ocfo|MT10~l9=-pY7SL~{$EZ}7PAg82?A1+jZ3j^tEfi#+yhtSW4fMA6)GXofrDvg*&1ar)osYZD8OLm3D!Qy{psU%kOy1LA(9#_Y&x%PHRVwwrtU0$`U#^- z{>Ps%E3lZfbJI8$D!BI>G(Ub;i^6Y|HzH&LHg+p&E;w5T<0jvq|$MMF}S2Da=19M4A+yHVoP(>K!G09q#fw-4JjNSXy@|jA{Jz&TucZYdU<3Zt-&}QXt(~#* z`rf172;LGQPbq6cj2$)PH<4kOm$o0z8!^dtW%lBo#s zM$@e`T*LgTDx5jm0oTnTmE>(0Uwfd4`zM1){%B@AdIp+cMbSphd(KQgJxH{c*& zxG#ts^)D1O)b3_(4ZMGdbX5P~>G z^ncRX;vnB3{{+uIh+6+JyNwHK#2*j>ntzjy_xR;{%0~@lx{?Q@p$J{9hw-zirCF&*9x2h%=IH(y4*^S5KBZaqo|= z$*&-`pULGv6I%pjA25Tyaf&M69OvIUX73S$3}NO4erQV=AQN=aIM#xnc_`rgnIY1j ziNpT$Q@B0h8$G!FGXB^u;p?IR&k@aNKTB9=z!CdTbJcrG-woKA!Zzma9LpD>@a-1R zCspqa_^bb!zY!J8{0fkkbNsc&xRSSUJEotCKnmjTaY7{sCCva3_547fLKtEabBM+K zUpRC@;=t;3(GbzZp)|%U7YBDz^%NKi#U#`vf$d(lx+FM?rEu(MTPe1h?ChZn^cxwG zD`Gk%bNUI(>?n$o3%*ZPQu9g!8G#o`%q@a})JuLX$@v<`Uo$cddexab)?u93e>q}8GbZH&1J1TCffMM1W0~(%P`Ln+Kq)dEpt(} zl;M@YraAjNr*{4b|H=GP}XWX6&;ShYU%DGP>%L?s z@@x&gOR3LhC?=4m8wY3WgV$a`y9F=s4$!3}>~&NEtW!AQ*3DvRZ4c}_>Gz3yT&fX} zL+nUaCX}meUX)y2?CsUec!-WsWEm7MYe1Q}(!&GH$leyY;T-!^9IEDd;@avq1-8&y z_+_=#wmOurR)+Xb6AptjXz&hJs2rk?&Ji<;{NIvpcB-_v!lR*vegcLXso)>ZY!GBx6B%K+Ctt0%Z|Oa2hdaFLS{%jYRq-n$7bec z$5dtGCrKriXuQ7Z?;vM)N%=Bbf&b=!-#R@>Je zEf7`YXowN)^boAgVcru&K3&-_t4LO+W2EZ7+H|iu&}m9Caar58G{ssgV;DWPi5$Fd zb1h3Wi`bLSiUB&e3OXGyqk*N^j#SrAOm`jM%^*dSZBA`Gzi^sU4??N%;4p(kKkRM zKH(GrAq6A>X0Vy^#uaG2*fEIQ7Z|7hHituW|4Vj_xq>OFJ77H( zhSwy^GOXcOfeZ#MI1B68nu3mXIM&_2s>y_=_(uE16()|2QHj+D96 zFwAM#N21u|4JO^^7to#;NiR@f37MW$iIhW8dXHtBmyY1Y$9nm&om!xOCq|c#|?Uf z(5qe=FVUkih_vL{)kf9O&%H{{+UQ(FoMbRGGaqr^tH(r7$&=zzj=8LdWmGAq{(fXx z6AVO(Cd?rz3!P&3>*wG^r`VS0*f-Q%7xld6-~=m^#%>MhN!S&q(#Bxr45mucZ2&rE z6*Nt&YLsQ6~!>>k@a874fkBC>Xqgt6$xVp?>U#jgsMyP8zmK}317JI zihHJTO`B?z<>;qnKC0DbJ>?1-@DwL?h;8mYOgTgu0b5dzygWzH_OU)bp{Y%hrqwRN zRI=+~zw5n7^h;*0t&*^ooxPMZ$}<;fl2*!=N_fPpnHP0bt5q-J=FggtvkfWCR(BjR zY%AbROwM*8krbURj zZ$MN-mN1gS?xa+kZdsI(@y+?$(@5LAcEdRzpy4=D`HD{^QYT#DT+nI;|W9KoduS?KyG)z?~e(qscL zW>~yA7@5>XT9Z&6T!S+?w40T-ra^a~i+ zm&|S8S!|NMCY)xq)Iu}N7t(s)8A>soSIgmaEq~G)SPiu-Qc1F59G(ts@ugUMe3Q7c zc1I|9*snyS$Ih6eQ@LTP9o6UOv63%r>S++Vv;7jiJh8D9;xI24+ovHuxF=i9r%J*u zlRRR}R_L8#xFnppe7_-($ryeyxX8YysdNwQHqZlJ+-}oe?QHkKzvL=&M7dM|xaaIX zR`G&&aMp7^Ncx`|MoUCSo);5H);svJph)aaC=QV%aBvae+4L3gsSPOgzi1#{ z_P?qnKPw;hx(6V@D8- z%8o$Hu(h{Tw;fkTwcf_Ol`TZY;VE~IiN*xsv(@DfwGo8sH}6%jRo9ZNkPoQbAc#oC zl&S5KU?PY~K6~gfX=ogzLAfZOZs5fB=lfFEL%tGyAgtE~Zi{IZ5;X`F(yth;)@`Bo zEFYN#?ZaNia~jo6F~ASJuOA8kLF6LG((e>XcAg*61oT*_FWkQ;#U~*K=QC7?H+@`i z>{|HHC$DvFO`gvD0bV3JNQ#ANFwzCAUe$|{U?gl;_xxq^L(Aq>E(Y{&qImhMDYypY$#-$?8UgdE3%(cE zPS5L8qg|Y9#A^wNCS#TUNfCa>(P$5>3y6znG0c7iDVEGJ+6O6LGrZS6;ZLp%ANPsf zyLm)y;^D(o0{)Enf(!pC%qZvWMT)Z^-zTc}iUof`+`zpk9&}wQ0_Qeo)CkE;8uu0H z0XBAncaqPE>2y5Dl&Lr}FY=BnArG49{sR(3E z1-{PeSchy2#vl$LpmDe^AjVerowg#3kC>`K zzTIMN3441*pXK-Z_e!79i^hY_soc+*(G*bU1F|WU!!2g-^2-uacdKJ9R6vi-tZa)k z?biT4*2LrFyWt>JivHQ*p)@>JcAP2vGNPhhZu6}QI6K0q2v!Dib~UF3(x=a}W(iBl z4m6OEB^+U`Q6l(i#BMtGIub)(hN+-A>~1hi^Abv3F$x7}OA8^5ku`v&%r9h&7>>_; z4cQFoB0aftP&yTe42aL9G9(g7_En5SE_%HJzfcKilhnx|oLwEFW(3DF(2WIEuSgLE zc=!3n7^@OTu#gd1Rq81?>@4ajI%^BZ$x%0!XL6-@#Zr;>srU=)*%^5?nbHL;o*;_Z zjQD$tIKI;LM<#x$+6^eRb*RHI1l16#?qa6YScf~hX-~`^VaN5TlOTe=A4-T*)(F5N z(wI|Mux6EzqeN+ij&mCr@tt5)K;(W#SW_1z;2_2OQ1ohzbzvCng}j|f7425erdB$b zIZD6j91Xr2NrOSoNPd=oLjm@ESo!H3Witp$&c!9lor6=yeC5R{m$v0R$ALuNJ+0oR z8n>_cxGO8JGm(x>vmkoJnkgWfgLc=tnW_ZP{S*U$#J9E<|+5K z=ge6a%?c(Q!2>L0w4X*R@GJ}jg@E4Wt1Yjk;{m2%Hn}U4`XL3p%=G%6S{CA+cmDvx zz_cpZa0?aUl)9_fa*DTG+fv%|3WcyB4fXmbkDMHY4W!LsKwa5%FaOw9*Z{!qv-Jq0 zTY1LknXm=#t4Y{9ah&vCk?pytGzQKqt$3`A=poi5%uDDMH%Fm98Z`-$V zCEq3}wMR7MW)}J;KJ)%BVV4eh*)v&9Y#bVfj@Se>i0?l9M+@M?qwrbbt%uHCbz(wy$p~(5r%98tRp)b(mafb)&4=b2-O=6HMMlXt7 zS#-6x%XNbq^_upa&^K`ddKsf7>9--=7|W7{eiSH0?51B91Tx65%fBeKj%uDaSkXNZ z<5g2V#k3a$X+W1R$ol(R;Ug{)y>s|o2i>+I&RMN4ka4BMyfYj=K;;PSER0UoHM=M9 z&PgDY3F*fIyNk1lJ`f=?4cij*7Q2+w=G)oq+puEe4|((g?+CD6Nsu#S`BZT773T}5ei3@vnrAC<5xg4S97T5S-ztFolueK^3aRL9drC%#%YzeogCS!r_S=iH!IXjg&~vB=D$yn5<~Tvh6a{ zyrD9Ec%zvgnvz%&aA8UiECmo8W=#S+GD$ z%GmI~%_qj`zxB$WYHzh{|`$8Eaw$$I{>J(q7Z zXX`AuCmuNj!I~53-0^R$pd;{HNFj3)WG#rGGDit>RBXFHt5!WE%+srDJxFl`F}TIt z%wH{f9~P)zG8tKu)OSib$_UQMB$eg4X*%a|ht}%J^*DmfJxAg%>)gBO@j@BO3K|`V?eE&cNi zsdY({9!iR(SIUkFNf`yHt$>)9ejqb@)m3AsJ7J2Nd>eAXo#7A(172n&d<|=imWN4z z^vI&{12b^UV#L5o1@T>z_q7(o3ILzK>pdE!JLASrC~4rACeZTf~5NI)Qn$Xq}I zbPYAY8mPfDTmfgk_*@xeLc7|!OIBasnv)Jej3bbDyh%<2OT>_2@H1;ep1LFD8jske zW4ygt$w1|vatvrva!3wdlOEKZI^wp^j;GBIqoQ;`bXhIW$URzS10LkOQh$7}O-%8i z?8_^G>IZLD59u4|@6Vb3?q##0I&9a%llF=pC2&7P@VsdKewl+QmS=#zv+}&Coa`j5 z8r9_VybCYT6Q8Id;l)tE)VQPc6`;=b47t^+jUp*u60FZ+1xS$2ztUOiWb;xTX5e|8 zNUVMrg)l|M2BFV9rc$uuMdZ5~-ZK)TdZ7gQjFPjJoMZp0#Q|ySAQ)YQiB*$AKfd(< zuYm~0#e*c#Q#(+1o%T$FSJRW=JOg+$IB&}Xj9u)TsmCd87O zuvffaw`T&%cySX`y$Yuz)Jg{66A!ucwzjDE;@tk}%U1~={*ttae&9JxmXwmtxTDw) zIbD)#vk{CEf_-zP9v-c=62aP>6@EW_&qt3P?iJ97bc$GPlk0=_U-yo^|15#PAKG5Z z9|*C0O7jv^HYRUy$RMTuB>u!}D?kp~DGuTwsRvbnp+3pwB`^FG(ZAw5@mKxbuXJZ+ zir2Gzd4Me^blgp@FNX5?Sfv7c#4u(E%&1oT@oqyD6A&Rz8W`7;;4S2|kuOv(B z*}joCx1~btiVzB4YdZShOPN`xtAt#XB%uk;be}K98r7rE@TA)gCgFLMp)pT3ao-@I z-)hrJ{TN!SAv@W+4@QJo2d}kRk-V5rK_Jt25(!(7ya)pu#;%i{GZYqoe3gInqq4>8 zi|2SCuzrcdzq)Ak+9~|#mNM{(c)D44=Ijk^Ng_&1#u%j@|%ReXuQ0{JRWJyAT&r3tT91|BaUpWbN8nQc z9W`IYgh=gzqcj@T4MP;O`D8m)s^hJvb8uB$73^n5QQlmr$BApU3&QAm1bBx(r(y0u zj`$wa%|nR&waScSW6qu9UW3Z`bnzKHiv!!_9s=kw+m>&*yinNF}DM|R^m#OB06=&M+N)8~8a%hdl67;JDA)k;fP8^EzrV9zO9s}xr9(7XN z!!P;n0>I;a_pctJ98VMeul9A1nan4r>`%UJpR1begiAB_ZSm{(Tlt9{RO8V(rH^02 z>SbXAmbhOw$){gE-~Zwyt$h7W5eE(ef(G+HNJ;${z332U4a!);^x^$e(d~-If-1KOK;)R^dENN5 zb$+n@?ehU)PjpTLbt5z=`jI9kNI1G^gz;x$}msVZ=;6|mF6@w;=HdXmXL>!J0 zW1{@$ep0|P9415}{WzVbo-DDAbw;*K=hZrf_vpqbJQ=*}D)VQX8EglS5AXbnnoMy8 zme;iF*lVc2!SV+OX8o(CMAUL;cu&tYC`22_=A1fc;|Wi+>VwTPN{a>hW|`h5GygV& z8r^2?$8^ zMBtW3^=5KUl7^B_v0GD{N;BH-U0-wxtXVE^(Qq;rmc^5D(J|V`pC>;cU%~zRO`-cU zgaZYVu_3Eb@zBDh9CM>hz2V4)8jfDZLb`6w9yS7Q%bba+a+hw(LZh!P00W`CCEoy9 z6nATE5waC`NZh~PCY%nu64p3cm)(kv$x9`$k%v~hF+F9jkvR79MMJBM_Hr0Pf_IJ6 zbIA>2Efy@>UajofRdU<4?r7f9)oQDWhFl;!r`rl@dseDVL#q&~1Q>^Q1C~SuVcsBF zRZsvqW#)?&O(uxWufKh_F@5K9FYj0W;e>c&wmukB31MW9AqxC~H;Pgh)jJ{QsP>}U zXQCBtuUcpmdGBsZM9TR}P|H7XxbaA^>G^Y{ur4HP`|_DYGz!4t5yZ6hU5~h36D}FVfYl_?=qoI5pKo?R1HO@ z%ov7SMgS?UKYkBT+KbE5JXj=|*6~XYlmO&OuGup_42LUQp6x+4&9TV*sav(-fhD-!{7fksohguXPv-6K=2?zKq&vuN&UZD1|=z9%g-yI^V@A!C)-+Q`t_;U zm*f+xF1#2FiKSpmaxeqJ^xLl>;dOb}18%2T;*dXgB#l1uBcEM1i>6RU>)f{6uREQl z_?xeXry2D@`Fgw|S!~Bf_S7(&#VcsoD#FqP0!f!xS4MUa1JCYru3JH?J$0vgaJvh$ z{%j%vwC-p4m=T7Zks@7B)~|%4NEQ#Hr82BDa!*>@KQ@_>`r1yp2FOlhVz1<1zuw>exTWA+D}EVW1ZrfCE+XFdjCciUFyk>)4pmLSdsm*A*4VZ;$`j4tjF@E4*V zY*LR{m{n+gy61tkE1NXeYK}Udh&rRkq!w#4&O!#oF+Hmwk~UEtnzJ^PTnl!=G4c%^ zbraIqzr_c*fGrcop%R}FA#?-{ElKQ1ru{STXvm%+Gmc6*3%QgLwiC~HM3*cqCw|xw zUd1*}%o1h)4#a9eBN~7fc^Ik<(+xale$Hq~jQ@f?wHt}ZsrHqS2%wS<#~+i7g&&!b z{_%TvDyL>Hv`CC!i)03GmcB?)79*XaCLC2fxG8)kD0%8%-*Q0yAt!_WCvIW>TN4B4 zf7;LgYpN`4YwT!eVf?>bmC2a@H|;OGc_wsz+cs01{xuBji}pySIm|e@JsTJc8e&xl zJwFn{&V}-qI{_1ehb2lir}s1_^dv zP!#nAUY%^-8ly&bwE}==iCm3m+oBuz{@at#q3mD0 zaD{ju+~~m+Tp!vTzs|*#8pI1NyB?;c}2~#3>3XibzS|o4{(LUa?TQ zjL&7JkLs$s;V2bvOjtD?o)Yl`522d1qHP)$gh%ccv~Db8NWMmD0N1enwg!ev16YF; zfg1JNJfdv|8gJ!#$3NY+?tUbYt^z9^>PHFseGvom+zb`GgMp@Q3vwyES-EL#XQx%m z_kelT=RoQ0SEN@s3@XRsPSJ*@t4p``qFjgRn#wj8YgTK_aHB>SUQ4nVVhh5}^laPx zzU*OO8*|0i;X!W69bWsf`I}S!^6uD4Qj_3~vfLwIJ=?r1LiwlCv)n~;kPRe_EBb_? zoG>m1Fv@&>$nMB&OWB@CHQt#={2l|g9Zs!wsK(g=tdx}|J;qz;Oit2RqkBi};&F?l z=87p6<9pi%_y_g9(Wu!YeS7a$WqCp-_tuvI+R|5Tlou_!*Ygy9Mu#lW_z{Jhbon<| z>RNS5Rrt>~b?ZGS?>XwXHcg8C<}@|1&-oEQ8IkhhPz2J_xg{Kp(hbQA)?lNNIqYIG z1%?Hzi9|s~Dv&9JsWB4aR8261 z-c#hienBP`fS!XCxX-G(52cjJlPJ=aWxXoV{TpOSaPFN6-yXX4q#|w(YI~BEz(ZyrLWM@KoKodnx zvTYe>*2W-OiVGNja_{}(7tO_Kq;5YLQ_v~qmmi?Ng6xNin-26O{1qiR72pvI8|aW! zMpy2R10=PD;*)}ajMfo6UYH-eaeJdROFs)-upVcTlqe7 z=0j1=9N=is$pFxgS2fEGLvjx30+wtNhq_u~wI2JXxnmv}8TtlXQIu0TYWnTD!i0c# z+w`-B*8IO81^HI;7qL#LncmF7co0OmCjk5ubaiH<`?Hz(>t&sOi-=iqo}`JAaZ`WV zKr`H*q@)p?g4F7)!|9Rp+E6?X)va%Ni{4E#Q$p$Mlf%TP>%#A1{Sytq$y5JDjF&f! z&)Mc5fF1t;r1`%D`0w@Q-@&1+OBh*Nc`pr%P|by72ep;KC?N;Efi&(orUP80dE$&o zeUhsnAO(A3P_GMUY-utFJGq~;JXy?41qAfBLD_0giDOLgXc6fu)=Jhi>T9QdXBVbF zi}dbf(U9-CjwFbY0fI$K3j_>P%Q)NqS*V~RmoCIf|1Iv%3ayqjN|HOcuNgP8xN&1H zz9zG6*W9>TCoqgjwnlTfGzrJOsW3Eh%0XB<6|4)65$2hjTt0>*D zyM-?>N~jZ0UHTVs7#t3smxOPO`vi@+=2_x%jG>j*B)OV9vB9U9MD{|fIYld`yaSwJPFtqIMYFW-L9hVPrUzfjN*)8p*GvW7L~9F&e-i z_8<8Yrssa>)3;Aw+ykD(}Pv}CH<}y(6QF=@akFEChovipwrUOGn@rjJZ!(DFQ>L^6WhW%8 z_1hO-yxYcldf8c^7Y6x3e91a=?HUfXLpu$|WG)#b`gVU=(GmB5^(vf>{QO(+nWZ3b z9UP>>>(JBhR8_!@)DzH^3@ciRHsD?DJD!v*OvOi!nrVqcu_YW2Q|O%(PSL-i9{#@W zmOdnSrrot|jV6_5mRQ`0hhh#~^*9D@J1`#1CYkjX&F&5a!Y}UfS&*{;XRA8GTjVfC zoz5Ukf}2b{PPoE@cmR{01-E&J*GS5ZA-VdE&i_!gJGENsjG%GZSApF7nJ%SnJq55? zHmA*p2{Aao#$lE5Ap%CY05i9xea*wZj(lygIO6hU^MZ35$Kr|!N86lvh^I%enu&S| zsYZ-~Dx@;p6RlVEgkX(UPgz;yVEQ3w#H>!HPR4OAcvYG6)9Xh;lc+NX&{tWKybb`R zld9C5vJQx>3z1PrwXq}-DxiieWopdlksbfCihB)TVM50N0ZHTfKW_{~44h1a4V|1F z4UC*s{?pw|8`fQA@lo*DG@kSR&JP)ei8KJ2m=+Xbpynsc?*PqM2vW6QAqV6D8PmOq zpuxB5xi#@i!)MEKC7Z&gHLWD%0#)tGrYhabF3U?j?RMq3@9Pd5(=B6&?mO>4*In;Z z{LdH18}~p;J?|Z1QmwqLocTxmIgMp02P&~;hteUS+~89`SJd!1dIJ%KxlWOC=_ixo zv11ll$|$b-iOLX3X7P;*0aei{{t+w0s&nS_0S<0<;k`^&;r%L~c5x}6V-%q;a(H6eS_5o2@J2x)&Lglf@!Ps z>Bgis+ZIj7(@6u6ap@19e%|~Kz$t%U%Ge=G@3%x$^Z7!b)4?4D39pj0{C%{N2hj6y zuDBNG;7iFP9QxoV2AwG`=O(F>~@7Rr9RHVHyY^{X@dIbp=B%n%u6K?`9-i@LYmdV zooj1{=+mF#$Sv}GE66LJxV}f8?u_mHd(T&Ip6#CNlv(J2k6vP5su3d0T5qxAn7d)) z(y%>l27spdOj=4g3KuZ*E)R*OJgQ^%Mzv4Jhx_qrT}W}Q(4JpvHAD3q6YCj?@_UaY7!QWkUVc06OJnl2%QGjCT5yCp|Q9xUNaeF~?xpo-f^Yg%6(VrVjY zx0k@Qju(th#5<1@bsbkq;&3$$P~axv-&90gXw~aIAFaXz8wF>#V&8{YFBr#`VHBrQ z=3-9;6(*9?*}ncm6mh9kQ>AJW#HiA?x-sSS{P{6m6w?gXcPwwlXi5)=kpNUSwd&Z! zmmzy@KdW)?46^W&Mqlk3WtNN*th^YOFLRz<|Hl>LcpX=luq+oT0U%w)dqp-OLhA)#p4Xr}}bZ}<{Ci)H9ew1#? zEDG>!HY4OkFVQK`(fg|zQCw(P5dj;+%dlRO%>dP-PvYYkGz9KDsqt2L?;$$x=03Wq zYNmhY*2G9nCH835s%Ku1gScZ)gYbTbFo=MIQpaCNQ^pGoqt_W5@Y>c)-x?M15Q%P4F#HsKr&yjK#@_5V z;(fu0yFaE*lAUJQ!oU>5hGB3u0pawXfUBJ1IQlZKTbqip@1KV+k#UT4e@8KljyZp}T&sYRx4mt>(H@mI6 zbw~`;MqzjDeX-USC60%N2a`VGM7iF5`J4p}>Pbwqjqag%+eoueHCih-&POdkvRYI@ zUcnIGV!u@7pM98u&qtM@0L2Jr;sxXQ#g^EBTw+-%QMKTK;)bH2=w3LXGR8m|5Qt5x zW9Sgf&6T)yEgz}|V-L@z5Uc$6wLa08xdO4>FlxbF*(k1;z&mbiBT=_C^whE&S3a() zt^#odzCgt{)y>f~FoQ1xn3pk$F3m@~m_kN9`Zga}rf?^bPJd)Fzg*oS}E74JaxfyU^Omd7gV$ z&@%nI%21B*2I3uSA!j?9tth8F1&jBj{DuSLv$Cz_Qfon zEJ8a(a}<=94HKPBdVI|AU_GNRCh}aeG^ccc)R=La8P>HBg!-k418x7_+S|ROkNZLE z(-o=TGf<7-6X$DmWB2L?^_}(o`-bRM9_l+ypXG(|Lp@Och!XIH_r1B}8(Q!+`fZqQ zj+5fz=m;ko_)RbU7SlWY+6~p+M+xvrlD7;83`&!9w=|{yWaon8P(g_dvQ-3?#lR~Q zvjD=)Z35w_Hx&vUnHRVQ=!o`Fp9^9i>I~tISIw)_L~4)!5-e4^oGFM#siOfr;(W|X zSlDM34(oc!*jFE8EB1-bKE&(QCbf)9;Mm2NK8AA4V5PH+Gv^%3xkY7F=K*g&K1US{ zT%gJxloiuT#SS~jyyQ6-(ky`$g7C!*?Zztt*ix$w{84QL2Y-?3D(V&$SWj({6CA8* z5u`FLOEm9jkcWGh6wJz3f$8})y?H+#E(1+@NcUJ4blByUl2o&-<&h~FKd)-Q1}zAK(5XeG(CF#O)X)rXeG6_2W-it)w)TbiC&hlQ&3yVKpO{J;8jp0CY2rG~A zM8|+5Ms9AD@#J_lqa~)9X{D>5x9lzrsibv}7&_MGhkGOJ*&&FYq~=tznK!~}@BftO z4>S+ch^n4E0*Pb{vo+)n*WdnCut3)-ZLkmS2P|&4B-&>mb0K!Q6A-G8?cH>Q(<@?S zH3R$p6=%T|y(a7tsup6Ie=eB3cWGfGPsU;G`qUp(&cQQ`d(BSusH$zmp;7p1P{cdY z*=G(hn`$v>HFHQyH!K#GIX%`0?aLRCabdr1X)e_QHklA$$0>+g-4B(`SVIym#ncI~ zi~R%ob3FRM3w$=j$spY$ZcACt%soIuR&6dm_%{Y5irUd!?C1|!O&iXj z@v>ia?ANYiv5R%Oi>In8c8jXTYeDjeXQcQPXlnH@rs`O$AxsAL^@G2cYYKUbzE(rH@+;m{M;A(9O8qDP&EJ#Cg>8~cg2|cP& zA9@WF9De8WqeitSEhNf--AL2ZVoy&MQUtQ_;)mqYZWGES`4_|nuBJ69#KaV_Y$Fxa zvZL6rA3NnWI6|2){MAHM9`Uk8=T9`*;S|47h20rEc~4bXkDOrf6}eYA$>J)=x-XyE zpD%Y}6>l)dpx13y8Cv^5#bsKX`dQY0mIzr8DpWlb+%N_{4fX47A~g-@!fr|lUtBfL zqGe_pdDeak}-)xR&`o$77#A;Rt=H@BCr@<5p6%pNIkgM=V&3kN1fCy^~ zOcF>yl5Db#ORsqucXCZMQqOr%EA0E9rO+{!qQCBc?R+7?j{=%2RT6CkO8wPin^Pcm%_N zD;o`p%JC7bF`bViParosj~Db*(fNtT#|`68(AQKylu;~P9q>EQzPA1GNS9$Vtc^-W z~IO7g)&;{50o2s4QeIWZF#K+f@~f|8#pU5&w+yr44OiAY%yM_DoA%zD_W zEVgbUd9a)$oQSXA!i!};y90)GP3 z%fRt)9md?B6<^>eQo%%`>IIZ~OIN0_fgV0)cgNxM4eVrqleUL2DCjuw-LOJhILIkx zw!_B%2U~ZiYhoEswBln^o?-yPA_vqNQSqFS3bgK$+k&7Fe5gbT34V#EALf|7qP)!~ z4EZneQ?QiSBh!$OdSeObFpnuatQeI{2wIceV9t@!Xy#*9z!4cBm*z% zEQWlC2ML{10CJv{+A`l9cw>d?vM{N2&mmsy6nOB=(bA-s+QJj*xJte z-!3Ayu!SVy{A__wO5~S;g*u?!?Q@2_|SPE{AaUn zt)lwm9sN;Yn58$kDJm%y0Pd!HeMr%^bc#99bUC|VhN|0<)aaALc*QhvD13LsreR7I z1$Sh8Z+Lk_UHU!OnnL(!#c>WCqTD5vwG}n+QJob%x5Twnp0gNKo=eU-0AMECCzS^e zym43Pl|n!o3$o;RW>nu;W+-`uS9qk|oJJQuOgH4jnZHt0p%cX5k>f%ua5F`;F$T0$ z>@Q}>LMcgORE{HVG&+jZ#paZ6g?&@sYw2?RaSWsl-z3)Z0x)9r%`LGBYPW+wiu`eR&wdm} z7ohCkrdMDU62rQ~8Dx$pM)Nm>Z3X7t3aTFuS!V!IZQuKc>$kusNdBLhHjN;Yl&l>s z{NAvn6-<-@_6N~7loB_aexKvDA$KLp5}AD4ai-)Whi@Z=XSBD{O2sXRGil**(2#f6 z)QKjWM#&RYccH3JyXi(>ZI~Yqz#&638zZTf7b@Lw3V+NcLLE#xEzB|)RS3I$dyR4! zdfSD5asvYYqq;0B5wDYj2$x+y+9vHYG3!;>>v`e}#DRO!(3))Fw{|p?$NJDpH&Xn~ z;29@Q-C$=DLu>!HH{zjeVRxRK<(cVIEaZI;o)jNg;Uth>A;;Fxe6xgp=Dv{kFmpb? za+<7q2jpjPnqK7Q;O5xdpt}@n3hL^%goQrAUaUDK%nDtsfJ!mDyw$_@zq1W*Iyw0b z+KNa_J3^4Of=bWWi~F#Y?HMJg;P|YFvkyat6DjTYB%T5~AIM%JvtCqJTCtw=dAS=l zM4C}Fa;T4N?sGB)J+D7~;9)i4sB7>r2@6AF#fXO1B#|G82FD~7Yz5%#JOFwRE#x#( z)mAlQQN_)kG+mpwSr#kGks>86b9ecX&nv9*eJ^BnQ$_J;Y}-nA^VJGy=stf%wAtQ1 zVbS$kKB2j+O+G+>d{lrf2bQSoK?tIXXO+7IXZg*9tlgT!etz0IQ)^+C!2Eu4gt~0E zqD9t6bzr8b9n-HrN2`%zix^e3&_?r@7%w} zUv^<0zSJ*F+yAM*-oX^+iCn@7JMABE^dWlVl!V2%!=*1=vdEuV=$~3XfNwcJ$_bQA z2)On3%vI}apVe|oH6iu9N(bA=I^UqG*t{OOdRNd7&w>v@4Vl$0{wWe(A>aIN@H^t2 z^`5Fe?>h7!`42~05}%&rQ~#uouaB4S5a=N}e0Jh*jr}kKmQV1!Q8_Qrw_rA8gL%Xz=8$N9LSJmMW7A-qMMFYkQDAU9+MOP(HoQ@BKsXHS4t}k)bobF`3slCdn zT=E|bc5wiUYupR(*h3FW2B!(tCS^9D}Rpwgtj2S*SQNoe3Qa|$P*F!$8?5qXby8Q`dfsP_qQq%@VFPHfyw ztV&kaOH=g*)3m1jJN`vJj26XIC>V1-&E&$P8`9l^Bx!aNKEc^&5`HkDW(s{&3WFeFXtvC-s{44bwy&#VI<{Lzi)*(BM}JrhT+me-3z(N{w72W zx)B`4+~w-GjA+xaDP*c1;28;52VJ%lAo69=8lUWV`u>;mmHSQ@CoxbE5Hc_j5RU)h zd_~mS#K2a{*2&qx+FIPe$oxOgS&|fbrNNnzy)Bw`wXMo4;RyNM%i$yjGDsT=0~Gko zPx;%2ILI^T+cj^S`Cth@Km?`#4v>;krS=;lU^#~!tNEhuy${dbM%u+$1EkZK2OoRqQ4QMnac zNn5j+OECm4DMyRE^k!B%u0309n=Rr7@040K-Fy@H(<7i~h5X?9Z+*>7Prk%Y#ajSD zK)$~x#jH0y00hMYjZDg4jaoG!sF_=xs3!|0v6ZNM53Fyr(9^%=1qk9R-+m*|9&if4 zD~M(y_tV6UXL+445Bi{HY=>G)St~dQJ+QNlI)Ty4>r-m?4MG1`F8MKv4mA%MBLqj~E&1d2p#|T1i4JcwWpj`L&{J8gtk)Bsf40^qzV5HHeL-772=K7%=ZEMw zu6pt8C(ojBuGYk+R#FE$Z8xrm!13(%b@7mHv!b4v%|>1c`TC6N-+JsBQ%TkX#SiGb z%t@wa*cp=+VsPftM(KgkItrM8YK%hEafe2-J_Nlx3$q$*_l@nnTsCK?deQ5VP=lfq zNY!So{oLd%Mjd)m0;^NWE7BOTDJ-2zD<1SizGqjC6X)pMX0oP0g$j6rW$X(mlNX!{ zCA!Z#7U zp`SdEL$cgSWf`g(;Lk73yi$0v`^4dic&T>KptJK%e#4F9K-x+iiZK@J(d+D zzh;ZGrp|luSW|)Pf84LA1QqB5qqTWJdM6^^9ZHZ1xSiI;KV(jJj$lS$lO^cGhxFt zg>y8^5i%KWHj-&rk$IGGId>kMC$shQN;#X}EW8@5y-Ku{#);BxP2!^9ZFFC6WFT?N z34T(%iDG#G$szuui>PpGRNczMjun-p{}Zj0Tl^!3jSA0g+WKB7lqFS16wo|nG>`rh ze2$}W$<#_fUYOS{8abN4?YM?==-yHt=wGJvRMHf!_+*KlXf&;31wgwj+bw~*D^$l< zZJ9fp`oP3JBC0(nour0$S1Qm^9wdJUgZN z?$q0#Aa;bzahB;!_y}m!GUOlg5Gc;+6eINzO(9=qgcSEb-fmxA4G#WAXt8N5&a>g4 zIv)%6-^u3vZ}r5*!rEBW&eqhz>_09?=*lk$q4U=h*)*g3!|lCAg$5w4$G%W7uU@GI zs1Q4^Lg=NhUbP^eHWg&vb%!G168$f$`pfX(0W5vft5&D$R{%7M9|4e4Och4(_=NC4x4HZZ*KmMAZ%P;!Rnd<)gcqu!$jf4sm=L}M@-8`!1+z3(>lZ~Hmm(}aWtQ;Z ze6cDx^8F15c$^riWlBvNHrIcWE*+;p95d{>?m(|Yb&1-})Bu(vOi`1>xud4WKLyhn z8*u*39FA@G!Hu68@sqhi$*6d4rIamx*NB;h0`QAd);4`8fD(YIOM``>v-+|8TFGiX z|88My27akTE^gECJHFEiefc*^R(J39H{z{1+X*6iP!$$wmn%~aQPLl;N?;?b7pL4Y-w zCGHankl~;trhyVBuY;h3r6BoffBt|j6_RyT+fKPt)snvlgumiFix_q?26+taI+-Qf zsTX+J;eG>ua384lh}T3FB0H9GS*-LdxAoqx^rRL1x*uEyQQJqu=v)lVmFHMDcFG5u zK8%|R4d#Sj;sR?#0|PQtE*2DiP;we+aI}{>u-caPR<=|^Y1_A312BHz9`!B62F1R$ z|G-X)XI|A%Vqx&~B&}gD`6<3*ZXdT~58VOt0RvV_MmjR`3cGrdG%0}LR@U-M*toAI zLjs^rWiHdQW$wkduOYlK&J}(0;XWn{$18x0?f(;&QlmUa4VNs~&O?o-Mn|%D56AWP z9R8lI6mE#FyHvFIEa6|K~7%8&zlF>ag@%qh0q(QD3px&w;(Irr`TOh zM?UI`SW2}Vw_oV(*8R_rA?klao@Hrag~X5_0Ne@+gb7>bMdL}6_+Pgc<2UxR+tC`a4I`Xox+nf@j*TYe;KWy<-2x0iv>^=M`uSOKw^;7%Okw+15#^vDT zg+&e9o(|BX8WOFpaFDlxRCIhWQ|>I;()(ZPT(wELxsF;ro&2U4*T@))Y+V#)(gs7> zo*%GJk?ky15JJK#$b zj1Px)<_rDgA?)jiW1yl-%D0UN5X9^#62$DnV*E1{R;G6x+jvY_H|1G+dYJ?bfeG!5UsB zsD2^vV7IiI?~Fwn?2@I`8nPOhP?QFT7t9qR*v9YbkLz{c%vbG4=nx#owc%9OUe(hp z=o>Gwsxq^~-3R8ar;7$;ISEv}Ogt*j01w&G?=BjHNB%A(L?2!Cf6NoaJ?d>`FbN`z zeH0MmT5YLnQxBqS1=Zy{lJvXK7MhfMPg+$I(EpVnRyUmyR~4 zh9^J9(8T8+R!tIAoPwsgksLp!n$A0e@sVxti5M|ZY04_7i0lrhD~l05e??{IjS;@) zkJik@K)~2GDDYRV7nHn&U7$XxurA^A=Y~TxO1N00eSvb~EnmYct4mE8{Gh{J(C?9m zW~3uzGp<#DV@yZA;&P<%gwXQ*B$alRxmr&j98@x3#(PRJMoH=~v|ckd!^wD}!!_v+ zLuhx_++1}9j2GH9w30<&AS6)=!V4>rY#$xQ)y3B4i4_lQEgvd=wHgMMX+eTbE3J3#vUKXZJFUnR5@+1aLlkoN!$;Qg$4DisW=E^d<;i|})SH^sBY=sP! zmPCDpA;v^xU0=WFO!*KG_5W)VTXFBZw}J)%VL$`{;rjp8#Qvj&Y1`we<9w+lH=H-_ z@q}M$!OA7Ui#P34A(HrQB(8-ggpa7v;7~eh%{^MuSO2(dD^EJNw`xtqlpb#sYDu&| zbqC@A?+iU}(6dIsJDB>Nft02!9S?=9nF75%WL{?E>+v?GYvu*~#~;Un-;eL#^>6o? z+uxu))Ez~8Fbw5f;T@3{81yZq`wkeO2N--LL-G;Bsu=Pj%FN)p;!uznP^Kp67!%Y? z7!$ND6z1eOCOFCA5jCpL2EyW$S*S>o;=D9_HRU-pR1qv$YPCV6}|`}Zte z#QQj~xrrt?a&-l&G!o){SdOq`9?p?hU-xKPXE{_Mx?NnV^6n6TVRBYCjLL1 zy#tgjTe2=(yKLLG?OnEQ+qSvOw(Z(wo4ah=w*B_G-Til;^Y`m}?^|Q!S}Ss`@qII6 zMrOv0oHL@KD!fAdGEt=*6EZughK-FQzJopuM?89Ait?FoWG`($cwNoKg1TM&Gd`$V ziq)Byg(1ExT`FeZAwyF)8Q$wxgVd8g1Wj!h1;l5eHa+or3M-9azD71frnq&nkOaH+ znTEN9qf~7*(#K_{IGIe5b2~O2omsTyDGAXfCQ9>ZdXWTo8BL4wu-KZgwj&WGpa1z1N?-)_M^zw5+6Q4nxP$_CK~B>;cC4ZqJ2*gv{MJlV39 z;qnzL@sXY_@DXYtOfx`+nSs-7TM~HT(2YKefYa?5V{9Rx*#=)*dx;LY3O?iN=-V_y znTSZ}+{|q7o2;_6h~;c>#E~vhV-a}aeUF{K$RdhOPZ-p)wJNL(rt}|hJkTH%d?v5~ z_w^yh{SLcB=Ee||v%3KA6OsX3irF_Mocm}Uz6@9vsT*`H`7VLZ+`n0nBwYVzN1{Zp#xzQ)HyH+t?FMji)%p?495Eh&-XB{fchAsz`EgYx=Z(#+h!ze3#8Z zq%XE15)r-j+GsXuhYCZM&XQfu*qsE5OSxQOf?aQ>p+Qj|;Yol%VoeqIfM}J!VChQK zvgypgakMPEl>RW=xgcZs>#_{$4iKWQ3=1`m^*I}JQ{_lbt9?<5*lEaxX0^ry1$&Kp z;6lQS3BdpMA%b+_=2e0vnB2HkM82V-TFpY${x-iwnyFsM*Qzbfu;Pft$e)GcGahGhu1mO!K7scN_2I@`mj+4{$s=hmW1 z=LTdsVY&ADapq~$fkpA)*#VznK)hpm0@87VlVOW(`V|FJy1$0DBeQ>m2z>A!J?tUuY69>d?LlV9OIY5;Vjc!9eZt=0_W8aZh z`N)b6bO!*jU4HT){+I?hP#}i?^g~a%`lLYY2p$gpv1u$ty8mNc0BG^LhjEgn5_su^ zbLj^3l`%g|rFKPo%SyHsp^=tw_I21ARybHNG)OQsSTH4dW)q(pQO`~%G+^o4@*NZm zA|ONU=o#%D#kb<8EfdXI3kXA3aPtl9N%M`Yt+(iDQodHR+lXfpK9J(&!)2l^ON@MGDL<_9xeXDV*6q!@*;WRj~LK_b( zLnBymoO_Nz#M2Zb4{v`yoWysrxoG@OuyF7VV>@IFQKJT1FD6DnMo!~T!9HL6)O}w= zUyY$&`%l`1q2bF}9Oos+T&fso}!=S^Y!>Gfof)kNS zxZL{7r@|-f*uDs9^74d&M2?E+N&EU=+Onx;PJG*@5>$@A;2RF}*M^}dyZ zn$Y2lALXHuZkavJiQ^69C@fQCh9&f`x6Ekj3xxJti5*RKiuH05mForOHtWrZDjQ{1JG4|%x&`a1hR@D*0-U?@Zk+?v^E*Y*bNx9lEESQ}rR%`I z>l+5C^;(QPWYV+dZ?*!o^DVr<9w9<83D^qM1&~127ODXEO3qT+#46`0v7I;_YkwPS zNZ+rRG4FPEx(2xX%Oaj-`Wnmq-!d`;007BAgUpvA_V;yLaUVT zM~t#n){I3BTwDgG=C?Y}kgV(3HDTL07kC58Jkd4#{xUJ;1f1zo?6R-<#s4Kya&h0< z&abE&!Z5y>Qh$_vmwA`znDYJeBnw*;y#KLN$z&r z`g&|X8Ke!VTu&8n+f7*_@R0KFYV{B*db#~k=W&fm z^FxhU1`9WnjnawdY(Irt9`9a8;7Q~P86H*J<7!hC8loc%>8U5FinI)9>-D${C&?U@ zU1P_QMV_sLop&xAT)OJx3XjRzi=uUw;acbo+>G2oov^W+PW7!OK{+7nbS?!-m*|Y9 z6KU`P#^5-28TS$qo`@rNp;n`a_zG@$K4X1KJJRQyu5D z=zI)w-cQ0MKptb+pSvbSPef>t~j2BTkPEgsF!3B(GvxU)2`O+;g=VkX?se z=g&3^E&8L86*S*XjaZc;2`hHVLr}bkV!hEAmDWY|^!SA_$uL&eWSY5)r^H>AQHZ9M zu={KHzRr^JbBp_W^5?Y`Zg8W=7Ti(B=#{l%D^R%Q^vX*6RqQdM!$G@Hjy4Y7} zs_Riv2jfy^11>PC&)B#N9s?-+@7LfPT>(8!m7Bc`P2};@TG?h*%D7l)=u^#+LQ98? zgo~KkQFD~eEQyMa*cw#>uY3@wRU_A(nv#-D8gWle zR;AdOA$#9T(`-K$YsUEoQn|S_CzS)Wv%yGb4(X9b7NX(>I7-vzv7zR;4%W)C>FC}m z9=x1yqw&*Diq z+=6&A_mQ>+bWDnDo!%JQBnsA6OwS@|hRlpLWak<(3#`*H4%Vn2<$U~RnOPWv?6Q3s znFtD@XvEMcPK57m3sE|J6?==i0}8c@9f;}Q$%rE5&6{ku;Py0%?zQswklceN&mTQh z^3x}6a(tSA*dFWvK88p^FD=SKzZ=>ijkJ3$y#T-Y4o{Q9zW=EH43v%2AUmdoCKNss z_jx_YBy4qn?Vk~&vkUvAQ@n$Gj2j{z5_@33(LP}JC*8uxO1H|d)4I4u&z1G2;T#1UrO#1KZ>EZW_W2j1Va=pciHxk7o=zID@uvFUlU zv_r>>9R^eO5?jWr?j`UlOuxlLIW_ES=L+!L|FGZj5*Q@2gzqm=^3vGMk-u31zf5|V z61K|;pAwy+c8t}wDj=|UX*aN`>cMDSt>cXlHW2vz1r9Q06M zx@NJzI=g)i`5_zjtd4So90cXP62_p--`^wu5ww}MP$hK~o5fZ&t^(5d!BL@imh3Gz zg$e@_*QaOiwfqZ>FjYlP@fdIJ&STXDJ!W>9b&m1k0unH+DG)N?qZNU20VXwh=k#JJ zw0@r%dVkjAF*lp-V9gNpf}uWFZ-S4LZIgpH@5q`di-ps=Ko8BDN%MHUM3boX21sD8 zu?VC8ksX962a|z%twA~vl~$smwf2X`5w3T@?1G@l(Cmf5rreD*NIKc~R$qsJPcw=! z#@i3|PC0m>r3uy=>ttEa>ZcCPi{^S~8_;IQvjqse@5U=4L%(dZ&h)EJLg>@#L?RU- zQKt$92cplkDyF!~uEDg~$o50x`NQmcY8W3=0Z9h)H3n}W7vk|9T9l1?>uMK!HMLwcxijKJRN>S;+%qgL*z*rID{&X^+Jmss;m`dX?Hx28e^{}K z+ac@~XC_l{9K(<}3Qw-myUP^zRnsYW0eoObJlYjH{iW6KZ#YyKFb&a6fReDhSiiD9 z(rdsv_KGVHzu-NoeK|&<*t9*-Jig)8+m=*yBCGsEJ00!Gwe3o+$h888Rq#opY`%xq zxA(0(KlKR~k7f2zMf{nnDoNHEA#Mj+q1gx0;Gj)aX5Mb`Y(PysFk$9b#!0+^HijX| zWLwaZk&h%U{X4Y^uXgq@ydC{>hh6Asmo*mU?z8_K8U-!+}!S5p5BWK_IpXrbn%^AfC&OoSh6Cm|XjPAG#)g zfAb9v%+??hri{Kq|Je;F%vS#s3wIcv*)xHUl7eI1IY%J@+$nD`p5-${_Tsf7cfpRx zdcGgnMU-1rNY0MB%hhk3&_h%UJA0-y{pNY$&I#{l|7WSVG<@o?4p zzzw(TFC;Qq>CHt~N3b}r5bQmrns<$_tzr>B#e213{k-~^>VlL!JM=WniK>Sox}IBjF{ad4 zM%*|}SK7>P`hR3hvV<_U&akuD9ZGq6F{(!9FxRWw=bDXZ6Wbi^7WCB)Ll3Wt&*3J- z1RxwG3E{Er*Y#(9*xA#^DPvy4C; z818#hEf?nZa)rVDjjBfZMq1R3aH6v0_@~VgJ4oMTT<={u&5X-lA1!mob=pBY-j!1( z3_`tCP3>;F(&~?k^5~Ob{yk)zJXpBG+ygIaijg-&{*xY|xcH0@(`Gg`Z^N;@=aTH< zUB2V7bk04E_UYU{cSCO103^c;?u^NH;h^IQS3VG#Y8^3(ChPggrKFKPbRwT?x-x@q(&R3}MJ4ww{b%ySl=POY0D_xhv) zE=FYrpU2$Rt;rRz@Q=~ADyr^cNg}j+*B+rml$D92J^7&b2%ty^y6dgu8jgfuNRxIt zufBeflFup9Y+p5ydK|2`Q&b=+cNO8fV>5ein*&!9T~{>N)#2lgyv_0j3AQp?LGh+} z+~=t+0aG>oT0s|u!v26Qh+NMqZm?Q|Q9`W|w(3x1Nfb&vLgkQ5tCC);`m*g?ajlEB zbz_bB>jN8v`&&M^{{5y1>yEH_!%bv?XE{RsuM|O=SHeo0rtnr-0jo$-pc;m~6ha>ozk_$~XkMC( zcnF%xB~(;UnW)+B7DFbqm3&WQ)h2LhqHg!ikB#=&{ULD5Aa z3}NT71O~&f7bU>ja}?~0^(GU%6Iv9?(GgY~l)YQZeFb{Zd16>ZCXL-tHww&4Byr-e za0d_0spa?dKIw&qUa}&>witHyJ{E5?V}hJW25XSk(bnbM?X=D?c!6xJO%`g6=*qd! z6L`xY#t-OmX|vczA~(~4W!?ft%PI6#QWDK4O(|?@V;!XfcYrI?8DIdp$Tjyu%^9R} zNL^Fx8DRAziwVb1z>H1hyR)9Vyy~G*ydmyfi0hU73bx0Uq`6a*=&UTFY+Z9tzBHU6 zdC)$Z8QpQT$7rd-xftPlLskJ6&1^-;=_8>9&ACeLlepp8mV##M4;&xX>AUu*-0|dT z*B}k@s|Z0V04}R`P}0^>Vibx@CFprl7ELC>*R}_uQXgsRD@Hc*Ougo8= zD5*KbUbL~bHpfk~OTS!vYpv({fhLdo?rw$PTN{4!)DSPb?c_MzD%Z^Mf^zDjpq#j9 z2UZ5)EZ~MyhW~Wfm~B~EP?t_MdoBWn)$z!^h+`v`DZI9K?^nNSe9dm|`OdvK*Z;Vw zmrI5WWp8a**D5UH);=>kryu5{_1qxhcTa$mX$eDB53tgk`ci4u_@imrx#+! zbh_Lcb-u#>RvU%0BAxnZkO)6Ht(}m?(pPAj73%|hwbkJz0>AVqQ*x4H7J29<>@c;=vW3>Vt!xc zmZ92?cX8JBI=E13}8;ASqBEq}{ro9(9s_LwZL^y7B|Y#7xqxIg>7-L(FK zAm0E0W`A!C|H1E7baF7(xBgqE58}Ul{5_x~C;dmV4{t@o+2Wa|#aAegAK-_(;==Iq z-ufn=UFB@>Fev6b=M zxX{+goXQ{tt1vwkWRYzhX9oea?`IDEX8`XMU+U-ZBnUW87yGn5IG0_^+QFp$da&x= z@ogd4SBiKJ3JqD0PXEU6w{G4F2%yOIOUys()G9^)cpDr5z#QQ}r^NYJo&HUkjjEb< zNJl82D)Ei+9jskQ-)eH(F)%J{EjiPU~_a{dpmU$2I4ofceDL-nP7)W{(?wif0R@9GP*tur1x1Fa}b5J09cyd6k`OxBl&-Ybt?vBU9_f;xKxUTiNgsEAcoRygXu@h)C{z-#m|@&DZ1(d)Ee-iXc?h`_$%8kGg&Kq=P)pr} zG>iFSp9ojEvH>QPa|6o%S?%Z>h`+W;I_po&@%^YggUcHIsN>N3LS~qB3La0sX2v=? z1fWTwkZ;Q!gfXQx*0r%G0_t*0;lysedgNB2y;vjr1I_8rewM8QM20$Qbsj$4D><&v zW0a`aM4fMLqvT@SW&-pnBPN4p#(u7FrW5mt!1>g%4GnP%B`EVSTpkt{KXu4oFxRt3 zOfz{wK3jmx55no>YE*fOGwyIf+&u4W{T<{K?wHT{KXh%Aum7KRmW~< zZ17Ih;YYkf$tbFtuMFK!M>NvfjXQ%9`0ZjowvZXBEy^O*1aFFXB}`CE8qFyp!c5~3 z`0Qn90Tqx!{6gLIYQ;b7ZZU?7a7iNuByN8c9Yq=zvn1Vzr-82*nAQOo8mFNezmQqy zKPL0fVam#^n(%Vaci5T{Xh=F=0(ube#M(ztHkCY6O z7v+pYmY!>y_~ZZl$%;Zy`dl4;Me&0U&hH=q5rZ{CWpr7v8JU^(Tu-x*%Ay79i9TEM zEhfAkQ)iF^=Ht0*C}zMLbLcuK9M6nB2547C-^_aQ$q19>*p z_8Zu-*^(j>%NC>!%uBxJfG8^SZp_UdS)-O*ebDd5@z`^b2lwwzQUbQa68=oHl$-O{ zOj^hnDa;+gIhM~LxJ%cpv{c6$VRZ@zl*^PnG&oEVlQ;}>Rc&gUP6ndm2D~_qrCaow zsc3s@APSGDFx>+`nL7gIVN~t>X{&*Kt%k?;s69;GegbxoDIR4{>&apd8)dZ>?Ijiqqe>={-y8(suCl+X`|0f z3Wa9uSNqnF&Z3YhP7+R3Y}~Z%qvSzFLsOUnd=hT_T@{o{sq8IbmoEfKS%gI&o(V(i zo6jN;e6(b1;#tJ=afnu&E2EP}njFMz&c0;31o#*7qu~u&BpPRmC+FIVTVOkP0)blO zWmZsY^PZwD>Ep*(`%DOk{f)9BuUTo^vgSDn6aLC$x)Js9g^nS48JDVNoZ4_u?FcbI zn6<^>lM90z64B){Y9doymYQtYCYi1~Krf&=%sf3PS62%b$F$<4Jf=j)~1A(;=9ZA~Ed_vUzB0t$XgOdHa4htJ02IA}^>WQ18t|*A`{gv#c?oOT zEg`=u%!u4k8=3BW&me>aRpr^3zCI6x_-wR`<8jMZg@FL8XLw3W>R7OsZiU-mvFxaJ zf6RP5aJTxKvfbT_oFDEv`JHv{!{$K|LFcirh&sB?9pEgF(9fKQw-sad`7hK=}83-0lXCMc`yhj z_mN~XfaYe~YdRleVpiue?3f0WzZF|l6HDrS0-5a_c0$ky@q@|Z)4I2YC1IDDNRk`q zq387BKR}@>%u}n|c*9L7tuih@z^1>4aWuTnJg{QmGM{n;GJxM`&Pj^F zzUWyOOfEr;Zx-i*;GFQ=@iATF6yKBKU_ z15WBF5L2~oR{LzYSm$||hZO9-baeVT|0 zQVph1XUNH28ug9xZO&ECfV2E>s_T|&iU{6a#BKdZoyt+5i&?i6jz3;{Mqxw*9o4P^ zn_DJAt4^UW&mrbA^_br^yRDX}SBwy}2u;9toM zjJ-$MWIx{r#@~4f=v>|&gquKU8DvcDzS-7=7-t)c#=da22P}!wwp2OOas7gCALgCK z8@xa#bq;dFGd_gfzGDwE96wNu{BnGz*69J3ArcfS1~&%O3V6{}AjbW!_7y z!z@X1b`v)r9-|e295@s{{9tMzkQ(vvif#&~Xbxu1s$de^qemF+J}x60994GT#V!*( zS09kX7}3Jmr@X(@We>35z2kk)@^Mx?mFbYZYQrGl-|4jC$X*{NUrK1|CX}wZ+K^JQ z*&NK6g^|tGPhgB$gHI$aElqX$lKsXuU7p_=I6eVRXA(b|khNX211f-hWZol+xB6TY zF3mPQa0B$r%QxJehuHb4fMb$|X5Qxh=<_mvqdqQ^3?B0Nmo*vQmfISC_?@6Y|2d=V zAG3|jZA=AiZJdnV{^52i=*lAT!+%*zdfsb%Hh_l{h7%X^Ii#R((RVPj5O4&kDIje% ztv#qMzwK=_Pnecx5JfQM3U4Goz+2mgI zULOX6!;$(n{4N+?++WxecpmBh1*!#Ms>S8Jpeu0*LT z6CcNH>Qy*07slB85Q}wiKFeV`rQACmC6pW_J{hGfFg88fCsR2q>?V>fv8RiI-eEpN zHCFRE#ak+FPdjKFV<|mCW`h5)rf80+j7%wsq0&AB;yWccF~^RrCdd!gE(-1QDJpk# zg&q>@f3SO-dUOEriJyT^pi9oSJ9=RQq*@T{&W!$O)`LG;r#6;bNCz)FEN-XB;I?q} z5EJ4J7o)k{hZIt!o_|NoU3ANxJj_jEu3=WtUvuYs&tNr4m^{$M%3UIZo^0x#H!