mirror of
https://github.com/zoriya/react-native-omni.git
synced 2026-08-16 02:44:51 +00:00
build
This commit is contained in:
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
import type { ConfigPlugin } from "@expo/config-plugins";
|
||||
import { withCast } from "./withCast";
|
||||
import { withMediaNotifications } from "./withMediaNotifications";
|
||||
import { withPip } from "./withPip";
|
||||
declare const _default: ConfigPlugin<void>;
|
||||
export default _default;
|
||||
export { withCast, withMediaNotifications, withPip };
|
||||
@@ -0,0 +1,18 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.withPip = exports.withMediaNotifications = exports.withCast = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const package_json_1 = __importDefault(require("../../package.json"));
|
||||
const withCast_1 = require("./withCast");
|
||||
Object.defineProperty(exports, "withCast", { enumerable: true, get: function () { return withCast_1.withCast; } });
|
||||
const withMediaNotifications_1 = require("./withMediaNotifications");
|
||||
Object.defineProperty(exports, "withMediaNotifications", { enumerable: true, get: function () { return withMediaNotifications_1.withMediaNotifications; } });
|
||||
const withPip_1 = require("./withPip");
|
||||
Object.defineProperty(exports, "withPip", { enumerable: true, get: function () { return withPip_1.withPip; } });
|
||||
const withOmni = (config) => {
|
||||
return (0, withCast_1.withCast)((0, withMediaNotifications_1.withMediaNotifications)((0, withPip_1.withPip)(config)));
|
||||
};
|
||||
exports.default = (0, config_plugins_1.createRunOncePlugin)(withOmni, package_json_1.default.name, package_json_1.default.version);
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
import { type ConfigPlugin } from "@expo/config-plugins";
|
||||
export declare const withCast: ConfigPlugin;
|
||||
@@ -0,0 +1,36 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.withCast = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const OPTIONS_PROVIDER_NAME = "com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME";
|
||||
const OPTIONS_PROVIDER_VALUE = "dev.zoriya.omni.OmniCastOptionsProvider";
|
||||
function patchManifestForCast(androidManifest) {
|
||||
var _a;
|
||||
const mainApplication = config_plugins_1.AndroidConfig.Manifest.getMainApplication(androidManifest);
|
||||
if (!mainApplication) {
|
||||
console.warn("AndroidManifest.xml is missing a <application> element - skipping Omni cast config.");
|
||||
return androidManifest;
|
||||
}
|
||||
const metaData = (_a = mainApplication["meta-data"]) !== null && _a !== void 0 ? _a : [];
|
||||
const existing = metaData.find((item) => item.$["android:name"] === OPTIONS_PROVIDER_NAME);
|
||||
if (existing) {
|
||||
existing.$["android:value"] = OPTIONS_PROVIDER_VALUE;
|
||||
}
|
||||
else {
|
||||
metaData.push({
|
||||
$: {
|
||||
"android:name": OPTIONS_PROVIDER_NAME,
|
||||
"android:value": OPTIONS_PROVIDER_VALUE,
|
||||
},
|
||||
});
|
||||
}
|
||||
mainApplication["meta-data"] = metaData;
|
||||
return androidManifest;
|
||||
}
|
||||
const withCast = (config) => {
|
||||
return (0, config_plugins_1.withAndroidManifest)(config, (manifestConfig) => {
|
||||
manifestConfig.modResults = patchManifestForCast(manifestConfig.modResults);
|
||||
return manifestConfig;
|
||||
});
|
||||
};
|
||||
exports.withCast = withCast;
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
import { type ConfigPlugin } from "@expo/config-plugins";
|
||||
export declare const withMediaNotifications: ConfigPlugin;
|
||||
@@ -0,0 +1,60 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.withMediaNotifications = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
function ensureUsesPermission(androidManifest, permission) {
|
||||
var _a;
|
||||
const usesPermissions = (_a = androidManifest.manifest["uses-permission"]) !== null && _a !== void 0 ? _a : [];
|
||||
const alreadyDefined = usesPermissions.some((item) => item.$["android:name"] === permission);
|
||||
if (!alreadyDefined) {
|
||||
usesPermissions.push({
|
||||
$: {
|
||||
"android:name": permission,
|
||||
},
|
||||
});
|
||||
}
|
||||
androidManifest.manifest["uses-permission"] = usesPermissions;
|
||||
}
|
||||
function patchManifestForMediaNotifications(androidManifest) {
|
||||
var _a;
|
||||
const mainApplication = config_plugins_1.AndroidConfig.Manifest.getMainApplication(androidManifest);
|
||||
if (!mainApplication) {
|
||||
console.warn('AndroidManifest.xml is missing a <application android:name=".MainApplication" /> element - skipping Omni media service config.');
|
||||
return androidManifest;
|
||||
}
|
||||
const services = (_a = mainApplication.service) !== null && _a !== void 0 ? _a : [];
|
||||
const serviceName = "dev.zoriya.omni.OmniPlayerService";
|
||||
const hasService = services.some((service) => service.$["android:name"] === serviceName);
|
||||
if (!hasService) {
|
||||
services.push({
|
||||
$: {
|
||||
"android:name": serviceName,
|
||||
"android:enabled": "true",
|
||||
"android:exported": "true",
|
||||
"android:foregroundServiceType": "mediaPlayback",
|
||||
},
|
||||
"intent-filter": [
|
||||
{
|
||||
action: [
|
||||
{
|
||||
$: {
|
||||
"android:name": "androidx.media3.session.MediaSessionService",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
mainApplication.service = services;
|
||||
ensureUsesPermission(androidManifest, "android.permission.FOREGROUND_SERVICE");
|
||||
ensureUsesPermission(androidManifest, "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK");
|
||||
return androidManifest;
|
||||
}
|
||||
const withMediaNotifications = (config) => {
|
||||
return (0, config_plugins_1.withAndroidManifest)(config, (manifestConfig) => {
|
||||
manifestConfig.modResults = patchManifestForMediaNotifications(manifestConfig.modResults);
|
||||
return manifestConfig;
|
||||
});
|
||||
};
|
||||
exports.withMediaNotifications = withMediaNotifications;
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
import { type ConfigPlugin } from "@expo/config-plugins";
|
||||
export declare const withPip: ConfigPlugin;
|
||||
@@ -0,0 +1,111 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.withPip = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const codeMod_1 = require("@expo/config-plugins/build/android/codeMod");
|
||||
const MODE_MARKER = "OmniView.onActivityPipModeChanged(";
|
||||
const UI_STATE_MARKER = "OmniView.onActivityPipTransitionToPip(";
|
||||
function patchMainActivityForPip(mainActivity, language) {
|
||||
const isJava = language === "java";
|
||||
if (mainActivity.includes(MODE_MARKER) &&
|
||||
mainActivity.includes(UI_STATE_MARKER)) {
|
||||
return mainActivity;
|
||||
}
|
||||
const withRequiredImports = (0, codeMod_1.addImports)(mainActivity, [
|
||||
"android.app.PictureInPictureUiState",
|
||||
"android.os.Build",
|
||||
"dev.zoriya.omni.OmniView",
|
||||
], isJava);
|
||||
let output = withRequiredImports;
|
||||
if (!output.includes(MODE_MARKER)) {
|
||||
const modeChangedBlock = isJava
|
||||
? [
|
||||
"\n @Override",
|
||||
" public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {",
|
||||
" super.onPictureInPictureModeChanged(isInPictureInPictureMode);",
|
||||
" OmniView.onActivityPipModeChanged(this, isInPictureInPictureMode);",
|
||||
" }\n",
|
||||
]
|
||||
: [
|
||||
"\n override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {",
|
||||
" super.onPictureInPictureModeChanged(isInPictureInPictureMode)",
|
||||
" OmniView.onActivityPipModeChanged(this, isInPictureInPictureMode)",
|
||||
" }\n",
|
||||
];
|
||||
output = (0, codeMod_1.appendContentsInsideDeclarationBlock)(output, "class MainActivity", modeChangedBlock.join("\n"));
|
||||
}
|
||||
if (!output.includes(UI_STATE_MARKER)) {
|
||||
const uiStateChangedBlock = isJava
|
||||
? [
|
||||
"\n @Override",
|
||||
" public void onPictureInPictureUiStateChanged(PictureInPictureUiState pipState) {",
|
||||
" super.onPictureInPictureUiStateChanged(pipState);",
|
||||
" if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM && pipState.isTransitioningToPip()) {",
|
||||
" OmniView.onActivityPipTransitionToPip(this);",
|
||||
" }",
|
||||
" }\n",
|
||||
]
|
||||
: [
|
||||
"\n override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {",
|
||||
" super.onPictureInPictureUiStateChanged(pipState)",
|
||||
" if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM && pipState.isTransitioningToPip) {",
|
||||
" OmniView.onActivityPipTransitionToPip(this)",
|
||||
" }",
|
||||
" }\n",
|
||||
];
|
||||
output = (0, codeMod_1.appendContentsInsideDeclarationBlock)(output, "class MainActivity", uiStateChangedBlock.join("\n"));
|
||||
}
|
||||
return output;
|
||||
}
|
||||
function ensureUsesFeature(androidManifest, featureName, required) {
|
||||
var _a;
|
||||
const usesFeature = (_a = androidManifest.manifest["uses-feature"]) !== null && _a !== void 0 ? _a : [];
|
||||
const existing = usesFeature.find((feature) => feature.$["android:name"] === featureName);
|
||||
if (existing) {
|
||||
existing.$["android:required"] = required;
|
||||
}
|
||||
else {
|
||||
usesFeature.push({
|
||||
$: {
|
||||
"android:name": featureName,
|
||||
"android:required": required,
|
||||
},
|
||||
});
|
||||
}
|
||||
androidManifest.manifest["uses-feature"] = usesFeature;
|
||||
}
|
||||
function ensureConfigChanges(mainActivity) {
|
||||
var _a;
|
||||
const requiredChanges = [
|
||||
"screenSize",
|
||||
"smallestScreenSize",
|
||||
"screenLayout",
|
||||
"orientation",
|
||||
];
|
||||
const existing = (_a = mainActivity.$["android:configChanges"]) !== null && _a !== void 0 ? _a : "";
|
||||
const existingSet = new Set(existing
|
||||
.split("|")
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean));
|
||||
requiredChanges.forEach((item) => existingSet.add(item));
|
||||
mainActivity.$["android:configChanges"] = Array.from(existingSet).join("|");
|
||||
}
|
||||
function patchManifestForPip(androidManifest) {
|
||||
ensureUsesFeature(androidManifest, "android.software.picture_in_picture", "false");
|
||||
const mainActivity = config_plugins_1.AndroidConfig.Manifest.getMainActivityOrThrow(androidManifest);
|
||||
mainActivity.$["android:supportsPictureInPicture"] = "true";
|
||||
mainActivity.$["android:resizeableActivity"] = "true";
|
||||
ensureConfigChanges(mainActivity);
|
||||
return androidManifest;
|
||||
}
|
||||
const withPip = (config) => {
|
||||
const withMainActivityPatched = (0, config_plugins_1.withMainActivity)(config, (activityConfig) => {
|
||||
activityConfig.modResults.contents = patchMainActivityForPip(activityConfig.modResults.contents, activityConfig.modResults.language);
|
||||
return activityConfig;
|
||||
});
|
||||
return (0, config_plugins_1.withAndroidManifest)(withMainActivityPatched, (manifestConfig) => {
|
||||
manifestConfig.modResults = patchManifestForPip(manifestConfig.modResults);
|
||||
return manifestConfig;
|
||||
});
|
||||
};
|
||||
exports.withPip = withPip;
|
||||
Reference in New Issue
Block a user