Files
helium/native-app/plugins/withWebRTCMediaProjection.js

59 lines
1.7 KiB
JavaScript

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