diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a2b63e2b8..389cfec12 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,6 @@ - diff --git a/app/src/main/java/net/osmtracker/activity/TrackLogger.java b/app/src/main/java/net/osmtracker/activity/TrackLogger.java index f384d9d05..dd76dc053 100644 --- a/app/src/main/java/net/osmtracker/activity/TrackLogger.java +++ b/app/src/main/java/net/osmtracker/activity/TrackLogger.java @@ -44,7 +44,6 @@ import android.net.Uri; import android.os.Bundle; -import android.os.Environment; import android.os.StrictMode; import android.preference.PreferenceManager; import android.provider.MediaStore; @@ -53,6 +52,7 @@ import androidx.annotation.NonNull; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; +import androidx.core.content.FileProvider; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; @@ -75,7 +75,6 @@ public class TrackLogger extends Activity { private static final String TAG = TrackLogger.class.getSimpleName(); final private int RC_STORAGE_AUDIO_PERMISSIONS = 1; - final private int RC_STORAGE_CAMERA_PERMISSIONS = 2; /** * Request code for callback after the camera application had taken a @@ -526,34 +525,7 @@ public boolean onKeyDown(int keyCode, KeyEvent event) { case KeyEvent.KEYCODE_CAMERA: Log.d(TAG, "click on camera button"); if (gpsLogger.isTracking()) { - if (ContextCompat.checkSelfPermission(this, - Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { - Log.d(TAG, "camera permission isn't granted, will request"); - // Should we show an explanation? - if ( (ActivityCompat.shouldShowRequestPermissionRationale(this, - Manifest.permission.CAMERA)) ) { - - // Show an expanation to the user *asynchronously* -- don't block - // this thread waiting for the user's response! After the user - // sees the explanation, try again to request the permission. - // TODO: explain why we need permission. - Log.w(TAG, "we should explain why we need write and record audio permission"); - - } else { - - // No explanation needed, we can request the permission. - ActivityCompat.requestPermissions(this, - new String[]{ - Manifest.permission.CAMERA}, - RC_STORAGE_CAMERA_PERMISSIONS); - break; - } - - } else { - requestStillImage(); - //return true; - } - + requestStillImage(); } break; case KeyEvent.KEYCODE_DPAD_CENTER: @@ -800,8 +772,13 @@ public long getCurrentTrackId() { private void startCamera(File imageFile) { StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build()); + + Uri imageUriContent = FileProvider.getUriForFile(this, + DataHelper.FILE_PROVIDER_AUTHORITY, imageFile); + Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); - cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imageFile)); + cameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); + cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUriContent); startActivityForResult(cameraIntent, REQCODE_IMAGE_CAPTURE); } @@ -837,27 +814,6 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis } return; } - - case RC_STORAGE_CAMERA_PERMISSIONS: { - Log.d(TAG, "camera case"); - // If request is cancelled, the result arrays are empty. - if (grantResults.length > 1) { - // TODO: fix permission management - //&& grantResults[0] == PackageManager.PERMISSION_GRANTED - //&& grantResults[1] == PackageManager.PERMISSION_GRANTED) { - - // permission was granted, yay! - requestStillImage(); - - } else { - - // permission denied, boo! Disable the - // functionality that depends on this permission. - //TODO: add an informative message. - Log.v(TAG, "Camera permission is denied."); - } - return; - } } } diff --git a/app/src/main/java/net/osmtracker/listener/StillImageOnClickListener.java b/app/src/main/java/net/osmtracker/listener/StillImageOnClickListener.java index c53cbd936..bfd963b5c 100644 --- a/app/src/main/java/net/osmtracker/listener/StillImageOnClickListener.java +++ b/app/src/main/java/net/osmtracker/listener/StillImageOnClickListener.java @@ -2,11 +2,6 @@ import net.osmtracker.activity.TrackLogger; -import android.Manifest; -import android.content.pm.PackageManager; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; - import android.view.View; import android.view.View.OnClickListener; @@ -22,8 +17,6 @@ public class StillImageOnClickListener implements OnClickListener { * Parent activity */ TrackLogger activity; - - final private int RC_STORAGE_CAMERA_PERMISSIONS = 2; public StillImageOnClickListener(TrackLogger parent) { activity = parent; @@ -31,59 +24,6 @@ public StillImageOnClickListener(TrackLogger parent) { @Override public void onClick(View v) { - if (ContextCompat.checkSelfPermission(activity, - Manifest.permission.WRITE_EXTERNAL_STORAGE) + ContextCompat.checkSelfPermission(activity, - Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { - - // Should we show an explanation? - if ( (ActivityCompat.shouldShowRequestPermissionRationale(activity, - Manifest.permission.WRITE_EXTERNAL_STORAGE)) - || (ActivityCompat.shouldShowRequestPermissionRationale(activity, - Manifest.permission.CAMERA)) ) { - - // Show an expanation to the user *asynchronously* -- don't block - // this thread waiting for the user's response! After the user - // sees the explanation, try again to request the permission. - // TODO: explain why we need permission. - //"we should explain why we need write and record audio permission" - - } else { - - // No explanation needed, we can request the permission. - ActivityCompat.requestPermissions(activity, - new String[]{ - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.CAMERA}, - RC_STORAGE_CAMERA_PERMISSIONS); - } - - } else { - activity.requestStillImage(); - } - + activity.requestStillImage(); } - - public void onRequestPermissionsResult(int requestCode, - String permissions[], int[] grantResults) { - switch (requestCode) { - case RC_STORAGE_CAMERA_PERMISSIONS: { - // If request is cancelled, the result arrays are empty. - if (grantResults.length == 2 - && grantResults[0] == PackageManager.PERMISSION_GRANTED - && grantResults[1] == PackageManager.PERMISSION_GRANTED) { - - // permission was granted, yay! - activity.requestStillImage(); - - } else { - - // permission denied, boo! Disable the - // functionality that depends on this permission. - //TODO: add an informative message. - } - return; - } - } - } - }