From 4a11703b5f583d0981edd90a0751ff412b3be1f6 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 15 Jul 2020 19:34:42 -0700 Subject: [PATCH] feat: scoped camera --- .gitignore | 3 ++- src/camera.android.ts | 57 +++++++++++++++++-------------------------- src/camera.ios.ts | 49 ++++++++++++++++--------------------- src/index.d.ts | 4 +-- src/package.json | 12 ++++----- src/references.d.ts | 4 +-- 6 files changed, 56 insertions(+), 73 deletions(-) diff --git a/.gitignore b/.gitignore index 86eec67..3655e25 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ demo*/report/stats.json !demo-vue/app/app.js test-results.xml mochawesome-report/ -/**/e2e/reports/ \ No newline at end of file +/**/e2e/reports/ +package-lock.json \ No newline at end of file diff --git a/src/camera.android.ts b/src/camera.android.ts index eff6ac4..b953b5a 100644 --- a/src/camera.android.ts +++ b/src/camera.android.ts @@ -1,9 +1,4 @@ -import * as typesModule from "tns-core-modules/utils/types"; -import * as utilsModule from "tns-core-modules/utils/utils"; -import * as applicationModule from "tns-core-modules/application/application"; -import * as imageAssetModule from "tns-core-modules/image-asset/image-asset"; -import * as trace from "tns-core-modules/trace/trace"; -import * as platform from "tns-core-modules/platform/platform"; +import { Utils, Application, Device, Trace, ImageAsset } from "@nativescript/core"; import * as permissions from "nativescript-permissions"; let REQUEST_IMAGE_CAPTURE = 3453; @@ -23,20 +18,17 @@ export let takePicture = function (options?): Promise { return; } - let types: typeof typesModule = require("tns-core-modules/utils/types"); - let utils: typeof utilsModule = require("tns-core-modules/utils/utils"); - let saveToGallery = true; let reqWidth = 0; let reqHeight = 0; let shouldKeepAspectRatio = true; - let density = utils.layout.getDisplayDensity(); + let density = Utils.layout.getDisplayDensity(); if (options) { - saveToGallery = types.isNullOrUndefined(options.saveToGallery) ? saveToGallery : options.saveToGallery; + saveToGallery = Utils.isNullOrUndefined(options.saveToGallery) ? saveToGallery : options.saveToGallery; reqWidth = options.width ? options.width * density : reqWidth; reqHeight = options.height ? options.height * density : reqWidth; - shouldKeepAspectRatio = types.isNullOrUndefined(options.keepAspectRatio) ? shouldKeepAspectRatio : options.keepAspectRatio; + shouldKeepAspectRatio = Utils.isNullOrUndefined(options.keepAspectRatio) ? shouldKeepAspectRatio : options.keepAspectRatio; } if (!permissions.hasPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) { @@ -57,15 +49,15 @@ export let takePicture = function (options?): Promise { nativeFile = new java.io.File(picturePath); } else { - picturePath = utils.ad.getApplicationContext().getExternalFilesDir(null).getAbsolutePath() + "/" + "NSIMG_" + dateStamp + ".jpg"; + picturePath = Utils.android.getApplicationContext().getExternalFilesDir(null).getAbsolutePath() + "/" + "NSIMG_" + dateStamp + ".jpg"; nativeFile = new java.io.File(picturePath); } - let sdkVersionInt = parseInt(platform.device.sdkVersion); + let sdkVersionInt = parseInt(Device.sdkVersion); if (sdkVersionInt >= 21) { tempPictureUri = FileProviderPackageName.FileProvider.getUriForFile( - applicationModule.android.context, - applicationModule.android.nativeApp.getPackageName() + ".provider", nativeFile); + Application.android.context, + Application.android.nativeApp.getPackageName() + ".provider", nativeFile); } else { tempPictureUri = android.net.Uri.fromFile(nativeFile); } @@ -80,14 +72,12 @@ export let takePicture = function (options?): Promise { android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK); } - if (takePictureIntent.resolveActivity(utils.ad.getApplicationContext().getPackageManager()) != null) { - - let appModule: typeof applicationModule = require("tns-core-modules/application"); + if (takePictureIntent.resolveActivity(Utils.android.getApplicationContext().getPackageManager()) != null) { // Remove previous listeners if any - appModule.android.off("activityResult"); + Application.android.off("activityResult"); - appModule.android.on("activityResult", (args) => { + Application.android.on("activityResult", (args) => { const requestCode = args.requestCode; const resultCode = args.resultCode; @@ -96,17 +86,17 @@ export let takePicture = function (options?): Promise { try { let callback = new android.media.MediaScannerConnection.OnScanCompletedListener({ onScanCompleted: function (path, uri) { - if (trace.isEnabled()) { - trace.write(`image from path ${path} has been successfully scanned!`, trace.categories.Debug); + if (Trace.isEnabled()) { + Trace.write(`image from path ${path} has been successfully scanned!`, Trace.categories.Debug); } } }); - android.media.MediaScannerConnection.scanFile(appModule.android.context, [picturePath], null, callback); + android.media.MediaScannerConnection.scanFile(Application.android.context, [picturePath], null, callback); } catch (ex) { - if (trace.isEnabled()) { - trace.write(`An error occurred while scanning file ${picturePath}: ${ex.message}!`, - trace.categories.Debug); + if (Trace.isEnabled()) { + Trace.write(`An error occurred while scanning file ${picturePath}: ${ex.message}!`, + Trace.categories.Debug); } } } @@ -135,7 +125,7 @@ export let takePicture = function (options?): Promise { } } - let asset = new imageAssetModule.ImageAsset(picturePath); + let asset = new ImageAsset(picturePath); asset.options = { width: reqWidth, height: reqHeight, @@ -148,7 +138,7 @@ export let takePicture = function (options?): Promise { } }); - appModule.android.foregroundActivity.startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); + Application.android.foregroundActivity.startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } catch (e) { @@ -160,9 +150,8 @@ export let takePicture = function (options?): Promise { }; export let isAvailable = function () { - let utils: typeof utilsModule = require("tns-core-modules/utils/utils"); - return utils.ad + return Utils.android .getApplicationContext() .getPackageManager() .hasSystemFeature(android.content.pm.PackageManager.FEATURE_CAMERA); @@ -213,9 +202,9 @@ let rotateBitmap = function (picturePath, angle) { out.flush(); out.close(); } catch (ex) { - if (trace.isEnabled()) { - trace.write(`An error occurred while rotating file ${picturePath} (using the original one): ${ex.message}!`, - trace.categories.Debug); + if (Trace.isEnabled()) { + Trace.write(`An error occurred while rotating file ${picturePath} (using the original one): ${ex.message}!`, + Trace.categories.Debug); } } }; diff --git a/src/camera.ios.ts b/src/camera.ios.ts index c76f257..44eb6ef 100644 --- a/src/camera.ios.ts +++ b/src/camera.ios.ts @@ -1,8 +1,4 @@ -import * as types from "tns-core-modules/utils/types"; -import * as imageSourceModule from "tns-core-modules/image-source/image-source"; -import * as imageAssetModule from "tns-core-modules/image-asset/image-asset"; -import * as frameModule from "tns-core-modules/ui/frame/frame"; -import * as trace from "tns-core-modules/trace/trace"; +import { Utils, ImageSource, ImageAsset, Trace, Frame } from "@nativescript/core"; class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePickerControllerDelegate { public static ObjCProtocols = [UIImagePickerControllerDelegate]; @@ -34,7 +30,7 @@ class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePic this._height = options.height; this._saveToGallery = options.saveToGallery; this._allowsEditing = options.allowsEditing; - this._keepAspectRatio = types.isNullOrUndefined(options.keepAspectRatio) ? true : options.keepAspectRatio; + this._keepAspectRatio = Utils.isNullOrUndefined(options.keepAspectRatio) ? true : options.keepAspectRatio; } return this; } @@ -47,11 +43,10 @@ class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePic source = info.valueForKey(UIImagePickerControllerEditedImage); } if (source) { - let imageSource: typeof imageSourceModule = require("image-source"); - let imageSourceResult = imageSource.fromNativeSource(source); + let imageSourceResult = new ImageSource(source); if (this._callback) { - let imageAsset: imageAssetModule.ImageAsset; + let imageAsset: ImageAsset; if (this._saveToGallery) { PHPhotoLibrary.sharedPhotoLibrary().performChangesCompletionHandler( () => { @@ -77,17 +72,17 @@ class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePic // Display waring if the asset was created more than 1s before/after the current date. console.warn("Image asset returned was created more than 1 second ago"); } - imageAsset = new imageAssetModule.ImageAsset(asset); + imageAsset = new ImageAsset(asset); this.setImageAssetAndCallCallback(imageAsset); } } else { - trace.write("An error ocurred while saving image to gallery: " + - err, trace.categories.Error, trace.messageType.error); + Trace.write("An error ocurred while saving image to gallery: " + + err, Trace.categories.Error, Trace.messageType.error); } }); } else { - imageAsset = new imageAssetModule.ImageAsset(imageSourceResult.ios); + imageAsset = new ImageAsset(imageSourceResult.ios); this.setImageAssetAndCallCallback(imageAsset); } } @@ -97,7 +92,7 @@ class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePic listener = null; } - private setImageAssetAndCallCallback(imageAsset: imageAssetModule.ImageAsset) { + private setImageAssetAndCallCallback(imageAsset: ImageAsset) { if (this._keepAspectRatio) { let pictureWidth = imageAsset.nativeImage ? imageAsset.nativeImage.size.width : imageAsset.ios.pixelWidth; let pictureHeight = imageAsset.nativeImage ? imageAsset.nativeImage.size.height : imageAsset.ios.pixelHeight; @@ -138,9 +133,9 @@ export let takePicture = function (options): Promise { if (options) { reqWidth = options.width || 0; reqHeight = options.height || reqWidth; - keepAspectRatio = types.isNullOrUndefined(options.keepAspectRatio) ? keepAspectRatio : options.keepAspectRatio; - saveToGallery = types.isNullOrUndefined(options.saveToGallery) ? saveToGallery : options.saveToGallery; - allowsEditing = types.isNullOrUndefined(options.allowsEditing) ? allowsEditing : options.allowsEditing; + keepAspectRatio = Utils.isNullOrUndefined(options.keepAspectRatio) ? keepAspectRatio : options.keepAspectRatio; + saveToGallery = Utils.isNullOrUndefined(options.saveToGallery) ? saveToGallery : options.saveToGallery; + allowsEditing = Utils.isNullOrUndefined(options.allowsEditing) ? allowsEditing : options.allowsEditing; } let authStatus = PHPhotoLibrary.authorizationStatus(); @@ -174,9 +169,7 @@ export let takePicture = function (options): Promise { imagePickerController.modalPresentationStyle = UIModalPresentationStyle.CurrentContext; - let frame: typeof frameModule = require("tns-core-modules/ui/frame"); - - let topMostFrame = frame.topmost(); + let topMostFrame = Frame.topmost(); if (topMostFrame) { let viewController: UIViewController = topMostFrame.currentPage && topMostFrame.currentPage.ios; if (viewController) { @@ -215,8 +208,8 @@ export let requestPhotosPermissions = function () { case PHAuthorizationStatus.NotDetermined: { PHPhotoLibrary.requestAuthorization((auth) => { if (auth === PHAuthorizationStatus.Authorized) { - if (trace.isEnabled()) { - trace.write("Application can access photo library assets.", trace.categories.Debug); + if (Trace.isEnabled()) { + Trace.write("Application can access photo library assets.", Trace.categories.Debug); } resolve(); } else { @@ -226,16 +219,16 @@ export let requestPhotosPermissions = function () { break; } case PHAuthorizationStatus.Authorized: { - if (trace.isEnabled()) { - trace.write("Application can access photo library assets.", trace.categories.Debug); + if (Trace.isEnabled()) { + Trace.write("Application can access photo library assets.", Trace.categories.Debug); } resolve(); break; } case PHAuthorizationStatus.Restricted: case PHAuthorizationStatus.Denied: { - if (trace.isEnabled()) { - trace.write("Application can not access photo library assets.", trace.categories.Debug); + if (Trace.isEnabled()) { + Trace.write("Application can not access photo library assets.", Trace.categories.Debug); } reject(); break; @@ -264,8 +257,8 @@ export let requestCameraPermissions = function () { } case AVAuthorizationStatus.Restricted: case AVAuthorizationStatus.Denied: { - if (trace.isEnabled()) { - trace.write("Application can not access Camera assets.", trace.categories.Debug); + if (Trace.isEnabled()) { + Trace.write("Application can not access Camera assets.", Trace.categories.Debug); } reject(); break; diff --git a/src/index.d.ts b/src/index.d.ts index e465d5b..5371d56 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -1,10 +1,10 @@ -import imageAsset = require("tns-core-modules/image-asset/image-asset"); +import { ImageAsset } from '@nativescript/core'; /** * Take a photo using the camera. * @param options - Optional parameter for setting different camera options. */ -export function takePicture(options?: CameraOptions): Promise; +export function takePicture(options?: CameraOptions): Promise; /** * Check required permissions for using device camera. diff --git a/src/package.json b/src/package.json index 8d87d1e..66cf4f1 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { - "name": "nativescript-camera", - "version": "4.5.0", + "name": "@nativescript/camera", + "version": "5.0.0", "description": "Provides API for using device camera", "repository": { "type": "git", @@ -46,12 +46,12 @@ "nativescript-permissions": "~1.3.0" }, "devDependencies": { - "tns-core-modules": "^6.0.0", - "tns-platform-declarations": "^6.0.0", - "typescript": "~3.5.3", + "@nativescript/core": "rc", + "@nativescript/types": "rc", + "typescript": "~3.9.0", "prompt": "^1.0.0", "rimraf": "^2.6.2", - "tslint": "~5.11.0" + "tslint": "~6.1.2" }, "license": "Apache-2.0" } diff --git a/src/references.d.ts b/src/references.d.ts index 1e5e961..a698cd3 100644 --- a/src/references.d.ts +++ b/src/references.d.ts @@ -1,2 +1,2 @@ -/// -/// +/// +///