Skip to content

Commit d9430c9

Browse files
authored
Grant camera write permissions, remove obsolete permissions (Fix #441) (#449)
* Grant camera write permissions, remove obsolete permissions (Fix #441) * Capture photo via camera app (intent) does not require camera permission * Add back requestLegacyExternalStorage
1 parent 7a18caa commit d9430c9

File tree

3 files changed

+9
-114
lines changed

3 files changed

+9
-114
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
<!-- Foreground services and network permissions -->
1414
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
1515
<uses-permission android:name="android.permission.RECORD_AUDIO" />
16-
<uses-permission android:name="android.permission.CAMERA" />
1716
<uses-permission android:name="android.permission.INTERNET" />
1817
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
1918
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

app/src/main/java/net/osmtracker/activity/TrackLogger.java

Lines changed: 8 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import android.net.Uri;
4545

4646
import android.os.Bundle;
47-
import android.os.Environment;
4847
import android.os.StrictMode;
4948
import android.preference.PreferenceManager;
5049
import android.provider.MediaStore;
@@ -53,6 +52,7 @@
5352
import androidx.annotation.NonNull;
5453
import androidx.core.app.ActivityCompat;
5554
import androidx.core.content.ContextCompat;
55+
import androidx.core.content.FileProvider;
5656
import android.util.Log;
5757
import android.view.KeyEvent;
5858
import android.view.Menu;
@@ -75,7 +75,6 @@ public class TrackLogger extends Activity {
7575
private static final String TAG = TrackLogger.class.getSimpleName();
7676

7777
final private int RC_STORAGE_AUDIO_PERMISSIONS = 1;
78-
final private int RC_STORAGE_CAMERA_PERMISSIONS = 2;
7978

8079
/**
8180
* Request code for callback after the camera application had taken a
@@ -526,34 +525,7 @@ public boolean onKeyDown(int keyCode, KeyEvent event) {
526525
case KeyEvent.KEYCODE_CAMERA:
527526
Log.d(TAG, "click on camera button");
528527
if (gpsLogger.isTracking()) {
529-
if (ContextCompat.checkSelfPermission(this,
530-
Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
531-
Log.d(TAG, "camera permission isn't granted, will request");
532-
// Should we show an explanation?
533-
if ( (ActivityCompat.shouldShowRequestPermissionRationale(this,
534-
Manifest.permission.CAMERA)) ) {
535-
536-
// Show an expanation to the user *asynchronously* -- don't block
537-
// this thread waiting for the user's response! After the user
538-
// sees the explanation, try again to request the permission.
539-
// TODO: explain why we need permission.
540-
Log.w(TAG, "we should explain why we need write and record audio permission");
541-
542-
} else {
543-
544-
// No explanation needed, we can request the permission.
545-
ActivityCompat.requestPermissions(this,
546-
new String[]{
547-
Manifest.permission.CAMERA},
548-
RC_STORAGE_CAMERA_PERMISSIONS);
549-
break;
550-
}
551-
552-
} else {
553-
requestStillImage();
554-
//return true;
555-
}
556-
528+
requestStillImage();
557529
}
558530
break;
559531
case KeyEvent.KEYCODE_DPAD_CENTER:
@@ -800,8 +772,13 @@ public long getCurrentTrackId() {
800772
private void startCamera(File imageFile) {
801773
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
802774
StrictMode.setVmPolicy(builder.build());
775+
776+
Uri imageUriContent = FileProvider.getUriForFile(this,
777+
DataHelper.FILE_PROVIDER_AUTHORITY, imageFile);
778+
803779
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
804-
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imageFile));
780+
cameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
781+
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUriContent);
805782
startActivityForResult(cameraIntent, REQCODE_IMAGE_CAPTURE);
806783
}
807784

@@ -837,27 +814,6 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
837814
}
838815
return;
839816
}
840-
841-
case RC_STORAGE_CAMERA_PERMISSIONS: {
842-
Log.d(TAG, "camera case");
843-
// If request is cancelled, the result arrays are empty.
844-
if (grantResults.length > 1) {
845-
// TODO: fix permission management
846-
//&& grantResults[0] == PackageManager.PERMISSION_GRANTED
847-
//&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
848-
849-
// permission was granted, yay!
850-
requestStillImage();
851-
852-
} else {
853-
854-
// permission denied, boo! Disable the
855-
// functionality that depends on this permission.
856-
//TODO: add an informative message.
857-
Log.v(TAG, "Camera permission is denied.");
858-
}
859-
return;
860-
}
861817
}
862818
}
863819

app/src/main/java/net/osmtracker/listener/StillImageOnClickListener.java

Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22

33
import net.osmtracker.activity.TrackLogger;
44

5-
import android.Manifest;
6-
import android.content.pm.PackageManager;
7-
import androidx.core.app.ActivityCompat;
8-
import androidx.core.content.ContextCompat;
9-
105
import android.view.View;
116
import android.view.View.OnClickListener;
127

@@ -22,68 +17,13 @@ public class StillImageOnClickListener implements OnClickListener {
2217
* Parent activity
2318
*/
2419
TrackLogger activity;
25-
26-
final private int RC_STORAGE_CAMERA_PERMISSIONS = 2;
2720

2821
public StillImageOnClickListener(TrackLogger parent) {
2922
activity = parent;
3023
}
3124

3225
@Override
3326
public void onClick(View v) {
34-
if (ContextCompat.checkSelfPermission(activity,
35-
Manifest.permission.WRITE_EXTERNAL_STORAGE) + ContextCompat.checkSelfPermission(activity,
36-
Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
37-
38-
// Should we show an explanation?
39-
if ( (ActivityCompat.shouldShowRequestPermissionRationale(activity,
40-
Manifest.permission.WRITE_EXTERNAL_STORAGE))
41-
|| (ActivityCompat.shouldShowRequestPermissionRationale(activity,
42-
Manifest.permission.CAMERA)) ) {
43-
44-
// Show an expanation to the user *asynchronously* -- don't block
45-
// this thread waiting for the user's response! After the user
46-
// sees the explanation, try again to request the permission.
47-
// TODO: explain why we need permission.
48-
//"we should explain why we need write and record audio permission"
49-
50-
} else {
51-
52-
// No explanation needed, we can request the permission.
53-
ActivityCompat.requestPermissions(activity,
54-
new String[]{
55-
Manifest.permission.WRITE_EXTERNAL_STORAGE,
56-
Manifest.permission.CAMERA},
57-
RC_STORAGE_CAMERA_PERMISSIONS);
58-
}
59-
60-
} else {
61-
activity.requestStillImage();
62-
}
63-
27+
activity.requestStillImage();
6428
}
65-
66-
public void onRequestPermissionsResult(int requestCode,
67-
String permissions[], int[] grantResults) {
68-
switch (requestCode) {
69-
case RC_STORAGE_CAMERA_PERMISSIONS: {
70-
// If request is cancelled, the result arrays are empty.
71-
if (grantResults.length == 2
72-
&& grantResults[0] == PackageManager.PERMISSION_GRANTED
73-
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
74-
75-
// permission was granted, yay!
76-
activity.requestStillImage();
77-
78-
} else {
79-
80-
// permission denied, boo! Disable the
81-
// functionality that depends on this permission.
82-
//TODO: add an informative message.
83-
}
84-
return;
85-
}
86-
}
87-
}
88-
8929
}

0 commit comments

Comments
 (0)