diff --git a/native-app/android/app/src/main/AndroidManifest.xml b/native-app/android/app/src/main/AndroidManifest.xml index 90568b7..45c6b4e 100644 --- a/native-app/android/app/src/main/AndroidManifest.xml +++ b/native-app/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ - + @@ -30,4 +30,4 @@ - + \ No newline at end of file diff --git a/native-app/android/app/src/main/java/dev/srizan/helium/viewer/MainActivity.kt b/native-app/android/app/src/main/java/dev/srizan/helium/viewer/MainActivity.kt index 59b18b8..786e23a 100644 --- a/native-app/android/app/src/main/java/dev/srizan/helium/viewer/MainActivity.kt +++ b/native-app/android/app/src/main/java/dev/srizan/helium/viewer/MainActivity.kt @@ -1,13 +1,14 @@ package dev.srizan.helium.viewer +import expo.modules.splashscreen.SplashScreenManager import android.os.Build import android.os.Bundle +import com.oney.WebRTCModule.WebRTCModuleOptions import com.facebook.react.ReactActivity import com.facebook.react.ReactActivityDelegate import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled import com.facebook.react.defaults.DefaultReactActivityDelegate -import com.oney.WebRTCModule.WebRTCModuleOptions import expo.modules.ReactActivityDelegateWrapper @@ -16,11 +17,11 @@ class MainActivity : ReactActivity() { // Set the theme to AppTheme BEFORE onCreate to support // coloring the background, status bar, and navigation bar. // This is required for expo-splash-screen. - setTheme(R.style.AppTheme); - - val webrtcOptions = WebRTCModuleOptions.getInstance() - webrtcOptions.enableMediaProjectionService = true - + // setTheme(R.style.AppTheme); + // @generated begin expo-splashscreen - expo prebuild (DO NOT MODIFY) sync-f3ff59a738c56c9a6119210cb55f0b613eb8b6af + SplashScreenManager.registerOnActivity(this) + // @generated end expo-splashscreen + WebRTCModuleOptions.getInstance().enableMediaProjectionService = true super.onCreate(null) } diff --git a/native-app/app.json b/native-app/app.json index 8699464..09f07f1 100644 --- a/native-app/app.json +++ b/native-app/app.json @@ -17,6 +17,7 @@ }, "plugins": [ "expo-secure-store", + "./plugins/withWebRTCMediaProjection", [ "expo-splash-screen", { diff --git a/native-app/plugins/withWebRTCMediaProjection.js b/native-app/plugins/withWebRTCMediaProjection.js new file mode 100644 index 0000000..3dd0ab7 --- /dev/null +++ b/native-app/plugins/withWebRTCMediaProjection.js @@ -0,0 +1,58 @@ +const { + AndroidConfig, + createRunOncePlugin, + withMainActivity, +} = require("expo/config-plugins"); + +const PERMISSIONS = [ + "android.permission.FOREGROUND_SERVICE", + "android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION", +]; + +function withMediaProjectionPermissions(config) { + return AndroidConfig.Permissions.withPermissions(config, PERMISSIONS); +} + +function withMediaProjectionMainActivity(config) { + return withMainActivity(config, (configWithActivity) => { + const { modResults } = configWithActivity; + const importLine = + modResults.language === "kt" + ? "import com.oney.WebRTCModule.WebRTCModuleOptions" + : "import com.oney.WebRTCModule.WebRTCModuleOptions;"; + + const enableLine = + modResults.language === "kt" + ? " WebRTCModuleOptions.getInstance().enableMediaProjectionService = true" + : " WebRTCModuleOptions.getInstance().enableMediaProjectionService = true;"; + + if (!modResults.contents.includes(importLine)) { + modResults.contents = modResults.contents.replace( + /import android\.os\.Bundle\n/, + `import android.os.Bundle\n${importLine}\n`, + ); + } + + if (!modResults.contents.includes("enableMediaProjectionService = true")) { + modResults.contents = modResults.contents.replace( + /\s*super\.onCreate\(null\)/, + `\n${enableLine}\n super.onCreate(null)`, + ); + } + + configWithActivity.modResults = modResults; + return configWithActivity; + }); +} + +function withWebRTCMediaProjection(config) { + config = withMediaProjectionPermissions(config); + config = withMediaProjectionMainActivity(config); + return config; +} + +module.exports = createRunOncePlugin( + withWebRTCMediaProjection, + "with-webrtc-media-projection", + "1.0.0", +); diff --git a/package.json b/package.json index f00f1d7..cd3f523 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,6 @@ "electron:publish:win": "pnpm electron:compile && electron-builder --win --publish always", "electron:publish:mac": "pnpm electron:compile && electron-builder --mac --publish always", "electron:publish:linux": "pnpm electron:compile && electron-builder --linux --publish always", - "mobile:install": "pnpm -C mobile-wrapper install", - "mobile:dev": "pnpm -C mobile-wrapper dev", - "mobile:build": "pnpm -C mobile-wrapper build", - "mobile:android:add": "pnpm -C mobile-wrapper cap:android:add", - "mobile:android:sync": "pnpm -C mobile-wrapper cap:sync", - "mobile:android:open": "pnpm -C mobile-wrapper cap:android:open", "native:install": "pnpm -C native-app install", "native:android": "pnpm -C native-app android", "native:start": "pnpm -C native-app start",