content: package com.example.kesara.camera;
  
  import android.Manifest;
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.content.SharedPreferences;
  import android.content.pm.PackageManager;
  import android.net.Uri;
  import android.provider.Settings;
  import android.support.v4.app.ActivityCompat;
  import android.support.v4.content.ContextCompat;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  
  public class MainActivity extends AppCompatActivity {
  
      public static final int MY_PERMISSIONS_REQUEST_CAMERA = 100;
      public static final String ALLOW_KEY = "ALLOWED";
      public static final String CAMERA_PREF = "camera_pref";
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
              if (getFromPref(this, ALLOW_KEY)) {
                  showSettingsAlert();
              } else if (ContextCompat.checkSelfPermission(this,
                      Manifest.permission.CAMERA)
  
                      != PackageManager.PERMISSION_GRANTED) {
  
                  // Should we show an explanation?
                  if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                          Manifest.permission.CAMERA)) {
                      showAlert();
                  } else {
                      // No explanation needed, we can request the permission.
                      ActivityCompat.requestPermissions(this,
                              new String[]{Manifest.permission.CAMERA},
                              MY_PERMISSIONS_REQUEST_CAMERA);
                  }
              }
          } else {
              openCamera();
          }
      }
  
      public static void saveToPreferences(Context context, String key, Boolean allowed) {
          SharedPreferences myPrefs = context.getSharedPreferences(CAMERA_PREF,
                  Context.MODE_PRIVATE);
          SharedPreferences.Editor prefsEditor = myPrefs.edit();
          prefsEditor.putBoolean(key, allowed);
          prefsEditor.commit();
      }
  
      public static Boolean getFromPref(Context context, String key) {
          SharedPreferences myPrefs = context.getSharedPreferences(CAMERA_PREF,
                  Context.MODE_PRIVATE);
          return (myPrefs.getBoolean(key, false));
      }
  
      private void showAlert() {
          AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
          alertDialog.setTitle("Alert");
          alertDialog.setMessage("App needs to access the Camera.");
  
          alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "DONT ALLOW",
                  new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                          dialog.dismiss();
                          finish();
                      }
                  });
  
          alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "ALLOW",
                  new DialogInterface.OnClickListener() {
  
                      public void onClick(DialogInterface dialog, int which) {
                          dialog.dismiss();
                          ActivityCompat.requestPermissions(MainActivity.this,
                                  new String[]{Manifest.permission.CAMERA},
                                  MY_PERMISSIONS_REQUEST_CAMERA);
                      }
                  });
          alertDialog.show();
      }
  
      private void showSettingsAlert() {
          AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
          alertDialog.setTitle("Alert");
          alertDialog.setMessage("App needs to access the Camera.");
  
          alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "DONT ALLOW",
                  new DialogInterface.OnClickListener() {
  
                      public void onClick(DialogInterface dialog, int which) {
                          dialog.dismiss();
                          //finish();
                      }
                  });
  
          alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "SETTINGS",
                  new DialogInterface.OnClickListener() {
  
                      public void onClick(DialogInterface dialog, int which) {
                          dialog.dismiss();
                          startInstalledAppDetailsActivity(MainActivity.this);
                      }
                  });
  
          alertDialog.show();
      }
  
      @Override
      public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
          switch (requestCode) {
              case MY_PERMISSIONS_REQUEST_CAMERA: {
                  for (int i = 0, len = permissions.length; i < len; i++) {
                      String permission = permissions[i];
  
                      if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
                          boolean
                                  showRationale =
                                  ActivityCompat.shouldShowRequestPermissionRationale(
                                          this, permission);
  
                          if (showRationale) {
                              showAlert();
                          } else if (!showRationale) {
                              // user denied flagging NEVER ASK AGAIN
                              // you can either enable some fall back,
                              // disable features of your app
                              // or open another dialog explaining
                              // again the permission and directing to
                              // the app setting
                              saveToPreferences(MainActivity.this, ALLOW_KEY, true);
                          }
                      }
                  }
              }
  
              // other 'case' lines to check for other
              // permissions this app might request
          }
      }
  
      @Override
      protected void onResume() {
          super.onResume();
      }
  
      public static void startInstalledAppDetailsActivity(final Activity context) {
          if (context == null) {
              return;
          }
  
          final Intent i = new Intent();
          i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
          i.addCategory(Intent.CATEGORY_DEFAULT);
          i.setData(Uri.parse("package:" + context.getPackageName()));
          i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
          i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
          context.startActivity(i);
      }
  
      private void openCamera() {
          Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
          startActivity(intent);
      }
  }
  