@intuiface/capacitor-plugin-screenshot 1.0.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,7 +11,7 @@ Pod::Spec.new do |s|
11
11
  s.author = package['author']
12
12
  s.source = { :git => package['repository']['url'], :tag => s.version.to_s }
13
13
  s.source_files = 'ios/Plugin/**/*.{swift,h,m,c,cc,mm,cpp}'
14
- s.ios.deployment_target = '13.0'
14
+ s.ios.deployment_target = '14.0'
15
15
  s.dependency 'Capacitor'
16
16
  s.swift_version = '5.1'
17
17
  end
package/README.md CHANGED
@@ -71,7 +71,7 @@ Function to take a screenshot
71
71
 
72
72
  ## iOS
73
73
 
74
- iOS version 11+ is supported.
74
+ iOS version 14+ is supported.
75
75
 
76
76
  Nothing more to do, it should work by calling the `getScreenshot` function.
77
77
 
@@ -85,6 +85,11 @@ To be able to take screenshot on Android, you have to declare a foreground servi
85
85
  ```xml
86
86
  <service android:enabled="true" android:foregroundServiceType="mediaProjection" android:name="com.intuiface.plugins.screenshot.ScreenCaptureService" />
87
87
  ```
88
+ And also add permissions :
89
+ ```xml
90
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
91
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
92
+ ```
88
93
 
89
94
  The foreground service will ask you to cast your screen and this is mandatory to take screenshot with the `MediaProjection` API.
90
95
 
@@ -1,8 +1,8 @@
1
1
  ext {
2
2
  junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
3
- androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.6.1'
4
- androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.1.5'
5
- androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.5.1'
3
+ androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.7.0'
4
+ androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.2.1'
5
+ androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.6.1'
6
6
  }
7
7
 
8
8
  buildscript {
@@ -11,7 +11,7 @@ buildscript {
11
11
  mavenCentral()
12
12
  }
13
13
  dependencies {
14
- classpath 'com.android.tools.build:gradle:8.0.0'
14
+ classpath 'com.android.tools.build:gradle:8.7.2'
15
15
  }
16
16
  }
17
17
 
@@ -19,10 +19,10 @@ apply plugin: 'com.android.library'
19
19
 
