Skip to content

Commit

Permalink
request camera permission before opening camera activity (resolves #118)
Browse files Browse the repository at this point in the history
  • Loading branch information
tasota committed Aug 10, 2022
1 parent caec092 commit ca0218e
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package org.cmucreatelab.android.flutterprek.activities.teacher_section.students;

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.arch.lifecycle.Observer;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
Expand Down Expand Up @@ -40,6 +45,8 @@ public enum ModelAction {
public static final String EXTRA_CLASSROOM_NAME = "classroom_name";
public static final String EXTRA_STUDENT = "student";

private static final int requestCodeCameraPermission = 15;

private boolean isHandlingPicture = false;

// models/objects
Expand Down Expand Up @@ -98,6 +105,15 @@ private void startCameraActivityForResult() {
}


private void requestCameraActivityForResult() {
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.CAMERA}, requestCodeCameraPermission);
} else {
startCameraActivityForResult();
}
}


public void finishEditActivity(ModelAction modelAction) {
if (isHandlingPicture) {
return;
Expand Down Expand Up @@ -213,13 +229,13 @@ public void onClick(DialogInterface dialogInterface, int i) {
@Override
public void onClick(View view) {
Log.d(Constants.LOG_TAG, "onClick imageButtonStudentPhoto");
startCameraActivityForResult();
requestCameraActivityForResult();
}
});
textButtonRetakePhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startCameraActivityForResult();
requestCameraActivityForResult();
}
});
}
Expand All @@ -235,6 +251,37 @@ protected void onDestroy() {
}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

switch (requestCode) {
case requestCodeCameraPermission:
for (int i=0; i<permissions.length; i++) {
String permission = permissions[i];
if (permission.equals(Manifest.permission.CAMERA)) {
if (i < grantResults.length) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
startCameraActivityForResult();
} else {
String alertMessage = getString(R.string.alert_message_permissions_camera);
AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setMessage(alertMessage);
builder.setTitle(R.string.alert_title_permissions_camera);
builder.create().show();
}
break;
} else {
Log.e(Constants.LOG_TAG, "onRequestPermissionsResult out of index for camera permission; ignoring result.");
}
}
}
break;
}
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Expand All @@ -248,7 +295,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
File picture = (File) data.getExtras().getSerializable(CameraActivity.EXTRA_RESULT_PICTURE);
updatePicture(picture);
} else if (resultCode == CameraActivity.RESULT_START_OVER) {
startCameraActivityForResult();
requestCameraActivityForResult();
}
break;
}
Expand Down
2 changes: 2 additions & 0 deletions android/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,5 +91,7 @@
<string name="alert_message_ble_select">Set default SSID to \'%s\'?</string>
<string name="alert_title_ble_manual">Manual Device SSID</string>
<string name="alert_message_ble_manual">Please enter an SSID and click to confirm.</string>
<string name="alert_title_permissions_camera">Camera Permissions</string>
<string name="alert_message_permissions_camera">Camera permissions are currently disabled. Please go to system settings to enable camera permissions.</string>
<string name="empty"></string>
</resources>

0 comments on commit ca0218e

Please sign in to comment.