UNPKG

@react-native-oh-tpl/react-native-screenshot-prevent

Version:

This fork contains fully working blank screenshot on IOS13+ including screen recording

119 lines (118 loc) 4.24 kB
import { NativeModules, NativeEventEmitter, Platform, DeviceEventEmitter } from 'react-native'; import { useEffect } from 'react'; import RNScreenshotPreventBackon from './NativeScreenShotPrevent'; let addListen, RNScreenshotPrevent; let flag = true; if (Platform.OS !== "web") { if (Platform.OS == "harmony") { addListen = fn => { if (typeof fn !== 'function') { throw new Error('RNScreenshotPrevent: addListener requires valid callback function'); return { remove: () => { throw new Error("RNScreenshotPrevent: remove not work because addListener requires valid callback function"); } }; } if (flag) { DeviceEventEmitter.removeAllListeners(); DeviceEventEmitter.addListener('screenshot_did_happen', data => { fn(); }); RNScreenshotPreventBackon === null || RNScreenshotPreventBackon === void 0 || RNScreenshotPreventBackon.addListener_bn(); flag = false; } return { remove: () => { RNScreenshotPreventBackon === null || RNScreenshotPreventBackon === void 0 || RNScreenshotPreventBackon.removeListener_bn(); DeviceEventEmitter.removeAllListeners(); flag = true; } }; }; RNScreenshotPrevent = { disableSecureView: RNScreenshotPreventBackon.disableSecureView_bn, enabled: function enabled(enabled) { RNScreenshotPreventBackon === null || RNScreenshotPreventBackon === void 0 || RNScreenshotPreventBackon.enabled_bn(enabled); }, addListener: addListen }; } else { const { RNScreenshotPrevent: RNScreenshotPreventNative } = NativeModules; RNScreenshotPrevent = { ...RNScreenshotPreventNative, enableSecureView: function enableSecureView(imagePath = "") { RNScreenshotPreventNative.enableSecureView(imagePath); } }; const eventEmitter = new NativeEventEmitter(RNScreenshotPrevent); /** * subscribes to userDidTakeScreenshot event * @param {function} callback handler * @returns {function} unsubscribe fn */ addListen = fn => { if (typeof fn !== 'function') { console.error('RNScreenshotPrevent: addListener requires valid callback function'); return { remove: () => { console.error("RNScreenshotPrevent: remove not work because addListener requires valid callback function"); } }; } return eventEmitter.addListener("userDidTakeScreenshot", fn); }; } } else { RNScreenshotPrevent = { enabled: enabled => { console.warn("RNScreenshotPrevent: enabled not work in web. value: " + enabled); }, enableSecureView: (imagePath = "") => { console.warn("RNScreenshotPrevent: enableSecureView not work in web." + (!!imagePath ? " send: " + imagePath : "")); }, disableSecureView: () => { console.warn("RNScreenshotPrevent: disableSecureView not work in web"); } }; addListen = fn => { if (typeof fn !== 'function') { console.error('RNScreenshotPrevent: addListener requires valid callback function'); return { remove: () => { console.error("RNScreenshotPrevent: remove not work because addListener requires valid callback function"); } }; } console.warn("RNScreenshotPrevent: addListener not work in web"); return { remove: () => { console.warn("RNScreenshotPrevent: remove addListener not work in web"); } }; }; } export const usePreventScreenshot = () => { useEffect(() => { RNScreenshotPrevent.enabled(true); return () => { RNScreenshotPrevent.enabled(false); }; }, []); }; export const useDisableSecureView = (imagePath = "") => { useEffect(() => { RNScreenshotPrevent.enableSecureView(imagePath); return () => { RNScreenshotPrevent.disableSecureView(); }; }, []); }; export const enabled = RNScreenshotPrevent.enabled; export const enableSecureView = RNScreenshotPrevent.enableSecureView; export const disableSecureView = RNScreenshotPrevent.disableSecureView; export const addListener = addListen; export default RNScreenshotPrevent; //# sourceMappingURL=index.js.map