@capacitor-community/camera-preview 7.0.3 → 7.0.4
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.
|
@@ -160,151 +160,150 @@ public class CameraActivity extends Fragment {
|
|
|
160
160
|
final GestureDetector gestureDetector = new GestureDetector(getActivity().getApplicationContext(), new TapGestureDetector());
|
|
161
161
|
|
|
162
162
|
getActivity().runOnUiThread(
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
if (
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
Log.d(TAG, "onTouch:" + " setFocusArea() did not suceed");
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
);
|
|
207
|
-
} else if (tapToTakePicture) {
|
|
208
|
-
takePicture(0, 0, 85);
|
|
209
|
-
} else if (tapToFocus) {
|
|
210
|
-
setFocusArea(
|
|
211
|
-
(int) event.getX(0),
|
|
212
|
-
(int) event.getY(0),
|
|
213
|
-
new Camera.AutoFocusCallback() {
|
|
214
|
-
public void onAutoFocus(boolean success, Camera camera) {
|
|
215
|
-
if (success) {
|
|
216
|
-
// A callback to JS might make sense here.
|
|
217
|
-
} else {
|
|
218
|
-
Log.d(TAG, "onTouch:" + " setFocusArea() did not suceed");
|
|
219
|
-
}
|
|
163
|
+
new Runnable() {
|
|
164
|
+
@Override
|
|
165
|
+
public void run() {
|
|
166
|
+
frameContainerLayout.setClickable(true);
|
|
167
|
+
frameContainerLayout.setOnTouchListener(
|
|
168
|
+
new View.OnTouchListener() {
|
|
169
|
+
private int mLastTouchX;
|
|
170
|
+
private int mLastTouchY;
|
|
171
|
+
private int mPosX = 0;
|
|
172
|
+
private int mPosY = 0;
|
|
173
|
+
|
|
174
|
+
@Override
|
|
175
|
+
public boolean onTouch(View v, MotionEvent event) {
|
|
176
|
+
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) frameContainerLayout.getLayoutParams();
|
|
177
|
+
|
|
178
|
+
boolean isSingleTapTouch = gestureDetector.onTouchEvent(event);
|
|
179
|
+
int action = event.getAction();
|
|
180
|
+
int eventCount = event.getPointerCount();
|
|
181
|
+
Log.d(TAG, "onTouch event, action, count: " + event + ", " + action + ", " + eventCount);
|
|
182
|
+
if (eventCount > 1) {
|
|
183
|
+
// handle multi-touch events
|
|
184
|
+
Camera.Parameters params = mCamera.getParameters();
|
|
185
|
+
if (action == MotionEvent.ACTION_POINTER_DOWN) {
|
|
186
|
+
mDist = getFingerSpacing(event);
|
|
187
|
+
} else if (action == MotionEvent.ACTION_MOVE && params.isZoomSupported()) {
|
|
188
|
+
handleZoom(event, params);
|
|
189
|
+
}
|
|
190
|
+
} else {
|
|
191
|
+
if (action != MotionEvent.ACTION_MOVE && isSingleTapTouch) {
|
|
192
|
+
if (tapToTakePicture && tapToFocus) {
|
|
193
|
+
setFocusArea(
|
|
194
|
+
(int) event.getX(0),
|
|
195
|
+
(int) event.getY(0),
|
|
196
|
+
new Camera.AutoFocusCallback() {
|
|
197
|
+
public void onAutoFocus(boolean success, Camera camera) {
|
|
198
|
+
if (success) {
|
|
199
|
+
takePicture(0, 0, 85);
|
|
200
|
+
} else {
|
|
201
|
+
Log.d(TAG, "onTouch:" + " setFocusArea() did not suceed");
|
|
220
202
|
}
|
|
221
203
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
int
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
if (
|
|
233
|
-
|
|
234
|
-
mLastTouchY = (int) event.getRawY() - layoutParams.topMargin;
|
|
204
|
+
}
|
|
205
|
+
);
|
|
206
|
+
} else if (tapToTakePicture) {
|
|
207
|
+
takePicture(0, 0, 85);
|
|
208
|
+
} else if (tapToFocus) {
|
|
209
|
+
setFocusArea(
|
|
210
|
+
(int) event.getX(0),
|
|
211
|
+
(int) event.getY(0),
|
|
212
|
+
new Camera.AutoFocusCallback() {
|
|
213
|
+
public void onAutoFocus(boolean success, Camera camera) {
|
|
214
|
+
if (success) {
|
|
215
|
+
// A callback to JS might make sense here.
|
|
235
216
|
} else {
|
|
236
|
-
|
|
237
|
-
mLastTouchY = (int) event.getRawY();
|
|
217
|
+
Log.d(TAG, "onTouch:" + " setFocusArea() did not suceed");
|
|
238
218
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
return true;
|
|
224
|
+
} else {
|
|
225
|
+
if (dragEnabled) {
|
|
226
|
+
int x;
|
|
227
|
+
int y;
|
|
228
|
+
|
|
229
|
+
switch (event.getAction()) {
|
|
230
|
+
case MotionEvent.ACTION_DOWN:
|
|
231
|
+
if (mLastTouchX == 0 || mLastTouchY == 0) {
|
|
232
|
+
mLastTouchX = (int) event.getRawX() - layoutParams.leftMargin;
|
|
233
|
+
mLastTouchY = (int) event.getRawY() - layoutParams.topMargin;
|
|
234
|
+
} else {
|
|
235
|
+
mLastTouchX = (int) event.getRawX();
|
|
236
|
+
mLastTouchY = (int) event.getRawY();
|
|
237
|
+
}
|
|
238
|
+
break;
|
|
239
|
+
case MotionEvent.ACTION_MOVE:
|
|
240
|
+
x = (int) event.getRawX();
|
|
241
|
+
y = (int) event.getRawY();
|
|
243
242
|
|
|
244
|
-
|
|
245
|
-
|
|
243
|
+
final float dx = x - mLastTouchX;
|
|
244
|
+
final float dy = y - mLastTouchY;
|
|
246
245
|
|
|
247
|
-
|
|
248
|
-
|
|
246
|
+
mPosX += dx;
|
|
247
|
+
mPosY += dy;
|
|
249
248
|
|
|
250
|
-
|
|
251
|
-
|
|
249
|
+
layoutParams.leftMargin = mPosX;
|
|
250
|
+
layoutParams.topMargin = mPosY;
|
|
252
251
|
|
|
253
|
-
|
|
252
|
+
frameContainerLayout.setLayoutParams(layoutParams);
|
|
254
253
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
254
|
+
// Remember this touch position for the next move event
|
|
255
|
+
mLastTouchX = x;
|
|
256
|
+
mLastTouchY = y;
|
|
258
257
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
258
|
+
break;
|
|
259
|
+
default:
|
|
260
|
+
break;
|
|
263
261
|
}
|
|
264
262
|
}
|
|
265
263
|
}
|
|
266
|
-
return true;
|
|
267
264
|
}
|
|
265
|
+
return true;
|
|
268
266
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
return false;
|
|
267
|
+
}
|
|
268
|
+
);
|
|
269
|
+
frameContainerLayout.setFocusableInTouchMode(true);
|
|
270
|
+
frameContainerLayout.requestFocus();
|
|
271
|
+
frameContainerLayout.setOnKeyListener(
|
|
272
|
+
new View.OnKeyListener() {
|
|
273
|
+
@Override
|
|
274
|
+
public boolean onKey(View v, int keyCode, android.view.KeyEvent event) {
|
|
275
|
+
if (keyCode == android.view.KeyEvent.KEYCODE_BACK) {
|
|
276
|
+
eventListener.onBackButton();
|
|
277
|
+
return true;
|
|
281
278
|
}
|
|
279
|
+
return false;
|
|
282
280
|
}
|
|
283
|
-
|
|
284
|
-
|
|
281
|
+
}
|
|
282
|
+
);
|
|
283
|
+
}
|
|
285
284
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
mDist = newDist;
|
|
302
|
-
params.setZoom(zoom);
|
|
303
|
-
mCamera.setParameters(params);
|
|
285
|
+
private float mDist = 0F;
|
|
286
|
+
|
|
287
|
+
private void handleZoom(MotionEvent event, Camera.Parameters params) {
|
|
288
|
+
if (mCamera != null) {
|
|
289
|
+
mCamera.cancelAutoFocus();
|
|
290
|
+
int maxZoom = params.getMaxZoom();
|
|
291
|
+
int zoom = params.getZoom();
|
|
292
|
+
float newDist = getFingerSpacing(event);
|
|
293
|
+
if (newDist > mDist) {
|
|
294
|
+
//zoom in
|
|
295
|
+
if (zoom < maxZoom) zoom++;
|
|
296
|
+
} else if (newDist < mDist) {
|
|
297
|
+
//zoom out
|
|
298
|
+
if (zoom > 0) zoom--;
|
|
304
299
|
}
|
|
300
|
+
mDist = newDist;
|
|
301
|
+
params.setZoom(zoom);
|
|
302
|
+
mCamera.setParameters(params);
|
|
305
303
|
}
|
|
306
304
|
}
|
|
307
|
-
|
|
305
|
+
}
|
|
306
|
+
);
|
|
308
307
|
}
|
|
309
308
|
|
|
310
309
|
private void setDefaultCameraId() {
|
|
@@ -400,9 +399,10 @@ public class CameraActivity extends Fragment {
|
|
|
400
399
|
getResources().getIdentifier("frame_container", "id", appResourcesPackage)
|
|
401
400
|
);
|
|
402
401
|
|
|
403
|
-
final int previousOrientation =
|
|
404
|
-
|
|
405
|
-
|
|
402
|
+
final int previousOrientation =
|
|
403
|
+
frameContainerLayout.getHeight() > frameContainerLayout.getWidth()
|
|
404
|
+
? Configuration.ORIENTATION_PORTRAIT
|
|
405
|
+
: Configuration.ORIENTATION_LANDSCAPE;
|
|
406
406
|
// Checks if the orientation of the screen has changed
|
|
407
407
|
if (newConfig.orientation != previousOrientation) {
|
|
408
408
|
final RelativeLayout frameCamContainerLayout = (RelativeLayout) view.findViewById(
|
|
@@ -450,9 +450,10 @@ public class CameraActivity extends Fragment {
|
|
|
450
450
|
// etc.
|
|
451
451
|
numberOfCameras = Camera.getNumberOfCameras();
|
|
452
452
|
|
|
453
|
-
int nextFacing =
|
|
454
|
-
|
|
455
|
-
|
|
453
|
+
int nextFacing =
|
|
454
|
+
cameraCurrentlyLocked == Camera.CameraInfo.CAMERA_FACING_BACK
|
|
455
|
+
? Camera.CameraInfo.CAMERA_FACING_FRONT
|
|
456
|
+
: Camera.CameraInfo.CAMERA_FACING_BACK;
|
|
456
457
|
|
|
457
458
|
// Find the next ID of the camera to switch to (front if the current is back and visa versa)
|
|
458
459
|
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
|
|
@@ -759,9 +760,10 @@ public class CameraActivity extends Fragment {
|
|
|
759
760
|
bytes = rotateNV21(bytes, size.width, size.height, orientation);
|
|
760
761
|
}
|
|
761
762
|
// switch width/height when rotating 90/270 deg
|
|
762
|
-
Rect rect =
|
|
763
|
-
|
|
764
|
-
|
|
763
|
+
Rect rect =
|
|
764
|
+
orientation == 90 || orientation == 270
|
|
765
|
+
? new Rect(0, 0, size.height, size.width)
|
|
766
|
+
: new Rect(0, 0, size.width, size.height);
|
|
765
767
|
YuvImage yuvImage = new YuvImage(bytes, parameters.getPreviewFormat(), rect.width(), rect.height(), null);
|
|
766
768
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
|
767
769
|
yuvImage.compressToJpeg(rect, quality, byteArrayOutputStream);
|
|
@@ -137,9 +137,9 @@ class Preview extends RelativeLayout implements SurfaceHolder.Callback, TextureV
|
|
|
137
137
|
Log.d(
|
|
138
138
|
TAG,
|
|
139
139
|
(info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT ? "front" : "back") +
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
" camera is oriented -" +
|
|
141
|
+
info.orientation +
|
|
142
|
+
"deg from natural"
|
|
143
143
|
);
|
|
144
144
|
Log.d(TAG, "need to rotate preview " + displayOrientation + "deg");
|
|
145
145
|
mCamera.setDisplayOrientation(displayOrientation);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor-community/camera-preview",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.4",
|
|
4
4
|
"description": "Camera preview",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -18,10 +18,9 @@
|
|
|
18
18
|
"fmt": "concurrently -g \"npm:eslint -- --fix\" \"npm:prettier -- --write\" \"npm:swiftlint -- lint --fix --format ios\"",
|
|
19
19
|
"eslint": "eslint src --ext ts",
|
|
20
20
|
"prettier": "prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java",
|
|
21
|
-
"swiftlint": "node-swiftlint",
|
|
21
|
+
"swiftlint": "node-swiftlint --config .swiftlint.yml",
|
|
22
22
|
"prepublishOnly": "npm run build",
|
|
23
|
-
"prepare": "husky install && npm run build"
|
|
24
|
-
"postinstall": "patch-package"
|
|
23
|
+
"prepare": "husky install && npm run build"
|
|
25
24
|
},
|
|
26
25
|
"author": "Ariel Hernandez Musa",
|
|
27
26
|
"license": "MIT",
|
|
@@ -37,7 +36,6 @@
|
|
|
37
36
|
"concurrently": "^9.2.1",
|
|
38
37
|
"eslint": "^9.39.2",
|
|
39
38
|
"husky": "^9.1.7",
|
|
40
|
-
"patch-package": "^8.0.1",
|
|
41
39
|
"prettier": "^3.8.1",
|
|
42
40
|
"prettier-plugin-java": "^2.8.1",
|
|
43
41
|
"pretty-quick": "^4.1.1",
|