0.0.5-rc.1

This commit is contained in:
Recep Kocur 2023-01-02 01:13:48 +03:00
parent 2b34147851
commit 3feb04b8f0
5 changed files with 12 additions and 80 deletions

View File

@ -15,7 +15,7 @@ npm i react-native-screen-capture
## Usage
```js
import { disallowScreenshot, keepAwake, userDidTakeScreenshot, } from 'react-native-screen-capture';
import { disallowScreenshot, keepAwake } from 'react-native-screen-capture';
// disable screenshots
disallowScreenshot(true);
@ -28,15 +28,6 @@ keepAwake(true);
// Keep awake false
keepAwake(false);
// userDidTakeScreenshot
// function to execute when user did a screenshot (ios only)
const onScreenshot = () => {
console.log("Hey, screenshot detected!");
};
// its important have an "unsubscribe" to remove listener from screen is dismounted
const eventListener = userDidTakeScreenshot(onScreenshot);
eventListener.remove();
```
## Roadmap
@ -50,7 +41,7 @@ eventListener.remove();
| 🚧 | Android | Record capture disable |
| 🚧 | iOS | Record capture disable |
| 🚧 | Android | Screenshot callback |
| | iOS | Screenshot callback |
| 🚧 | iOS | Screenshot callback |
| 🚧 | Android | Record capture callback |
| 🚧 | iOS | Record capture callback |

View File

@ -71,10 +71,4 @@ public class ScreenCaptureModule extends ReactContextBaseJavaModule {
}
}
}
// @ReactMethod
// public void addListener(String eventName) { }
// @ReactMethod
// public void removeListeners(Integer count) { }
}

View File

@ -4,18 +4,5 @@ import { NativeModules, NativeEventEmitter, } from 'react-native';
export const { ScreenCapture } = NativeModules;
const eventEmitter = new NativeEventEmitter(ScreenCapture);
export const userDidTakeScreenshot = fn => {
if (typeof(fn) !== 'function'){
console.error('ScreenCapture, addListener requires valid callback function');
return;
}
return eventEmitter?.addListener?.(
'ScreenCapture_userDidTakeScreenshot',
fn
);
}
export const disallowScreenshot = ScreenCapture.disallowScreenshot
export const keepAwake = ScreenCapture.keepAwake

View File

@ -1,9 +1,7 @@
// ScreenCapture.h
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
#import <React/RCTLog.h>
@interface ScreenCapture : RCTEventEmitter <RCTBridgeModule>
@interface ScreenCapture : NSObject <RCTBridgeModule>
@end

View File

@ -1,17 +1,14 @@
// ScreenCapture.m
// #import <React/RCTLog.h>
// RCTLogInfo(@"Example Log");
#import "ScreenCapture.h"
@implementation ScreenCapture {
BOOL hasListeners;
BOOL dev;
UITextField *secureTextField;
}
- (dispatch_queue_t)methodQueue {
dev = NO;
if (dev) NSLog(@"[SC] methodQueue");
return dispatch_get_main_queue();
}
@ -20,35 +17,6 @@
return YES;
}
- (NSArray<NSString *> *)supportedEvents {
return @[@"ScreenCapture_userDidTakeScreenshot"];
}
- (id)init {
dev = TRUE;
if (dev) NSLog(@"[SC] init");
if ((self = [super init])) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot:) name:UIApplicationUserDidTakeScreenshotNotification object: nil];
}
return self;
}
- (void)startObserving {
if (dev) NSLog(@"[SC] startObserving");
hasListeners = YES;
}
- (void)stopObserving {
if (dev) NSLog(@"[SC] stopObserving");
hasListeners = NO;
}
- (void)userDidTakeScreenshot:(NSNotification *)notification {
if (!hasListeners) return;
if (dev) NSLog(@"[SC] userDidTakeScreenshot");
[self sendEventWithName:@"ScreenCapture_userDidTakeScreenshot" body:nil];
}
#pragma mark - dealloc -
- (void)dealloc {
@ -71,21 +39,15 @@ RCT_EXPORT_METHOD(keepAwake:(BOOL)status)
RCT_EXPORT_METHOD(disallowScreenshot:(BOOL)status)
{
if (dev) NSLog(@"[SC] disallowScreenshot with %@", status ? @"YES" : @"NO");
@try {
if (dev) NSLog(@"[SC] try");
if (self->secureTextField == nil) {
self->secureTextField = [[UITextField alloc] init];
self->secureTextField.userInteractionEnabled = false;
UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
[window addSubview:self->secureTextField];
[window.layer.superlayer addSublayer:self->secureTextField.layer];
[self->secureTextField.layer.sublayers.firstObject addSublayer:window.layer];
}
[self->secureTextField setSecureTextEntry:status];
}
@catch (NSException *e) {
if (dev) NSLog(@"[SC] catch");
if (self->secureTextField == nil) {
self->secureTextField = [[UITextField alloc] init];
self->secureTextField.userInteractionEnabled = false;
UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
[window addSubview:self->secureTextField];
[window.layer.superlayer addSublayer:self->secureTextField.layer];
[self->secureTextField.layer.sublayers.firstObject addSublayer:window.layer];
}
[self->secureTextField setSecureTextEntry:status];
}
@end