20
20
  android {
21
21
  namespace "com.intuiface.plugins.screenshot"
22
- compileSdkVersion project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 33
22
+ compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 35
23
23
  defaultConfig {
24
- minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
25
- targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 33
24
+ minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 23
25
+ targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 35
26
26
  versionCode 1
27
27
  versionName "1.0"
28
28
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -37,8 +37,8 @@ android {
37
37
  abortOnError false
38
38
  }
39
39
  compileOptions {
40
- sourceCompatibility JavaVersion.VERSION_17
41
- targetCompatibility JavaVersion.VERSION_17
40
+ sourceCompatibility JavaVersion.VERSION_21
41
+ targetCompatibility JavaVersion.VERSION_21
42
42
  }
43
43
  }
44
44
 
@@ -1,2 +1,4 @@
1
1
  <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
3
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
2
4
  </manifest>
@@ -41,31 +41,57 @@ public class CapacitorScreenshotPlugin extends Plugin {
41
41
  private ActivityResultLauncher<Intent> mediaProjectionActivityLauncher;
42
42
 
43
43
  private PluginCall savedCall;
44
+ private VirtualDisplay virtualDisplay;
45
+ private Handler handler;
44
46
 
45
47
  @Override
46
48
  public void load() {
47
- mediaProjectionActivityLauncher =
48
- getActivity()
49
- .registerForActivityResult(
50
- new ActivityResultContracts.StartActivityForResult(),
51
- new ActivityResultCallback<ActivityResult>() {
52
- @Override
53
- public void onActivityResult(ActivityResult result) {
54
- if (result.getResultCode() == Activity.RESULT_OK) {
55
- assert result.getData() != null;
56
- mediaProjection = mediaProjectionManager.getMediaProjection(result.getResultCode(), result.getData());
57
- startScreenshotCapture(mediaProjection);
58
- }
49
+ HandlerThread handlerThread = new HandlerThread("ScreenshotThread");
50
+ handlerThread.start();
51
+ handler = new Handler(handlerThread.getLooper());
52
+
53
+ mediaProjectionActivityLauncher = getActivity()
54
+ .registerForActivityResult(
55
+ new ActivityResultContracts.StartActivityForResult(),
56
+ new ActivityResultCallback<ActivityResult>() {
57
+ @Override
58
+ public void onActivityResult(ActivityResult result) {
59
+ if (result.getResultCode() == Activity.RESULT_OK) {
60
+ assert result.getData() != null;
61
+ mediaProjection = mediaProjectionManager.getMediaProjection(result.getResultCode(), result.getData());
62
+ startScreenshotCapture(mediaProjection);
59
63
  }
60
64
  }
61
- );
65
+ }
66
+ );
62
67
  }
63
68
 
64
69
  @PluginMethod
65
70
  public void getScreenshot(PluginCall call) {
66
- if (mediaProjection != null) {
71
+ if (mediaProjection != null && virtualDisplay != null) {
67
72
  savedCall = call;
68
- startScreenshotCapture(mediaProjection);
73
+
74
+ final DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
75
+ int screenWidth = metrics.widthPixels;
76
+ int screenHeight = metrics.heightPixels;
77
+ // Create an ImageReader to capture the screen content
78
+ ImageReader imageReader = ImageReader.newInstance(screenWidth, screenHeight, PixelFormat.RGBA_8888, 1);
79
+ // Handle the captured images from the ImageReader
80
+ imageReader.setOnImageAvailableListener(
81
+ reader -> {
82
+ Image image = imageReader.acquireLatestImage();
83
+ if (image != null) {
84
+ // Process the captured image
85
+ processScreenshot(image);
86
+ // Release the image resources
87
+ image.close();
88
+ }
89
+ },
90
+ handler
91
+ );
92
+
93
+ // set the new surface to get the capture
94
+ virtualDisplay.setSurface(imageReader.getSurface());
69
95
  } else {
70
96
  ScreenCaptureManager screenCaptureManager = new ScreenCaptureManager(getContext());
71
97
  screenCaptureManager.startForeground();
@@ -78,8 +104,9 @@ public class CapacitorScreenshotPlugin extends Plugin {
78
104
  public void run() {
79
105
  Activity activity = getBridge().getActivity();
80
106
  if (activity != null) {
81
- mediaProjectionManager =
82
- (MediaProjectionManager) activity.getSystemService(Activity.MEDIA_PROJECTION_SERVICE);
107
+ mediaProjectionManager = (MediaProjectionManager) activity.getSystemService(
108
+ Activity.MEDIA_PROJECTION_SERVICE
109
+ );
83
110
 
84
111
  savedCall = call;
85
112
  Intent projectionIntent = mediaProjectionManager.createScreenCaptureIntent();
@@ -94,22 +121,17 @@ public class CapacitorScreenshotPlugin extends Plugin {
94
121
  }
95
122
 
96
123
  private void startScreenshotCapture(MediaProjection mediaProjection) {
97
- HandlerThread handlerThread = new HandlerThread("ScreenshotThread");
98
- handlerThread.start();
99
-
100
124
  final DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
101
125
  int screenWidth = metrics.widthPixels;
102
126
  int screenHeight = metrics.heightPixels;
103
-
104
- Handler handler = new Handler(handlerThread.getLooper());
105
-
106
127
  int screenDensity = metrics.densityDpi;
107
128
 
108
129
  // Create an ImageReader to capture the screen content
109
- @SuppressLint("WrongConstant")
110
130
  ImageReader imageReader = ImageReader.newInstance(screenWidth, screenHeight, PixelFormat.RGBA_8888, 1);
131
+
132
+ mediaProjection.registerCallback(new MediaProjection.Callback() {}, null);
111
133
  // Create a VirtualDisplay using the mediaProjection and imageReader
112
- final VirtualDisplay virtualDisplay = mediaProjection.createVirtualDisplay(
134
+ this.virtualDisplay = mediaProjection.createVirtualDisplay(
113
135
  "ScreenCapture",
114
136
  screenWidth,
115
137
  screenHeight,
@@ -119,22 +141,6 @@ public class CapacitorScreenshotPlugin extends Plugin {
119
141
  null,
120
142
  handler
121
143
  );
122
-
123
- // Handle the captured images from the ImageReader
124
- imageReader.setOnImageAvailableListener(
125
- reader -> {
126
- Image image = imageReader.acquireLatestImage();
127
- if (image != null) {
128
- // Process the captured image
129
- processScreenshot(image);
130
- // Release the image resources
131
- image.close();
132
-
133
- virtualDisplay.release();
134
- }
135
- },
136
- handler
137
- );
138
144
  }
139
145
 
140
146
  private void processScreenshot(Image image) {
@@ -197,7 +203,7 @@ public class CapacitorScreenshotPlugin extends Plugin {
197
203
  int desiredWidth = savedCall.getInt("size", width);
198
204
  // scale but keep ratio
199
205
  int scaledWidth = Math.min(width, desiredWidth);
200
- int scaledHeight = height * scaledWidth / width;
206
+ int scaledHeight = (height * scaledWidth) / width;
201
207
  bitmap = Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, false);
202
208
 
203
209
  return bitmap;
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { registerPlugin } from '@capacitor/core';
2
2
  const CapacitorScreenshot = registerPlugin('CapacitorScreenshot', {
3
- web: () => import('./web').then(m => new m.CapacitorScreenshotWeb()),
3
+ web: () => import('./web').then((m) => new m.CapacitorScreenshotWeb()),
4
4
  });
5
5
  export * from './definitions';
6
6
  export { CapacitorScreenshot };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,mBAAmB,GAAG,cAAc,CACxC,qBAAqB,EACrB;IACE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,sBAAsB,EAAE,CAAC;CACrE,CACF,CAAC;AAEF,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { registerPlugin } from '@capacitor/core';\n\nimport type { CapacitorScreenshotPlugin } from './definitions';\n\nconst CapacitorScreenshot = registerPlugin<CapacitorScreenshotPlugin>(\n 'CapacitorScreenshot',\n {\n web: () => import('./web').then(m => new m.CapacitorScreenshotWeb()),\n },\n);\n\nexport * from './definitions';\nexport { CapacitorScreenshot };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,mBAAmB,GAAG,cAAc,CAA4B,qBAAqB,EAAE;IAC3F,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,sBAAsB,EAAE,CAAC;CACvE,CAAC,CAAC;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { registerPlugin } from '@capacitor/core';\n\nimport type { CapacitorScreenshotPlugin } from './definitions';\n\nconst CapacitorScreenshot = registerPlugin<CapacitorScreenshotPlugin>('CapacitorScreenshot', {\n web: () => import('./web').then((m) => new m.CapacitorScreenshotWeb()),\n});\n\nexport * from './definitions';\nexport { CapacitorScreenshot };\n"]}
package/dist/esm/web.js CHANGED
@@ -22,7 +22,7 @@ export class CapacitorScreenshotWeb extends WebPlugin {
22
22
  // create a canvas
23
23
  this.captureCanvas = document.createElement('canvas');
24
24
  }
25
- return new Promise(resolve => {
25
+ return new Promise((resolve) => {
26
26
  const callbackLoadedMetadata = () => {
27
27
  // unbind from loaded metadata
28
28
  this.videoCapture.removeEventListener('loadedmetadata', callbackLoadedMetadata);
@@ -33,15 +33,12 @@ export class CapacitorScreenshotWeb extends WebPlugin {
33
33
  let newHeight = this.captureCanvas.height;
34
34
  if (options.size) {
35
35
  newWidth = options.size;
36
- newHeight =
37
- (this.captureCanvas.height * newWidth) / this.captureCanvas.width;
36
+ newHeight = (this.captureCanvas.height * newWidth) / this.captureCanvas.width;
38
37
  this.captureCanvas.width = newWidth;
39
38
  this.captureCanvas.height = newHeight;
40
39
  }
41
40
  // draw the video into canvas
42
- this.captureCanvas
43
- .getContext('2d')
44
- .drawImage(this.videoCapture, 0, 0, newWidth, newHeight);
41
+ this.captureCanvas.getContext('2d').drawImage(this.videoCapture, 0, 0, newWidth, newHeight);
45
42
  let quality = 1.0;
46
43
  if (options.quality) {
47
44
  quality = options.quality / 100;
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport type {\n CapacitorScreenshotPlugin,\n ScreenshotOptions,\n ScreenshotValue,\n} from './definitions';\n\nexport class CapacitorScreenshotWeb\n extends WebPlugin\n implements CapacitorScreenshotPlugin\n{\n private captureStream: any;\n private videoCapture: any;\n private captureCanvas: any;\n\n async getScreenshot(\n options: ScreenshotOptions,\n ): Promise<ScreenshotValue | null> {\n try {\n if (!this.captureStream) {\n // display a message ?\n\n // get the media device\n const mediaDevices = navigator.mediaDevices as any;\n const width = screen.width * (window.devicePixelRatio || 1);\n const height = screen.height * (window.devicePixelRatio || 1);\n\n // start sharing screen (ask for it)\n this.captureStream = await mediaDevices.getDisplayMedia({\n preferCurrentTab: true,\n audio: false,\n video: {\n width,\n height,\n },\n });\n // create a video tag\n this.videoCapture = document.createElement('video');\n // create a canvas\n this.captureCanvas = document.createElement('canvas');\n }\n\n return new Promise<any>(resolve => {\n const callbackLoadedMetadata = () => {\n // unbind from loaded metadata\n this.videoCapture.removeEventListener(\n 'loadedmetadata',\n callbackLoadedMetadata,\n );\n // set the canvas size with the video size\n this.captureCanvas.width = this.videoCapture.videoWidth;\n this.captureCanvas.height = this.videoCapture.videoHeight;\n let newWidth = this.captureCanvas.width;\n let newHeight = this.captureCanvas.height;\n if (options.size) {\n newWidth = options.size;\n newHeight =\n (this.captureCanvas.height * newWidth) / this.captureCanvas.width;\n this.captureCanvas.width = newWidth;\n this.captureCanvas.height = newHeight;\n }\n // draw the video into canvas\n this.captureCanvas\n .getContext('2d')\n .drawImage(this.videoCapture, 0, 0, newWidth, newHeight);\n let quality = 1.0;\n if (options.quality) {\n quality = options.quality / 100;\n }\n // get the image of the canvas\n const frame = this.captureCanvas.toDataURL('image/jpeg', quality);\n // pause the video\n this.videoCapture.pause();\n\n // return the image\n resolve({ base64: frame });\n };\n\n // bind on loaded metadata to draw the video when the video is ready\n this.videoCapture.onloadedmetadata = callbackLoadedMetadata;\n // set the src of the video\n this.videoCapture.srcObject = this.captureStream;\n // play the video\n this.videoCapture.play();\n });\n } catch (err) {\n console.error(`Error: ${err as string}`);\n return null;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport type { CapacitorScreenshotPlugin, ScreenshotOptions, ScreenshotValue } from './definitions';\n\nexport class CapacitorScreenshotWeb extends WebPlugin implements CapacitorScreenshotPlugin {\n private captureStream: any;\n private videoCapture: any;\n private captureCanvas: any;\n\n async getScreenshot(options: ScreenshotOptions): Promise<ScreenshotValue | null> {\n try {\n if (!this.captureStream) {\n // display a message ?\n\n // get the media device\n const mediaDevices = navigator.mediaDevices as any;\n const width = screen.width * (window.devicePixelRatio || 1);\n const height = screen.height * (window.devicePixelRatio || 1);\n\n // start sharing screen (ask for it)\n this.captureStream = await mediaDevices.getDisplayMedia({\n preferCurrentTab: true,\n audio: false,\n video: {\n width,\n height,\n },\n });\n // create a video tag\n this.videoCapture = document.createElement('video');\n // create a canvas\n this.captureCanvas = document.createElement('canvas');\n }\n\n return new Promise<any>((resolve) => {\n const callbackLoadedMetadata = () => {\n // unbind from loaded metadata\n this.videoCapture.removeEventListener('loadedmetadata', callbackLoadedMetadata);\n // set the canvas size with the video size\n this.captureCanvas.width = this.videoCapture.videoWidth;\n this.captureCanvas.height = this.videoCapture.videoHeight;\n let newWidth = this.captureCanvas.width;\n let newHeight = this.captureCanvas.height;\n if (options.size) {\n newWidth = options.size;\n newHeight = (this.captureCanvas.height * newWidth) / this.captureCanvas.width;\n this.captureCanvas.width = newWidth;\n this.captureCanvas.height = newHeight;\n }\n // draw the video into canvas\n this.captureCanvas.getContext('2d').drawImage(this.videoCapture, 0, 0, newWidth, newHeight);\n let quality = 1.0;\n if (options.quality) {\n quality = options.quality / 100;\n }\n // get the image of the canvas\n const frame = this.captureCanvas.toDataURL('image/jpeg', quality);\n // pause the video\n this.videoCapture.pause();\n\n // return the image\n resolve({ base64: frame });\n };\n\n // bind on loaded metadata to draw the video when the video is ready\n this.videoCapture.onloadedmetadata = callbackLoadedMetadata;\n // set the src of the video\n this.videoCapture.srcObject = this.captureStream;\n // play the video\n this.videoCapture.play();\n });\n } catch (err) {\n console.error(`Error: ${err as string}`);\n return null;\n }\n }\n}\n"]}
@@ -1,11 +1,9 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
3
  var core = require('@capacitor/core');
6
4
 
7
5
  const CapacitorScreenshot = core.registerPlugin('CapacitorScreenshot', {
8
- web: () => Promise.resolve().then(function () { return web; }).then(m => new m.CapacitorScreenshotWeb()),
6
+ web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.CapacitorScreenshotWeb()),
9
7
  });
10
8
 
11
9
  class CapacitorScreenshotWeb extends core.WebPlugin {
@@ -31,7 +29,7 @@ class CapacitorScreenshotWeb extends core.WebPlugin {
31
29
  // create a canvas
32
30
  this.captureCanvas = document.createElement('canvas');
33
31
  }
34
- return new Promise(resolve => {
32
+ return new Promise((resolve) => {
35
33
  const callbackLoadedMetadata = () => {
36
34
  // unbind from loaded metadata
37
35
  this.videoCapture.removeEventListener('loadedmetadata', callbackLoadedMetadata);
@@ -42,15 +40,12 @@ class CapacitorScreenshotWeb extends core.WebPlugin {
42
40
  let newHeight = this.captureCanvas.height;
43
41
  if (options.size) {
44
42
  newWidth = options.size;
45
- newHeight =
46
- (this.captureCanvas.height * newWidth) / this.captureCanvas.width;
43
+ newHeight = (this.captureCanvas.height * newWidth) / this.captureCanvas.width;
47
44
  this.captureCanvas.width = newWidth;
48
45
  this.captureCanvas.height = newHeight;
49
46
  }
50
47
  // draw the video into canvas
51
- this.captureCanvas
52
- .getContext('2d')
53
- .drawImage(this.videoCapture, 0, 0, newWidth, newHeight);
48
+ this.captureCanvas.getContext('2d').drawImage(this.videoCapture, 0, 0, newWidth, newHeight);
54
49
  let quality = 1.0;
55
50
  if (options.quality) {
56
51
  quality = options.quality / 100;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst CapacitorScreenshot = registerPlugin('CapacitorScreenshot', {\n web: () => import('./web').then(m => new m.CapacitorScreenshotWeb()),\n});\nexport * from './definitions';\nexport { CapacitorScreenshot };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class CapacitorScreenshotWeb extends WebPlugin {\n async getScreenshot(options) {\n try {\n if (!this.captureStream) {\n // display a message ?\n // get the media device\n const mediaDevices = navigator.mediaDevices;\n const width = screen.width * (window.devicePixelRatio || 1);\n const height = screen.height * (window.devicePixelRatio || 1);\n // start sharing screen (ask for it)\n this.captureStream = await mediaDevices.getDisplayMedia({\n preferCurrentTab: true,\n audio: false,\n video: {\n width,\n height,\n },\n });\n // create a video tag\n this.videoCapture = document.createElement('video');\n // create a canvas\n this.captureCanvas = document.createElement('canvas');\n }\n return new Promise(resolve => {\n const callbackLoadedMetadata = () => {\n // unbind from loaded metadata\n this.videoCapture.removeEventListener('loadedmetadata', callbackLoadedMetadata);\n // set the canvas size with the video size\n this.captureCanvas.width = this.videoCapture.videoWidth;\n this.captureCanvas.height = this.videoCapture.videoHeight;\n let newWidth = this.captureCanvas.width;\n let newHeight = this.captureCanvas.height;\n if (options.size) {\n newWidth = options.size;\n newHeight =\n (this.captureCanvas.height * newWidth) / this.captureCanvas.width;\n this.captureCanvas.width = newWidth;\n this.captureCanvas.height = newHeight;\n }\n // draw the video into canvas\n this.captureCanvas\n .getContext('2d')\n .drawImage(this.videoCapture, 0, 0, newWidth, newHeight);\n let quality = 1.0;\n if (options.quality) {\n quality = options.quality / 100;\n }\n // get the image of the canvas\n const frame = this.captureCanvas.toDataURL('image/jpeg', quality);\n // pause the video\n this.videoCapture.pause();\n // return the image\n resolve({ base64: frame });\n };\n // bind on loaded metadata to draw the video when the video is ready\n this.videoCapture.onloadedmetadata = callbackLoadedMetadata;\n // set the src of the video\n this.videoCapture.srcObject = this.captureStream;\n // play the video\n this.videoCapture.play();\n });\n }\n catch (err) {\n console.error(`Error: ${err}`);\n return null;\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst CapacitorScreenshot = registerPlugin('CapacitorScreenshot', {\n web: () => import('./web').then((m) => new m.CapacitorScreenshotWeb()),\n});\nexport * from './definitions';\nexport { CapacitorScreenshot };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class CapacitorScreenshotWeb extends WebPlugin {\n async getScreenshot(options) {\n try {\n if (!this.captureStream) {\n // display a message ?\n // get the media device\n const mediaDevices = navigator.mediaDevices;\n const width = screen.width * (window.devicePixelRatio || 1);\n const height = screen.height * (window.devicePixelRatio || 1);\n // start sharing screen (ask for it)\n this.captureStream = await mediaDevices.getDisplayMedia({\n preferCurrentTab: true,\n audio: false,\n video: {\n width,\n height,\n },\n });\n // create a video tag\n this.videoCapture = document.createElement('video');\n // create a canvas\n this.captureCanvas = document.createElement('canvas');\n }\n return new Promise((resolve) => {\n const callbackLoadedMetadata = () => {\n // unbind from loaded metadata\n this.videoCapture.removeEventListener('loadedmetadata', callbackLoadedMetadata);\n // set the canvas size with the video size\n this.captureCanvas.width = this.videoCapture.videoWidth;\n this.captureCanvas.height = this.videoCapture.videoHeight;\n let newWidth = this.captureCanvas.width;\n let newHeight = this.captureCanvas.height;\n if (options.size) {\n newWidth = options.size;\n newHeight = (this.captureCanvas.height * newWidth) / this.captureCanvas.width;\n this.captureCanvas.width = newWidth;\n this.captureCanvas.height = newHeight;\n }\n // draw the video into canvas\n this.captureCanvas.getContext('2d').drawImage(this.videoCapture, 0, 0, newWidth, newHeight);\n let quality = 1.0;\n if (options.quality) {\n quality = options.quality / 100;\n }\n // get the image of the canvas\n const frame = this.captureCanvas.toDataURL('image/jpeg', quality);\n // pause the video\n this.videoCapture.pause();\n // return the image\n resolve({ base64: frame });\n };\n // bind on loaded metadata to draw the video when the video is ready\n this.videoCapture.onloadedmetadata = callbackLoadedMetadata;\n // set the src of the video\n this.videoCapture.srcObject = this.captureStream;\n // play the video\n this.videoCapture.play();\n });\n }\n catch (err) {\n console.error(`Error: ${err}`);\n return null;\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -2,7 +2,7 @@ var capacitorCapacitorScreenshot = (function (exports, core) {
2
2
  'use strict';
3
3
 
4
4
  const CapacitorScreenshot = core.registerPlugin('CapacitorScreenshot', {
5
- web: () => Promise.resolve().then(function () { return web; }).then(m => new m.CapacitorScreenshotWeb()),
5
+ web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.CapacitorScreenshotWeb()),
6
6
  });
7
7
 
8
8
  class CapacitorScreenshotWeb extends core.WebPlugin {
@@ -28,7 +28,7 @@ var capacitorCapacitorScreenshot = (function (exports, core) {
28
28
  // create a canvas
29
29
  this.captureCanvas = document.createElement('canvas');
30
30
  }
31
- return new Promise(resolve => {
31
+ return new Promise((resolve) => {
32
32
  const callbackLoadedMetadata = () => {
33
33
  // unbind from loaded metadata
34
34
  this.videoCapture.removeEventListener('loadedmetadata', callbackLoadedMetadata);
@@ -39,15 +39,12 @@ var capacitorCapacitorScreenshot = (function (exports, core) {
39
39
  let newHeight = this.captureCanvas.height;
40
40
  if (options.size) {
41
41
  newWidth = options.size;
42
- newHeight =
43
- (this.captureCanvas.height * newWidth) / this.captureCanvas.width;
42
+ newHeight = (this.captureCanvas.height * newWidth) / this.captureCanvas.width;
44
43
  this.captureCanvas.width = newWidth;
45
44
  this.captureCanvas.height = newHeight;
46
45
  }
47
46
  // draw the video into canvas
48
- this.captureCanvas
49
- .getContext('2d')
50
- .drawImage(this.videoCapture, 0, 0, newWidth, newHeight);
47
+ this.captureCanvas.getContext('2d').drawImage(this.videoCapture, 0, 0, newWidth, newHeight);
51
48
  let quality = 1.0;
52
49
  if (options.quality) {
53
50
  quality = options.quality / 100;
@@ -81,8 +78,6 @@ var capacitorCapacitorScreenshot = (function (exports, core) {
81
78
 
82
79
  exports.CapacitorScreenshot = CapacitorScreenshot;
83
80
 
84
- Object.defineProperty(exports, '__esModule', { value: true });
85
-
86
81
  return exports;
87
82
 
88
83
  })({}, capacitorExports);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst CapacitorScreenshot = registerPlugin('CapacitorScreenshot', {\n web: () => import('./web').then(m => new m.CapacitorScreenshotWeb()),\n});\nexport * from './definitions';\nexport { CapacitorScreenshot };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class CapacitorScreenshotWeb extends WebPlugin {\n async getScreenshot(options) {\n try {\n if (!this.captureStream) {\n // display a message ?\n // get the media device\n const mediaDevices = navigator.mediaDevices;\n const width = screen.width * (window.devicePixelRatio || 1);\n const height = screen.height * (window.devicePixelRatio || 1);\n // start sharing screen (ask for it)\n this.captureStream = await mediaDevices.getDisplayMedia({\n preferCurrentTab: true,\n audio: false,\n video: {\n width,\n height,\n },\n });\n // create a video tag\n this.videoCapture = document.createElement('video');\n // create a canvas\n this.captureCanvas = document.createElement('canvas');\n }\n return new Promise(resolve => {\n const callbackLoadedMetadata = () => {\n // unbind from loaded metadata\n this.videoCapture.removeEventListener('loadedmetadata', callbackLoadedMetadata);\n // set the canvas size with the video size\n this.captureCanvas.width = this.videoCapture.videoWidth;\n this.captureCanvas.height = this.videoCapture.videoHeight;\n let newWidth = this.captureCanvas.width;\n let newHeight = this.captureCanvas.height;\n if (options.size) {\n newWidth = options.size;\n newHeight =\n (this.captureCanvas.height * newWidth) / this.captureCanvas.width;\n this.captureCanvas.width = newWidth;\n this.captureCanvas.height = newHeight;\n }\n // draw the video into canvas\n this.captureCanvas\n .getContext('2d')\n .drawImage(this.videoCapture, 0, 0, newWidth, newHeight);\n let quality = 1.0;\n if (options.quality) {\n quality = options.quality / 100;\n }\n // get the image of the canvas\n const frame = this.captureCanvas.toDataURL('image/jpeg', quality);\n // pause the video\n this.videoCapture.pause();\n // return the image\n resolve({ base64: frame });\n };\n // bind on loaded metadata to draw the video when the video is ready\n this.videoCapture.onloadedmetadata = callbackLoadedMetadata;\n // set the src of the video\n this.videoCapture.srcObject = this.captureStream;\n // play the video\n this.videoCapture.play();\n });\n }\n catch (err) {\n console.error(`Error: ${err}`);\n return null;\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst CapacitorScreenshot = registerPlugin('CapacitorScreenshot', {\n web: () => import('./web').then((m) => new m.CapacitorScreenshotWeb()),\n});\nexport * from './definitions';\nexport { CapacitorScreenshot };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class CapacitorScreenshotWeb extends WebPlugin {\n async getScreenshot(options) {\n try {\n if (!this.captureStream) {\n // display a message ?\n // get the media device\n const mediaDevices = navigator.mediaDevices;\n const width = screen.width * (window.devicePixelRatio || 1);\n const height = screen.height * (window.devicePixelRatio || 1);\n // start sharing screen (ask for it)\n this.captureStream = await mediaDevices.getDisplayMedia({\n preferCurrentTab: true,\n audio: false,\n video: {\n width,\n height,\n },\n });\n // create a video tag\n this.videoCapture = document.createElement('video');\n // create a canvas\n this.captureCanvas = document.createElement('canvas');\n }\n return new Promise((resolve) => {\n const callbackLoadedMetadata = () => {\n // unbind from loaded metadata\n this.videoCapture.removeEventListener('loadedmetadata', callbackLoadedMetadata);\n // set the canvas size with the video size\n this.captureCanvas.width = this.videoCapture.videoWidth;\n this.captureCanvas.height = this.videoCapture.videoHeight;\n let newWidth = this.captureCanvas.width;\n let newHeight = this.captureCanvas.height;\n if (options.size) {\n newWidth = options.size;\n newHeight = (this.captureCanvas.height * newWidth) / this.captureCanvas.width;\n this.captureCanvas.width = newWidth;\n this.captureCanvas.height = newHeight;\n }\n // draw the video into canvas\n this.captureCanvas.getContext('2d').drawImage(this.videoCapture, 0, 0, newWidth, newHeight);\n let quality = 1.0;\n if (options.quality) {\n quality = options.quality / 100;\n }\n // get the image of the canvas\n const frame = this.captureCanvas.toDataURL('image/jpeg', quality);\n // pause the video\n this.videoCapture.pause();\n // return the image\n resolve({ base64: frame });\n };\n // bind on loaded metadata to draw the video when the video is ready\n this.videoCapture.onloadedmetadata = callbackLoadedMetadata;\n // set the src of the video\n this.videoCapture.srcObject = this.captureStream;\n // play the video\n this.videoCapture.play();\n });\n }\n catch (err) {\n console.error(`Error: ${err}`);\n return null;\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intuiface/capacitor-plugin-screenshot",
3
- "version": "1.0.2",
3
+ "version": "3.0.0",
4
4
  "description": "Capacitor plugin to take screenshot for iOS and Android devices",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",
@@ -35,33 +35,33 @@
35
35
  "lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
36
36
  "fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
37
37
  "eslint": "eslint . --ext ts",
38
- "prettier": "prettier \"**/*.{css,html,ts,js,java}\"",
38
+ "prettier": "prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java",
39
39
  "swiftlint": "node-swiftlint",
40
40
  "docgen": "docgen --api CapacitorScreenshotPlugin --output-readme README.md --output-json dist/docs.json",
41
- "build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.js",
41
+ "build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs",
42
42
  "clean": "rimraf ./dist",
43
43
  "watch": "tsc --watch",
44
44
  "prepublishOnly": "npm run build",
45
45
  "prepare": "npx shx cp -u ./.githooks/* ./.git/hooks/"
46
46
  },
47
47
  "devDependencies": {
48
- "@capacitor/android": "^5.0.0",
49
- "@capacitor/core": "^5.0.0",
50
- "@capacitor/docgen": "^0.0.18",
51
- "@capacitor/ios": "^5.0.0",
52
- "@ionic/eslint-config": "^0.3.0",
53
- "@ionic/prettier-config": "^1.0.1",
54
- "@ionic/swiftlint-config": "^1.1.2",
55
- "eslint": "^7.11.0",
56
- "prettier": "~2.3.0",
57
- "prettier-plugin-java": "~1.0.2",
58
- "rimraf": "^3.0.2",
59
- "rollup": "^2.32.0",
60
- "swiftlint": "^1.0.1",
48
+ "@capacitor/android": "^7.0.0",
49
+ "@capacitor/core": "^7.0.0",
50
+ "@capacitor/docgen": "^0.3.0",
51
+ "@capacitor/ios": "^7.0.0",
52
+ "@ionic/eslint-config": "^0.4.0",
53
+ "@ionic/prettier-config": "^4.0.0",
54
+ "@ionic/swiftlint-config": "^2.0.0",
55
+ "eslint": "^8.57.0",
56
+ "prettier": "^3.4.2",
57
+ "prettier-plugin-java": "^2.6.6",
58
+ "rimraf": "^6.0.1",
59
+ "rollup": "^4.30.1",
60
+ "swiftlint": "^2.0.0",
61
61
  "typescript": "~4.1.5"
62
62
  },
63
63
  "peerDependencies": {
64
- "@capacitor/core": "^5.0.0"
64
+ "@capacitor/core": ">=7.0.0"
65
65
  },
66
66
  "prettier": "@ionic/prettier-config",
67
67
  "swiftlint": "@ionic/swiftlint-config",