0.0.5-rc.1
This commit is contained in:
parent
2b34147851
commit
3feb04b8f0
13
README.md
13
README.md
@ -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 |
|
||||
|
||||
|
||||
@ -71,10 +71,4 @@ public class ScreenCaptureModule extends ReactContextBaseJavaModule {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// @ReactMethod
|
||||
// public void addListener(String eventName) { }
|
||||
|
||||
// @ReactMethod
|
||||
// public void removeListeners(Integer count) { }
|
||||
}
|
||||
13
index.js
13
index.js
@ -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
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user