From 763ba4903f05b4a705d6cc6fd5f97ffe27bd2d62 Mon Sep 17 00:00:00 2001 From: Erisu Date: Sat, 26 Oct 2024 01:48:36 +0900 Subject: [PATCH 1/9] ci: sync workflow w/ paramedic --- .github/workflows/android.yml | 44 +++++++++++++++++++++++++++-------- .github/workflows/chrome.yml | 6 ++--- .github/workflows/ios.yml | 24 ++++++++----------- .github/workflows/lint.yml | 6 ++--- 4 files changed, 50 insertions(+), 30 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 3159b6b4..2d17c407 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -23,6 +23,7 @@ on: - '**.md' - 'LICENSE' - '.eslint*' + pull_request: paths-ignore: - '**.md' @@ -32,7 +33,7 @@ on: jobs: test: name: Android ${{ matrix.versions.android }} Test - runs-on: macos-latest + runs-on: ubuntu-latest continue-on-error: true # hoist configurations to top that are expected to be updated @@ -40,12 +41,12 @@ jobs: # Storing a copy of the repo repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }} - node-version: 16 + node-version: 20 # These are the default Java configurations used by most tests. # To customize these options, add "java-distro" or "java-version" to the strategy matrix with its overriding value. default_java-distro: temurin - default_java-version: 11 + default_java-version: 17 # These are the default Android System Image configurations used by most tests. # To customize these options, add "system-image-arch" or "system-image-target" to the strategy matrix with its overriding value. @@ -56,31 +57,48 @@ jobs: strategy: matrix: versions: - # Test the lowest minimum supported APIs - android: 7 android-api: 24 - # Test the last 3-4 supported APIs + - android: 7.1 + android-api: 25 + + - android: 8 + android-api: 26 + + - android: 8.1 + android-api: 27 + system-image-arch: x86 + + - android: 9 + android-api: 28 + - android: 10 android-api: 29 - android: 11 android-api: 30 + - android: 12 + android-api: 31 + - android: 12L android-api: 32 - android: 13 android-api: 33 + - android: 14 + android-api: 34 + timeout-minutes: 60 steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 env: java-version: ${{ matrix.versions.java-version == '' && env.default_java-version || matrix.versions.java-version }} java-distro: ${{ matrix.versions.java-distro == '' && env.default_java-distro || matrix.versions.java-distro }} @@ -88,6 +106,12 @@ jobs: distribution: ${{ env.java-distro }} java-version: ${{ env.java-version }} + - name: Enable KVM group perms + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + - name: Run Environment Information run: | node --version @@ -105,7 +129,7 @@ jobs: if: ${{ endswith(env.repo, '/cordova-paramedic') != true }} run: npm i -g github:apache/cordova-paramedic - - uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b + - uses: reactivecircus/android-emulator-runner@v2 env: system-image-arch: ${{ matrix.versions.system-image-arch == '' && env.default_system-image-arch || matrix.versions.system-image-arch }} system-image-target: ${{ matrix.versions.system-image-target == '' && env.default_system-image-target || matrix.versions.system-image-target }} @@ -119,7 +143,7 @@ jobs: script: echo "Pregenerate the AVD before running Paramedic" - name: Run paramedic tests - uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b + uses: reactivecircus/android-emulator-runner@v2 env: system-image-arch: ${{ matrix.versions.system-image-arch == '' && env.default_system-image-arch || matrix.versions.system-image-arch }} system-image-target: ${{ matrix.versions.system-image-target == '' && env.default_system-image-target || matrix.versions.system-image-target }} diff --git a/.github/workflows/chrome.yml b/.github/workflows/chrome.yml index 72c92ff9..a067f654 100644 --- a/.github/workflows/chrome.yml +++ b/.github/workflows/chrome.yml @@ -39,11 +39,11 @@ jobs: # Storing a copy of the repo repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }} - node-version: 16 + node-version: 20 steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index a03dcc25..aa2e7ef4 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -40,7 +40,7 @@ jobs: # Storing a copy of the repo repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }} - node-version: 16 + node-version: 20 # > Starting April 26, 2021, all iOS and iPadOS apps submitted to the App Store must be built with Xcode 12 and the iOS 14 SDK. # Because of Apple's requirement, listed above, We will only be using the latest Xcode release for testing. @@ -50,28 +50,24 @@ jobs: strategy: matrix: versions: - - os-version: macos-11 - ios-version: 13.x - xcode-version: 11.x - - - os-version: macos-11 - ios-version: 14.x - xcode-version: 12.x - - - os-version: macos-11 + - os-version: macos-12 ios-version: 15.x xcode-version: 13.x - - os-version: macos-12 + - os-version: macos-14 ios-version: 16.x xcode-version: 14.x + - os-version: macos-14 + ios-version: 17.x + xcode-version: 15.x + steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} - - uses: maxim-lobanov/setup-xcode@9a697e2b393340c3cacd97468baa318e4c883d98 + - uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd env: xcode-version: ${{ matrix.versions.xcode-version == '' && env.default_xcode-version || matrix.versions.xcode-version }} with: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0f82eb4c..53dad12f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -34,11 +34,11 @@ jobs: name: Lint Test runs-on: ubuntu-latest env: - node-version: 16 + node-version: 20 steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} From 2c3156f9601fe8a1a8e1ffd1df29d7c843fc359b Mon Sep 17 00:00:00 2001 From: kumo01GitHub Date: Thu, 24 Apr 2025 20:00:14 +0900 Subject: [PATCH 2/9] ci(ios): add ios18 and setup-xcode@v1 --- .github/workflows/ios.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index aa2e7ef4..579b6317 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -50,11 +50,7 @@ jobs: strategy: matrix: versions: - - os-version: macos-12 - ios-version: 15.x - xcode-version: 13.x - - - os-version: macos-14 + - os-version: macos-13 ios-version: 16.x xcode-version: 14.x @@ -62,12 +58,16 @@ jobs: ios-version: 17.x xcode-version: 15.x + - os-version: macos-15 + ios-version: 18.x + xcode-version: 16.x + steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} - - uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd + - uses: maxim-lobanov/setup-xcode@v1 env: xcode-version: ${{ matrix.versions.xcode-version == '' && env.default_xcode-version || matrix.versions.xcode-version }} with: From 44828ea3574dc9edbf6e8596a5bdc7e69408e7bd Mon Sep 17 00:00:00 2001 From: kumo01GitHub Date: Thu, 24 Apr 2025 20:59:32 +0900 Subject: [PATCH 3/9] fix: resolve conflict --- .github/workflows/ios.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 63f669c0..579b6317 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -68,7 +68,6 @@ jobs: with: node-version: ${{ env.node-version }} - uses: maxim-lobanov/setup-xcode@v1 - - uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd env: xcode-version: ${{ matrix.versions.xcode-version == '' && env.default_xcode-version || matrix.versions.xcode-version }} with: From 4a106b503a8d4e358e056de7e7a4d05fa1917013 Mon Sep 17 00:00:00 2001 From: kumo01GitHub Date: Thu, 24 Apr 2025 21:14:07 +0900 Subject: [PATCH 4/9] ci(ios): revert setup-xcode change --- .github/workflows/ios.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 579b6317..96157cac 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -67,7 +67,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} - - uses: maxim-lobanov/setup-xcode@v1 + - uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd env: xcode-version: ${{ matrix.versions.xcode-version == '' && env.default_xcode-version || matrix.versions.xcode-version }} with: From 1be54e46f58c52ba4ab82f6617f22da0e6c557ba Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 5 Oct 2024 03:09:03 +0900 Subject: [PATCH 5/9] feat: unify permission check/request --- src/android/Geolocation.java | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/src/android/Geolocation.java b/src/android/Geolocation.java index d8cae0e6..425b541c 100644 --- a/src/android/Geolocation.java +++ b/src/android/Geolocation.java @@ -79,15 +79,15 @@ public void onRequestPermissionResult(int requestCode, String[] permissions, for (int i=0; i boolean arrayContains(final T[] array, final T v) { - if (v == null) { - for (final T e : array) - if (e == null) - return true; - } - else { - for (final T e : array) - if (e == v || v.equals(e)) - return true; - } - - return false; - } - } From 15a8090217f30db33d4d81e824423c6bcdcfd1e7 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 6 Oct 2024 01:48:02 +0900 Subject: [PATCH 6/9] refactor: typo --- src/android/Geolocation.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/android/Geolocation.java b/src/android/Geolocation.java index 425b541c..5bf4b8d4 100644 --- a/src/android/Geolocation.java +++ b/src/android/Geolocation.java @@ -55,7 +55,7 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo // See https://bugs.chromium.org/p/chromium/issues/detail?id=1269362 permissionsToRequest = Build.VERSION.SDK_INT <= 31 ? highAccuracyPermissions : permissionsToCheck; - if(hasPermisssion(permissionsToCheck)) + if(hasPermission(permissionsToCheck)) { PluginResult r = new PluginResult(PluginResult.Status.OK, Build.VERSION.SDK_INT); context.sendPluginResult(r); @@ -92,7 +92,7 @@ public void onRequestPermissionResult(int requestCode, String[] permissions, } } - public boolean hasPermisssion(String[] permissions) { + public boolean hasPermission(String[] permissions) { for(String p : permissions) { if(PermissionHelper.hasPermission(this, p)) From 08c69e25f4e4a80c7db4b6e5d7cac6135db6bd6f Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 6 Oct 2024 02:00:25 +0900 Subject: [PATCH 7/9] perf: check provider before permission --- src/android/Geolocation.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/android/Geolocation.java b/src/android/Geolocation.java index 5bf4b8d4..bfe3a287 100644 --- a/src/android/Geolocation.java +++ b/src/android/Geolocation.java @@ -18,8 +18,10 @@ Licensed to the Apache Software Foundation (ASF) under one package org.apache.cordova.geolocation; +import android.content.Context; import android.content.pm.PackageManager; import android.Manifest; +import android.location.LocationManager; import android.os.Build; import org.apache.cordova.CallbackContext; @@ -42,12 +44,21 @@ public class Geolocation extends CordovaPlugin { String [] permissionsToRequest; String[] permissionsToCheck; + LocationManager manager; public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { LOG.d(TAG, "We are entering execute"); context = callbackContext; if(action.equals("getPermission")) { + if(!isLocationProviderAvailable()) + { + LOG.d(TAG, "Location Provider Unavailable!"); + PluginResult result = new PluginResult(PluginResult.Status.ILLEGAL_ACCESS_EXCEPTION); + context.sendPluginResult(result); + return true; + } + boolean highAccuracy = args.getBoolean(0); permissionsToCheck = highAccuracy ? highAccuracyPermissions : lowAccuracyPermissions; @@ -113,4 +124,9 @@ public void requestPermissions(int requestCode) PermissionHelper.requestPermissions(this, requestCode, permissionsToRequest); } + private boolean isLocationProviderAvailable() + { + manager = (LocationManager) this.cordova.getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE); + return manager.isProviderEnabled(LocationManager.FUSED_PROVIDER); + } } From 7957a3a34010582d0193bd8c217b26ba385cdde7 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 12 Oct 2024 19:55:14 +0900 Subject: [PATCH 8/9] refactor: change target provider to check --- src/android/Geolocation.java | 49 +++++++++++------------------------- 1 file changed, 15 insertions(+), 34 deletions(-) diff --git a/src/android/Geolocation.java b/src/android/Geolocation.java index bfe3a287..be15ca47 100644 --- a/src/android/Geolocation.java +++ b/src/android/Geolocation.java @@ -14,8 +14,6 @@ Licensed to the Apache Software Foundation (ASF) under one specific language governing permissions and limitations under the License. */ - - package org.apache.cordova.geolocation; import android.content.Context; @@ -32,16 +30,14 @@ Licensed to the Apache Software Foundation (ASF) under one import org.json.JSONArray; import org.json.JSONException; - public class Geolocation extends CordovaPlugin { String TAG = "GeolocationPlugin"; CallbackContext context; - - String [] highAccuracyPermissions = { Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION }; - String [] lowAccuracyPermissions = { Manifest.permission.ACCESS_COARSE_LOCATION }; - String [] permissionsToRequest; + String[] highAccuracyPermissions = {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}; + String[] lowAccuracyPermissions = {Manifest.permission.ACCESS_COARSE_LOCATION}; + String[] permissionsToRequest; String[] permissionsToCheck; LocationManager manager; @@ -49,10 +45,8 @@ public class Geolocation extends CordovaPlugin { public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { LOG.d(TAG, "We are entering execute"); context = callbackContext; - if(action.equals("getPermission")) - { - if(!isLocationProviderAvailable()) - { + if (action.equals("getPermission")) { + if (!isLocationProviderAvailable()) { LOG.d(TAG, "Location Provider Unavailable!"); PluginResult result = new PluginResult(PluginResult.Status.ILLEGAL_ACCESS_EXCEPTION); context.sendPluginResult(result); @@ -66,13 +60,11 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo // See https://bugs.chromium.org/p/chromium/issues/detail?id=1269362 permissionsToRequest = Build.VERSION.SDK_INT <= 31 ? highAccuracyPermissions : permissionsToCheck; - if(hasPermission(permissionsToCheck)) - { + if (hasPermission(permissionsToCheck)) { PluginResult r = new PluginResult(PluginResult.Status.OK, Build.VERSION.SDK_INT); context.sendPluginResult(r); return true; - } - else { + } else { PermissionHelper.requestPermissions(this, 0, permissionsToRequest); } return true; @@ -80,22 +72,16 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo return false; } - - public void onRequestPermissionResult(int requestCode, String[] permissions, - int[] grantResults) throws JSONException - { + public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) { PluginResult result; //This is important if we're using Cordova without using Cordova, but we have the geolocation plugin installed - if(context != null) { - for (int i=0; i Date: Sat, 12 Oct 2024 20:31:16 +0900 Subject: [PATCH 9/9] fix: revert hasPermission() --- src/android/Geolocation.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/android/Geolocation.java b/src/android/Geolocation.java index be15ca47..7b54c2d8 100644 --- a/src/android/Geolocation.java +++ b/src/android/Geolocation.java @@ -91,11 +91,11 @@ public void onRequestPermissionResult(int requestCode, String[] permissions, int public boolean hasPermission(String[] permissions) { for (String p : permissions) { - if (PermissionHelper.hasPermission(this, p)) { - return true; + if (!PermissionHelper.hasPermission(this, p)) { + return false; } } - return false; + return true; } /*