Skip to content

Commit c7ad979

Browse files
committed
ask for camera permissions in main activity
1 parent beb7f5d commit c7ad979

File tree

4 files changed

+69
-14
lines changed

4 files changed

+69
-14
lines changed

mode/libraries/ar/src/processing/ar/PSurfaceAR.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -366,13 +366,6 @@ public void resumeThread() {
366366
break;
367367
}
368368

369-
370-
371-
// if (!sketch.hasPermission("android.permission.CAMERA")) {
372-
// sketch.requestPermission("android.permission.CAMERA");
373-
// return;
374-
// }
375-
376369
session = new Session(activity);
377370
} catch (UnavailableArcoreNotInstalledException
378371
| UnavailableUserDeclinedInstallationException e) {

studio/apps/arscene/src/main/java/arscene/MainActivity.java

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
package arscene;
22

3+
import android.Manifest;
4+
import android.content.pm.PackageManager;
5+
import android.net.Uri;
36
import android.os.Bundle;
47
import android.content.Intent;
8+
import android.provider.Settings;
9+
import android.support.v4.app.ActivityCompat;
10+
import android.support.v4.content.ContextCompat;
511
import android.view.ViewGroup;
612
import android.widget.FrameLayout;
713
import android.support.v7.app.AppCompatActivity;
14+
import android.widget.Toast;
815

916
import processing.android.PFragment;
1017
import processing.android.CompatUtils;
1118
import processing.core.PApplet;
1219

1320
public class MainActivity extends AppCompatActivity {
21+
private static final int CAMERA_PERMISSION_CODE = 0;
22+
private static final String CAMERA_PERMISSION = Manifest.permission.CAMERA;
23+
1424
private PApplet sketch;
1525

1626
@Override
@@ -19,17 +29,31 @@ protected void onCreate(Bundle savedInstanceState) {
1929
FrameLayout frame = new FrameLayout(this);
2030
frame.setId(CompatUtils.getUniqueViewId());
2131
setContentView(frame, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
22-
ViewGroup.LayoutParams.MATCH_PARENT));
32+
ViewGroup.LayoutParams.MATCH_PARENT));
2333

2434
sketch = new Sketch();
2535
PFragment fragment = new PFragment(sketch);
2636
fragment.setView(frame, this);
2737
}
2838

2939
@Override
30-
public void onRequestPermissionsResult(int requestCode,
31-
String permissions[],
32-
int[] grantResults) {
40+
protected void onResume() {
41+
super.onResume();
42+
if (!hasCameraPermission()) requestCameraPermission();
43+
}
44+
45+
@Override
46+
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
47+
if (!hasCameraPermission()) {
48+
Toast.makeText(this, "Camera permission is needed to use AR", Toast.LENGTH_LONG)
49+
.show();
50+
if (!shouldShowRequestPermissionRationale()) {
51+
// Permission denied with checking "Do not ask again".
52+
launchPermissionSettings();
53+
}
54+
finish();
55+
}
56+
3357
if (sketch != null) {
3458
sketch.onRequestPermissionsResult(requestCode, permissions, grantResults);
3559
}
@@ -41,4 +65,41 @@ public void onNewIntent(Intent intent) {
4165
sketch.onNewIntent(intent);
4266
}
4367
}
68+
69+
@Override
70+
public void onActivityResult(int requestCode, int resultCode, Intent data) {
71+
if (sketch != null) {
72+
sketch.onActivityResult(requestCode, resultCode, data);
73+
}
74+
}
75+
76+
@Override
77+
public void onBackPressed() {
78+
if (sketch != null) {
79+
sketch.onBackPressed();
80+
}
81+
}
82+
83+
private boolean hasCameraPermission() {
84+
int res = ContextCompat.checkSelfPermission(this, CAMERA_PERMISSION);
85+
return res == PackageManager.PERMISSION_GRANTED;
86+
}
87+
88+
private void requestCameraPermission() {
89+
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE);
90+
}
91+
92+
/** Check to see if we need to show the rationale for this permission. */
93+
private boolean shouldShowRequestPermissionRationale() {
94+
return ActivityCompat.shouldShowRequestPermissionRationale(this, CAMERA_PERMISSION);
95+
}
96+
97+
/** Launch Application Setting to grant permission. */
98+
private void launchPermissionSettings() {
99+
Intent intent = new Intent();
100+
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
101+
intent.setData(Uri.fromParts("package", this.getPackageName(), null));
102+
this.startActivity(intent);
103+
}
104+
44105
}

studio/apps/arscene/src/main/java/arscene/Sketch.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ public void settings() {
1515

1616
public void setup() {
1717
// I think this should go here but not 100% sure
18-
if (!hasPermission("android.permission.CAMERA")) {
19-
requestPermission("android.permission.CAMERA");
20-
}
18+
// if (!hasPermission("android.permission.CAMERA")) {
19+
// requestPermission("android.permission.CAMERA");
20+
// }
2121
// sphere = createShape(SPHERE, 400);
2222

2323
//Initialisation of AR Object

studio/libs/processing-ar/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ dependencies {
2424
implementation project(':libs:processing-core')
2525
implementation 'com.google.ar:core:1.2.0'
2626
implementation "de.javagl:obj:0.2.1"
27+
implementation 'com.android.support:appcompat-v7:26.0.2'
2728
}

0 commit comments

Comments
 (0)