From 0bc681874aff218e742de63cf188099b9eb3236c Mon Sep 17 00:00:00 2001 From: Jonas Greifenhain Date: Mon, 17 Nov 2025 15:16:31 +0100 Subject: [PATCH] feat(rtn-web-browser): Add missing `NativeModule` for ChromeOS detection --- .../amplify/rtnwebbrowser/ChromeOSModule.kt | 37 +++++++++++++++++++ .../rtnwebbrowser/WebBrowserPackage.kt | 5 ++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 packages/rtn-web-browser/android/src/main/kotlin/com/amazonaws/amplify/rtnwebbrowser/ChromeOSModule.kt diff --git a/packages/rtn-web-browser/android/src/main/kotlin/com/amazonaws/amplify/rtnwebbrowser/ChromeOSModule.kt b/packages/rtn-web-browser/android/src/main/kotlin/com/amazonaws/amplify/rtnwebbrowser/ChromeOSModule.kt new file mode 100644 index 00000000000..3004c0a6a75 --- /dev/null +++ b/packages/rtn-web-browser/android/src/main/kotlin/com/amazonaws/amplify/rtnwebbrowser/ChromeOSModule.kt @@ -0,0 +1,37 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package com.amazonaws.amplify.rtnwebbrowser + +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod + +class ChromeOSModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { + + override fun getName() = "ChromeOS" + + @ReactMethod + fun isChromeOS(promise: Promise) { + try { + val isChromeOS = detectChromeOS() + promise.resolve(isChromeOS) + } catch (e: Exception) { + promise.reject("CHROMEOS_DETECTION_ERROR", "Failed to detect ChromeOS", e) + } + } + + private fun detectChromeOS(): Boolean { + return try { + // Check for Android Runtime for Chrome (ARC) system feature + val packageManager = reactApplicationContext.packageManager + + packageManager.hasSystemFeature("org.chromium.arc.device_management") || + packageManager.hasSystemFeature("org.chromium.arc") + } catch (e: Exception) { + // If we can't check system features, return false + false + } + } +} diff --git a/packages/rtn-web-browser/android/src/main/kotlin/com/amazonaws/amplify/rtnwebbrowser/WebBrowserPackage.kt b/packages/rtn-web-browser/android/src/main/kotlin/com/amazonaws/amplify/rtnwebbrowser/WebBrowserPackage.kt index 88df29ed3eb..0ace775d193 100644 --- a/packages/rtn-web-browser/android/src/main/kotlin/com/amazonaws/amplify/rtnwebbrowser/WebBrowserPackage.kt +++ b/packages/rtn-web-browser/android/src/main/kotlin/com/amazonaws/amplify/rtnwebbrowser/WebBrowserPackage.kt @@ -18,5 +18,8 @@ class WebBrowserPackage : ReactPackage { override fun createNativeModules( reactContext: ReactApplicationContext - ): MutableList = listOf(WebBrowserModule(reactContext)).toMutableList() + ): MutableList = listOf( + WebBrowserModule(reactContext), + ChromeOSModule(reactContext) + ).toMutableList() }