From 1ae5e34c2362578cce08731bd3d4fef193568579 Mon Sep 17 00:00:00 2001 From: thiago Date: Wed, 7 Aug 2024 18:23:23 -0300 Subject: [PATCH 1/3] feat: add emulator detection to static context - Implemented `isEmulator` method to detect if the app is running on an emulator. - Integrated emulator detection into the static context cache. - Added assertions to verify emulator detection in static context. - Ensured static context includes the new `\$is_emulator` property. --- .../android/internal/PostHogAndroidContext.kt | 18 ++++++++++++++++++ .../internal/PostHogAndroidContextTest.kt | 2 ++ 2 files changed, 20 insertions(+) diff --git a/posthog-android/src/main/java/com/posthog/android/internal/PostHogAndroidContext.kt b/posthog-android/src/main/java/com/posthog/android/internal/PostHogAndroidContext.kt index f1c38240..99a6e533 100644 --- a/posthog-android/src/main/java/com/posthog/android/internal/PostHogAndroidContext.kt +++ b/posthog-android/src/main/java/com/posthog/android/internal/PostHogAndroidContext.kt @@ -55,6 +55,8 @@ internal class PostHogAndroidContext( staticContext["\$lib"] = config.sdkName staticContext["\$lib_version"] = config.sdkVersion + staticContext["\$is_emulator"] = isEmulator + staticContext } @@ -170,4 +172,20 @@ internal class PostHogAndroidContext( return dynamicContext } + + private val isEmulator: Boolean + get() = ((Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) + || Build.FINGERPRINT.startsWith("generic") + || Build.FINGERPRINT.startsWith("unknown") + || Build.HARDWARE.contains("goldfish") + || Build.HARDWARE.contains("ranchu") + || Build.MODEL.contains("google_sdk") + || Build.MODEL.contains("Emulator") + || Build.MODEL.contains("Android SDK built for x86") + || Build.MANUFACTURER.contains("Genymotion") + || Build.PRODUCT.contains("sdk") + || Build.PRODUCT.contains("vbox86p") + || Build.PRODUCT.contains("emulator") + || Build.PRODUCT.contains("simulator")) + } diff --git a/posthog-android/src/test/java/com/posthog/android/internal/PostHogAndroidContextTest.kt b/posthog-android/src/test/java/com/posthog/android/internal/PostHogAndroidContextTest.kt index 087c6c73..7e98d761 100644 --- a/posthog-android/src/test/java/com/posthog/android/internal/PostHogAndroidContextTest.kt +++ b/posthog-android/src/test/java/com/posthog/android/internal/PostHogAndroidContextTest.kt @@ -68,6 +68,8 @@ internal class PostHogAndroidContextTest { assertEquals(config.sdkName, staticContext["\$lib"]) assertEquals(config.sdkVersion, staticContext["\$lib_version"]) + + assertNotNull(staticContext["\$is_emulator"]) } @Test From bcf6a0545dc3bdab1d715ef92537af1ec46330ea Mon Sep 17 00:00:00 2001 From: thiago Date: Thu, 8 Aug 2024 09:45:35 -0300 Subject: [PATCH 2/3] style: fix format and edd code reference --- .../android/internal/PostHogAndroidContext.kt | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/posthog-android/src/main/java/com/posthog/android/internal/PostHogAndroidContext.kt b/posthog-android/src/main/java/com/posthog/android/internal/PostHogAndroidContext.kt index 99a6e533..c632db90 100644 --- a/posthog-android/src/main/java/com/posthog/android/internal/PostHogAndroidContext.kt +++ b/posthog-android/src/main/java/com/posthog/android/internal/PostHogAndroidContext.kt @@ -173,19 +173,21 @@ internal class PostHogAndroidContext( return dynamicContext } + // Inspired from https://github.com/fluttercommunity/plus_plugins/blob/a71a27c5fbdbbfc56a30359a1aff0a3d3da8dc73/packages/device_info_plus/device_info_plus/android/src/main/kotlin/dev/fluttercommunity/plus/device_info/MethodCallHandlerImpl.kt#L105-L123 private val isEmulator: Boolean - get() = ((Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) - || Build.FINGERPRINT.startsWith("generic") - || Build.FINGERPRINT.startsWith("unknown") - || Build.HARDWARE.contains("goldfish") - || Build.HARDWARE.contains("ranchu") - || Build.MODEL.contains("google_sdk") - || Build.MODEL.contains("Emulator") - || Build.MODEL.contains("Android SDK built for x86") - || Build.MANUFACTURER.contains("Genymotion") - || Build.PRODUCT.contains("sdk") - || Build.PRODUCT.contains("vbox86p") - || Build.PRODUCT.contains("emulator") - || Build.PRODUCT.contains("simulator")) - + get() = ( + (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) || + Build.FINGERPRINT.startsWith("generic") || + Build.FINGERPRINT.startsWith("unknown") || + Build.HARDWARE.contains("goldfish") || + Build.HARDWARE.contains("ranchu") || + Build.MODEL.contains("google_sdk") || + Build.MODEL.contains("Emulator") || + Build.MODEL.contains("Android SDK built for x86") || + Build.MANUFACTURER.contains("Genymotion") || + Build.PRODUCT.contains("sdk") || + Build.PRODUCT.contains("vbox86p") || + Build.PRODUCT.contains("emulator") || + Build.PRODUCT.contains("simulator") + ) } From eb329964b7ef2fd02e9b5a3eb478eea3115cfdcf Mon Sep 17 00:00:00 2001 From: thiago Date: Thu, 8 Aug 2024 10:17:27 -0300 Subject: [PATCH 3/3] feat: add emulator detection property to static context (#154) --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1706bc2e..661d04a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## Next +- feat: add emulator detection property to static context ([#154](https://github.com/PostHog/posthog-android/pull/154)) - fix: ensure activity name is used when activity label is not defined ([#153](https://github.com/PostHog/posthog-android/pull/153)) - recording: mask views with `contentDescription` setting and mask `WebView` if any masking is enabled ([#149](https://github.com/PostHog/posthog-android/pull/149))