chore: some webrtc build fixes

This commit is contained in:
2026-02-13 23:46:09 +01:00
parent 55d8a6f173
commit 3add1c2825
5 changed files with 68 additions and 14 deletions

View File

@@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.VIBRATE"/>
@@ -30,4 +30,4 @@
</intent-filter>
</activity>
</application>
</manifest>
</manifest>

View File

@@ -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)
}

View File

@@ -17,6 +17,7 @@
},
"plugins": [
"expo-secure-store",
"./plugins/withWebRTCMediaProjection",
[
"expo-splash-screen",
{

View File

@@ -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",
);

View File

@@ -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",