diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 41cbaf6..7931b2b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ package="org.traccar.manager"> + 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED; + if (geolocationCallback != null) { + geolocationCallback.invoke(geolocationRequestOrigin, granted, false); + geolocationRequestOrigin = null; + geolocationCallback = null; + } + } + } + + private String geolocationRequestOrigin; + private GeolocationPermissions.Callback geolocationCallback; + private final WebChromeClient webChromeClient = new WebChromeClient() { + @Override + public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { + geolocationRequestOrigin = null; + geolocationCallback = null; + if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)) { + new AlertDialog.Builder(getActivity()) + .setMessage(R.string.permission_location_rationale) + .setNeutralButton(android.R.string.ok, (dialog, which) -> { + geolocationRequestOrigin = origin; + geolocationCallback = callback; + ActivityCompat.requestPermissions( + getActivity(), new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, REQUEST_PERMISSIONS_LOCATION); + }) + .show(); + } else { + geolocationRequestOrigin = origin; + geolocationCallback = callback; + ActivityCompat.requestPermissions( + getActivity(), new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, REQUEST_PERMISSIONS_LOCATION); + } + } else { + callback.invoke(origin, true, false); + } + } + // Android 4.1+ protected void openFileChooser(ValueCallback uploadMessage, String acceptType, String capture) { openFileChooser(uploadMessage); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2ae7947..feea781 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,4 +6,5 @@ Server connection failed File Browser Default + App requires location permission to show current location on the map