mirror of
https://github.com/selfxyz/self.git
synced 2026-04-05 03:00:53 -04:00
implement permission management for android qrcode scanning
This commit is contained in:
@@ -2,7 +2,10 @@ package com.proofofpassport;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import com.facebook.react.bridge.ActivityEventListener;
|
||||
import com.facebook.react.bridge.BaseActivityEventListener;
|
||||
import com.facebook.react.bridge.Promise;
|
||||
@@ -10,10 +13,12 @@ import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.blikoon.qrcodescanner.QrCodeActivity;
|
||||
import android.Manifest;
|
||||
|
||||
public class QRCodeScannerModule extends ReactContextBaseJavaModule {
|
||||
|
||||
private static final int REQUEST_CODE_QR_SCAN = 101;
|
||||
private static final int PERMISSION_REQUEST_CAMERA = 1;
|
||||
private Promise scanPromise;
|
||||
|
||||
private final ActivityEventListener activityEventListener = new BaseActivityEventListener() {
|
||||
@@ -25,7 +30,7 @@ public class QRCodeScannerModule extends ReactContextBaseJavaModule {
|
||||
String result = data.getStringExtra("com.blikoon.qrcodescanner.got_qr_scan_relult");
|
||||
scanPromise.resolve(result);
|
||||
} else {
|
||||
scanPromise.reject("SCAN_FAILED", "QR Code scanning failed");
|
||||
scanPromise.reject("SCAN_FAILED", "QR Code scanning failed or was cancelled");
|
||||
}
|
||||
scanPromise = null;
|
||||
}
|
||||
@@ -53,7 +58,36 @@ public class QRCodeScannerModule extends ReactContextBaseJavaModule {
|
||||
}
|
||||
|
||||
scanPromise = promise;
|
||||
Intent intent = new Intent(currentActivity, QrCodeActivity.class);
|
||||
currentActivity.startActivityForResult(intent, REQUEST_CODE_QR_SCAN);
|
||||
|
||||
if (ContextCompat.checkSelfPermission(currentActivity, Manifest.permission.CAMERA)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(currentActivity,
|
||||
new String[]{Manifest.permission.CAMERA},
|
||||
PERMISSION_REQUEST_CAMERA);
|
||||
} else {
|
||||
startQRScanner(currentActivity);
|
||||
}
|
||||
}
|
||||
|
||||
private void startQRScanner(Activity activity) {
|
||||
Intent intent = new Intent(activity, QrCodeActivity.class);
|
||||
activity.startActivityForResult(intent, REQUEST_CODE_QR_SCAN);
|
||||
}
|
||||
|
||||
// Add this method to handle permission result
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||
if (requestCode == PERMISSION_REQUEST_CAMERA) {
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
Activity currentActivity = getCurrentActivity();
|
||||
if (currentActivity != null) {
|
||||
startQRScanner(currentActivity);
|
||||
}
|
||||
} else {
|
||||
if (scanPromise != null) {
|
||||
scanPromise.reject("PERMISSION_DENIED", "Camera permission was denied");
|
||||
scanPromise = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user