diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index aa2e7ef4..96157cac 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,6 +58,10 @@ 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 diff --git a/src/android/Geolocation.java b/src/android/Geolocation.java index d8cae0e6..7b54c2d8 100644 --- a/src/android/Geolocation.java +++ b/src/android/Geolocation.java @@ -14,12 +14,12 @@ 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; import android.content.pm.PackageManager; import android.Manifest; +import android.location.LocationManager; import android.os.Build; import org.apache.cordova.CallbackContext; @@ -30,24 +30,29 @@ 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; 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 (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; @@ -55,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(hasPermisssion(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; @@ -69,34 +72,26 @@ 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 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; + private boolean isLocationProviderAvailable() { + manager = (LocationManager) this.cordova.getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE); + return manager.isProviderEnabled(LocationManager.GPS_PROVIDER) || manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); } - }