package de.dim.diamant; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.MenuItem; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import me.dm7.barcodescanner.zxing.ZXingScannerView; import static android.Manifest.permission.CAMERA; public abstract class ScanActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler { private static final int REQUEST_CAMERA = 1; protected ZXingScannerView scannerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); scannerView = new ZXingScannerView(this); setContentView(scannerView); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // check if permissions are granted, else request permissions if (checkPermission()) { Toast.makeText(this, "Berechtigungen vorhanden!", Toast.LENGTH_LONG).show(); } else { requestPermission(); } } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { scannerView.stopCamera(); scannerView.stopCameraPreview(); // These following two line keep the intent state with the product in the extras finish(); return true; } return super.onOptionsItemSelected(item); } @Override protected void onResume() { super.onResume(); if (checkPermission()) { if (scannerView == null) { scannerView = new ZXingScannerView(this); setContentView(scannerView); } scannerView.setResultHandler(ScanActivity.this); scannerView.startCamera(); } else { requestPermission(); } } @Override protected void onDestroy() { super.onDestroy(); scannerView.stopCamera(); } private boolean checkPermission() { return ContextCompat.checkSelfPermission(ScanActivity.this, CAMERA) == PackageManager.PERMISSION_GRANTED; } private void requestPermission() { ActivityCompat.requestPermissions(this, new String[]{CAMERA}, REQUEST_CAMERA); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CAMERA: if (grantResults.length > 0) { boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; if (cameraAccepted) { Toast.makeText(ScanActivity.this, "Berechtigung erteilt!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(ScanActivity.this, "Berechtigungen nicht vorhanden!", Toast.LENGTH_SHORT).show(); if(shouldShowRequestPermissionRationale(CAMERA)) { displayAlertMessage("Es müssen beide Berechtigungen erteilt werden!", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { requestPermissions(new String[]{CAMERA}, REQUEST_CAMERA); } }); return; } } } break; } } public void displayAlertMessage(String message, DialogInterface.OnClickListener listener) { new AlertDialog.Builder(ScanActivity.this) .setMessage(message) .setPositiveButton("OK", listener) .setNegativeButton("Cancel", null) .create() .show(); } }