From ac0bd3d4adbb99db9306fc4def4316fe23f158a1 Mon Sep 17 00:00:00 2001 From: Emil Tabakov Date: Mon, 7 Jan 2019 12:48:50 +0200 Subject: [PATCH 01/66] chore: update community files --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 9d63a0a..061c440 100755 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright (c) 2015-2018 Progress Software Corporation + Copyright (c) 2015-2019 Progress Software Corporation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From 9e06c5fedbd25b2b440dcc00c1d8e0a8593f4cb6 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Fri, 25 Jan 2019 17:33:52 +0200 Subject: [PATCH 02/66] Add tests in demo-vue --- demo-vue/e2e/config/appium.capabilities.json | 59 ++++++++++++ demo-vue/e2e/config/mocha.opts | 3 + demo-vue/e2e/setup.ts | 9 ++ demo-vue/e2e/test.e2e.ts | 98 ++++++++++++++++++++ demo-vue/e2e/tsconfig.json | 22 +++++ demo-vue/package.json | 60 ++++++------ 6 files changed, 225 insertions(+), 26 deletions(-) create mode 100644 demo-vue/e2e/config/appium.capabilities.json create mode 100644 demo-vue/e2e/config/mocha.opts create mode 100644 demo-vue/e2e/setup.ts create mode 100644 demo-vue/e2e/test.e2e.ts create mode 100644 demo-vue/e2e/tsconfig.json diff --git a/demo-vue/e2e/config/appium.capabilities.json b/demo-vue/e2e/config/appium.capabilities.json new file mode 100644 index 0000000..0579990 --- /dev/null +++ b/demo-vue/e2e/config/appium.capabilities.json @@ -0,0 +1,59 @@ +{ + "android23.local": { + "platformName": "Android", + "platformVersion": "6.0", + "deviceName": "Emulator_Api23_Default", + "avd": "Emulator_Api23_Default", + "noReset": true + }, + "android23": { + "platformName": "Android", + "platformVersion": "6.0", + "deviceName": "Android Emulator", + "appium-version": "1.7.1", + "noReset": true + }, + "android25": { + "platformName": "Android", + "platformVersion": "7.1", + "deviceName": "Android GoogleAPI Emulator", + "appium-version": "1.7.1", + "noReset": true + }, + "android24": { + "platformName": "Android", + "platformVersion": "7.0", + "deviceName": "Android_GoogleAPI_Emulator", + "appium-version": "1.9.1", + "noReset": true + }, + "sim11iPhone6": { + "platformName": "iOS", + "platformVersion": "11.0", + "deviceName": "iPhone 6", + "appium-version": "1.7.1", + "app": "" + }, + "sim103iPhone6": { + "browserName": "", + "appium-version": "1.7.1", + "platformName": "iOS", + "platformVersion": "10.3", + "deviceName": "iPhone 6", + "app": "" + }, + "sim10iPhone6": { + "platformName": "iOS", + "platformVersion": "10.0", + "deviceName": "iPhone 6", + "appium-version": "1.7.1", + "app": "" + }, + "sim12iPhoneX":{ + "platformName": "iOS", + "platformVersion": "12.1", + "deviceName": "iPhone X", + "appium-version": "1.9.1", + "app": "" + } +} \ No newline at end of file diff --git a/demo-vue/e2e/config/mocha.opts b/demo-vue/e2e/config/mocha.opts new file mode 100644 index 0000000..308e22f --- /dev/null +++ b/demo-vue/e2e/config/mocha.opts @@ -0,0 +1,3 @@ +--timeout 800000 +--recursive e2e +--exit \ No newline at end of file diff --git a/demo-vue/e2e/setup.ts b/demo-vue/e2e/setup.ts new file mode 100644 index 0000000..8b26e66 --- /dev/null +++ b/demo-vue/e2e/setup.ts @@ -0,0 +1,9 @@ +import { startServer, stopServer } from "nativescript-dev-appium"; + +before("start server", async () => { + await startServer(); +}); + +after("stop server", async () => { + await stopServer(); +}); diff --git a/demo-vue/e2e/test.e2e.ts b/demo-vue/e2e/test.e2e.ts new file mode 100644 index 0000000..05ac069 --- /dev/null +++ b/demo-vue/e2e/test.e2e.ts @@ -0,0 +1,98 @@ +import { AppiumDriver, createDriver, SearchOptions } from "nativescript-dev-appium"; +import { isSauceLab, runType } from "nativescript-dev-appium/lib/parser"; +import { expect } from "chai"; + +const isSauceRun = isSauceLab; +const isAndroid: boolean = runType.includes("android"); + +describe("Imagepicker", async function () { + const imagesFolderName = "Images"; + const imagesFolderNameIos = "Camera Roll"; + const doneButtonText = "Done"; + let driver: AppiumDriver; + + before(async () => { + driver = await createDriver(); + driver.defaultWaitTime = 10000; + }); + + after(async () => { + if (isSauceRun) { + driver.sessionId().then(function (sessionId) { + console.log("Report: https://saucelabs.com/beta/tests/" + sessionId); + }); + } + await driver.quit(); + console.log("Driver quits!"); + }); + + it("should pick one image", async function () { + // await driver.driver.resetApp(); + const pickSingleButtonText = "Pick Single"; + let confirmButtonText = isAndroid ? "Allow" : "OK"; + + let pickSingleButton = await driver.findElementByText(pickSingleButtonText, SearchOptions.contains); + await pickSingleButton.click(); + const confirmButton = await driver.findElementByText(confirmButtonText); + await confirmButton.click(); + + if (isAndroid) { + const imagesFolderXpath = await driver.elementHelper.getXPathByText(imagesFolderName, SearchOptions.contains); + await driver.driver.sleep(3000); + let imagesFolder = await driver.driver.elementByXPathIfExists(imagesFolderXpath, 10000); + + if (isSauceRun && imagesFolder) { + await imagesFolder.click(); + imagesFolder = await driver.findElementByClassName(driver.locators.image); + await imagesFolder.click(); + } + } else { + const cameraRollFolder = await driver.findElementByText(imagesFolderNameIos); + await cameraRollFolder.click(); + } + + const imageLocator = isAndroid ? "android.widget.ImageView" : "XCUIElementTypeCell"; + const image = await driver.findElementByClassName(imageLocator); + await image.tap(); + + pickSingleButton = await driver.findElementByText(pickSingleButtonText, SearchOptions.contains); + expect(pickSingleButton).to.exist; + + const result = await driver.findElementByClassName(driver.locators.image); + expect(result).to.exist; + }); + + it("should pick multiple images", async function () { + let openImagesButtonText = isAndroid ? "Open" : doneButtonText; + let uploadPicVerification = "image 0"; + let uploadPicVerification2 = "image 1"; + + const pickMultipleButtonText = "Pick Multiple"; + const pickMultipleButton = await driver.findElementByText(pickMultipleButtonText, SearchOptions.contains); + await pickMultipleButton.click(); + + + if (!isAndroid) { + const cameraRollFolder = await driver.findElementByText(imagesFolderNameIos); + await cameraRollFolder.click(); + } + + + if (isAndroid) { + const allImages = await driver.findElementsByClassName("android.widget.ImageView"); + await allImages[5].hold(); // second Image + await allImages[2].click(); // first image + } else { + const allImages = await driver.findElementsByClassName("XCUIElementTypeCell"); + await allImages[0].click(); // first image + await allImages[1].click(); // second image + } + + const openImagesButton = await driver.findElementByText(openImagesButtonText, SearchOptions.contains); + await openImagesButton.click(); + const img = await driver.findElementByText(uploadPicVerification, SearchOptions.contains); + expect(img).to.exist; + const img1 = await driver.findElementByText(uploadPicVerification2, SearchOptions.contains); + expect(img1).to.exist; + }); +}); diff --git a/demo-vue/e2e/tsconfig.json b/demo-vue/e2e/tsconfig.json new file mode 100644 index 0000000..bc25d12 --- /dev/null +++ b/demo-vue/e2e/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "importHelpers": false, + "sourceMap":true, + "types": [ + "node", + "mocha", + "chai" + ], + "lib": [ + "dom", + "es2015.core", + "es2015.iterable", + "es2016.array.include", + "es2015" + ] + } +} \ No newline at end of file diff --git a/demo-vue/package.json b/demo-vue/package.json index c59477e..1b4d8e8 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -1,29 +1,37 @@ { - "nativescript": { - "id": "org.nativescript.demovue", - "tns-android": { - "version": "5.1.0" - }, - "tns-ios": { - "version": "5.1.0" - } + "nativescript": { + "id": "org.nativescript.demovue", + "tns-android": { + "version": "5.1.0" }, - "dependencies": { - "nativescript-imagepicker": "../src", - "nativescript-theme-core": "~1.0.4", - "nativescript-vue": "~2.0.0", - "tns-core-modules": "^5.1.0" - }, - "devDependencies": { - "@babel/core": "~7.1.0", - "@babel/preset-env": "~7.1.0", - "babel-loader": "~8.0.0", - "nativescript-dev-webpack": "~0.18.0", - "nativescript-vue-template-compiler": "~2.0.0", - "node-sass": "~4.9.0", - "vue-loader": "~15.4.0" - }, - "scripts": { - "build.plugin": "cd ../src && npm run build" + "tns-ios": { + "version": "5.1.0" } -} \ No newline at end of file + }, + "dependencies": { + "nativescript-imagepicker": "../src", + "nativescript-theme-core": "~1.0.4", + "nativescript-vue": "~2.0.0", + "tns-core-modules": "^5.1.0" + }, + "devDependencies": { + "@types/chai": "^4.1.4", + "@types/mocha": "^5.2.5", + "@types/node": "10.5.7", + "@babel/core": "~7.1.0", + "@babel/preset-env": "~7.1.0", + "babel-loader": "~8.0.0", + "chai": "~4.1.2", + "chai-as-promised": "~7.1.1", + "mocha": "~5.2.0", + "nativescript-dev-appium": "^4.0.9", + "nativescript-dev-webpack": "~0.18.0", + "nativescript-vue-template-compiler": "~2.0.0", + "node-sass": "~4.9.0", + "vue-loader": "~15.4.0" + }, + "scripts": { + "build.plugin": "cd ../src && npm run build", + "e2e": "tsc -p e2e && mocha --opts ./e2e/config/mocha.opts" + } +} From 66b14ac26f4cea64486f42ab3fbfaba8566b48df Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Fri, 25 Jan 2019 17:46:52 +0200 Subject: [PATCH 03/66] Add CI configuration for TravisCI --- .travis.yml | 175 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 134 insertions(+), 41 deletions(-) diff --git a/.travis.yml b/.travis.yml index 53cd73a..7c5d3ca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,15 @@ env: global: - - ANDROID_PACKAGE='app-debug.apk' - - ANDROID_PACKAGE_FOLDER=$TRAVIS_BUILD_DIR/demo/platforms/android/app/build/outputs/apk/debug - - ANDROID_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER/$ANDROID_PACKAGE?overwrite=true" - - IOS_PACKAGE='imagepickerdemo.zip' - - IOS_PACKAGE_FOLDER=$TRAVIS_BUILD_DIR/demo/platforms/ios/build/emulator - - IOS_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER/$IOS_PACKAGE?overwrite=true" + - ANDROID_PACKAGE_JS='imagepicker-debug-js.apk' + - ANDROID_PACKAGE_VUE='imagepicker-debug-vue.apk' + - ANDROID_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/platforms/android/app/build/outputs/apk/debug + - ANDROID_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/platforms/android/app/build/outputs/apk/debug + - ANDROID_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER" + - IOS_PACKAGE_JS='imagepicker-demo-js.zip' + - IOS_PACKAGE_VUE='imagepicker-demo-vue.zip' + - IOS_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/platforms/ios/build/emulator + - IOS_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/platforms/ios/build/emulator + - IOS_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER" git: depth: 1 @@ -13,6 +17,7 @@ git: branches: only: - master + matrix: include: - stage: "Lint" @@ -23,75 +28,163 @@ matrix: - stage: "WebPack and Build" os: osx env: - - WebPackiOS="12.0" + - WebpackiOS="12.0" + - Type="VanillaJS" + osx_image: xcode10.0 + language: node_js + node_js: "8" + jdk: oraclejdk8 + before_script: pod repo update + script: + - cd src && npm run build.iosOnly + - cd ../demo && npm i && tns build ios --bundle --env.uglify + - os: osx + env: + - WebpackiOS="12.0" + - Type="VueJS" osx_image: xcode10.0 - language: node_js + language: node_js + node_js: "8" + jdk: oraclejdk8 + before_script: pod repo update + script: + - cd src && npm run build.iosOnly + - cd ../demo-vue && npm i && tns build ios --bundle --env.uglify + - cd $IOS_PACKAGE_FOLDER_VUE && zip -r $IOS_PACKAGE_VUE demovue.app + - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_VUE?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_VUE/$IOS_PACKAGE_VUE" + - os: osx + env: + - WebpackiOS="12.0" + - Type="Angular" + osx_image: xcode10.0 + language: node_js node_js: "8" jdk: oraclejdk8 + before_script: pod repo update script: - - cd demo && npm run build.plugin && npm i && tns build ios --bundle --env.uglify - - cd ../publish - - sh pack.sh - - cp package/*.tgz ../demo-angular/package.tgz - - cd ../demo-angular - - sed -i -e 's/\"..\/src\"/"package.tgz"/g' package.json - - npm i - - tns build ios --bundle --env.uglify --env.aot + - cd src && npm run build.iosOnly && npm pack + - cd ../demo-angular && tns plugin add ../src/*.tgz + - npm i && tns build ios --bundle --env.uglify --env.aot - language: android os: linux env: - - WebPackAndroid="28" + - WebpackAndroid="28" + - Type="VanillaJS" + jdk: oraclejdk8 + before_install: nvm install 8 + script: + - cd src && npm run build + - cd ../demo && npm i && tns build android --bundle --env.uglify --env.snapshot + - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_JS?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_JS/app-debug.apk" + - language: android + os: linux + env: + - WebpackAndroid="28" + - Type="VueJS" + jdk: oraclejdk8 + before_install: nvm install 8 + script: + - cd src && npm run build + - cd ../demo-vue && npm i && tns build android --bundle --env.uglify + - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_VUE?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_VUE/app-debug.apk" + - language: android + os: linux + env: + - WebpackAndroid="28" + - Type="Angular" + jdk: oraclejdk8 + before_install: nvm install 8 + script: + - cd src && npm run build + - cd ../publish && sh pack.sh + - cd ../demo-angular && tns plugin add ../publish/package/*.tgz + - npm i && tns build android --bundle --env.uglify --env.snapshot --env.aot + - language: android + env: + - BuildAndroid="28" + - Type="VanillaJS" + os: linux jdk: oraclejdk8 before_install: nvm install 8.11.4 script: - - cd demo && npm run build.plugin && npm i && tns build android --bundle --env.uglify --env.snapshot - - cd ../publish - - sh pack.sh - - cp package/*.tgz ../demo-angular/package.tgz - - cd ../demo-angular - - sed -i -e 's/\"..\/src\"/"package.tgz"/g' package.json - - npm i - - tns build android --bundle --env.uglify --env.aot + - cd demo && npm run ci.android.build - language: android - env: + env: - BuildAndroid="28" + - Type="Angular" os: linux jdk: oraclejdk8 before_install: nvm install 8.11.4 script: - - cd demo && npm run ci.android.build && cd ../demo-angular && npm run ci.android.build - - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE --data-binary @$ANDROID_PACKAGE_FOLDER/$ANDROID_PACKAGE" + - cd demo-angular && npm run ci.android.build - os: osx - env: + env: - BuildiOS="12.0" - Xcode="10.0" + - Type="VanillaJS" osx_image: xcode10.0 - language: node_js + language: node_js node_js: "8" jdk: oraclejdk8 + before_script: pod repo update script: - - cd demo && npm run ci.ios.build && cd ../demo-angular && npm run ci.ios.build - - cd $IOS_PACKAGE_FOLDER && zip -r $IOS_PACKAGE demo.app - - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE --data-binary @$IOS_PACKAGE_FOLDER/$IOS_PACKAGE" + - cd demo && npm run ci.ios.build + - cd $IOS_PACKAGE_FOLDER_JS && zip -r $IOS_PACKAGE_JS demo.app + - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_JS?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_JS/$IOS_PACKAGE_JS" + - os: osx + env: + - BuildiOS="12.0" + - Xcode="10.0" + - Type="Angular" + osx_image: xcode10.0 + language: node_js + node_js: "8" + jdk: oraclejdk8 + before_script: pod repo update + script: + - cd demo-angular && npm run ci.ios.build - stage: "UI Tests" - env: - - AndroidEmulator="23" + env: + - Android="24" + - Type="VanillaJS" language: node_js os: linux node_js: "8" script: - npm i -g appium - cd demo && npm i - - travis_retry npm run e2e -- --runType android23 --sauceLab --appPath $ANDROID_PACKAGE + - travis_wait travis_retry npm run e2e -- --runType android23 --sauceLab --appPath $ANDROID_PACKAGE_JS + - os: linux + env: + - Android="24" + - Type="VueJS" + language: node_js + os: linux + node_js: "8" + script: + - npm i -g appium + - cd demo-vue && npm i + - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_VUE - os: linux - env: - - iOS="12" - language: node_js + env: + - iOS="12.0" + - Type="VanillaJS" + language: node_js node_js: "8" - script: + script: - npm i -g appium - cd demo && npm i - - travis_wait travis_retry npm run e2e -- --runType sim11iPhone6 --sauceLab --appPath $IOS_PACKAGE + - travis_wait travis_retry npm run e2e -- --runType sim11iPhone6 --sauceLab --appPath $IOS_PACKAGE_JS + - os: linux + env: + - iOS="12.0" + - Type="VueJS" + language: node_js + node_js: "8" + script: + - npm i -g appium + - cd demo-vue && npm i + - travis_wait travis_retry npm run e2e -- --runType sim12iPhoneX --sauceLab --appPath $IOS_PACKAGE_VUE android: components: From ef0288433479e3ae6b93d82dd0017d5bab222a06 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Fri, 25 Jan 2019 18:20:51 +0200 Subject: [PATCH 04/66] Fix: script for plugin build in webpack stage --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7c5d3ca..1251805 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,7 +36,7 @@ matrix: jdk: oraclejdk8 before_script: pod repo update script: - - cd src && npm run build.iosOnly + - cd src && npm run build - cd ../demo && npm i && tns build ios --bundle --env.uglify - os: osx env: @@ -48,7 +48,7 @@ matrix: jdk: oraclejdk8 before_script: pod repo update script: - - cd src && npm run build.iosOnly + - cd src && npm run build - cd ../demo-vue && npm i && tns build ios --bundle --env.uglify - cd $IOS_PACKAGE_FOLDER_VUE && zip -r $IOS_PACKAGE_VUE demovue.app - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_VUE?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_VUE/$IOS_PACKAGE_VUE" @@ -62,7 +62,7 @@ matrix: jdk: oraclejdk8 before_script: pod repo update script: - - cd src && npm run build.iosOnly && npm pack + - cd src && npm run build && npm pack - cd ../demo-angular && tns plugin add ../src/*.tgz - npm i && tns build ios --bundle --env.uglify --env.aot - language: android From 3454e56a4aeaca629086ea39e88e8b25d371a186 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Fri, 25 Jan 2019 19:08:29 +0200 Subject: [PATCH 05/66] Add dev-typescript as dev dependency on demo-vue --- demo-vue/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/demo-vue/package.json b/demo-vue/package.json index 1b4d8e8..284d5df 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -26,6 +26,7 @@ "mocha": "~5.2.0", "nativescript-dev-appium": "^4.0.9", "nativescript-dev-webpack": "~0.18.0", + "nativescript-dev-typescript": "~0.7.0", "nativescript-vue-template-compiler": "~2.0.0", "node-sass": "~4.9.0", "vue-loader": "~15.4.0" From d5be7783110002bdb4cf70c8f70c5eb8bb34b915 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Fri, 25 Jan 2019 19:41:24 +0200 Subject: [PATCH 06/66] Fix: capabilities for demo-vue --- demo-vue/e2e/config/appium.capabilities.json | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/demo-vue/e2e/config/appium.capabilities.json b/demo-vue/e2e/config/appium.capabilities.json index 0579990..d425a34 100644 --- a/demo-vue/e2e/config/appium.capabilities.json +++ b/demo-vue/e2e/config/appium.capabilities.json @@ -23,9 +23,14 @@ "android24": { "platformName": "Android", "platformVersion": "7.0", - "deviceName": "Android_GoogleAPI_Emulator", + "deviceName": "Android GoogleAPI Emulator", "appium-version": "1.9.1", - "noReset": true + "noReset": true, + "lt": 60000, + "newCommandTimeout": 720, + "fullReset": false, + "idleTimeout": 120, + "automationName": "Appium" }, "sim11iPhone6": { "platformName": "iOS", @@ -51,9 +56,15 @@ }, "sim12iPhoneX":{ "platformName": "iOS", - "platformVersion": "12.1", + "platformVersion": "12.0", "deviceName": "iPhone X", "appium-version": "1.9.1", - "app": "" + "app": "", + "noReset": true, + "fullReset": false, + "density": 3, + "offsetPixels": 87, + "idleTimeout": 120, + "automationName": "Appium" } } \ No newline at end of file From daace6cfc8a63397f77392229714643cfcd3de6b Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Mon, 28 Jan 2019 12:19:09 +0200 Subject: [PATCH 07/66] fix: demo-vue android api level in capabilities --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1251805..6df6bd2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -164,7 +164,7 @@ matrix: script: - npm i -g appium - cd demo-vue && npm i - - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_VUE + - travis_wait travis_retry npm run e2e -- --runType android23 --sauceLab --appPath $ANDROID_PACKAGE_VUE - os: linux env: - iOS="12.0" From 2f65a01287b321127d8c694514bdd84f8a9400bd Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Mon, 28 Jan 2019 15:18:09 +0200 Subject: [PATCH 08/66] Fix for wrong default 'mode' on iOS --- src/imagepicker.ios.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/imagepicker.ios.ts b/src/imagepicker.ios.ts index 3af82d2..eb86b71 100644 --- a/src/imagepicker.ios.ts +++ b/src/imagepicker.ios.ts @@ -49,7 +49,7 @@ export class ImagePicker extends data_observable.Observable { imagePickerController.assetCollectionSubtypes = defaultAssetCollectionSubtypes; imagePickerController.mediaType = options.mediaType ? options.mediaType.valueOf() : QBImagePickerMediaType.Any; imagePickerController.delegate = this._imagePickerControllerDelegate; - imagePickerController.allowsMultipleSelection = options.mode === 'multiple'; + imagePickerController.allowsMultipleSelection = options.mode !== 'single'; imagePickerController.minimumNumberOfSelection = options.minimumNumberOfSelection || 0; imagePickerController.maximumNumberOfSelection = options.maximumNumberOfSelection || 0; imagePickerController.showsNumberOfSelectedAssets = options.showsNumberOfSelectedAssets || true; From 219e2c70e94d4e272c47fbe2e84350e0322614a6 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Wed, 30 Jan 2019 17:08:32 +0200 Subject: [PATCH 09/66] Update app packages output directory --- .travis.yml | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6df6bd2..5f0fb51 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,13 +2,13 @@ env: global: - ANDROID_PACKAGE_JS='imagepicker-debug-js.apk' - ANDROID_PACKAGE_VUE='imagepicker-debug-vue.apk' - - ANDROID_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/platforms/android/app/build/outputs/apk/debug - - ANDROID_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/platforms/android/app/build/outputs/apk/debug + - ANDROID_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/outputs + - ANDROID_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/outputs - ANDROID_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER" - IOS_PACKAGE_JS='imagepicker-demo-js.zip' - IOS_PACKAGE_VUE='imagepicker-demo-vue.zip' - - IOS_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/platforms/ios/build/emulator - - IOS_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/platforms/ios/build/emulator + - IOS_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/outputs + - IOS_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/outputs - IOS_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER" git: @@ -37,7 +37,9 @@ matrix: before_script: pod repo update script: - cd src && npm run build - - cd ../demo && npm i && tns build ios --bundle --env.uglify + - cd ../demo && npm i && tns build ios --bundle --env.uglify --copy-to "./outputs/demo.app" + - cd $IOS_PACKAGE_FOLDER_JS && zip -r $IOS_PACKAGE_JS demo.app + - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_JS?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_JS/$IOS_PACKAGE_JS" - os: osx env: - WebpackiOS="12.0" @@ -49,7 +51,7 @@ matrix: before_script: pod repo update script: - cd src && npm run build - - cd ../demo-vue && npm i && tns build ios --bundle --env.uglify + - cd ../demo-vue && npm i && tns build ios --bundle --env.uglify --copy-to "./outputs/demovue.app" - cd $IOS_PACKAGE_FOLDER_VUE && zip -r $IOS_PACKAGE_VUE demovue.app - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_VUE?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_VUE/$IOS_PACKAGE_VUE" - os: osx @@ -74,7 +76,7 @@ matrix: before_install: nvm install 8 script: - cd src && npm run build - - cd ../demo && npm i && tns build android --bundle --env.uglify --env.snapshot + - cd ../demo && npm i && tns build android --bundle --env.uglify --env.snapshot --copy-to "./outputs/app-debug.apk" - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_JS?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_JS/app-debug.apk" - language: android os: linux @@ -85,7 +87,7 @@ matrix: before_install: nvm install 8 script: - cd src && npm run build - - cd ../demo-vue && npm i && tns build android --bundle --env.uglify + - cd ../demo-vue && npm i && tns build android --bundle --env.uglify --copy-to "./outputs/app-debug.apk" - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_VUE?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_VUE/app-debug.apk" - language: android os: linux @@ -128,9 +130,8 @@ matrix: jdk: oraclejdk8 before_script: pod repo update script: - - cd demo && npm run ci.ios.build - - cd $IOS_PACKAGE_FOLDER_JS && zip -r $IOS_PACKAGE_JS demo.app - - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_JS?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_JS/$IOS_PACKAGE_JS" + - cd src && npm run build + - cd ../demo && tns build ios --bundle --env.uglify - os: osx env: - BuildiOS="12.0" From 3aaa5b1daf9ec0bb2369a2c68dfedee890ef5ad8 Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Thu, 14 Feb 2019 06:51:19 +0100 Subject: [PATCH 10/66] chore: update dependencies for 5.2.0 --- demo-angular/package.json | 30 +++++++++++++++--------------- demo-vue/package.json | 10 +++++----- demo/package.json | 12 ++++++------ src/package.json | 4 ++-- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/demo-angular/package.json b/demo-angular/package.json index 243be7a..186b977 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -2,28 +2,28 @@ "nativescript": { "id": "org.nativescript.imagepickerdemoangular", "tns-ios": { - "version": "5.1.0" + "version": "5.2.0" }, "tns-android": { - "version": "5.1.0" + "version": "5.2.0" } }, "dependencies": { - "@angular/common": "~7.1.0", - "@angular/compiler": "~7.1.0", - "@angular/core": "~7.1.0", - "@angular/forms": "~7.1.0", - "@angular/http": "~7.1.0", - "@angular/platform-browser": "~7.1.0", - "@angular/platform-browser-dynamic": "~7.1.0", - "@angular/router": "~7.1.0", - "nativescript-angular": "~7.1.0", + "@angular/common": "~7.2.0", + "@angular/compiler": "~7.2.0", + "@angular/core": "~7.2.0", + "@angular/forms": "~7.2.0", + "@angular/http": "~7.2.0", + "@angular/platform-browser": "~7.2.0", + "@angular/platform-browser-dynamic": "~7.2.0", + "@angular/router": "~7.2.0", + "nativescript-angular": "~7.2.1", "nativescript-imagepicker": "../src", "nativescript-theme-core": "^1.0.4", "nativescript-unit-test-runner": "^0.3.4", "reflect-metadata": "~0.1.8", "rxjs": "^6.3.3", - "tns-core-modules": "^5.1.0" + "tns-core-modules": "^5.2.0" }, "devDependencies": { "jasmine-core": "^2.5.2", @@ -31,9 +31,9 @@ "karma-jasmine": "^1.0.2", "karma-nativescript-launcher": "^0.4.0", "nativescript-css-loader": "~0.26.0", - "nativescript-dev-typescript": "^0.7.0", - "nativescript-dev-webpack": "~0.18.0", - "tns-platform-declarations": "^5.1.0", + "nativescript-dev-typescript": "^0.8.0", + "nativescript-dev-webpack": "~0.20.0", + "tns-platform-declarations": "^5.2.0", "tslint": "~5.11.0", "zone.js": "^0.8.4" }, diff --git a/demo-vue/package.json b/demo-vue/package.json index 284d5df..dbe2c39 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,17 +2,17 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "5.1.0" + "version": "5.2.0" }, "tns-ios": { - "version": "5.1.0" + "version": "5.2.0" } }, "dependencies": { "nativescript-imagepicker": "../src", "nativescript-theme-core": "~1.0.4", "nativescript-vue": "~2.0.0", - "tns-core-modules": "^5.1.0" + "tns-core-modules": "^5.2.0" }, "devDependencies": { "@types/chai": "^4.1.4", @@ -25,8 +25,8 @@ "chai-as-promised": "~7.1.1", "mocha": "~5.2.0", "nativescript-dev-appium": "^4.0.9", - "nativescript-dev-webpack": "~0.18.0", - "nativescript-dev-typescript": "~0.7.0", + "nativescript-dev-webpack": "~0.20.0", + "nativescript-dev-typescript": "~0.8.0", "nativescript-vue-template-compiler": "~2.0.0", "node-sass": "~4.9.0", "vue-loader": "~15.4.0" diff --git a/demo/package.json b/demo/package.json index 41c25ba..195b826 100644 --- a/demo/package.json +++ b/demo/package.json @@ -2,17 +2,17 @@ "nativescript": { "id": "org.nativescript.imagepickerdemo", "tns-android": { - "version": "5.1.0" + "version": "5.2.0" }, "tns-ios": { - "version": "5.1.0" + "version": "5.2.0" } }, "dependencies": { "nativescript-imagepicker": "../src", "nativescript-theme-core": "^1.0.4", "nativescript-unit-test-runner": "^0.3.4", - "tns-core-modules": "^5.1.0" + "tns-core-modules": "^5.2.0" }, "devDependencies": { "@types/chai": "^4.1.4", @@ -27,9 +27,9 @@ "mocha": "~5.2.0", "nativescript-css-loader": "~0.26.0", "nativescript-dev-appium": "4.0.9", - "nativescript-dev-typescript": "~0.7.0", - "nativescript-dev-webpack": "~0.18.0", - "tns-platform-declarations": "^5.1.0", + "nativescript-dev-typescript": "~0.8.0", + "nativescript-dev-webpack": "~0.20.0", + "tns-platform-declarations": "^5.2.0", "tslint": "~5.11.0" }, "scripts": { diff --git a/src/package.json b/src/package.json index aa10970..a43a097 100644 --- a/src/package.json +++ b/src/package.json @@ -46,8 +46,8 @@ "homepage": "https://github.com/NativeScript/nativescript-imagepicker", "readmeFilename": "README.md", "devDependencies": { - "tns-core-modules": "^5.1.0", - "tns-platform-declarations": "^5.1.0", + "tns-core-modules": "^5.2.0", + "tns-platform-declarations": "^5.2.0", "typescript": "~3.1.6", "tslint": "~5.11.0" }, From c5e9b9835ff1b8b099535814af27e7104b32bafc Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Fri, 15 Feb 2019 10:11:31 +0200 Subject: [PATCH 11/66] chore: bump version to 6.1.0 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index a43a097..327b3d1 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-imagepicker", - "version": "6.0.6", + "version": "6.1.0", "description": "A plugin for the NativeScript framework implementing multiple image picker", "repository": { "type": "git", From 8d18a2a226ba885c30afce2448ea49c94c08a952 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Tue, 19 Feb 2019 15:28:15 +0200 Subject: [PATCH 12/66] Update dev-appium and reports --- demo-vue/e2e/config/mocha.opts | 2 ++ demo-vue/e2e/test.e2e.ts | 22 +++++++++++++++++++++- demo-vue/package.json | 5 ++++- demo/e2e/config/mocha.opts | 2 ++ demo/e2e/test.e2e.ts | 21 +++++++++++++++++++++ demo/package.json | 5 ++++- 6 files changed, 54 insertions(+), 3 deletions(-) diff --git a/demo-vue/e2e/config/mocha.opts b/demo-vue/e2e/config/mocha.opts index 308e22f..d7d26a6 100644 --- a/demo-vue/e2e/config/mocha.opts +++ b/demo-vue/e2e/config/mocha.opts @@ -1,3 +1,5 @@ --timeout 800000 --recursive e2e +--reporter mocha-multi +--reporter-options mochawesome=-,mocha-junit-reporter=test-results.xml --exit \ No newline at end of file diff --git a/demo-vue/e2e/test.e2e.ts b/demo-vue/e2e/test.e2e.ts index 05ac069..b57e8a2 100644 --- a/demo-vue/e2e/test.e2e.ts +++ b/demo-vue/e2e/test.e2e.ts @@ -1,7 +1,9 @@ import { AppiumDriver, createDriver, SearchOptions } from "nativescript-dev-appium"; import { isSauceLab, runType } from "nativescript-dev-appium/lib/parser"; import { expect } from "chai"; - +const fs = require('fs'); +const addContext = require('mochawesome/addContext'); +const rimraf = require('rimraf'); const isSauceRun = isSauceLab; const isAndroid: boolean = runType.includes("android"); @@ -14,6 +16,11 @@ describe("Imagepicker", async function () { before(async () => { driver = await createDriver(); driver.defaultWaitTime = 10000; + let dir = "mochawesome-report"; + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir); + } + rimraf('mochawesome-report/*', function () { }); }); after(async () => { @@ -26,6 +33,19 @@ describe("Imagepicker", async function () { console.log("Driver quits!"); }); + afterEach(async function () { + if (this.currentTest.state && this.currentTest.state === "failed") { + let png = await driver.logScreenshot(this.currentTest.title); + fs.copyFile(png, './mochawesome-report/' + this.currentTest.title + '.png', function (err) { + if (err) { + throw err; + } + console.log('Screenshot saved.'); + }); + addContext(this, './' + this.currentTest.title + '.png'); + } + }); + it("should pick one image", async function () { // await driver.driver.resetApp(); const pickSingleButtonText = "Pick Single"; diff --git a/demo-vue/package.json b/demo-vue/package.json index dbe2c39..7b4c942 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -23,7 +23,10 @@ "babel-loader": "~8.0.0", "chai": "~4.1.2", "chai-as-promised": "~7.1.1", - "mocha": "~5.2.0", + "mocha": "^3.3.0", + "mocha-junit-reporter": "^1.18.0", + "mocha-multi": "^1.0.1", + "mochawesome": "^3.1.1", "nativescript-dev-appium": "^4.0.9", "nativescript-dev-webpack": "~0.20.0", "nativescript-dev-typescript": "~0.8.0", diff --git a/demo/e2e/config/mocha.opts b/demo/e2e/config/mocha.opts index 308e22f..d7d26a6 100644 --- a/demo/e2e/config/mocha.opts +++ b/demo/e2e/config/mocha.opts @@ -1,3 +1,5 @@ --timeout 800000 --recursive e2e +--reporter mocha-multi +--reporter-options mochawesome=-,mocha-junit-reporter=test-results.xml --exit \ No newline at end of file diff --git a/demo/e2e/test.e2e.ts b/demo/e2e/test.e2e.ts index 9419a34..a43b27c 100644 --- a/demo/e2e/test.e2e.ts +++ b/demo/e2e/test.e2e.ts @@ -1,6 +1,9 @@ import { AppiumDriver, createDriver, SearchOptions } from "nativescript-dev-appium"; import { isSauceLab, runType } from "nativescript-dev-appium/lib/parser"; import { expect } from "chai"; +const fs = require('fs'); +const addContext = require('mochawesome/addContext'); +const rimraf = require('rimraf'); const isSauceRun = isSauceLab; const isAndroid: boolean = runType.includes("android"); @@ -14,6 +17,11 @@ describe("Imagepicker", async function () { before(async () => { driver = await createDriver(); driver.defaultWaitTime = 10000; + let dir = "mochawesome-report"; + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir); + } + rimraf('mochawesome-report/*', function () { }); }); after(async () => { @@ -26,6 +34,19 @@ describe("Imagepicker", async function () { console.log("Driver quits!"); }); + afterEach(async function () { + if (this.currentTest.state && this.currentTest.state === "failed") { + let png = await driver.logScreenshot(this.currentTest.title); + fs.copyFile(png, './mochawesome-report/' + this.currentTest.title + '.png', function (err) { + if (err) { + throw err; + } + console.log('Screenshot saved.'); + }); + addContext(this, './' + this.currentTest.title + '.png'); + } + }); + it("should pick one image", async function () { // await driver.driver.resetApp(); const pickSingleButtonText = "Pick Single"; diff --git a/demo/package.json b/demo/package.json index 195b826..49a1b6b 100644 --- a/demo/package.json +++ b/demo/package.json @@ -24,7 +24,10 @@ "karma": "^2.0.5", "karma-jasmine": "^1.1.2", "karma-nativescript-launcher": "^0.4.0", - "mocha": "~5.2.0", + "mocha": "^3.3.0", + "mocha-junit-reporter": "^1.18.0", + "mocha-multi": "^1.0.1", + "mochawesome": "^3.1.1", "nativescript-css-loader": "~0.26.0", "nativescript-dev-appium": "4.0.9", "nativescript-dev-typescript": "~0.8.0", From cdd55747ceb18b553e3217e0bc7dc224ba947f2c Mon Sep 17 00:00:00 2001 From: tbozhikov Date: Tue, 26 Feb 2019 16:15:21 +0200 Subject: [PATCH 13/66] fix: set ios delegate as late as possible, so that the native UI always hooks to its methods correctly --- src/imagepicker.ios.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/imagepicker.ios.ts b/src/imagepicker.ios.ts index eb86b71..64d3145 100644 --- a/src/imagepicker.ios.ts +++ b/src/imagepicker.ios.ts @@ -43,12 +43,11 @@ export class ImagePicker extends data_observable.Observable { super(); this._hostView = hostView; - this._imagePickerControllerDelegate = new ImagePickerControllerDelegate(); + this._imagePickerControllerDelegate = ImagePickerControllerDelegate.new(); let imagePickerController = QBImagePickerController.alloc().init(); imagePickerController.assetCollectionSubtypes = defaultAssetCollectionSubtypes; imagePickerController.mediaType = options.mediaType ? options.mediaType.valueOf() : QBImagePickerMediaType.Any; - imagePickerController.delegate = this._imagePickerControllerDelegate; imagePickerController.allowsMultipleSelection = options.mode !== 'single'; imagePickerController.minimumNumberOfSelection = options.minimumNumberOfSelection || 0; imagePickerController.maximumNumberOfSelection = options.maximumNumberOfSelection || 0; @@ -76,11 +75,15 @@ export class ImagePicker extends data_observable.Observable { } present() { + this._imagePickerController.delegate = this._imagePickerControllerDelegate; + return new Promise((resolve, reject) => { this._imagePickerControllerDelegate._resolve = resolve; this._imagePickerControllerDelegate._reject = reject; - this.hostController.presentViewControllerAnimatedCompletion(this._imagePickerController, true, null); + this.hostController.presentViewControllerAnimatedCompletion(this._imagePickerController, true, ()=>{ + this._imagePickerController.delegate = this._imagePickerControllerDelegate; + }); }); } } From 53cd218a919bced8296c04ee0f801e35e20c55db Mon Sep 17 00:00:00 2001 From: tbozhikov Date: Tue, 26 Feb 2019 16:20:04 +0200 Subject: [PATCH 14/66] cleanup: delete redundant line --- src/imagepicker.ios.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/imagepicker.ios.ts b/src/imagepicker.ios.ts index 64d3145..132d54d 100644 --- a/src/imagepicker.ios.ts +++ b/src/imagepicker.ios.ts @@ -75,8 +75,6 @@ export class ImagePicker extends data_observable.Observable { } present() { - this._imagePickerController.delegate = this._imagePickerControllerDelegate; - return new Promise((resolve, reject) => { this._imagePickerControllerDelegate._resolve = resolve; this._imagePickerControllerDelegate._reject = reject; From 2a137735c131584f251304593616d833a2809127 Mon Sep 17 00:00:00 2001 From: tbozhikov Date: Tue, 26 Feb 2019 17:27:19 +0200 Subject: [PATCH 15/66] fix: white spaces --- src/imagepicker.ios.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/imagepicker.ios.ts b/src/imagepicker.ios.ts index 132d54d..b4c2218 100644 --- a/src/imagepicker.ios.ts +++ b/src/imagepicker.ios.ts @@ -79,7 +79,7 @@ export class ImagePicker extends data_observable.Observable { this._imagePickerControllerDelegate._resolve = resolve; this._imagePickerControllerDelegate._reject = reject; - this.hostController.presentViewControllerAnimatedCompletion(this._imagePickerController, true, ()=>{ + this.hostController.presentViewControllerAnimatedCompletion(this._imagePickerController, true, () => { this._imagePickerController.delegate = this._imagePickerControllerDelegate; }); }); @@ -130,4 +130,3 @@ export class ImagePickerControllerDelegate extends NSObject implements QBImagePi export function create(options?: Options, hostView?: View): ImagePicker { return new ImagePicker(options, hostView); } - From e8dd6bd5e1a4e594732a76500083da640280c053 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Tue, 26 Feb 2019 17:54:18 +0200 Subject: [PATCH 16/66] Update app run --- demo/app/app-root.xml | 2 ++ demo/app/app.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 demo/app/app-root.xml diff --git a/demo/app/app-root.xml b/demo/app/app-root.xml new file mode 100644 index 0000000..49519f1 --- /dev/null +++ b/demo/app/app-root.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/demo/app/app.ts b/demo/app/app.ts index 51d53f2..f171f58 100644 --- a/demo/app/app.ts +++ b/demo/app/app.ts @@ -1,4 +1,4 @@ import * as application from 'tns-core-modules/application'; application.setCssFileName("./app.css"); -application.start({ moduleName: "main-page" }); +application.run({ moduleName: "app-root" }); From 0be5586b733f25a82a7e1bbbc1eec2434776fa53 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Wed, 27 Feb 2019 14:42:57 +0200 Subject: [PATCH 17/66] fix: typo in defaultPage propoerty --- demo/app/app-root.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/app/app-root.xml b/demo/app/app-root.xml index 49519f1..54e70d9 100644 --- a/demo/app/app-root.xml +++ b/demo/app/app-root.xml @@ -1,2 +1,2 @@ - - \ No newline at end of file + + From a13a1bdd73f5da719fea108864a97c576b465e57 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Thu, 28 Feb 2019 16:29:39 +0200 Subject: [PATCH 18/66] bump version to 6.1.1 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 327b3d1..0af07f6 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-imagepicker", - "version": "6.1.0", + "version": "6.1.1", "description": "A plugin for the NativeScript framework implementing multiple image picker", "repository": { "type": "git", From d31139a163e397133323601ea304981b1060b6d1 Mon Sep 17 00:00:00 2001 From: tbozhikov Date: Tue, 5 Mar 2019 19:31:19 +0200 Subject: [PATCH 19/66] fix: register delegate in global scope on creation, clear it when dismissed --- src/imagepicker.ios.ts | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/imagepicker.ios.ts b/src/imagepicker.ios.ts index b4c2218..b67eda4 100644 --- a/src/imagepicker.ios.ts +++ b/src/imagepicker.ios.ts @@ -19,7 +19,6 @@ const defaultAssetCollectionSubtypes: NSArray = NSArray.arrayWithArray(options.mediaType.valueOf() : QBImagePickerMediaType.Any; imagePickerController.allowsMultipleSelection = options.mode !== 'single'; @@ -76,12 +77,13 @@ export class ImagePicker extends data_observable.Observable { present() { return new Promise((resolve, reject) => { - this._imagePickerControllerDelegate._resolve = resolve; - this._imagePickerControllerDelegate._reject = reject; + const imagePickerControllerDelegate = ImagePickerControllerDelegate.new(); + imagePickerControllerDelegate._resolve = resolve; + imagePickerControllerDelegate._reject = reject; + + this._imagePickerController.delegate = imagePickerControllerDelegate; - this.hostController.presentViewControllerAnimatedCompletion(this._imagePickerController, true, () => { - this._imagePickerController.delegate = this._imagePickerControllerDelegate; - }); + this.hostController.presentViewControllerAnimatedCompletion(this._imagePickerController, true, null); }); } } @@ -93,6 +95,8 @@ export class ImagePickerControllerDelegate extends NSObject implements QBImagePi qb_imagePickerControllerDidCancel?(imagePickerController: QBImagePickerController): void { imagePickerController.dismissViewControllerAnimatedCompletion(true, null); this._reject(new Error("Selection canceled.")); + + this.deRegisterFromGlobal(); } qb_imagePickerControllerDidFinishPickingAssets?(imagePickerController: QBImagePickerController, iosAssets: NSArray): void { @@ -112,6 +116,7 @@ export class ImagePickerControllerDelegate extends NSObject implements QBImagePi this._resolve(assets); imagePickerController.dismissViewControllerAnimatedCompletion(true, () => { + this.deRegisterFromGlobal(); // FIX: possible memory issue when picking images many times. // Not the best solution, but the only one working for now // https://github.com/NativeScript/nativescript-imagepicker/issues/222 @@ -120,10 +125,24 @@ export class ImagePickerControllerDelegate extends NSObject implements QBImagePi } - public static ObjCProtocols = [QBImagePickerControllerDelegate]; + // FIX: stores a reference to global scope, so that the delegate is not collected in native + // https://github.com/NativeScript/nativescript-imagepicker/issues/251 + private registerToGlobal(): any { + (global).imagePickerControllerDelegate = this; + } + + private deRegisterFromGlobal(): any { + (global).imagePickerControllerDelegate = null; + } + public static ObjCProtocols = [QBImagePickerControllerDelegate]; + static new(): ImagePickerControllerDelegate { - return super.new(); // calls new() on the NSObject + const instance = super.new(); // calls new() on the NSObject + + instance.registerToGlobal(); + + return instance; } } From 7e2cc71a0ba4c277246accaf5c994e1bdbe7e017 Mon Sep 17 00:00:00 2001 From: tbozhikov Date: Tue, 5 Mar 2019 19:32:48 +0200 Subject: [PATCH 20/66] fix: white spaces --- src/imagepicker.ios.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/imagepicker.ios.ts b/src/imagepicker.ios.ts index b67eda4..cabc5b9 100644 --- a/src/imagepicker.ios.ts +++ b/src/imagepicker.ios.ts @@ -80,7 +80,7 @@ export class ImagePicker extends data_observable.Observable { const imagePickerControllerDelegate = ImagePickerControllerDelegate.new(); imagePickerControllerDelegate._resolve = resolve; imagePickerControllerDelegate._reject = reject; - + this._imagePickerController.delegate = imagePickerControllerDelegate; this.hostController.presentViewControllerAnimatedCompletion(this._imagePickerController, true, null); @@ -95,7 +95,7 @@ export class ImagePickerControllerDelegate extends NSObject implements QBImagePi qb_imagePickerControllerDidCancel?(imagePickerController: QBImagePickerController): void { imagePickerController.dismissViewControllerAnimatedCompletion(true, null); this._reject(new Error("Selection canceled.")); - + this.deRegisterFromGlobal(); } @@ -136,10 +136,10 @@ export class ImagePickerControllerDelegate extends NSObject implements QBImagePi } public static ObjCProtocols = [QBImagePickerControllerDelegate]; - + static new(): ImagePickerControllerDelegate { const instance = super.new(); // calls new() on the NSObject - + instance.registerToGlobal(); return instance; From 0cb8bc49e7c8dee52f57940a0ad7fec69b2f62f0 Mon Sep 17 00:00:00 2001 From: tbozhikov Date: Tue, 5 Mar 2019 19:33:48 +0200 Subject: [PATCH 21/66] fix new lines --- src/imagepicker.ios.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/imagepicker.ios.ts b/src/imagepicker.ios.ts index cabc5b9..320b503 100644 --- a/src/imagepicker.ios.ts +++ b/src/imagepicker.ios.ts @@ -26,8 +26,6 @@ export class ImagePicker extends data_observable.Observable { return this._hostView; } - - get hostController(): UIViewController { let vc = this.hostView ? this.hostView.viewController : UIApplication.sharedApplication.keyWindow.rootViewController; while ( From 49160aa0cf8c4a7bb7bdaaf79760705cdadc5b75 Mon Sep 17 00:00:00 2001 From: dtodorov Date: Wed, 6 Mar 2019 15:51:42 +0200 Subject: [PATCH 22/66] chore: bump version to 6.1.2 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 0af07f6..2f298ed 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-imagepicker", - "version": "6.1.1", + "version": "6.1.2", "description": "A plugin for the NativeScript framework implementing multiple image picker", "repository": { "type": "git", From 606d0d37de63a6207363302f630c2fe79210b4bf Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Fri, 22 Mar 2019 16:40:56 +0200 Subject: [PATCH 23/66] Update vue deps in demo-vue --- demo-vue/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demo-vue/package.json b/demo-vue/package.json index 7b4c942..e06b7ff 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -11,7 +11,7 @@ "dependencies": { "nativescript-imagepicker": "../src", "nativescript-theme-core": "~1.0.4", - "nativescript-vue": "~2.0.0", + "nativescript-vue": "^2.0.0", "tns-core-modules": "^5.2.0" }, "devDependencies": { @@ -30,7 +30,7 @@ "nativescript-dev-appium": "^4.0.9", "nativescript-dev-webpack": "~0.20.0", "nativescript-dev-typescript": "~0.8.0", - "nativescript-vue-template-compiler": "~2.0.0", + "nativescript-vue-template-compiler": "^2.0.0", "node-sass": "~4.9.0", "vue-loader": "~15.4.0" }, From deb028ad54d6b3e9db87863a3c09d94e352083b6 Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Fri, 29 Mar 2019 17:46:37 +0200 Subject: [PATCH 24/66] chore: update dependencies for 5.3 --- demo-angular/package.json | 14 +++++++------- demo-vue/package.json | 10 +++++----- demo/package.json | 12 ++++++------ src/package.json | 4 ++-- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/demo-angular/package.json b/demo-angular/package.json index 186b977..2d40c91 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -2,10 +2,10 @@ "nativescript": { "id": "org.nativescript.imagepickerdemoangular", "tns-ios": { - "version": "5.2.0" + "version": "5.3.0" }, "tns-android": { - "version": "5.2.0" + "version": "5.3.0" } }, "dependencies": { @@ -17,13 +17,13 @@ "@angular/platform-browser": "~7.2.0", "@angular/platform-browser-dynamic": "~7.2.0", "@angular/router": "~7.2.0", - "nativescript-angular": "~7.2.1", + "nativescript-angular": "~7.2.0", "nativescript-imagepicker": "../src", "nativescript-theme-core": "^1.0.4", "nativescript-unit-test-runner": "^0.3.4", "reflect-metadata": "~0.1.8", "rxjs": "^6.3.3", - "tns-core-modules": "^5.2.0" + "tns-core-modules": "^5.0.0" }, "devDependencies": { "jasmine-core": "^2.5.2", @@ -31,9 +31,9 @@ "karma-jasmine": "^1.0.2", "karma-nativescript-launcher": "^0.4.0", "nativescript-css-loader": "~0.26.0", - "nativescript-dev-typescript": "^0.8.0", - "nativescript-dev-webpack": "~0.20.0", - "tns-platform-declarations": "^5.2.0", + "nativescript-dev-typescript": "~0.9.0", + "nativescript-dev-webpack": "~0.21.0", + "tns-platform-declarations": "^5.0.0", "tslint": "~5.11.0", "zone.js": "^0.8.4" }, diff --git a/demo-vue/package.json b/demo-vue/package.json index e06b7ff..cb47180 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,17 +2,17 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "5.2.0" + "version": "5.3.0" }, "tns-ios": { - "version": "5.2.0" + "version": "5.3.0" } }, "dependencies": { "nativescript-imagepicker": "../src", "nativescript-theme-core": "~1.0.4", "nativescript-vue": "^2.0.0", - "tns-core-modules": "^5.2.0" + "tns-core-modules": "^5.0.0" }, "devDependencies": { "@types/chai": "^4.1.4", @@ -28,8 +28,8 @@ "mocha-multi": "^1.0.1", "mochawesome": "^3.1.1", "nativescript-dev-appium": "^4.0.9", - "nativescript-dev-webpack": "~0.20.0", - "nativescript-dev-typescript": "~0.8.0", + "nativescript-dev-webpack": "~0.21.0", + "nativescript-dev-typescript": "~0.9.0", "nativescript-vue-template-compiler": "^2.0.0", "node-sass": "~4.9.0", "vue-loader": "~15.4.0" diff --git a/demo/package.json b/demo/package.json index 49a1b6b..e5ff501 100644 --- a/demo/package.json +++ b/demo/package.json @@ -2,17 +2,17 @@ "nativescript": { "id": "org.nativescript.imagepickerdemo", "tns-android": { - "version": "5.2.0" + "version": "5.3.0" }, "tns-ios": { - "version": "5.2.0" + "version": "5.3.0" } }, "dependencies": { "nativescript-imagepicker": "../src", "nativescript-theme-core": "^1.0.4", "nativescript-unit-test-runner": "^0.3.4", - "tns-core-modules": "^5.2.0" + "tns-core-modules": "^5.0.0" }, "devDependencies": { "@types/chai": "^4.1.4", @@ -30,9 +30,9 @@ "mochawesome": "^3.1.1", "nativescript-css-loader": "~0.26.0", "nativescript-dev-appium": "4.0.9", - "nativescript-dev-typescript": "~0.8.0", - "nativescript-dev-webpack": "~0.20.0", - "tns-platform-declarations": "^5.2.0", + "nativescript-dev-typescript": "~0.9.0", + "nativescript-dev-webpack": "~0.21.0", + "tns-platform-declarations": "^5.0.0", "tslint": "~5.11.0" }, "scripts": { diff --git a/src/package.json b/src/package.json index 2f298ed..5304d41 100644 --- a/src/package.json +++ b/src/package.json @@ -46,8 +46,8 @@ "homepage": "https://github.com/NativeScript/nativescript-imagepicker", "readmeFilename": "README.md", "devDependencies": { - "tns-core-modules": "^5.2.0", - "tns-platform-declarations": "^5.2.0", + "tns-core-modules": "^5.0.0", + "tns-platform-declarations": "^5.0.0", "typescript": "~3.1.6", "tslint": "~5.11.0" }, From c2910490e418598145a32fef459a865f2520ba36 Mon Sep 17 00:00:00 2001 From: Todor Petrov Date: Thu, 18 Apr 2019 11:52:54 +0300 Subject: [PATCH 25/66] chore: update permissions version --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 5304d41..60c518f 100644 --- a/src/package.json +++ b/src/package.json @@ -52,7 +52,7 @@ "tslint": "~5.11.0" }, "dependencies": { - "nativescript-permissions": "~1.2.3" + "nativescript-permissions": "~1.3.0" }, "bootstrapper": "nativescript-plugin-seed" } From 7cf0d1e16320bfea1dff10f0d2594e4af378af94 Mon Sep 17 00:00:00 2001 From: dtodorov Date: Wed, 24 Apr 2019 15:12:31 +0300 Subject: [PATCH 26/66] chore: bump version to 6.2.0 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 60c518f..714b04f 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-imagepicker", - "version": "6.1.2", + "version": "6.2.0", "description": "A plugin for the NativeScript framework implementing multiple image picker", "repository": { "type": "git", From 568b8a9e6b513b0f931677deeff823bffabd549f Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Fri, 31 May 2019 17:59:35 +0300 Subject: [PATCH 27/66] chore: update to node 10, set trusty distribution --- .travis.yml | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5f0fb51..4fb6c4d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ matrix: - stage: "Lint" language: node_js os: linux - node_js: "8" + node_js: "10" script: cd src && npm run ci.tslint && cd ../demo && npm run ci.tslint && cd ../demo-angular && npm run ci.tslint - stage: "WebPack and Build" os: osx @@ -32,7 +32,7 @@ matrix: - Type="VanillaJS" osx_image: xcode10.0 language: node_js - node_js: "8" + node_js: "10" jdk: oraclejdk8 before_script: pod repo update script: @@ -46,7 +46,7 @@ matrix: - Type="VueJS" osx_image: xcode10.0 language: node_js - node_js: "8" + node_js: "10" jdk: oraclejdk8 before_script: pod repo update script: @@ -60,7 +60,7 @@ matrix: - Type="Angular" osx_image: xcode10.0 language: node_js - node_js: "8" + node_js: "10" jdk: oraclejdk8 before_script: pod repo update script: @@ -69,54 +69,61 @@ matrix: - npm i && tns build ios --bundle --env.uglify --env.aot - language: android os: linux + dist: trusty env: - WebpackAndroid="28" - Type="VanillaJS" jdk: oraclejdk8 - before_install: nvm install 8 + before_install: nvm install 10 script: - cd src && npm run build - cd ../demo && npm i && tns build android --bundle --env.uglify --env.snapshot --copy-to "./outputs/app-debug.apk" - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_JS?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_JS/app-debug.apk" - language: android os: linux + dist: trusty env: - WebpackAndroid="28" - Type="VueJS" jdk: oraclejdk8 - before_install: nvm install 8 + before_install: nvm install 10 script: - cd src && npm run build - cd ../demo-vue && npm i && tns build android --bundle --env.uglify --copy-to "./outputs/app-debug.apk" - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_VUE?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_VUE/app-debug.apk" - language: android os: linux + dist: trusty env: - WebpackAndroid="28" - Type="Angular" jdk: oraclejdk8 - before_install: nvm install 8 + before_install: nvm install 10 script: - cd src && npm run build - cd ../publish && sh pack.sh - cd ../demo-angular && tns plugin add ../publish/package/*.tgz - npm i && tns build android --bundle --env.uglify --env.snapshot --env.aot - language: android + os: linux + dist: trusty env: - BuildAndroid="28" - Type="VanillaJS" - os: linux + jdk: oraclejdk8 - before_install: nvm install 8.11.4 + before_install: nvm install 10 script: - cd demo && npm run ci.android.build - language: android + os: linux + dist: trusty env: - BuildAndroid="28" - Type="Angular" - os: linux + jdk: oraclejdk8 - before_install: nvm install 8.11.4 + before_install: nvm install 10 script: - cd demo-angular && npm run ci.android.build - os: osx @@ -126,7 +133,7 @@ matrix: - Type="VanillaJS" osx_image: xcode10.0 language: node_js - node_js: "8" + node_js: "10" jdk: oraclejdk8 before_script: pod repo update script: @@ -139,7 +146,7 @@ matrix: - Type="Angular" osx_image: xcode10.0 language: node_js - node_js: "8" + node_js: "10" jdk: oraclejdk8 before_script: pod repo update script: @@ -150,7 +157,7 @@ matrix: - Type="VanillaJS" language: node_js os: linux - node_js: "8" + node_js: "10" script: - npm i -g appium - cd demo && npm i @@ -161,7 +168,7 @@ matrix: - Type="VueJS" language: node_js os: linux - node_js: "8" + node_js: "10" script: - npm i -g appium - cd demo-vue && npm i @@ -171,7 +178,7 @@ matrix: - iOS="12.0" - Type="VanillaJS" language: node_js - node_js: "8" + node_js: "10" script: - npm i -g appium - cd demo && npm i @@ -181,7 +188,7 @@ matrix: - iOS="12.0" - Type="VueJS" language: node_js - node_js: "8" + node_js: "10" script: - npm i -g appium - cd demo-vue && npm i From d1188a275edd34c70acdab71803d74f1a5cf7e84 Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Fri, 31 May 2019 23:14:10 +0300 Subject: [PATCH 28/66] chore: update to latest dependencies --- demo-angular/app/package.json | 4 +- demo-angular/package.json | 29 ++-- demo-vue/.gitignore | 1 - demo-vue/package.json | 14 +- demo-vue/webpack.config.js | 266 ---------------------------------- demo/app/package.json | 4 +- demo/package.json | 10 +- 7 files changed, 29 insertions(+), 299 deletions(-) delete mode 100644 demo-vue/webpack.config.js diff --git a/demo-angular/app/package.json b/demo-angular/app/package.json index a8a1e03..83cac3e 100644 --- a/demo-angular/app/package.json +++ b/demo-angular/app/package.json @@ -3,7 +3,5 @@ "v8Flags": "--expose_gc", "requireModules": ["nativescript-imagepicker"] }, - "main": "main.js", - "name": "tns-template-hello-world", - "version": "3.1.0" + "main": "main.js" } diff --git a/demo-angular/package.json b/demo-angular/package.json index 2d40c91..932d4c6 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -2,28 +2,29 @@ "nativescript": { "id": "org.nativescript.imagepickerdemoangular", "tns-ios": { - "version": "5.3.0" + "version": "5.4.0" }, "tns-android": { - "version": "5.3.0" + "version": "5.4.0" } }, "dependencies": { - "@angular/common": "~7.2.0", - "@angular/compiler": "~7.2.0", - "@angular/core": "~7.2.0", - "@angular/forms": "~7.2.0", - "@angular/http": "~7.2.0", - "@angular/platform-browser": "~7.2.0", - "@angular/platform-browser-dynamic": "~7.2.0", - "@angular/router": "~7.2.0", - "nativescript-angular": "~7.2.0", + "@angular/common": "~8.0.0", + "@angular/compiler": "~8.0.0", + "@angular/core": "~8.0.0", + "@angular/forms": "~8.0.0", + "@angular/http": "8.0.0-beta.10", + "@angular/platform-browser": "~8.0.0", + "@angular/platform-browser-dynamic": "~8.0.0", + "@angular/router": "~8.0.0", + "nativescript-angular": "~8.0.0", "nativescript-imagepicker": "../src", "nativescript-theme-core": "^1.0.4", "nativescript-unit-test-runner": "^0.3.4", "reflect-metadata": "~0.1.8", "rxjs": "^6.3.3", - "tns-core-modules": "^5.0.0" + "tns-core-modules": "^5.0.0", + "typescript": "~3.4.5" }, "devDependencies": { "jasmine-core": "^2.5.2", @@ -31,8 +32,8 @@ "karma-jasmine": "^1.0.2", "karma-nativescript-launcher": "^0.4.0", "nativescript-css-loader": "~0.26.0", - "nativescript-dev-typescript": "~0.9.0", - "nativescript-dev-webpack": "~0.21.0", + "nativescript-dev-typescript": "~0.10.0", + "nativescript-dev-webpack": "~0.24.0", "tns-platform-declarations": "^5.0.0", "tslint": "~5.11.0", "zone.js": "^0.8.4" diff --git a/demo-vue/.gitignore b/demo-vue/.gitignore index 0cdaa5c..a9e686d 100644 --- a/demo-vue/.gitignore +++ b/demo-vue/.gitignore @@ -6,7 +6,6 @@ platforms/ # NativeScript Template *.js.map -!webpack.config.js *.css # Logs diff --git a/demo-vue/package.json b/demo-vue/package.json index cb47180..33fc1f5 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,16 +2,16 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "5.3.0" + "version": "5.4.0" }, "tns-ios": { - "version": "5.3.0" + "version": "5.4.0" } }, "dependencies": { "nativescript-imagepicker": "../src", "nativescript-theme-core": "~1.0.4", - "nativescript-vue": "^2.0.0", + "nativescript-vue": "~2.2.0", "tns-core-modules": "^5.0.0" }, "devDependencies": { @@ -27,10 +27,10 @@ "mocha-junit-reporter": "^1.18.0", "mocha-multi": "^1.0.1", "mochawesome": "^3.1.1", - "nativescript-dev-appium": "^4.0.9", - "nativescript-dev-webpack": "~0.21.0", - "nativescript-dev-typescript": "~0.9.0", - "nativescript-vue-template-compiler": "^2.0.0", + "nativescript-dev-appium": "~5.2.0", + "nativescript-dev-webpack": "~0.24.0", + "nativescript-dev-typescript": "~0.10.0", + "nativescript-vue-template-compiler": "~2.2.0", "node-sass": "~4.9.0", "vue-loader": "~15.4.0" }, diff --git a/demo-vue/webpack.config.js b/demo-vue/webpack.config.js deleted file mode 100644 index 0880900..0000000 --- a/demo-vue/webpack.config.js +++ /dev/null @@ -1,266 +0,0 @@ -const { relative, resolve, sep } = require("path"); - -const webpack = require("webpack"); -const CleanWebpackPlugin = require("clean-webpack-plugin"); -const CopyWebpackPlugin = require("copy-webpack-plugin"); -const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); -const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); - -const VueLoaderPlugin = require('vue-loader/lib/plugin'); -const NsVueTemplateCompiler = require("nativescript-vue-template-compiler"); - -const nsWebpack = require("nativescript-dev-webpack"); -const nativescriptTarget = require("nativescript-dev-webpack/nativescript-target"); -const { NativeScriptWorkerPlugin } = require("nativescript-worker-loader/NativeScriptWorkerPlugin"); - -module.exports = env => { - // Add your custom Activities, Services and other android app components here. - const appComponents = [ - "tns-core-modules/ui/frame", - "tns-core-modules/ui/frame/activity", - ]; - - const platform = env && (env.android && "android" || env.ios && "ios"); - if (!platform) { - throw new Error("You need to provide a target platform!"); - } - - const platforms = ["ios", "android"]; - const projectRoot = __dirname; - - // Default destination inside platforms//... - const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot)); - const appResourcesPlatformDir = platform === "android" ? "Android" : "iOS"; - - const { - // The 'appPath' and 'appResourcesPath' values are fetched from - // the nsconfig.json configuration file - // when bundling with `tns run android|ios --bundle`. - appPath = "app", - appResourcesPath = "app/App_Resources", - - // You can provide the following flags when running 'tns run android|ios' - snapshot, // --env.snapshot - production, // --env.production - report, // --env.report - hmr, // --env.hmr - } = env; - - const externals = (env.externals || []).map((e) => { // --env.externals - return new RegExp(e + ".*"); - }); - - const mode = production ? "production" : "development" - - const appFullPath = resolve(projectRoot, appPath); - const appResourcesFullPath = resolve(projectRoot, appResourcesPath); - - const entryModule = nsWebpack.getEntryModule(appFullPath); - const entryPath = `.${sep}${entryModule}.js`; - console.log(`Bundling application for entryPath ${entryPath}...`); - - const config = { - mode: mode, - context: appFullPath, - externals, - watchOptions: { - ignored: [ - appResourcesFullPath, - // Don't watch hidden files - "**/.*", - ], - }, - target: nativescriptTarget, - // target: nativeScriptVueTarget, - entry: { - bundle: entryPath, - }, - output: { - pathinfo: false, - path: dist, - libraryTarget: "commonjs2", - filename: "[name].js", - globalObject: "global", - }, - resolve: { - extensions: [".vue", ".js", ".scss", ".css"], - // Resolve {N} system modules from tns-core-modules - modules: [ - resolve(__dirname, "node_modules/tns-core-modules"), - resolve(__dirname, "node_modules"), - "node_modules/tns-core-modules", - "node_modules", - ], - alias: { - '~': appFullPath, - '@': appFullPath, - 'vue': 'nativescript-vue' - }, - // don't resolve symlinks to symlinked modules - symlinks: false, - }, - resolveLoader: { - // don't resolve symlinks to symlinked loaders - symlinks: false, - }, - node: { - // Disable node shims that conflict with NativeScript - "http": false, - "timers": false, - "setImmediate": false, - "fs": "empty", - "__dirname": false, - }, - devtool: "none", - optimization: { - splitChunks: { - cacheGroups: { - vendor: { - name: "vendor", - chunks: "all", - test: (module) => { - const moduleName = module.nameForCondition ? module.nameForCondition() : ''; - return /[\\/]node_modules[\\/]/.test(moduleName) || - appComponents.some(comp => comp === moduleName); - - }, - enforce: true, - }, - }, - }, - minimize: Boolean(production), - minimizer: [ - new UglifyJsPlugin({ - parallel: true, - cache: true, - uglifyOptions: { - output: { - comments: false, - }, - compress: { - // The Android SBG has problems parsing the output - // when these options are enabled - 'collapse_vars': platform !== "android", - sequences: platform !== "android", - }, - }, - }), - ], - }, - module: { - rules: [{ - test: new RegExp(entryPath), - use: [ - // Require all Android app components - platform === "android" && { - loader: "nativescript-dev-webpack/android-app-components-loader", - options: { modules: appComponents }, - }, - - { - loader: "nativescript-dev-webpack/bundle-config-loader", - options: { - registerPages: true, // applicable only for non-angular apps - loadCss: !snapshot, // load the application css if in debug mode - }, - }, - ].filter(loader => Boolean(loader)), - }, - { - test: /\.css$/, - use: [ - 'nativescript-dev-webpack/style-hot-loader', - 'nativescript-dev-webpack/apply-css-loader.js', - { loader: "css-loader", options: { minimize: false, url: false } }, - ], - }, - { - test: /\.scss$/, - use: [ - 'nativescript-dev-webpack/style-hot-loader', - 'nativescript-dev-webpack/apply-css-loader.js', - { loader: "css-loader", options: { minimize: false, url: false } }, - "sass-loader", - ], - }, - { - test: /\.js$/, - loader: 'babel-loader', - }, - { - test: /\.vue$/, - loader: "vue-loader", - options: { - compiler: NsVueTemplateCompiler, - }, - }, - ], - }, - plugins: [ - // ... Vue Loader plugin omitted - // make sure to include the plugin! - new VueLoaderPlugin(), - // Define useful constants like TNS_WEBPACK - new webpack.DefinePlugin({ - "global.TNS_WEBPACK": "true", - "TNS_ENV": JSON.stringify(mode) - }), - // Remove all files from the out dir. - new CleanWebpackPlugin([`${dist}/**/*`]), - // Copy native app resources to out dir. - new CopyWebpackPlugin([{ - from: `${appResourcesFullPath}/${appResourcesPlatformDir}`, - to: `${dist}/App_Resources/${appResourcesPlatformDir}`, - context: projectRoot, - }]), - // Copy assets to out dir. Add your own globs as needed. - new CopyWebpackPlugin([ - { from: { glob: "fonts/**" } }, - { from: { glob: "**/*.+(jpg|png)" } }, - { from: { glob: "assets/**/*" } }, - ], { ignore: [`${relative(appPath, appResourcesFullPath)}/**`] }), - // Generate a bundle starter script and activate it in package.json - new nsWebpack.GenerateBundleStarterPlugin([ - "./vendor", - "./bundle", - ]), - // For instructions on how to set up workers with webpack - // check out https://github.com/nativescript/worker-loader - new NativeScriptWorkerPlugin(), - new nsWebpack.PlatformFSPlugin({ - platform, - platforms, - }), - // Does IPC communication with the {N} CLI to notify events when running in watch mode. - new nsWebpack.WatchStateLoggerPlugin(), - ], - }; - - if (report) { - // Generate report files for bundles content - config.plugins.push(new BundleAnalyzerPlugin({ - analyzerMode: "static", - openAnalyzer: false, - generateStatsFile: true, - reportFilename: resolve(projectRoot, "report", `report.html`), - statsFilename: resolve(projectRoot, "report", `stats.json`), - })); - } - - if (snapshot) { - config.plugins.push(new nsWebpack.NativeScriptSnapshotPlugin({ - chunk: "vendor", - requireModules: [ - "tns-core-modules/bundle-entry-points", - ], - projectRoot, - webpackConfig: config, - })); - } - - if (hmr) { - config.plugins.push(new webpack.HotModuleReplacementPlugin()); - } - - return config; -}; \ No newline at end of file diff --git a/demo/app/package.json b/demo/app/package.json index 84c391d..3a445f7 100644 --- a/demo/app/package.json +++ b/demo/app/package.json @@ -3,7 +3,5 @@ "v8Flags": "--expose_gc", "requireModules": ["nativescript-imagepicker"] }, - "main": "app.js", - "name": "tns-template-hello-world", - "version": "3.1.0" + "main": "app.js" } diff --git a/demo/package.json b/demo/package.json index e5ff501..d323891 100644 --- a/demo/package.json +++ b/demo/package.json @@ -2,10 +2,10 @@ "nativescript": { "id": "org.nativescript.imagepickerdemo", "tns-android": { - "version": "5.3.0" + "version": "5.4.0" }, "tns-ios": { - "version": "5.3.0" + "version": "5.4.0" } }, "dependencies": { @@ -29,9 +29,9 @@ "mocha-multi": "^1.0.1", "mochawesome": "^3.1.1", "nativescript-css-loader": "~0.26.0", - "nativescript-dev-appium": "4.0.9", - "nativescript-dev-typescript": "~0.9.0", - "nativescript-dev-webpack": "~0.21.0", + "nativescript-dev-appium": "~5.2.0", + "nativescript-dev-typescript": "~0.10.0", + "nativescript-dev-webpack": "~0.24.0", "tns-platform-declarations": "^5.0.0", "tslint": "~5.11.0" }, From 282201eac4b482623d9e9ead69ff7a299bc883bd Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Mon, 3 Jun 2019 13:26:19 +0300 Subject: [PATCH 29/66] chore: update typescript version for source --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 714b04f..18428d4 100644 --- a/src/package.json +++ b/src/package.json @@ -48,7 +48,7 @@ "devDependencies": { "tns-core-modules": "^5.0.0", "tns-platform-declarations": "^5.0.0", - "typescript": "~3.1.6", + "typescript": "~3.4.5", "tslint": "~5.11.0" }, "dependencies": { From 3c0ed50a34ba07709ddd934ff877660786d4287b Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Tue, 4 Jun 2019 12:01:53 +0300 Subject: [PATCH 30/66] Fix: demo-js ios tests --- .travis.yml | 2 +- demo/e2e/config/appium.capabilities.json | 13 +++++++++++++ demo/e2e/test.e2e.ts | 15 ++++++++------- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4fb6c4d..3def5ca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -182,7 +182,7 @@ matrix: script: - npm i -g appium - cd demo && npm i - - travis_wait travis_retry npm run e2e -- --runType sim11iPhone6 --sauceLab --appPath $IOS_PACKAGE_JS + - travis_wait travis_retry npm run e2e -- --runType sim12iPhoneX --sauceLab --appPath $IOS_PACKAGE_JS - os: linux env: - iOS="12.0" diff --git a/demo/e2e/config/appium.capabilities.json b/demo/e2e/config/appium.capabilities.json index 0d81c9b..4b97135 100644 --- a/demo/e2e/config/appium.capabilities.json +++ b/demo/e2e/config/appium.capabilities.json @@ -41,5 +41,18 @@ "deviceName": "iPhone 6", "appium-version": "1.7.1", "app": "" + }, + "sim12iPhoneX":{ + "platformName": "iOS", + "platformVersion": "12.0", + "deviceName": "iPhone X", + "appium-version": "1.9.1", + "app": "", + "noReset": true, + "fullReset": false, + "density": 3, + "offsetPixels": 87, + "idleTimeout": 120, + "automationName": "Appium" } } \ No newline at end of file diff --git a/demo/e2e/test.e2e.ts b/demo/e2e/test.e2e.ts index a43b27c..06e51b8 100644 --- a/demo/e2e/test.e2e.ts +++ b/demo/e2e/test.e2e.ts @@ -68,12 +68,13 @@ describe("Imagepicker", async function () { await imagesFolder.click(); } } else { - const cameraRollFolder = await driver.findElementByText(imagesFolderNameIos); + const cameraRollFolder = await driver.findElementByAccessibilityId(imagesFolderNameIos); await cameraRollFolder.click(); } - const pickedImage = await driver.findElementByClassName(driver.locators.image); - await pickedImage.click(); + const imageLocator = isAndroid ? "android.widget.ImageView" : "XCUIElementTypeCell"; + const image = await driver.findElementByClassName(imageLocator); + await image.tap(); pickSingleButton = await driver.findElementByText(pickSingleButtonText, SearchOptions.contains); expect(pickSingleButton).to.exist; @@ -96,12 +97,12 @@ describe("Imagepicker", async function () { await cameraRollFolder.click(); } - const allImages = await driver.findElementsByClassName(driver.locators.image); - if (isAndroid) { - await allImages[8].hold(); // third image - await allImages[4].click(); // second image + const allImages = await driver.findElementsByClassName("android.widget.ImageView"); + await allImages[5].hold(); // second Image + await allImages[2].click(); // first image } else { + const allImages = await driver.findElementsByClassName("XCUIElementTypeCell"); await allImages[0].click(); // first image await allImages[1].click(); // second image } From 87c3388f040498d665f341ee43b5383e05cc4f06 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Tue, 4 Jun 2019 16:47:32 +0300 Subject: [PATCH 31/66] Fix: android test - update to api 24 --- .travis.yml | 4 ++-- demo-vue/e2e/config/appium.capabilities.json | 16 ++++++++++------ demo-vue/e2e/test.e2e.ts | 2 ++ demo/e2e/config/appium.capabilities.json | 20 ++++++++++++++++++-- demo/e2e/test.e2e.ts | 2 ++ 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3def5ca..936bbb4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -161,7 +161,7 @@ matrix: script: - npm i -g appium - cd demo && npm i - - travis_wait travis_retry npm run e2e -- --runType android23 --sauceLab --appPath $ANDROID_PACKAGE_JS + - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_JS - os: linux env: - Android="24" @@ -172,7 +172,7 @@ matrix: script: - npm i -g appium - cd demo-vue && npm i - - travis_wait travis_retry npm run e2e -- --runType android23 --sauceLab --appPath $ANDROID_PACKAGE_VUE + - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_VUE - os: linux env: - iOS="12.0" diff --git a/demo-vue/e2e/config/appium.capabilities.json b/demo-vue/e2e/config/appium.capabilities.json index d425a34..b611563 100644 --- a/demo-vue/e2e/config/appium.capabilities.json +++ b/demo-vue/e2e/config/appium.capabilities.json @@ -24,13 +24,17 @@ "platformName": "Android", "platformVersion": "7.0", "deviceName": "Android GoogleAPI Emulator", - "appium-version": "1.9.1", + "appiumVersion": "1.9.1", "noReset": true, - "lt": 60000, - "newCommandTimeout": 720, - "fullReset": false, - "idleTimeout": 120, - "automationName": "Appium" + "app": "" + }, + "android24.local": { + "platformName": "Android", + "platformVersion": "7.0", + "deviceName": "Emulator-Api24-Default", + "avd": "Emulator-Api24-Default", + "appiumVersion": "1.9.1", + "noReset": true }, "sim11iPhone6": { "platformName": "iOS", diff --git a/demo-vue/e2e/test.e2e.ts b/demo-vue/e2e/test.e2e.ts index b57e8a2..fe990a5 100644 --- a/demo-vue/e2e/test.e2e.ts +++ b/demo-vue/e2e/test.e2e.ts @@ -63,6 +63,8 @@ describe("Imagepicker", async function () { if (isSauceRun && imagesFolder) { await imagesFolder.click(); + let dcimFolder = await driver.findElementByText("DCIM", SearchOptions.contains); + await dcimFolder.click(); imagesFolder = await driver.findElementByClassName(driver.locators.image); await imagesFolder.click(); } diff --git a/demo/e2e/config/appium.capabilities.json b/demo/e2e/config/appium.capabilities.json index 4b97135..1333fc5 100644 --- a/demo/e2e/config/appium.capabilities.json +++ b/demo/e2e/config/appium.capabilities.json @@ -2,8 +2,8 @@ "android23.local": { "platformName": "Android", "platformVersion": "6.0", - "deviceName": "Emulator_Api23_Default", - "avd": "Emulator_Api23_Default", + "deviceName": "Emulator-Api23-Default", + "avd": "Emulator-Api23-Default", "noReset": true }, "android23": { @@ -13,6 +13,22 @@ "appium-version": "1.7.1", "noReset": true }, + "android24": { + "platformName": "Android", + "platformVersion": "7.0", + "deviceName": "Android GoogleAPI Emulator", + "appiumVersion": "1.9.1", + "noReset": true, + "app": "" + }, + "android24.local": { + "platformName": "Android", + "platformVersion": "7.0", + "deviceName": "Emulator-Api24-Default", + "avd": "Emulator-Api24-Default", + "appiumVersion": "1.9.1", + "noReset": true + }, "android25": { "platformName": "Android", "platformVersion": "7.1", diff --git a/demo/e2e/test.e2e.ts b/demo/e2e/test.e2e.ts index 06e51b8..5a56a2d 100644 --- a/demo/e2e/test.e2e.ts +++ b/demo/e2e/test.e2e.ts @@ -64,6 +64,8 @@ describe("Imagepicker", async function () { if (isSauceRun && imagesFolder) { await imagesFolder.click(); + let dcimFolder = await driver.findElementByText("DCIM", SearchOptions.contains); + await dcimFolder.click(); imagesFolder = await driver.findElementByClassName(driver.locators.image); await imagesFolder.click(); } From b8a66e673e160a796a684485d4d8e782c5931b0f Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Tue, 18 Jun 2019 20:21:03 +0300 Subject: [PATCH 32/66] chore: update to xcode 10.2 (#275) --- .travis.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 936bbb4..8fc4ac2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ matrix: env: - WebpackiOS="12.0" - Type="VanillaJS" - osx_image: xcode10.0 + osx_image: xcode10.2 language: node_js node_js: "10" jdk: oraclejdk8 @@ -44,7 +44,7 @@ matrix: env: - WebpackiOS="12.0" - Type="VueJS" - osx_image: xcode10.0 + osx_image: xcode10.2 language: node_js node_js: "10" jdk: oraclejdk8 @@ -58,7 +58,7 @@ matrix: env: - WebpackiOS="12.0" - Type="Angular" - osx_image: xcode10.0 + osx_image: xcode10.2 language: node_js node_js: "10" jdk: oraclejdk8 @@ -131,7 +131,7 @@ matrix: - BuildiOS="12.0" - Xcode="10.0" - Type="VanillaJS" - osx_image: xcode10.0 + osx_image: xcode10.2 language: node_js node_js: "10" jdk: oraclejdk8 @@ -144,7 +144,7 @@ matrix: - BuildiOS="12.0" - Xcode="10.0" - Type="Angular" - osx_image: xcode10.0 + osx_image: xcode10.2 language: node_js node_js: "10" jdk: oraclejdk8 From 0569c351a2f4ce3ab1d61e42a2a5aa103262a1c2 Mon Sep 17 00:00:00 2001 From: Jake Vossen Date: Wed, 3 Jul 2019 12:13:45 -0600 Subject: [PATCH 33/66] fix(chrome-downloads): update to support pie api changes Allows selection of files that have been downloaded from chrome --- src/imagepicker.android.ts | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index 8a927e9..0b3416e 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -25,16 +25,7 @@ class UriHelper { } // DownloadsProvider else if (UriHelper.isDownloadsDocument(uri)) { - id = DocumentsContract.getDocumentId(uri); - // Since Oreo the downloads id may be a raw string, - // containing the file path: - if (id.indexOf("raw:") !== -1) { - return id.substring(4, id.length); - } - contentUri = android.content.ContentUris.withAppendedId( - android.net.Uri.parse("content://downloads/public_downloads"), long(id)); - - return UriHelper.getDataColumn(contentUri, null, null); + return UriHelper.getDataColumn(uri, null, null); } // MediaProvider else if (UriHelper.isMediaDocument(uri)) { @@ -73,8 +64,8 @@ class UriHelper { private static getDataColumn(uri: android.net.Uri, selection, selectionArgs) { let cursor = null; - let columns = [android.provider.MediaStore.MediaColumns.DATA]; let filePath; + let columns = ["_display_name"]; try { cursor = this.getContentResolver().query(uri, columns, selection, selectionArgs, null); @@ -82,6 +73,8 @@ class UriHelper { let column_index = cursor.getColumnIndexOrThrow(columns[0]); filePath = cursor.getString(column_index); if (filePath) { + const dl = android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS); + filePath = `${dl}/${filePath}`; return filePath; } } From 242e7d633f7658d2a28cfd2af323b3a3b21fc342 Mon Sep 17 00:00:00 2001 From: Kirill Goncharov Date: Mon, 8 Jul 2019 19:29:12 +0300 Subject: [PATCH 34/66] feat(android): add support for mediaType option for android devices --- README.md | 2 +- src/imagepicker.android.ts | 15 ++++++++++++++- src/index.d.ts | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e69fb4a..475aca3 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,7 @@ context | prompt | iOS | undefined | Display prompt text when selecting assets. | | numberOfColumnsInPortrait | iOS | 4 | Set the number of columns in Portrait orientation. | | numberOfColumnsInLandscape | iOS | 7 | Set the number of columns in Landscape orientation. | -| mediaType | iOS | Any | Choose whether to pick Image/Video/Any type of assets. | +| mediaType | both | Any (iOS), Image (Android) | Choose whether to pick Image/Video/Any type of assets. | The **hostView** parameter can be set to the view that hosts the image picker. Applicable in iOS only, intended to be used when open picker from a modal page. diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index 8a927e9..14e81d2 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -2,6 +2,8 @@ import * as application from "tns-core-modules/application"; import * as imageAssetModule from "tns-core-modules/image-asset"; import * as permissions from "nativescript-permissions"; +import { ImagePickerMediaType } from "."; + class UriHelper { public static _calculateFileUri(uri: android.net.Uri) { let DocumentsContract = (android.provider).DocumentsContract; @@ -126,6 +128,17 @@ export class ImagePicker { return this._options && this._options.mode && this._options.mode.toLowerCase() === 'single' ? 'single' : 'multiple'; } + get mediaType(): string { + const mediaType = this._options && 'mediaType' in this._options ? this._options.mediaType : ImagePickerMediaType.Image; + if (mediaType === ImagePickerMediaType.Image) { + return "image/*"; + } else if (mediaType === ImagePickerMediaType.Video) { + return "video/*"; + } else { + return "*/*"; + } + } + authorize(): Promise { if ((android).os.Build.VERSION.SDK_INT >= 23) { return permissions.requestPermission([(android).Manifest.permission.READ_EXTERNAL_STORAGE]); @@ -194,7 +207,7 @@ export class ImagePicker { let Intent = android.content.Intent; let intent = new Intent(); - intent.setType("image/*"); + intent.setType(this.mediaType); // TODO: Use (android).content.Intent.EXTRA_ALLOW_MULTIPLE if (this.mode === 'multiple') { diff --git a/src/index.d.ts b/src/index.d.ts index 50cf59b..38208e1 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -63,7 +63,7 @@ interface Options { numberOfColumnsInLandscape?: number; /** - * Set the media type (image/video/both) to pick in iOS + * Set the media type (image/video/any) to pick */ mediaType?: ImagePickerMediaType; From ccba1f70cb37da6e7e5453c3f9ab02ead17aff62 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Mon, 15 Jul 2019 15:41:50 +0300 Subject: [PATCH 35/66] Refactor e2e tests - move on root level --- .travis.yml | 58 ++++++++- demo-vue/e2e/config/appium.capabilities.json | 74 ----------- demo-vue/e2e/test.e2e.ts | 120 ------------------ demo/e2e/config/mocha.opts | 5 - demo/e2e/setup.ts | 9 -- demo/e2e/tsconfig.json | 22 ---- .../e2e/config/appium.capabilities.json | 0 {demo-vue => tests}/e2e/config/mocha.opts | 0 {demo-vue => tests}/e2e/setup.ts | 0 {demo => tests}/e2e/test.e2e.ts | 0 {demo-vue => tests}/e2e/tsconfig.json | 0 tests/package.json | 22 ++++ 12 files changed, 76 insertions(+), 234 deletions(-) delete mode 100644 demo-vue/e2e/config/appium.capabilities.json delete mode 100644 demo-vue/e2e/test.e2e.ts delete mode 100644 demo/e2e/config/mocha.opts delete mode 100644 demo/e2e/setup.ts delete mode 100644 demo/e2e/tsconfig.json rename {demo => tests}/e2e/config/appium.capabilities.json (100%) rename {demo-vue => tests}/e2e/config/mocha.opts (100%) rename {demo-vue => tests}/e2e/setup.ts (100%) rename {demo => tests}/e2e/test.e2e.ts (100%) rename {demo-vue => tests}/e2e/tsconfig.json (100%) create mode 100644 tests/package.json diff --git a/.travis.yml b/.travis.yml index 8fc4ac2..52d1209 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,17 @@ env: global: - ANDROID_PACKAGE_JS='imagepicker-debug-js.apk' + - ANDROID_PACKAGE_NG='imagepicker-debug-ng.apk' - ANDROID_PACKAGE_VUE='imagepicker-debug-vue.apk' - ANDROID_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/outputs + - ANDROID_PACKAGE_FOLDER_NG=$TRAVIS_BUILD_DIR/demo-angular/outputs - ANDROID_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/outputs - ANDROID_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER" - IOS_PACKAGE_JS='imagepicker-demo-js.zip' + - IOS_PACKAGE_NG='imagepicker-demo-ng.zip' - IOS_PACKAGE_VUE='imagepicker-demo-vue.zip' - IOS_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/outputs + - IOS_PACKAGE_FOLDER_NG=$TRAVIS_BUILD_DIR/demo-angular/outputs - IOS_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/outputs - IOS_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER" @@ -40,6 +44,20 @@ matrix: - cd ../demo && npm i && tns build ios --bundle --env.uglify --copy-to "./outputs/demo.app" - cd $IOS_PACKAGE_FOLDER_JS && zip -r $IOS_PACKAGE_JS demo.app - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_JS?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_JS/$IOS_PACKAGE_JS" + - os: osx + env: + - WebpackiOS="12.0" + - Type="Angular" + osx_image: xcode10.2 + language: node_js + node_js: "10" + jdk: oraclejdk8 + before_script: pod repo update + script: + - cd src && npm run build + - cd ../demo-angular && npm i && tns build ios --bundle --env.uglify --copy-to "./outputs/demo-angular.app" + - cd $IOS_PACKAGE_FOLDER_NG && zip -r $IOS_PACKAGE_NG demo-angular.app + - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_NG?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_NG/$IOS_PACKAGE_NG" - os: osx env: - WebpackiOS="12.0" @@ -79,6 +97,17 @@ matrix: - cd src && npm run build - cd ../demo && npm i && tns build android --bundle --env.uglify --env.snapshot --copy-to "./outputs/app-debug.apk" - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_JS?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_JS/app-debug.apk" + - os: linux + dist: trusty + env: + - WebpackAndroid="28" + - Type="Angular" + jdk: oraclejdk8 + before_install: nvm install 10 + script: + - cd src && npm run build + - cd ../demo-angular && npm i && tns build android --bundle --env.uglify --env.snapshot --copy-to "./outputs/app-debug.apk" + - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_NG?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_NG/app-debug.apk" - language: android os: linux dist: trusty @@ -160,7 +189,7 @@ matrix: node_js: "10" script: - npm i -g appium - - cd demo && npm i + - cd tests && npm i - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_JS - os: linux env: @@ -171,8 +200,19 @@ matrix: node_js: "10" script: - npm i -g appium - - cd demo-vue && npm i + - cd tests && npm i - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_VUE + - os: linux + env: + - Android="24" + - Type="Angular" + language: node_js + os: linux + node_js: "10" + script: + - npm i -g appium + - cd tests && npm i + - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_NG - os: linux env: - iOS="12.0" @@ -181,7 +221,7 @@ matrix: node_js: "10" script: - npm i -g appium - - cd demo && npm i + - cd tests && npm i - travis_wait travis_retry npm run e2e -- --runType sim12iPhoneX --sauceLab --appPath $IOS_PACKAGE_JS - os: linux env: @@ -191,8 +231,18 @@ matrix: node_js: "10" script: - npm i -g appium - - cd demo-vue && npm i + - cd tests && npm i - travis_wait travis_retry npm run e2e -- --runType sim12iPhoneX --sauceLab --appPath $IOS_PACKAGE_VUE + - os: linux + env: + - iOS="12.0" + - Type="Angular" + language: node_js + node_js: "10" + script: + - npm i -g appium + - cd tests && npm i + - travis_wait travis_retry npm run e2e -- --runType sim12iPhoneX --sauceLab --appPath $IOS_PACKAGE_NG android: components: diff --git a/demo-vue/e2e/config/appium.capabilities.json b/demo-vue/e2e/config/appium.capabilities.json deleted file mode 100644 index b611563..0000000 --- a/demo-vue/e2e/config/appium.capabilities.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "android23.local": { - "platformName": "Android", - "platformVersion": "6.0", - "deviceName": "Emulator_Api23_Default", - "avd": "Emulator_Api23_Default", - "noReset": true - }, - "android23": { - "platformName": "Android", - "platformVersion": "6.0", - "deviceName": "Android Emulator", - "appium-version": "1.7.1", - "noReset": true - }, - "android25": { - "platformName": "Android", - "platformVersion": "7.1", - "deviceName": "Android GoogleAPI Emulator", - "appium-version": "1.7.1", - "noReset": true - }, - "android24": { - "platformName": "Android", - "platformVersion": "7.0", - "deviceName": "Android GoogleAPI Emulator", - "appiumVersion": "1.9.1", - "noReset": true, - "app": "" - }, - "android24.local": { - "platformName": "Android", - "platformVersion": "7.0", - "deviceName": "Emulator-Api24-Default", - "avd": "Emulator-Api24-Default", - "appiumVersion": "1.9.1", - "noReset": true - }, - "sim11iPhone6": { - "platformName": "iOS", - "platformVersion": "11.0", - "deviceName": "iPhone 6", - "appium-version": "1.7.1", - "app": "" - }, - "sim103iPhone6": { - "browserName": "", - "appium-version": "1.7.1", - "platformName": "iOS", - "platformVersion": "10.3", - "deviceName": "iPhone 6", - "app": "" - }, - "sim10iPhone6": { - "platformName": "iOS", - "platformVersion": "10.0", - "deviceName": "iPhone 6", - "appium-version": "1.7.1", - "app": "" - }, - "sim12iPhoneX":{ - "platformName": "iOS", - "platformVersion": "12.0", - "deviceName": "iPhone X", - "appium-version": "1.9.1", - "app": "", - "noReset": true, - "fullReset": false, - "density": 3, - "offsetPixels": 87, - "idleTimeout": 120, - "automationName": "Appium" - } -} \ No newline at end of file diff --git a/demo-vue/e2e/test.e2e.ts b/demo-vue/e2e/test.e2e.ts deleted file mode 100644 index fe990a5..0000000 --- a/demo-vue/e2e/test.e2e.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { AppiumDriver, createDriver, SearchOptions } from "nativescript-dev-appium"; -import { isSauceLab, runType } from "nativescript-dev-appium/lib/parser"; -import { expect } from "chai"; -const fs = require('fs'); -const addContext = require('mochawesome/addContext'); -const rimraf = require('rimraf'); -const isSauceRun = isSauceLab; -const isAndroid: boolean = runType.includes("android"); - -describe("Imagepicker", async function () { - const imagesFolderName = "Images"; - const imagesFolderNameIos = "Camera Roll"; - const doneButtonText = "Done"; - let driver: AppiumDriver; - - before(async () => { - driver = await createDriver(); - driver.defaultWaitTime = 10000; - let dir = "mochawesome-report"; - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir); - } - rimraf('mochawesome-report/*', function () { }); - }); - - after(async () => { - if (isSauceRun) { - driver.sessionId().then(function (sessionId) { - console.log("Report: https://saucelabs.com/beta/tests/" + sessionId); - }); - } - await driver.quit(); - console.log("Driver quits!"); - }); - - afterEach(async function () { - if (this.currentTest.state && this.currentTest.state === "failed") { - let png = await driver.logScreenshot(this.currentTest.title); - fs.copyFile(png, './mochawesome-report/' + this.currentTest.title + '.png', function (err) { - if (err) { - throw err; - } - console.log('Screenshot saved.'); - }); - addContext(this, './' + this.currentTest.title + '.png'); - } - }); - - it("should pick one image", async function () { - // await driver.driver.resetApp(); - const pickSingleButtonText = "Pick Single"; - let confirmButtonText = isAndroid ? "Allow" : "OK"; - - let pickSingleButton = await driver.findElementByText(pickSingleButtonText, SearchOptions.contains); - await pickSingleButton.click(); - const confirmButton = await driver.findElementByText(confirmButtonText); - await confirmButton.click(); - - if (isAndroid) { - const imagesFolderXpath = await driver.elementHelper.getXPathByText(imagesFolderName, SearchOptions.contains); - await driver.driver.sleep(3000); - let imagesFolder = await driver.driver.elementByXPathIfExists(imagesFolderXpath, 10000); - - if (isSauceRun && imagesFolder) { - await imagesFolder.click(); - let dcimFolder = await driver.findElementByText("DCIM", SearchOptions.contains); - await dcimFolder.click(); - imagesFolder = await driver.findElementByClassName(driver.locators.image); - await imagesFolder.click(); - } - } else { - const cameraRollFolder = await driver.findElementByText(imagesFolderNameIos); - await cameraRollFolder.click(); - } - - const imageLocator = isAndroid ? "android.widget.ImageView" : "XCUIElementTypeCell"; - const image = await driver.findElementByClassName(imageLocator); - await image.tap(); - - pickSingleButton = await driver.findElementByText(pickSingleButtonText, SearchOptions.contains); - expect(pickSingleButton).to.exist; - - const result = await driver.findElementByClassName(driver.locators.image); - expect(result).to.exist; - }); - - it("should pick multiple images", async function () { - let openImagesButtonText = isAndroid ? "Open" : doneButtonText; - let uploadPicVerification = "image 0"; - let uploadPicVerification2 = "image 1"; - - const pickMultipleButtonText = "Pick Multiple"; - const pickMultipleButton = await driver.findElementByText(pickMultipleButtonText, SearchOptions.contains); - await pickMultipleButton.click(); - - - if (!isAndroid) { - const cameraRollFolder = await driver.findElementByText(imagesFolderNameIos); - await cameraRollFolder.click(); - } - - - if (isAndroid) { - const allImages = await driver.findElementsByClassName("android.widget.ImageView"); - await allImages[5].hold(); // second Image - await allImages[2].click(); // first image - } else { - const allImages = await driver.findElementsByClassName("XCUIElementTypeCell"); - await allImages[0].click(); // first image - await allImages[1].click(); // second image - } - - const openImagesButton = await driver.findElementByText(openImagesButtonText, SearchOptions.contains); - await openImagesButton.click(); - const img = await driver.findElementByText(uploadPicVerification, SearchOptions.contains); - expect(img).to.exist; - const img1 = await driver.findElementByText(uploadPicVerification2, SearchOptions.contains); - expect(img1).to.exist; - }); -}); diff --git a/demo/e2e/config/mocha.opts b/demo/e2e/config/mocha.opts deleted file mode 100644 index d7d26a6..0000000 --- a/demo/e2e/config/mocha.opts +++ /dev/null @@ -1,5 +0,0 @@ ---timeout 800000 ---recursive e2e ---reporter mocha-multi ---reporter-options mochawesome=-,mocha-junit-reporter=test-results.xml ---exit \ No newline at end of file diff --git a/demo/e2e/setup.ts b/demo/e2e/setup.ts deleted file mode 100644 index 8b26e66..0000000 --- a/demo/e2e/setup.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { startServer, stopServer } from "nativescript-dev-appium"; - -before("start server", async () => { - await startServer(); -}); - -after("stop server", async () => { - await stopServer(); -}); diff --git a/demo/e2e/tsconfig.json b/demo/e2e/tsconfig.json deleted file mode 100644 index bc25d12..0000000 --- a/demo/e2e/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "importHelpers": false, - "sourceMap":true, - "types": [ - "node", - "mocha", - "chai" - ], - "lib": [ - "dom", - "es2015.core", - "es2015.iterable", - "es2016.array.include", - "es2015" - ] - } -} \ No newline at end of file diff --git a/demo/e2e/config/appium.capabilities.json b/tests/e2e/config/appium.capabilities.json similarity index 100% rename from demo/e2e/config/appium.capabilities.json rename to tests/e2e/config/appium.capabilities.json diff --git a/demo-vue/e2e/config/mocha.opts b/tests/e2e/config/mocha.opts similarity index 100% rename from demo-vue/e2e/config/mocha.opts rename to tests/e2e/config/mocha.opts diff --git a/demo-vue/e2e/setup.ts b/tests/e2e/setup.ts similarity index 100% rename from demo-vue/e2e/setup.ts rename to tests/e2e/setup.ts diff --git a/demo/e2e/test.e2e.ts b/tests/e2e/test.e2e.ts similarity index 100% rename from demo/e2e/test.e2e.ts rename to tests/e2e/test.e2e.ts diff --git a/demo-vue/e2e/tsconfig.json b/tests/e2e/tsconfig.json similarity index 100% rename from demo-vue/e2e/tsconfig.json rename to tests/e2e/tsconfig.json diff --git a/tests/package.json b/tests/package.json new file mode 100644 index 0000000..a983540 --- /dev/null +++ b/tests/package.json @@ -0,0 +1,22 @@ + +{ + "devDependencies": { + "@types/chai": "^4.1.3", + "@types/mocha": "^5.2.0", + "@types/node": "^10.1.2", + "babel-loader": "~8.0.0", + "chai": "~4.1.2", + "chai-as-promised": "~7.1.1", + "karma": "^2.0.2", + "karma-nativescript-launcher": "^0.4.0", + "mocha": "^3.3.0", + "mocha-junit-reporter": "^1.18.0", + "mocha-multi": "^1.0.1", + "mochawesome": "^3.1.1", + "nativescript-dev-appium": "~5.2.0", + "typescript": "~3.5.3" + }, + "scripts": { + "e2e": "tsc -p e2e && mocha --opts ./e2e/config/mocha.opts" + } +} \ No newline at end of file From 6cf8b3445f2d7b5f6d3d95dc113a0248d6076acf Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Mon, 15 Jul 2019 16:04:08 +0300 Subject: [PATCH 36/66] Update: android tools to 28 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 52d1209..e16d5eb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -248,7 +248,7 @@ android: components: - tools - platform-tools - - build-tools-28.0.3 + - build-tools-28 - android-28 - android-23 - extra-android-m2repository From 86ec3035a4eed4e3399c4d74ad85dd0671c3c796 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Mon, 15 Jul 2019 16:19:56 +0300 Subject: [PATCH 37/66] Fix: missing language android on build stage --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index e16d5eb..b601942 100644 --- a/.travis.yml +++ b/.travis.yml @@ -97,7 +97,8 @@ matrix: - cd src && npm run build - cd ../demo && npm i && tns build android --bundle --env.uglify --env.snapshot --copy-to "./outputs/app-debug.apk" - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_JS?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_JS/app-debug.apk" - - os: linux + - language: android + os: linux dist: trusty env: - WebpackAndroid="28" @@ -248,7 +249,7 @@ android: components: - tools - platform-tools - - build-tools-28 + - build-tools-28.0.3 - android-28 - android-23 - extra-android-m2repository From 6d146c63861c935a8e0f2b8239c4fde81ec7c830 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Mon, 15 Jul 2019 17:03:50 +0300 Subject: [PATCH 38/66] Remove old builds --- .travis.yml | 75 +---------------------------------------------------- 1 file changed, 1 insertion(+), 74 deletions(-) diff --git a/.travis.yml b/.travis.yml index b601942..4658607 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,7 +55,7 @@ matrix: before_script: pod repo update script: - cd src && npm run build - - cd ../demo-angular && npm i && tns build ios --bundle --env.uglify --copy-to "./outputs/demo-angular.app" + - cd ../demo-angular && npm i && tns build ios --bundle --env.uglify --env.aot --copy-to "./outputs/demo-angular.app" - cd $IOS_PACKAGE_FOLDER_NG && zip -r $IOS_PACKAGE_NG demo-angular.app - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_NG?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_NG/$IOS_PACKAGE_NG" - os: osx @@ -72,19 +72,6 @@ matrix: - cd ../demo-vue && npm i && tns build ios --bundle --env.uglify --copy-to "./outputs/demovue.app" - cd $IOS_PACKAGE_FOLDER_VUE && zip -r $IOS_PACKAGE_VUE demovue.app - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_VUE?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_VUE/$IOS_PACKAGE_VUE" - - os: osx - env: - - WebpackiOS="12.0" - - Type="Angular" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - before_script: pod repo update - script: - - cd src && npm run build && npm pack - - cd ../demo-angular && tns plugin add ../src/*.tgz - - npm i && tns build ios --bundle --env.uglify --env.aot - language: android os: linux dist: trusty @@ -121,66 +108,6 @@ matrix: - cd src && npm run build - cd ../demo-vue && npm i && tns build android --bundle --env.uglify --copy-to "./outputs/app-debug.apk" - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_VUE?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_VUE/app-debug.apk" - - language: android - os: linux - dist: trusty - env: - - WebpackAndroid="28" - - Type="Angular" - jdk: oraclejdk8 - before_install: nvm install 10 - script: - - cd src && npm run build - - cd ../publish && sh pack.sh - - cd ../demo-angular && tns plugin add ../publish/package/*.tgz - - npm i && tns build android --bundle --env.uglify --env.snapshot --env.aot - - language: android - os: linux - dist: trusty - env: - - BuildAndroid="28" - - Type="VanillaJS" - - jdk: oraclejdk8 - before_install: nvm install 10 - script: - - cd demo && npm run ci.android.build - - language: android - os: linux - dist: trusty - env: - - BuildAndroid="28" - - Type="Angular" - - jdk: oraclejdk8 - before_install: nvm install 10 - script: - - cd demo-angular && npm run ci.android.build - - os: osx - env: - - BuildiOS="12.0" - - Xcode="10.0" - - Type="VanillaJS" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - before_script: pod repo update - script: - - cd src && npm run build - - cd ../demo && tns build ios --bundle --env.uglify - - os: osx - env: - - BuildiOS="12.0" - - Xcode="10.0" - - Type="Angular" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - before_script: pod repo update - script: - - cd demo-angular && npm run ci.ios.build - stage: "UI Tests" env: - Android="24" From 9068a80faacc418157a0e06e799f9223cdeec64c Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Thu, 18 Jul 2019 08:54:19 +0300 Subject: [PATCH 39/66] chore: update demos to 6.0 (#281) * chore: update demos to 6.0 * chore: remove syncAllFiles * fix linking plugin fronm src --- .../{ => src/main}/AndroidManifest.xml | 0 .../main/res}/drawable-hdpi/background.png | Bin .../{ => src/main/res}/drawable-hdpi/icon.png | Bin .../{ => src/main/res}/drawable-hdpi/logo.png | Bin .../main/res}/drawable-ldpi/background.png | Bin .../{ => src/main/res}/drawable-ldpi/icon.png | Bin .../{ => src/main/res}/drawable-ldpi/logo.png | Bin .../main/res}/drawable-mdpi/background.png | Bin .../{ => src/main/res}/drawable-mdpi/icon.png | Bin .../{ => src/main/res}/drawable-mdpi/logo.png | Bin .../res}/drawable-nodpi/splash_screen.xml | 0 .../main/res}/drawable-xhdpi/background.png | Bin .../main/res}/drawable-xhdpi/icon.png | Bin .../main/res}/drawable-xhdpi/logo.png | Bin .../main/res}/drawable-xxhdpi/background.png | Bin .../main/res}/drawable-xxhdpi/icon.png | Bin .../main/res}/drawable-xxhdpi/logo.png | Bin .../main/res}/drawable-xxxhdpi/background.png | Bin .../main/res}/drawable-xxxhdpi/icon.png | Bin .../main/res}/drawable-xxxhdpi/logo.png | Bin .../{ => src/main/res}/values-v21/colors.xml | 0 .../{ => src/main/res}/values-v21/styles.xml | 0 .../{ => src/main/res}/values/colors.xml | 0 .../{ => src/main/res}/values/styles.xml | 0 demo-angular/karma.conf.js | 47 +++++++++++++++--- demo-angular/package.json | 22 ++++---- .../{ => src/main}/AndroidManifest.xml | 0 .../main/res}/drawable-hdpi/background.png | Bin .../{ => src/main/res}/drawable-hdpi/icon.png | Bin .../{ => src/main/res}/drawable-hdpi/logo.png | Bin .../main/res}/drawable-ldpi/background.png | Bin .../{ => src/main/res}/drawable-ldpi/icon.png | Bin .../{ => src/main/res}/drawable-ldpi/logo.png | Bin .../main/res}/drawable-mdpi/background.png | Bin .../{ => src/main/res}/drawable-mdpi/icon.png | Bin .../{ => src/main/res}/drawable-mdpi/logo.png | Bin .../res}/drawable-nodpi/splash_screen.xml | 0 .../main/res}/drawable-xhdpi/background.png | Bin .../main/res}/drawable-xhdpi/icon.png | Bin .../main/res}/drawable-xhdpi/logo.png | Bin .../main/res}/drawable-xxhdpi/background.png | Bin .../main/res}/drawable-xxhdpi/icon.png | Bin .../main/res}/drawable-xxhdpi/logo.png | Bin .../main/res}/drawable-xxxhdpi/background.png | Bin .../main/res}/drawable-xxxhdpi/icon.png | Bin .../main/res}/drawable-xxxhdpi/logo.png | Bin .../{ => src/main/res}/values-v21/colors.xml | 0 .../{ => src/main/res}/values-v21/styles.xml | 0 .../{ => src/main/res}/values/colors.xml | 0 .../{ => src/main/res}/values/styles.xml | 0 demo-vue/package.json | 18 +++---- .../{ => src/main}/AndroidManifest.xml | 0 .../main/res}/drawable-hdpi/background.png | Bin .../{ => src/main/res}/drawable-hdpi/icon.png | Bin .../{ => src/main/res}/drawable-hdpi/logo.png | Bin .../main/res}/drawable-ldpi/background.png | Bin .../{ => src/main/res}/drawable-ldpi/icon.png | Bin .../{ => src/main/res}/drawable-ldpi/logo.png | Bin .../main/res}/drawable-mdpi/background.png | Bin .../{ => src/main/res}/drawable-mdpi/icon.png | Bin .../{ => src/main/res}/drawable-mdpi/logo.png | Bin .../res}/drawable-nodpi/splash_screen.xml | 0 .../main/res}/drawable-xhdpi/background.png | Bin .../main/res}/drawable-xhdpi/icon.png | Bin .../main/res}/drawable-xhdpi/logo.png | Bin .../main/res}/drawable-xxhdpi/background.png | Bin .../main/res}/drawable-xxhdpi/icon.png | Bin .../main/res}/drawable-xxhdpi/logo.png | Bin .../main/res}/drawable-xxxhdpi/background.png | Bin .../main/res}/drawable-xxxhdpi/icon.png | Bin .../main/res}/drawable-xxxhdpi/logo.png | Bin .../{ => src/main/res}/values-v21/colors.xml | 0 .../{ => src/main/res}/values-v21/styles.xml | 0 .../{ => src/main/res}/values/colors.xml | 0 .../{ => src/main/res}/values/styles.xml | 0 demo/karma.conf.js | 47 +++++++++++++++--- demo/package.json | 21 ++++---- src/package.json | 8 +-- 78 files changed, 113 insertions(+), 50 deletions(-) rename demo-angular/app/App_Resources/Android/{ => src/main}/AndroidManifest.xml (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-hdpi/background.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-hdpi/icon.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-hdpi/logo.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-ldpi/background.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-ldpi/icon.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-ldpi/logo.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-mdpi/background.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-mdpi/icon.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-mdpi/logo.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-nodpi/splash_screen.xml (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-xhdpi/background.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-xhdpi/icon.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-xhdpi/logo.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-xxhdpi/background.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-xxhdpi/icon.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-xxhdpi/logo.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-xxxhdpi/background.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-xxxhdpi/icon.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/drawable-xxxhdpi/logo.png (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/values-v21/colors.xml (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/values-v21/styles.xml (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/values/colors.xml (100%) rename demo-angular/app/App_Resources/Android/{ => src/main/res}/values/styles.xml (100%) rename demo-vue/app/App_Resources/Android/{ => src/main}/AndroidManifest.xml (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-hdpi/background.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-hdpi/icon.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-hdpi/logo.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-ldpi/background.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-ldpi/icon.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-ldpi/logo.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-mdpi/background.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-mdpi/icon.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-mdpi/logo.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-nodpi/splash_screen.xml (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-xhdpi/background.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-xhdpi/icon.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-xhdpi/logo.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-xxhdpi/background.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-xxhdpi/icon.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-xxhdpi/logo.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-xxxhdpi/background.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-xxxhdpi/icon.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/drawable-xxxhdpi/logo.png (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/values-v21/colors.xml (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/values-v21/styles.xml (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/values/colors.xml (100%) rename demo-vue/app/App_Resources/Android/{ => src/main/res}/values/styles.xml (100%) rename demo/app/App_Resources/Android/{ => src/main}/AndroidManifest.xml (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-hdpi/background.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-hdpi/icon.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-hdpi/logo.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-ldpi/background.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-ldpi/icon.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-ldpi/logo.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-mdpi/background.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-mdpi/icon.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-mdpi/logo.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-nodpi/splash_screen.xml (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-xhdpi/background.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-xhdpi/icon.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-xhdpi/logo.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-xxhdpi/background.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-xxhdpi/icon.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-xxhdpi/logo.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-xxxhdpi/background.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-xxxhdpi/icon.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/drawable-xxxhdpi/logo.png (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/values-v21/colors.xml (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/values-v21/styles.xml (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/values/colors.xml (100%) rename demo/app/App_Resources/Android/{ => src/main/res}/values/styles.xml (100%) diff --git a/demo-angular/app/App_Resources/Android/AndroidManifest.xml b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml similarity index 100% rename from demo-angular/app/App_Resources/Android/AndroidManifest.xml rename to demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml diff --git a/demo-angular/app/App_Resources/Android/drawable-hdpi/background.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-hdpi/background.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png diff --git a/demo-angular/app/App_Resources/Android/drawable-hdpi/icon.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-hdpi/icon.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png diff --git a/demo-angular/app/App_Resources/Android/drawable-hdpi/logo.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-hdpi/logo.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png diff --git a/demo-angular/app/App_Resources/Android/drawable-ldpi/background.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-ldpi/background.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png diff --git a/demo-angular/app/App_Resources/Android/drawable-ldpi/icon.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-ldpi/icon.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png diff --git a/demo-angular/app/App_Resources/Android/drawable-ldpi/logo.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-ldpi/logo.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png diff --git a/demo-angular/app/App_Resources/Android/drawable-mdpi/background.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-mdpi/background.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png diff --git a/demo-angular/app/App_Resources/Android/drawable-mdpi/icon.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-mdpi/icon.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png diff --git a/demo-angular/app/App_Resources/Android/drawable-mdpi/logo.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-mdpi/logo.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png diff --git a/demo-angular/app/App_Resources/Android/drawable-nodpi/splash_screen.xml b/demo-angular/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-nodpi/splash_screen.xml rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml diff --git a/demo-angular/app/App_Resources/Android/drawable-xhdpi/background.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-xhdpi/background.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png diff --git a/demo-angular/app/App_Resources/Android/drawable-xhdpi/icon.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-xhdpi/icon.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png diff --git a/demo-angular/app/App_Resources/Android/drawable-xhdpi/logo.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-xhdpi/logo.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png diff --git a/demo-angular/app/App_Resources/Android/drawable-xxhdpi/background.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-xxhdpi/background.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png diff --git a/demo-angular/app/App_Resources/Android/drawable-xxhdpi/icon.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-xxhdpi/icon.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png diff --git a/demo-angular/app/App_Resources/Android/drawable-xxhdpi/logo.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-xxhdpi/logo.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png diff --git a/demo-angular/app/App_Resources/Android/drawable-xxxhdpi/background.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-xxxhdpi/background.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png diff --git a/demo-angular/app/App_Resources/Android/drawable-xxxhdpi/icon.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-xxxhdpi/icon.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png diff --git a/demo-angular/app/App_Resources/Android/drawable-xxxhdpi/logo.png b/demo-angular/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png similarity index 100% rename from demo-angular/app/App_Resources/Android/drawable-xxxhdpi/logo.png rename to demo-angular/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png diff --git a/demo-angular/app/App_Resources/Android/values-v21/colors.xml b/demo-angular/app/App_Resources/Android/src/main/res/values-v21/colors.xml similarity index 100% rename from demo-angular/app/App_Resources/Android/values-v21/colors.xml rename to demo-angular/app/App_Resources/Android/src/main/res/values-v21/colors.xml diff --git a/demo-angular/app/App_Resources/Android/values-v21/styles.xml b/demo-angular/app/App_Resources/Android/src/main/res/values-v21/styles.xml similarity index 100% rename from demo-angular/app/App_Resources/Android/values-v21/styles.xml rename to demo-angular/app/App_Resources/Android/src/main/res/values-v21/styles.xml diff --git a/demo-angular/app/App_Resources/Android/values/colors.xml b/demo-angular/app/App_Resources/Android/src/main/res/values/colors.xml similarity index 100% rename from demo-angular/app/App_Resources/Android/values/colors.xml rename to demo-angular/app/App_Resources/Android/src/main/res/values/colors.xml diff --git a/demo-angular/app/App_Resources/Android/values/styles.xml b/demo-angular/app/App_Resources/Android/src/main/res/values/styles.xml similarity index 100% rename from demo-angular/app/App_Resources/Android/values/styles.xml rename to demo-angular/app/App_Resources/Android/src/main/res/values/styles.xml diff --git a/demo-angular/karma.conf.js b/demo-angular/karma.conf.js index 91d9c28..7974602 100644 --- a/demo-angular/karma.conf.js +++ b/demo-angular/karma.conf.js @@ -1,5 +1,5 @@ -module.exports = function(config) { - config.set({ +module.exports = function (config) { + const options = { // base path that will be used to resolve all patterns (eg. files, exclude) basePath: '', @@ -11,9 +11,7 @@ module.exports = function(config) { // list of files / patterns to load in the browser - files: [ - 'app/**/*.js', - ], + files: ['app/tests/**/*.*'], // list of files to exclude @@ -72,6 +70,39 @@ module.exports = function(config) { // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits - singleRun: true - }); -}; + singleRun: false + }; + + setWebpackPreprocessor(config, options); + setWebpack(config, options); + + config.set(options); +} + +function setWebpackPreprocessor(config, options) { + if (config && config.bundle) { + if (!options.preprocessors) { + options.preprocessors = {}; + } + + options.files.forEach(file => { + if (!options.preprocessors[file]) { + options.preprocessors[file] = []; + } + options.preprocessors[file].push('webpack'); + }); + } +} + +function setWebpack(config, options) { + if (config && config.bundle) { + const env = {}; + env[config.platform] = true; + env.sourceMap = config.debugBrk; + options.webpack = require('./webpack.config')(env); + delete options.webpack.entry; + delete options.webpack.output.libraryTarget; + const invalidPluginsForUnitTesting = ["GenerateBundleStarterPlugin", "GenerateNativeScriptEntryPointsPlugin"]; + options.webpack.plugins = options.webpack.plugins.filter(p => !invalidPluginsForUnitTesting.includes(p.constructor.name)); + } +} diff --git a/demo-angular/package.json b/demo-angular/package.json index 932d4c6..88199fb 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -2,10 +2,10 @@ "nativescript": { "id": "org.nativescript.imagepickerdemoangular", "tns-ios": { - "version": "5.4.0" + "version": "6.0.1" }, "tns-android": { - "version": "5.4.0" + "version": "6.0.0" } }, "dependencies": { @@ -20,23 +20,23 @@ "nativescript-angular": "~8.0.0", "nativescript-imagepicker": "../src", "nativescript-theme-core": "^1.0.4", - "nativescript-unit-test-runner": "^0.3.4", + "nativescript-unit-test-runner": "0.7.0", "reflect-metadata": "~0.1.8", "rxjs": "^6.3.3", - "tns-core-modules": "^5.0.0", - "typescript": "~3.4.5" + "tns-core-modules": "^6.0.0" }, "devDependencies": { "jasmine-core": "^2.5.2", - "karma": "^1.3.0", - "karma-jasmine": "^1.0.2", + "karma": "4.1.0", + "karma-jasmine": "2.0.1", "karma-nativescript-launcher": "^0.4.0", "nativescript-css-loader": "~0.26.0", - "nativescript-dev-typescript": "~0.10.0", - "nativescript-dev-webpack": "~0.24.0", - "tns-platform-declarations": "^5.0.0", + "nativescript-dev-webpack": "~1.0.1", + "tns-platform-declarations": "^6.0.0", "tslint": "~5.11.0", - "zone.js": "^0.8.4" + "zone.js": "^0.8.4", + "typescript": "~3.4.5", + "karma-webpack": "3.0.5" }, "scripts": { "build.plugin": "cd ../src && npm run build", diff --git a/demo-vue/app/App_Resources/Android/AndroidManifest.xml b/demo-vue/app/App_Resources/Android/src/main/AndroidManifest.xml similarity index 100% rename from demo-vue/app/App_Resources/Android/AndroidManifest.xml rename to demo-vue/app/App_Resources/Android/src/main/AndroidManifest.xml diff --git a/demo-vue/app/App_Resources/Android/drawable-hdpi/background.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-hdpi/background.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png diff --git a/demo-vue/app/App_Resources/Android/drawable-hdpi/icon.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-hdpi/icon.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png diff --git a/demo-vue/app/App_Resources/Android/drawable-hdpi/logo.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-hdpi/logo.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png diff --git a/demo-vue/app/App_Resources/Android/drawable-ldpi/background.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-ldpi/background.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png diff --git a/demo-vue/app/App_Resources/Android/drawable-ldpi/icon.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-ldpi/icon.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png diff --git a/demo-vue/app/App_Resources/Android/drawable-ldpi/logo.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-ldpi/logo.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png diff --git a/demo-vue/app/App_Resources/Android/drawable-mdpi/background.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-mdpi/background.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png diff --git a/demo-vue/app/App_Resources/Android/drawable-mdpi/icon.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-mdpi/icon.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png diff --git a/demo-vue/app/App_Resources/Android/drawable-mdpi/logo.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-mdpi/logo.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png diff --git a/demo-vue/app/App_Resources/Android/drawable-nodpi/splash_screen.xml b/demo-vue/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-nodpi/splash_screen.xml rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml diff --git a/demo-vue/app/App_Resources/Android/drawable-xhdpi/background.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-xhdpi/background.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png diff --git a/demo-vue/app/App_Resources/Android/drawable-xhdpi/icon.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-xhdpi/icon.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png diff --git a/demo-vue/app/App_Resources/Android/drawable-xhdpi/logo.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-xhdpi/logo.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png diff --git a/demo-vue/app/App_Resources/Android/drawable-xxhdpi/background.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-xxhdpi/background.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png diff --git a/demo-vue/app/App_Resources/Android/drawable-xxhdpi/icon.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-xxhdpi/icon.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png diff --git a/demo-vue/app/App_Resources/Android/drawable-xxhdpi/logo.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-xxhdpi/logo.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png diff --git a/demo-vue/app/App_Resources/Android/drawable-xxxhdpi/background.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-xxxhdpi/background.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png diff --git a/demo-vue/app/App_Resources/Android/drawable-xxxhdpi/icon.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-xxxhdpi/icon.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png diff --git a/demo-vue/app/App_Resources/Android/drawable-xxxhdpi/logo.png b/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png similarity index 100% rename from demo-vue/app/App_Resources/Android/drawable-xxxhdpi/logo.png rename to demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png diff --git a/demo-vue/app/App_Resources/Android/values-v21/colors.xml b/demo-vue/app/App_Resources/Android/src/main/res/values-v21/colors.xml similarity index 100% rename from demo-vue/app/App_Resources/Android/values-v21/colors.xml rename to demo-vue/app/App_Resources/Android/src/main/res/values-v21/colors.xml diff --git a/demo-vue/app/App_Resources/Android/values-v21/styles.xml b/demo-vue/app/App_Resources/Android/src/main/res/values-v21/styles.xml similarity index 100% rename from demo-vue/app/App_Resources/Android/values-v21/styles.xml rename to demo-vue/app/App_Resources/Android/src/main/res/values-v21/styles.xml diff --git a/demo-vue/app/App_Resources/Android/values/colors.xml b/demo-vue/app/App_Resources/Android/src/main/res/values/colors.xml similarity index 100% rename from demo-vue/app/App_Resources/Android/values/colors.xml rename to demo-vue/app/App_Resources/Android/src/main/res/values/colors.xml diff --git a/demo-vue/app/App_Resources/Android/values/styles.xml b/demo-vue/app/App_Resources/Android/src/main/res/values/styles.xml similarity index 100% rename from demo-vue/app/App_Resources/Android/values/styles.xml rename to demo-vue/app/App_Resources/Android/src/main/res/values/styles.xml diff --git a/demo-vue/package.json b/demo-vue/package.json index 33fc1f5..7527afb 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,17 +2,17 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "5.4.0" + "version": "6.0.0" }, "tns-ios": { - "version": "5.4.0" + "version": "6.0.1" } }, "dependencies": { "nativescript-imagepicker": "../src", "nativescript-theme-core": "~1.0.4", - "nativescript-vue": "~2.2.0", - "tns-core-modules": "^5.0.0" + "nativescript-vue": "~2.3.0", + "tns-core-modules": "^6.0.0" }, "devDependencies": { "@types/chai": "^4.1.4", @@ -28,11 +28,11 @@ "mocha-multi": "^1.0.1", "mochawesome": "^3.1.1", "nativescript-dev-appium": "~5.2.0", - "nativescript-dev-webpack": "~0.24.0", - "nativescript-dev-typescript": "~0.10.0", - "nativescript-vue-template-compiler": "~2.2.0", - "node-sass": "~4.9.0", - "vue-loader": "~15.4.0" + "nativescript-dev-webpack": "~1.0.1", + "nativescript-vue-template-compiler": "~2.3.0", + "node-sass": "~4.12.0", + "vue-loader": "~15.4.0", + "typescript": "~3.4.5" }, "scripts": { "build.plugin": "cd ../src && npm run build", diff --git a/demo/app/App_Resources/Android/AndroidManifest.xml b/demo/app/App_Resources/Android/src/main/AndroidManifest.xml similarity index 100% rename from demo/app/App_Resources/Android/AndroidManifest.xml rename to demo/app/App_Resources/Android/src/main/AndroidManifest.xml diff --git a/demo/app/App_Resources/Android/drawable-hdpi/background.png b/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-hdpi/background.png rename to demo/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png diff --git a/demo/app/App_Resources/Android/drawable-hdpi/icon.png b/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-hdpi/icon.png rename to demo/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png diff --git a/demo/app/App_Resources/Android/drawable-hdpi/logo.png b/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-hdpi/logo.png rename to demo/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png diff --git a/demo/app/App_Resources/Android/drawable-ldpi/background.png b/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-ldpi/background.png rename to demo/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png diff --git a/demo/app/App_Resources/Android/drawable-ldpi/icon.png b/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-ldpi/icon.png rename to demo/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png diff --git a/demo/app/App_Resources/Android/drawable-ldpi/logo.png b/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-ldpi/logo.png rename to demo/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png diff --git a/demo/app/App_Resources/Android/drawable-mdpi/background.png b/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-mdpi/background.png rename to demo/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png diff --git a/demo/app/App_Resources/Android/drawable-mdpi/icon.png b/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-mdpi/icon.png rename to demo/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png diff --git a/demo/app/App_Resources/Android/drawable-mdpi/logo.png b/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-mdpi/logo.png rename to demo/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png diff --git a/demo/app/App_Resources/Android/drawable-nodpi/splash_screen.xml b/demo/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml similarity index 100% rename from demo/app/App_Resources/Android/drawable-nodpi/splash_screen.xml rename to demo/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml diff --git a/demo/app/App_Resources/Android/drawable-xhdpi/background.png b/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-xhdpi/background.png rename to demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png diff --git a/demo/app/App_Resources/Android/drawable-xhdpi/icon.png b/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-xhdpi/icon.png rename to demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png diff --git a/demo/app/App_Resources/Android/drawable-xhdpi/logo.png b/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-xhdpi/logo.png rename to demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png diff --git a/demo/app/App_Resources/Android/drawable-xxhdpi/background.png b/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-xxhdpi/background.png rename to demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png diff --git a/demo/app/App_Resources/Android/drawable-xxhdpi/icon.png b/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-xxhdpi/icon.png rename to demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png diff --git a/demo/app/App_Resources/Android/drawable-xxhdpi/logo.png b/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-xxhdpi/logo.png rename to demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png diff --git a/demo/app/App_Resources/Android/drawable-xxxhdpi/background.png b/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-xxxhdpi/background.png rename to demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png diff --git a/demo/app/App_Resources/Android/drawable-xxxhdpi/icon.png b/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-xxxhdpi/icon.png rename to demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png diff --git a/demo/app/App_Resources/Android/drawable-xxxhdpi/logo.png b/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png similarity index 100% rename from demo/app/App_Resources/Android/drawable-xxxhdpi/logo.png rename to demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png diff --git a/demo/app/App_Resources/Android/values-v21/colors.xml b/demo/app/App_Resources/Android/src/main/res/values-v21/colors.xml similarity index 100% rename from demo/app/App_Resources/Android/values-v21/colors.xml rename to demo/app/App_Resources/Android/src/main/res/values-v21/colors.xml diff --git a/demo/app/App_Resources/Android/values-v21/styles.xml b/demo/app/App_Resources/Android/src/main/res/values-v21/styles.xml similarity index 100% rename from demo/app/App_Resources/Android/values-v21/styles.xml rename to demo/app/App_Resources/Android/src/main/res/values-v21/styles.xml diff --git a/demo/app/App_Resources/Android/values/colors.xml b/demo/app/App_Resources/Android/src/main/res/values/colors.xml similarity index 100% rename from demo/app/App_Resources/Android/values/colors.xml rename to demo/app/App_Resources/Android/src/main/res/values/colors.xml diff --git a/demo/app/App_Resources/Android/values/styles.xml b/demo/app/App_Resources/Android/src/main/res/values/styles.xml similarity index 100% rename from demo/app/App_Resources/Android/values/styles.xml rename to demo/app/App_Resources/Android/src/main/res/values/styles.xml diff --git a/demo/karma.conf.js b/demo/karma.conf.js index 91d9c28..7974602 100644 --- a/demo/karma.conf.js +++ b/demo/karma.conf.js @@ -1,5 +1,5 @@ -module.exports = function(config) { - config.set({ +module.exports = function (config) { + const options = { // base path that will be used to resolve all patterns (eg. files, exclude) basePath: '', @@ -11,9 +11,7 @@ module.exports = function(config) { // list of files / patterns to load in the browser - files: [ - 'app/**/*.js', - ], + files: ['app/tests/**/*.*'], // list of files to exclude @@ -72,6 +70,39 @@ module.exports = function(config) { // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits - singleRun: true - }); -}; + singleRun: false + }; + + setWebpackPreprocessor(config, options); + setWebpack(config, options); + + config.set(options); +} + +function setWebpackPreprocessor(config, options) { + if (config && config.bundle) { + if (!options.preprocessors) { + options.preprocessors = {}; + } + + options.files.forEach(file => { + if (!options.preprocessors[file]) { + options.preprocessors[file] = []; + } + options.preprocessors[file].push('webpack'); + }); + } +} + +function setWebpack(config, options) { + if (config && config.bundle) { + const env = {}; + env[config.platform] = true; + env.sourceMap = config.debugBrk; + options.webpack = require('./webpack.config')(env); + delete options.webpack.entry; + delete options.webpack.output.libraryTarget; + const invalidPluginsForUnitTesting = ["GenerateBundleStarterPlugin", "GenerateNativeScriptEntryPointsPlugin"]; + options.webpack.plugins = options.webpack.plugins.filter(p => !invalidPluginsForUnitTesting.includes(p.constructor.name)); + } +} diff --git a/demo/package.json b/demo/package.json index d323891..a97b3d4 100644 --- a/demo/package.json +++ b/demo/package.json @@ -2,17 +2,17 @@ "nativescript": { "id": "org.nativescript.imagepickerdemo", "tns-android": { - "version": "5.4.0" + "version": "6.0.0" }, "tns-ios": { - "version": "5.4.0" + "version": "6.0.1" } }, "dependencies": { "nativescript-imagepicker": "../src", "nativescript-theme-core": "^1.0.4", - "nativescript-unit-test-runner": "^0.3.4", - "tns-core-modules": "^5.0.0" + "nativescript-unit-test-runner": "0.7.0", + "tns-core-modules": "^6.0.0" }, "devDependencies": { "@types/chai": "^4.1.4", @@ -21,8 +21,8 @@ "chai": "~4.1.2", "chai-as-promised": "~7.1.1", "jasmine-core": "^3.2.0", - "karma": "^2.0.5", - "karma-jasmine": "^1.1.2", + "karma": "4.1.0", + "karma-jasmine": "2.0.1", "karma-nativescript-launcher": "^0.4.0", "mocha": "^3.3.0", "mocha-junit-reporter": "^1.18.0", @@ -30,10 +30,11 @@ "mochawesome": "^3.1.1", "nativescript-css-loader": "~0.26.0", "nativescript-dev-appium": "~5.2.0", - "nativescript-dev-typescript": "~0.10.0", - "nativescript-dev-webpack": "~0.24.0", - "tns-platform-declarations": "^5.0.0", - "tslint": "~5.11.0" + "nativescript-dev-webpack": "~1.0.1", + "tns-platform-declarations": "^6.0.0", + "tslint": "~5.11.0", + "typescript": "~3.4.5", + "karma-webpack": "3.0.5" }, "scripts": { "build.plugin": "cd ../src && npm run build", diff --git a/src/package.json b/src/package.json index 18428d4..4552ebd 100644 --- a/src/package.json +++ b/src/package.json @@ -26,10 +26,10 @@ "tslint": "cd .. && tslint \"**/*.ts\" --config tslint.json --exclude \"**/node_modules/**\"", "plugin.link": "npm link && cd ../demo && npm link nativescript-imagepicker && cd ../demo-angular && npm link nativescript-imagepicker", "plugin.tscwatch": "npm run tsc -- -w", - "demo.ios": "npm i && npm run tsc && cd ../demo && tns run ios --syncAllFiles", - "demo.android": "npm i && npm run tsc && cd ../demo && tns run android --syncAllFiles", - "demo.ng.ios": "npm i && npm run tsc && cd ../demo-angular && tns run ios --syncAllFiles", - "demo.ng.android": "npm i && npm run tsc && cd ../demo-angular && tns run android --syncAllFiles", + "demo.ios": "npm i && npm run tsc && cd ../demo && tns run ios", + "demo.android": "npm i && npm run tsc && cd ../demo && tns run android", + "demo.ng.ios": "npm i && npm run tsc && cd ../demo-angular && tns run ios", + "demo.ng.android": "npm i && npm run tsc && cd ../demo-angular && tns run android", "clean": "rm -rf node_modules && cd ../demo && rm -rf hooks node_modules platforms && cd ../src && npm run plugin.link" }, "keywords": [ From 33bed404af99e2ba98405ae0d566de130ca1e9a2 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 18 Jul 2019 20:29:00 -0600 Subject: [PATCH 40/66] fix(chrome-downloads): added flag to mark as download vs image --- src/imagepicker.android.ts | 66 ++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index 0b3416e..ce59f4c 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -25,7 +25,7 @@ class UriHelper { } // DownloadsProvider else if (UriHelper.isDownloadsDocument(uri)) { - return UriHelper.getDataColumn(uri, null, null); + return UriHelper.getDataColumn(uri, null, null, true); } // MediaProvider else if (UriHelper.isMediaDocument(uri)) { @@ -45,7 +45,7 @@ class UriHelper { let selection = "_id=?"; let selectionArgs = [id]; - return UriHelper.getDataColumn(contentUri, selection, selectionArgs); + return UriHelper.getDataColumn(contentUri, selection, selectionArgs, false); } } else { @@ -62,33 +62,57 @@ class UriHelper { return undefined; } - private static getDataColumn(uri: android.net.Uri, selection, selectionArgs) { + private static getDataColumn(uri: android.net.Uri, selection, selectionArgs, isDownload: boolean) { let cursor = null; let filePath; - let columns = ["_display_name"]; - - try { - cursor = this.getContentResolver().query(uri, columns, selection, selectionArgs, null); - if (cursor != null && cursor.moveToFirst()) { - let column_index = cursor.getColumnIndexOrThrow(columns[0]); - filePath = cursor.getString(column_index); - if (filePath) { - const dl = android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS); - filePath = `${dl}/${filePath}`; - return filePath; + if (isDownload) { + let columns = ["_display_name"]; + try { + cursor = this.getContentResolver().query(uri, columns, selection, selectionArgs, null); + if (cursor != null && cursor.moveToFirst()) { + let column_index = cursor.getColumnIndexOrThrow(columns[0]); + filePath = cursor.getString(column_index); + if (filePath) { + const dl = android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS); + filePath = `${dl}/${filePath}`; + return filePath; + } + } + } + catch (e) { + console.log(e); + } + finally { + if (cursor) { + cursor.close(); } } } - catch (e) { - console.log(e); - } - finally { - if (cursor) { - cursor.close(); + else { + let columns = [android.provider.MediaStore.MediaColumns.DATA]; + let filePath; + + try { + cursor = this.getContentResolver().query(uri, columns, selection, selectionArgs, null); + if (cursor != null && cursor.moveToFirst()) { + let column_index = cursor.getColumnIndexOrThrow(columns[0]); + filePath = cursor.getString(column_index); + if (filePath) { + return filePath; + } + } + } + catch (e) { + console.log(e); + } + finally { + if (cursor) { + cursor.close(); + } } } - return undefined; + } private static isExternalStorageDocument(uri: android.net.Uri) { From e6fade53b47a4625ead1abdab954dbfe7609a342 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 19 Jul 2019 08:20:31 -0600 Subject: [PATCH 41/66] fix(chrome-downloads): added missing parameter --- src/imagepicker.android.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index ce59f4c..3cab64e 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -51,7 +51,7 @@ class UriHelper { else { // MediaStore (and general) if ("content" === uri.getScheme()) { - return UriHelper.getDataColumn(uri, null, null); + return UriHelper.getDataColumn(uri, null, null, false); } // FILE else if ("file" === uri.getScheme()) { From 09dbea0a894a66beaa0c911f0671c529ab1ffb51 Mon Sep 17 00:00:00 2001 From: tgpetrov Date: Tue, 23 Jul 2019 14:34:01 +0300 Subject: [PATCH 42/66] fix: unexported type --- src/imagepicker.android.ts | 9 ++++-- src/imagepicker.common.ts | 57 ++++++++++++++++++++++++++++++++++++++ src/imagepicker.ios.ts | 3 +- 3 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 src/imagepicker.common.ts diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index 3cab64e..3715b15 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -2,6 +2,9 @@ import * as application from "tns-core-modules/application"; import * as imageAssetModule from "tns-core-modules/image-asset"; import * as permissions from "nativescript-permissions"; +import { ImagePickerMediaType, Options } from "./imagepicker.common"; +export * from "./imagepicker.common"; + class UriHelper { public static _calculateFileUri(uri: android.net.Uri) { let DocumentsContract = (android.provider).DocumentsContract; @@ -133,9 +136,9 @@ class UriHelper { } export class ImagePicker { - private _options; + private _options: Options; - constructor(options) { + constructor(options: Options) { this._options = options; } @@ -226,6 +229,6 @@ export class ImagePicker { } } -export function create(options?): ImagePicker { +export function create(options?: Options): ImagePicker { return new ImagePicker(options); } diff --git a/src/imagepicker.common.ts b/src/imagepicker.common.ts new file mode 100644 index 0000000..364787e --- /dev/null +++ b/src/imagepicker.common.ts @@ -0,0 +1,57 @@ +export enum ImagePickerMediaType { + Any = 0, + Image = 1, + Video = 2 +} + +/** + * Provide options for the image picker. + */ +export interface Options { + /** + * Set the picker mode. Supported modes: "single" or "multiple" (default). + */ + mode?: string; + + /** + * Set the minumum number of selected assets in iOS + */ + minimumNumberOfSelection?: number; + + /** + * Set the maximum number of selected assets in iOS + */ + maximumNumberOfSelection?: number; + + /** + * Display the number of selected assets in iOS + */ + showsNumberOfSelectedAssets?: boolean; + + /** + * Display prompt text when selecting assets in iOS + */ + prompt?: string; + + /** + * Set the number of columns in Portrait in iOS + */ + numberOfColumnsInPortrait?: number; + + /** + * Set the number of columns in Landscape in iOS + */ + numberOfColumnsInLandscape?: number; + + /** + * Set the media type (image/video/any) to pick + */ + mediaType?: ImagePickerMediaType; + + android?: { + /** + * Provide a reason for permission request to access external storage on api levels above 23. + */ + read_external_storage?: string; + }; +} \ No newline at end of file diff --git a/src/imagepicker.ios.ts b/src/imagepicker.ios.ts index 320b503..6127e63 100644 --- a/src/imagepicker.ios.ts +++ b/src/imagepicker.ios.ts @@ -1,8 +1,9 @@ import * as data_observable from "tns-core-modules/data/observable"; import * as imageAssetModule from "tns-core-modules/image-asset"; -import { Options, ImagePickerMediaType } from "."; +import { Options, ImagePickerMediaType } from "./imagepicker.common"; import { View } from "tns-core-modules/ui/core/view/view"; import * as utils from "tns-core-modules/utils/utils"; +export * from "./imagepicker.common"; const defaultAssetCollectionSubtypes: NSArray = NSArray.arrayWithArray([ PHAssetCollectionSubtype.SmartAlbumRecentlyAdded, From b0b14f857d591095c40e4b44e242df5b3110ffdc Mon Sep 17 00:00:00 2001 From: Zdravko Date: Tue, 30 Jul 2019 17:28:32 +0300 Subject: [PATCH 43/66] chore: bump version to 6.3.0 (#287) * chore: bump version to 6.2.1 * update minor version Co-Authored-By: Todor Petrov --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 4552ebd..59b4a4c 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-imagepicker", - "version": "6.2.0", + "version": "6.3.0", "description": "A plugin for the NativeScript framework implementing multiple image picker", "repository": { "type": "git", From 4f6a0a4eaad70db98abe4587e2433c1aba41d3d0 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Wed, 7 Aug 2019 12:02:38 +0300 Subject: [PATCH 44/66] feat: Add support for video select in android --- README.md | 2 +- src/imagepicker.android.ts | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 475aca3..7a0d25e 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,7 @@ context | prompt | iOS | undefined | Display prompt text when selecting assets. | | numberOfColumnsInPortrait | iOS | 4 | Set the number of columns in Portrait orientation. | | numberOfColumnsInLandscape | iOS | 7 | Set the number of columns in Landscape orientation. | -| mediaType | both | Any (iOS), Image (Android) | Choose whether to pick Image/Video/Any type of assets. | +| mediaType | both | Any | Choose whether to pick Image/Video/Any type of assets. | The **hostView** parameter can be set to the view that hosts the image picker. Applicable in iOS only, intended to be used when open picker from a modal page. diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index 09d8053..ba5d406 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -147,7 +147,7 @@ export class ImagePicker { } get mediaType(): string { - const mediaType = this._options && 'mediaType' in this._options ? this._options.mediaType : ImagePickerMediaType.Image; + const mediaType = this._options && 'mediaType' in this._options ? this._options.mediaType : ImagePickerMediaType.Any; if (mediaType === ImagePickerMediaType.Image) { return "image/*"; } else if (mediaType === ImagePickerMediaType.Video) { @@ -227,6 +227,20 @@ export class ImagePicker { let intent = new Intent(); intent.setType(this.mediaType); + let length = this.mediaType === "*/*" ? 2 : 1; + let mimeTypes = Array.create(java.lang.String, length); + + if (this.mediaType === "*/*") { + mimeTypes[0] = "image/*"; + mimeTypes[1] = "video/*"; + } + else { + mimeTypes[0] = this.mediaType; + } + + // not in platform-declaration typings + intent.putExtra((android.content.Intent as any).EXTRA_MIME_TYPES, mimeTypes); + // TODO: Use (android).content.Intent.EXTRA_ALLOW_MULTIPLE if (this.mode === 'multiple') { intent.putExtra("android.intent.extra.ALLOW_MULTIPLE", true); From 4f71c0857fe28e15a1125f9eba0e8607d38a725a Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Wed, 7 Aug 2019 12:11:39 +0300 Subject: [PATCH 45/66] Fix: lint errors --- src/imagepicker.android.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index ba5d406..5037f76 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -240,7 +240,6 @@ export class ImagePicker { // not in platform-declaration typings intent.putExtra((android.content.Intent as any).EXTRA_MIME_TYPES, mimeTypes); - // TODO: Use (android).content.Intent.EXTRA_ALLOW_MULTIPLE if (this.mode === 'multiple') { intent.putExtra("android.intent.extra.ALLOW_MULTIPLE", true); From 0d6ca901868357e8e9f65787841e69e6e69cc677 Mon Sep 17 00:00:00 2001 From: dtodorov Date: Wed, 7 Aug 2019 18:24:05 +0300 Subject: [PATCH 46/66] Chore: bump version to 7.0.0 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 59b4a4c..e70fbd9 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-imagepicker", - "version": "6.3.0", + "version": "7.0.0", "description": "A plugin for the NativeScript framework implementing multiple image picker", "repository": { "type": "git", From 07a034e81f4dc176e28e041be05b67abf0ca279e Mon Sep 17 00:00:00 2001 From: dtodorov Date: Tue, 20 Aug 2019 11:37:52 +0300 Subject: [PATCH 47/66] Fix: mocha-multi version to 1.1.0 (#297) * Fix: mocha-multi version to.1.0.1 * Update package.json --- tests/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/package.json b/tests/package.json index a983540..4370321 100644 --- a/tests/package.json +++ b/tests/package.json @@ -11,7 +11,7 @@ "karma-nativescript-launcher": "^0.4.0", "mocha": "^3.3.0", "mocha-junit-reporter": "^1.18.0", - "mocha-multi": "^1.0.1", + "mocha-multi": "1.1.0", "mochawesome": "^3.1.1", "nativescript-dev-appium": "~5.2.0", "typescript": "~3.5.3" @@ -19,4 +19,4 @@ "scripts": { "e2e": "tsc -p e2e && mocha --opts ./e2e/config/mocha.opts" } -} \ No newline at end of file +} From 2a3cb0993fb1dcc2e5747a1ff67e7280439e8350 Mon Sep 17 00:00:00 2001 From: dtodorov Date: Tue, 20 Aug 2019 17:18:48 +0300 Subject: [PATCH 48/66] Add android28 to capabilities. Update test run. (#298) * Add android28 to capabilities. Update test run. * Fix: update tests for android28 compatibility --- .travis.yml | 6 +++--- tests/e2e/config/appium.capabilities.json | 7 +++++++ tests/e2e/test.e2e.ts | 22 +++++----------------- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4658607..6570619 100644 --- a/.travis.yml +++ b/.travis.yml @@ -118,7 +118,7 @@ matrix: script: - npm i -g appium - cd tests && npm i - - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_JS + - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_JS - os: linux env: - Android="24" @@ -129,7 +129,7 @@ matrix: script: - npm i -g appium - cd tests && npm i - - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_VUE + - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_VUE - os: linux env: - Android="24" @@ -140,7 +140,7 @@ matrix: script: - npm i -g appium - cd tests && npm i - - travis_wait travis_retry npm run e2e -- --runType android24 --sauceLab --appPath $ANDROID_PACKAGE_NG + - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_NG - os: linux env: - iOS="12.0" diff --git a/tests/e2e/config/appium.capabilities.json b/tests/e2e/config/appium.capabilities.json index 1333fc5..0347667 100644 --- a/tests/e2e/config/appium.capabilities.json +++ b/tests/e2e/config/appium.capabilities.json @@ -36,6 +36,13 @@ "appium-version": "1.7.1", "noReset": true }, + "android28": { + "platformName": "Android", + "platformVersion": "9.0", + "deviceName": "Android GoogleAPI Emulator", + "appiumVersion": "1.9.1", + "noReset": true + }, "sim11iPhone6": { "platformName": "iOS", "platformVersion": "11.0", diff --git a/tests/e2e/test.e2e.ts b/tests/e2e/test.e2e.ts index 5a56a2d..20ba1ce 100644 --- a/tests/e2e/test.e2e.ts +++ b/tests/e2e/test.e2e.ts @@ -57,26 +57,14 @@ describe("Imagepicker", async function () { const confirmButton = await driver.findElementByText(confirmButtonText); await confirmButton.click(); - if (isAndroid) { - const imagesFolderXpath = await driver.elementHelper.getXPathByText(imagesFolderName, SearchOptions.contains); - await driver.driver.sleep(3000); - let imagesFolder = await driver.driver.elementByXPathIfExists(imagesFolderXpath, 10000); - - if (isSauceRun && imagesFolder) { - await imagesFolder.click(); - let dcimFolder = await driver.findElementByText("DCIM", SearchOptions.contains); - await dcimFolder.click(); - imagesFolder = await driver.findElementByClassName(driver.locators.image); - await imagesFolder.click(); - } - } else { + if (!isAndroid) { const cameraRollFolder = await driver.findElementByAccessibilityId(imagesFolderNameIos); await cameraRollFolder.click(); } const imageLocator = isAndroid ? "android.widget.ImageView" : "XCUIElementTypeCell"; - const image = await driver.findElementByClassName(imageLocator); - await image.tap(); + const images = await driver.findElementsByClassName(imageLocator); + await images[1].tap(); pickSingleButton = await driver.findElementByText(pickSingleButtonText, SearchOptions.contains); expect(pickSingleButton).to.exist; @@ -101,8 +89,8 @@ describe("Imagepicker", async function () { if (isAndroid) { const allImages = await driver.findElementsByClassName("android.widget.ImageView"); - await allImages[5].hold(); // second Image - await allImages[2].click(); // first image + await allImages[1].hold(); // second Image + await allImages[4].click(); // first image } else { const allImages = await driver.findElementsByClassName("XCUIElementTypeCell"); await allImages[0].click(); // first image From be155c9078c567ab8246bea09d4274477a727814 Mon Sep 17 00:00:00 2001 From: dtodorov Date: Wed, 21 Aug 2019 13:59:40 +0300 Subject: [PATCH 49/66] Chore: update labels of travis builds --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6570619..60099d4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -110,7 +110,7 @@ matrix: - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_VUE?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_VUE/app-debug.apk" - stage: "UI Tests" env: - - Android="24" + - Android="28" - Type="VanillaJS" language: node_js os: linux @@ -121,7 +121,7 @@ matrix: - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_JS - os: linux env: - - Android="24" + - Android="28" - Type="VueJS" language: node_js os: linux @@ -132,7 +132,7 @@ matrix: - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_VUE - os: linux env: - - Android="24" + - Android="28" - Type="Angular" language: node_js os: linux From a9b36dcab8acbb49aa30d820e3e1cd02bad314c1 Mon Sep 17 00:00:00 2001 From: Zdravko Branzov Date: Mon, 9 Sep 2019 13:01:59 +0300 Subject: [PATCH 50/66] fix: android images location --- .gitignore | 4 ++++ tests/e2e/helper.ts | 10 ++++++++++ tests/e2e/test.e2e.ts | 11 +++++++++++ 3 files changed, 25 insertions(+) create mode 100644 tests/e2e/helper.ts diff --git a/.gitignore b/.gitignore index c96a83f..ca6ae36 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,7 @@ demo-angular/report/stats.json /src/platforms/android/nativescript_imagepicker.aar /src/*.tgz !demo-vue/app/app.js + +// Tests +**/mochawesome-report/ +test-results.xml diff --git a/tests/e2e/helper.ts b/tests/e2e/helper.ts new file mode 100644 index 0000000..6f7a49f --- /dev/null +++ b/tests/e2e/helper.ts @@ -0,0 +1,10 @@ +import { AppiumDriver } from "nativescript-dev-appium"; + +export async function findAndroidImages(driver: AppiumDriver) { + const sidedrawer = await driver.findElementByAccessibilityId("Show roots"); + await sidedrawer.click(); + const images = await driver.findElementByText("Images"); + await images.click(); + const dcimFolder = await driver.findElementByText("DCIM"); + await dcimFolder.click(); +} \ No newline at end of file diff --git a/tests/e2e/test.e2e.ts b/tests/e2e/test.e2e.ts index 20ba1ce..d6d718a 100644 --- a/tests/e2e/test.e2e.ts +++ b/tests/e2e/test.e2e.ts @@ -1,6 +1,7 @@ import { AppiumDriver, createDriver, SearchOptions } from "nativescript-dev-appium"; import { isSauceLab, runType } from "nativescript-dev-appium/lib/parser"; import { expect } from "chai"; +import { findAndroidImages } from "./helper"; const fs = require('fs'); const addContext = require('mochawesome/addContext'); const rimraf = require('rimraf'); @@ -57,6 +58,11 @@ describe("Imagepicker", async function () { const confirmButton = await driver.findElementByText(confirmButtonText); await confirmButton.click(); + // TODO remove when SauceLabs fix images location + if (isAndroid) { + await findAndroidImages(driver); + } + if (!isAndroid) { const cameraRollFolder = await driver.findElementByAccessibilityId(imagesFolderNameIos); await cameraRollFolder.click(); @@ -82,6 +88,11 @@ describe("Imagepicker", async function () { const pickMultipleButton = await driver.findElementByText(pickMultipleButtonText, SearchOptions.contains); await pickMultipleButton.click(); + // TODO remove when SauceLabs fix images location + if (isAndroid) { + await findAndroidImages(driver); + } + if (!isAndroid) { const cameraRollFolder = await driver.findElementByText(imagesFolderNameIos); await cameraRollFolder.click(); From 73d16d090d4cdab4d8f368dee48908308419443f Mon Sep 17 00:00:00 2001 From: Kirill Goncharov Date: Tue, 27 Aug 2019 15:39:44 +0300 Subject: [PATCH 51/66] feat(android): add option for showing internal/external storage --- README.md | 3 +-- src/imagepicker.android.ts | 4 ++++ src/imagepicker.common.ts | 6 ++++++ src/index.d.ts | 7 +++++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7a0d25e..e43d2a3 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,6 @@ Imagepicker plugin supporting both single and multiple selection. - [Request permissions, show the images list and process the selection](#request-permissions-show-the-images-list-and-process-the-selection) - [API](#api) - [Methods](#methods) - - [Properties](#properties) - - [Image properties](#image-properties) - [Contribute](#contribute) - [Get Help](#get-help) @@ -134,6 +132,7 @@ context | numberOfColumnsInPortrait | iOS | 4 | Set the number of columns in Portrait orientation. | | numberOfColumnsInLandscape | iOS | 7 | Set the number of columns in Landscape orientation. | | mediaType | both | Any | Choose whether to pick Image/Video/Any type of assets. | +| showAdvanced | Android | false | Show internal and removable storage options on Android (**WARNING**: [not supported officially](https://issuetracker.google.com/issues/72053350)). | The **hostView** parameter can be set to the view that hosts the image picker. Applicable in iOS only, intended to be used when open picker from a modal page. diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index 5037f76..4285b80 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -245,6 +245,10 @@ export class ImagePicker { intent.putExtra("android.intent.extra.ALLOW_MULTIPLE", true); } + if (this._options.showAdvanced) { + intent.putExtra("android.content.extra.SHOW_ADVANCED", true); + } + intent.putExtra(android.content.Intent.EXTRA_LOCAL_ONLY, true); intent.setAction("android.intent.action.OPEN_DOCUMENT"); let chooser = Intent.createChooser(intent, "Select Picture"); diff --git a/src/imagepicker.common.ts b/src/imagepicker.common.ts index 364787e..0d904f4 100644 --- a/src/imagepicker.common.ts +++ b/src/imagepicker.common.ts @@ -48,6 +48,12 @@ export interface Options { */ mediaType?: ImagePickerMediaType; + /** + * Show internal and removable storage options on Android. + * Not supported officially, see https://issuetracker.google.com/issues/72053350 | + */ + showAdvanced?: boolean; + android?: { /** * Provide a reason for permission request to access external storage on api levels above 23. diff --git a/src/index.d.ts b/src/index.d.ts index 38208e1..d28b76f 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -67,12 +67,19 @@ interface Options { */ mediaType?: ImagePickerMediaType; + /** + * Show internal and removable storage options on Android. + * Not supported officially, see https://issuetracker.google.com/issues/72053350 | + */ + showAdvanced?: boolean; + android?: { /** * Provide a reason for permission request to access external storage on api levels above 23. */ read_external_storage?: string; }; + } /** From 9048c186f26a9444f8ba29c9adb77075159aeb6b Mon Sep 17 00:00:00 2001 From: Kirill Goncharov Date: Wed, 4 Sep 2019 15:07:51 +0300 Subject: [PATCH 52/66] refactor(android): add mimeTypes property to ImagePicker class This would allow customization of picker behaviour in subclasses. --- src/imagepicker.android.ts | 28 ++++++++++++++++------------ src/index.d.ts | 3 +++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index 4285b80..8a1d7f1 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -157,6 +157,20 @@ export class ImagePicker { } } + get mimeTypes() { + let length = this.mediaType === "*/*" ? 2 : 1; + let mimeTypes = Array.create(java.lang.String, length); + + if (this.mediaType === "*/*") { + mimeTypes[0] = "image/*"; + mimeTypes[1] = "video/*"; + } + else { + mimeTypes[0] = this.mediaType; + } + return mimeTypes; + } + authorize(): Promise { if ((android).os.Build.VERSION.SDK_INT >= 23) { return permissions.requestPermission([(android).Manifest.permission.READ_EXTERNAL_STORAGE]); @@ -227,19 +241,9 @@ export class ImagePicker { let intent = new Intent(); intent.setType(this.mediaType); - let length = this.mediaType === "*/*" ? 2 : 1; - let mimeTypes = Array.create(java.lang.String, length); - - if (this.mediaType === "*/*") { - mimeTypes[0] = "image/*"; - mimeTypes[1] = "video/*"; - } - else { - mimeTypes[0] = this.mediaType; - } - // not in platform-declaration typings - intent.putExtra((android.content.Intent as any).EXTRA_MIME_TYPES, mimeTypes); + intent.putExtra((android.content.Intent as any).EXTRA_MIME_TYPES, this.mimeTypes); + // TODO: Use (android).content.Intent.EXTRA_ALLOW_MULTIPLE if (this.mode === 'multiple') { intent.putExtra("android.intent.extra.ALLOW_MULTIPLE", true); diff --git a/src/index.d.ts b/src/index.d.ts index d28b76f..8a5b1a8 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -4,6 +4,9 @@ import { ImageAsset } from "tns-core-modules/image-asset"; import { View } from "tns-core-modules/ui/core/view/view"; export class ImagePicker { + + constructor(options?: Options); + /** * Call this before 'present' to request any additional permissions that may be necessary. * In case of failed authorization consider notifying the user for degraded functionality. From 3565b636f8a18b923c3be7d93bd1991373e823da Mon Sep 17 00:00:00 2001 From: Zdravko Branzov Date: Tue, 10 Sep 2019 16:02:54 +0300 Subject: [PATCH 53/66] chore: bump version to 7.1.0 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index e70fbd9..e5772e8 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-imagepicker", - "version": "7.0.0", + "version": "7.1.0", "description": "A plugin for the NativeScript framework implementing multiple image picker", "repository": { "type": "git", From 555b177f8b5b6b921eecabb984eed045d80ba479 Mon Sep 17 00:00:00 2001 From: Fatme Date: Fri, 25 Oct 2019 12:25:31 +0300 Subject: [PATCH 54/66] fix: don't use short imports Avoid using short imports - https://www.nativescript.org/blog/say-goodbye-to-short-imports-in-nativescript. --- src/imagepicker.android.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index 8a1d7f1..6f49096 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -185,7 +185,7 @@ export class ImagePicker { // WARNING: If we want to support multiple pickers we will need to have a range of IDs here: let RESULT_CODE_PICKER_IMAGES = 9192; - let application = require("application"); + let application = require("tns-core-modules/application"); application.android.on(application.AndroidApplication.activityResultEvent, onResult); function onResult(args) { From e7e43ec844db84f4118c95a31a99778f48abe2ce Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Thu, 7 Nov 2019 17:38:54 +0200 Subject: [PATCH 55/66] chore: update to 6.2 (#314) --- demo-angular/package.json | 27 +++++++++++++-------------- demo-vue/package.json | 12 ++++++------ demo/package.json | 8 ++++---- src/package.json | 6 +++--- 4 files changed, 26 insertions(+), 27 deletions(-) diff --git a/demo-angular/package.json b/demo-angular/package.json index 88199fb..297475e 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -2,22 +2,21 @@ "nativescript": { "id": "org.nativescript.imagepickerdemoangular", "tns-ios": { - "version": "6.0.1" + "version": "6.2.0" }, "tns-android": { - "version": "6.0.0" + "version": "6.2.0" } }, "dependencies": { - "@angular/common": "~8.0.0", - "@angular/compiler": "~8.0.0", - "@angular/core": "~8.0.0", - "@angular/forms": "~8.0.0", - "@angular/http": "8.0.0-beta.10", - "@angular/platform-browser": "~8.0.0", - "@angular/platform-browser-dynamic": "~8.0.0", - "@angular/router": "~8.0.0", - "nativescript-angular": "~8.0.0", + "@angular/common": "~8.2.0", + "@angular/compiler": "~8.2.0", + "@angular/core": "~8.2.0", + "@angular/forms": "~8.2.0", + "@angular/platform-browser": "~8.2.0", + "@angular/platform-browser-dynamic": "~8.2.0", + "@angular/router": "~8.2.0", + "nativescript-angular": "~8.20.0", "nativescript-imagepicker": "../src", "nativescript-theme-core": "^1.0.4", "nativescript-unit-test-runner": "0.7.0", @@ -31,11 +30,11 @@ "karma-jasmine": "2.0.1", "karma-nativescript-launcher": "^0.4.0", "nativescript-css-loader": "~0.26.0", - "nativescript-dev-webpack": "~1.0.1", + "nativescript-dev-webpack": "^1.3.0", "tns-platform-declarations": "^6.0.0", "tslint": "~5.11.0", "zone.js": "^0.8.4", - "typescript": "~3.4.5", + "typescript": "~3.5.3", "karma-webpack": "3.0.5" }, "scripts": { @@ -51,4 +50,4 @@ "build-android-bundle": "npm run ns-bundle --android --build-app", "build-ios-bundle": "npm run ns-bundle --ios --build-app" } -} \ No newline at end of file +} diff --git a/demo-vue/package.json b/demo-vue/package.json index 7527afb..0c57ee5 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,16 +2,16 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "6.0.0" + "version": "6.2.0" }, "tns-ios": { - "version": "6.0.1" + "version": "6.2.0" } }, "dependencies": { "nativescript-imagepicker": "../src", "nativescript-theme-core": "~1.0.4", - "nativescript-vue": "~2.3.0", + "nativescript-vue": "~2.4.0", "tns-core-modules": "^6.0.0" }, "devDependencies": { @@ -28,11 +28,11 @@ "mocha-multi": "^1.0.1", "mochawesome": "^3.1.1", "nativescript-dev-appium": "~5.2.0", - "nativescript-dev-webpack": "~1.0.1", - "nativescript-vue-template-compiler": "~2.3.0", + "nativescript-dev-webpack": "^1.3.0", + "nativescript-vue-template-compiler": "~2.4.0", "node-sass": "~4.12.0", "vue-loader": "~15.4.0", - "typescript": "~3.4.5" + "typescript": "~3.5.3" }, "scripts": { "build.plugin": "cd ../src && npm run build", diff --git a/demo/package.json b/demo/package.json index a97b3d4..076077f 100644 --- a/demo/package.json +++ b/demo/package.json @@ -2,10 +2,10 @@ "nativescript": { "id": "org.nativescript.imagepickerdemo", "tns-android": { - "version": "6.0.0" + "version": "6.2.0" }, "tns-ios": { - "version": "6.0.1" + "version": "6.2.0" } }, "dependencies": { @@ -30,10 +30,10 @@ "mochawesome": "^3.1.1", "nativescript-css-loader": "~0.26.0", "nativescript-dev-appium": "~5.2.0", - "nativescript-dev-webpack": "~1.0.1", + "nativescript-dev-webpack": "^1.3.0", "tns-platform-declarations": "^6.0.0", "tslint": "~5.11.0", - "typescript": "~3.4.5", + "typescript": "~3.5.3", "karma-webpack": "3.0.5" }, "scripts": { diff --git a/src/package.json b/src/package.json index e5772e8..f97ecb9 100644 --- a/src/package.json +++ b/src/package.json @@ -46,9 +46,9 @@ "homepage": "https://github.com/NativeScript/nativescript-imagepicker", "readmeFilename": "README.md", "devDependencies": { - "tns-core-modules": "^5.0.0", - "tns-platform-declarations": "^5.0.0", - "typescript": "~3.4.5", + "tns-core-modules": "^6.0.0", + "tns-platform-declarations": "^6.0.0", + "typescript": "~3.5.3", "tslint": "~5.11.0" }, "dependencies": { From ca29935125dad9e829ef26d63808ba0e3eee680a Mon Sep 17 00:00:00 2001 From: Stoyan Stratev Date: Wed, 18 Dec 2019 12:00:25 +0200 Subject: [PATCH 56/66] fix: permissions problem when building with API 29 - cannot read external storage when app is built with targetSdkVersion set to 29 --- .../app/App_Resources/Android/src/main/AndroidManifest.xml | 1 + demo-angular/app/package.json | 3 ++- .../app/App_Resources/Android/src/main/AndroidManifest.xml | 3 ++- demo-vue/app/package.json | 3 ++- demo/app/App_Resources/Android/src/main/AndroidManifest.xml | 1 + demo/app/package.json | 3 ++- src/platforms/android/AndroidManifest.xml | 2 +- 7 files changed, 11 insertions(+), 5 deletions(-) diff --git a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml index 9db8321..976f83f 100644 --- a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml +++ b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -19,6 +19,7 @@ --> - + From 268fe7103db230a00de796720b454715ecc92660 Mon Sep 17 00:00:00 2001 From: Stoyan Stratev Date: Wed, 18 Dec 2019 13:01:12 +0200 Subject: [PATCH 57/66] Update .travis.yml build using android sdk 29 --- .travis.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 60099d4..51535f8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -76,7 +76,7 @@ matrix: os: linux dist: trusty env: - - WebpackAndroid="28" + - WebpackAndroid="29" - Type="VanillaJS" jdk: oraclejdk8 before_install: nvm install 10 @@ -88,7 +88,7 @@ matrix: os: linux dist: trusty env: - - WebpackAndroid="28" + - WebpackAndroid="29" - Type="Angular" jdk: oraclejdk8 before_install: nvm install 10 @@ -100,7 +100,7 @@ matrix: os: linux dist: trusty env: - - WebpackAndroid="28" + - WebpackAndroid="29" - Type="VueJS" jdk: oraclejdk8 before_install: nvm install 10 @@ -110,7 +110,7 @@ matrix: - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_VUE?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_VUE/app-debug.apk" - stage: "UI Tests" env: - - Android="28" + - Android="29" - Type="VanillaJS" language: node_js os: linux @@ -121,7 +121,7 @@ matrix: - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_JS - os: linux env: - - Android="28" + - Android="29" - Type="VueJS" language: node_js os: linux @@ -132,7 +132,7 @@ matrix: - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_VUE - os: linux env: - - Android="28" + - Android="29" - Type="Angular" language: node_js os: linux @@ -176,8 +176,8 @@ android: components: - tools - platform-tools - - build-tools-28.0.3 - - android-28 + - build-tools-29.0.2 + - android-29 - android-23 - extra-android-m2repository From 91ad2040559c63f8cd97ee6d4a7659ba4b180ed7 Mon Sep 17 00:00:00 2001 From: Stoyan Stratev Date: Wed, 18 Dec 2019 13:12:30 +0200 Subject: [PATCH 58/66] fix typo --- demo-vue/app/App_Resources/Android/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo-vue/app/App_Resources/Android/src/main/AndroidManifest.xml b/demo-vue/app/App_Resources/Android/src/main/AndroidManifest.xml index 1297c76..fe5ac77 100644 --- a/demo-vue/app/App_Resources/Android/src/main/AndroidManifest.xml +++ b/demo-vue/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -19,7 +19,7 @@ Date: Wed, 18 Dec 2019 13:23:57 +0200 Subject: [PATCH 59/66] Update AndroidManifest.xml --- .../app/App_Resources/Android/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml index 976f83f..a7e745d 100644 --- a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml +++ b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -20,7 +20,7 @@ Date: Wed, 18 Dec 2019 13:33:38 +0200 Subject: [PATCH 60/66] oops --- .../app/App_Resources/Android/src/main/AndroidManifest.xml | 2 +- demo-vue/app/App_Resources/Android/src/main/AndroidManifest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml index a7e745d..976f83f 100644 --- a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml +++ b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -20,7 +20,7 @@ Date: Mon, 3 Aug 2020 01:16:33 +0200 Subject: [PATCH 61/66] chore: Change Podfile dependencies (#329) Using the same QBImagePickerController dependency as nativescript-camera-plus plugin does. --- src/platforms/ios/Podfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platforms/ios/Podfile b/src/platforms/ios/Podfile index 4bf1aa1..66bb1d8 100644 --- a/src/platforms/ios/Podfile +++ b/src/platforms/ios/Podfile @@ -1 +1 @@ -pod 'QBImagePickerController', '~> 3.4.0' \ No newline at end of file +pod "QBImagePickerController", :git => 'https://github.com/flypapertech/QBImagePicker.git', :commit => '47aa21d32f8e6db0df79b089ad64e43d498b5951' From 408f5070a4857356dac10dce9f11d940b90c3049 Mon Sep 17 00:00:00 2001 From: Kirill Goncharov Date: Mon, 3 Aug 2020 02:17:16 +0300 Subject: [PATCH 62/66] fix(android): Fix picking from 'SDCARD' location (#326) --- src/imagepicker.android.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/imagepicker.android.ts b/src/imagepicker.android.ts index 6f49096..245c415 100644 --- a/src/imagepicker.android.ts +++ b/src/imagepicker.android.ts @@ -22,9 +22,20 @@ class UriHelper { if ("primary" === type.toLowerCase()) { return android.os.Environment.getExternalStorageDirectory() + "/" + id; + } else { + if (android.os.Build.VERSION.SDK_INT > 23) { + (this.getContentResolver() as any).takePersistableUriPermission( + uri, + android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION | android.content.Intent.FLAG_GRANT_WRITE_URI_PERMISSION, + ); + const externalMediaDirs = application.android.context.getExternalMediaDirs(); + if (externalMediaDirs.length > 1) { + let filePath = externalMediaDirs[1].getAbsolutePath(); + filePath = filePath.substring(0, filePath.indexOf("Android")) + id; + return filePath; + } + } } - - // TODO handle non-primary volumes } // DownloadsProvider else if (UriHelper.isDownloadsDocument(uri)) { From a587e6d5851bc255a49cf4d291ac4d45a5d2469d Mon Sep 17 00:00:00 2001 From: aurelientorres Date: Mon, 3 Aug 2020 01:18:15 +0200 Subject: [PATCH 63/66] chore: update README.md (#317) --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index e43d2a3..c754f93 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,18 @@ context > **NOTE**: To request permissions for Android 6+ (API 23+) we use [nativescript-permissions](https://www.npmjs.com/package/nativescript-permissions). +> **NOTE**: To be sure to have permissions add the following lines in AndroidManifest.xml +``` + + + + + ... + + +``` + + > **NOTE**: Using the plugin on iOS requres photo library permission. Your app might be rejected from the Apple App Store if you do not provide a description about why you need this permission. The default message "Requires access to photo library." might not be enough for the App Store reviewers. You can customize it by editing the `app/App_Resources/iOS/Info.plist` file in your app and adding the following key: ```xml From bc9209dd7d773eb437ff812f07873c72c789d572 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 7 Sep 2020 11:31:06 -0700 Subject: [PATCH 64/66] chore: readme --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index c754f93..d160e36 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ +## NativeScript 7 + +* Use `@nativescript/imagepicker`: `~1.0.0` +* [Source managed here](https://github.com/NativeScript/plugins) + +## If using 6 and below, see the following: + # NativeScript Image Picker ![apple](https://cdn3.iconfinder.com/data/icons/picons-social/57/16-apple-32.png) ![android](https://cdn4.iconfinder.com/data/icons/logos-3/228/android-32.png) From c24b782d3ae454fd43b2dbc68bd69661fb137cd1 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 5 Apr 2021 10:02:11 -0700 Subject: [PATCH 65/66] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d160e36..e1a4292 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## NativeScript 7 +## NativeScript 7 or higher * Use `@nativescript/imagepicker`: `~1.0.0` * [Source managed here](https://github.com/NativeScript/plugins) From 82a8c1b6fde08111c1d4f169e291a07773331c56 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 12 Apr 2021 22:10:42 -0700 Subject: [PATCH 66/66] chore: disable travis --- .travis.yml | 202 ---------------------------------------------------- 1 file changed, 202 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 51535f8..0000000 --- a/.travis.yml +++ /dev/null @@ -1,202 +0,0 @@ -env: - global: - - ANDROID_PACKAGE_JS='imagepicker-debug-js.apk' - - ANDROID_PACKAGE_NG='imagepicker-debug-ng.apk' - - ANDROID_PACKAGE_VUE='imagepicker-debug-vue.apk' - - ANDROID_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/outputs - - ANDROID_PACKAGE_FOLDER_NG=$TRAVIS_BUILD_DIR/demo-angular/outputs - - ANDROID_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/outputs - - ANDROID_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER" - - IOS_PACKAGE_JS='imagepicker-demo-js.zip' - - IOS_PACKAGE_NG='imagepicker-demo-ng.zip' - - IOS_PACKAGE_VUE='imagepicker-demo-vue.zip' - - IOS_PACKAGE_FOLDER_JS=$TRAVIS_BUILD_DIR/demo/outputs - - IOS_PACKAGE_FOLDER_NG=$TRAVIS_BUILD_DIR/demo-angular/outputs - - IOS_PACKAGE_FOLDER_VUE=$TRAVIS_BUILD_DIR/demo-vue/outputs - - IOS_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER" - -git: - depth: 1 - -branches: - only: - - master - -matrix: - include: - - stage: "Lint" - language: node_js - os: linux - node_js: "10" - script: cd src && npm run ci.tslint && cd ../demo && npm run ci.tslint && cd ../demo-angular && npm run ci.tslint - - stage: "WebPack and Build" - os: osx - env: - - WebpackiOS="12.0" - - Type="VanillaJS" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - before_script: pod repo update - script: - - cd src && npm run build - - cd ../demo && npm i && tns build ios --bundle --env.uglify --copy-to "./outputs/demo.app" - - cd $IOS_PACKAGE_FOLDER_JS && zip -r $IOS_PACKAGE_JS demo.app - - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_JS?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_JS/$IOS_PACKAGE_JS" - - os: osx - env: - - WebpackiOS="12.0" - - Type="Angular" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - before_script: pod repo update - script: - - cd src && npm run build - - cd ../demo-angular && npm i && tns build ios --bundle --env.uglify --env.aot --copy-to "./outputs/demo-angular.app" - - cd $IOS_PACKAGE_FOLDER_NG && zip -r $IOS_PACKAGE_NG demo-angular.app - - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_NG?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_NG/$IOS_PACKAGE_NG" - - os: osx - env: - - WebpackiOS="12.0" - - Type="VueJS" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - before_script: pod repo update - script: - - cd src && npm run build - - cd ../demo-vue && npm i && tns build ios --bundle --env.uglify --copy-to "./outputs/demovue.app" - - cd $IOS_PACKAGE_FOLDER_VUE && zip -r $IOS_PACKAGE_VUE demovue.app - - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE/$IOS_PACKAGE_VUE?overwrite=true --data-binary @$IOS_PACKAGE_FOLDER_VUE/$IOS_PACKAGE_VUE" - - language: android - os: linux - dist: trusty - env: - - WebpackAndroid="29" - - Type="VanillaJS" - jdk: oraclejdk8 - before_install: nvm install 10 - script: - - cd src && npm run build - - cd ../demo && npm i && tns build android --bundle --env.uglify --env.snapshot --copy-to "./outputs/app-debug.apk" - - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_JS?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_JS/app-debug.apk" - - language: android - os: linux - dist: trusty - env: - - WebpackAndroid="29" - - Type="Angular" - jdk: oraclejdk8 - before_install: nvm install 10 - script: - - cd src && npm run build - - cd ../demo-angular && npm i && tns build android --bundle --env.uglify --env.snapshot --copy-to "./outputs/app-debug.apk" - - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_NG?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_NG/app-debug.apk" - - language: android - os: linux - dist: trusty - env: - - WebpackAndroid="29" - - Type="VueJS" - jdk: oraclejdk8 - before_install: nvm install 10 - script: - - cd src && npm run build - - cd ../demo-vue && npm i && tns build android --bundle --env.uglify --copy-to "./outputs/app-debug.apk" - - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE/$ANDROID_PACKAGE_VUE?overwrite=true --data-binary @$ANDROID_PACKAGE_FOLDER_VUE/app-debug.apk" - - stage: "UI Tests" - env: - - Android="29" - - Type="VanillaJS" - language: node_js - os: linux - node_js: "10" - script: - - npm i -g appium - - cd tests && npm i - - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_JS - - os: linux - env: - - Android="29" - - Type="VueJS" - language: node_js - os: linux - node_js: "10" - script: - - npm i -g appium - - cd tests && npm i - - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_VUE - - os: linux - env: - - Android="29" - - Type="Angular" - language: node_js - os: linux - node_js: "10" - script: - - npm i -g appium - - cd tests && npm i - - travis_wait travis_retry npm run e2e -- --runType android28 --sauceLab --appPath $ANDROID_PACKAGE_NG - - os: linux - env: - - iOS="12.0" - - Type="VanillaJS" - language: node_js - node_js: "10" - script: - - npm i -g appium - - cd tests && npm i - - travis_wait travis_retry npm run e2e -- --runType sim12iPhoneX --sauceLab --appPath $IOS_PACKAGE_JS - - os: linux - env: - - iOS="12.0" - - Type="VueJS" - language: node_js - node_js: "10" - script: - - npm i -g appium - - cd tests && npm i - - travis_wait travis_retry npm run e2e -- --runType sim12iPhoneX --sauceLab --appPath $IOS_PACKAGE_VUE - - os: linux - env: - - iOS="12.0" - - Type="Angular" - language: node_js - node_js: "10" - script: - - npm i -g appium - - cd tests && npm i - - travis_wait travis_retry npm run e2e -- --runType sim12iPhoneX --sauceLab --appPath $IOS_PACKAGE_NG - -android: - components: - - tools - - platform-tools - - build-tools-29.0.2 - - android-29 - - android-23 - - extra-android-m2repository - -before_cache: - - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - -cache: - directories: - - .nvm - - $HOME/.gradle/caches/ - - $HOME/.gradle/wrapper/ - -before_install: - - sudo pip install --upgrade pip - - sudo pip install six - -install: - - echo no | npm install -g nativescript - - tns usage-reporting disable - - tns error-reporting disable - -