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)) 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..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 @@ -55,6 +55,8 @@ internal class PostHogAndroidContext( staticContext["\$lib"] = config.sdkName staticContext["\$lib_version"] = config.sdkVersion + staticContext["\$is_emulator"] = isEmulator + staticContext } @@ -170,4 +172,22 @@ 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") + ) } 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