Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
import java.util.ArrayList;

class FlutterFirebasePermissionManager implements PluginRegistry.RequestPermissionsResultListener {
private static final String REQUEST_IN_PROGRESS_ERROR =
"A request for permissions is already running, please wait for it to finish before doing "
+ "another request.";

private final Object requestLock = new Object();
private final int permissionCode = 240;
@Nullable private RequestPermissionsSuccessCallback successCallback;
private boolean requestInProgress = false;
Expand All @@ -30,15 +34,32 @@ interface RequestPermissionsSuccessCallback {
@Override
public boolean onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestInProgress && requestCode == permissionCode && this.successCallback != null) {
final RequestPermissionsSuccessCallback callback;
synchronized (requestLock) {
if (!requestInProgress || requestCode != permissionCode || this.successCallback == null) {
return false;
}

callback = this.successCallback;
this.successCallback = null;
requestInProgress = false;
boolean granted =
grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
}

boolean granted =
grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
callback.onSuccess(granted ? 1 : 0);
return true;
}

private boolean setRequestInProgress(RequestPermissionsSuccessCallback successCallback) {
synchronized (requestLock) {
if (requestInProgress) {
return false;
}

this.successCallback.onSuccess(granted ? 1 : 0);
requestInProgress = true;
this.successCallback = successCallback;
return true;
} else {
return false;
}
}

Expand All @@ -47,25 +68,20 @@ public void requestPermissions(
Activity activity,
RequestPermissionsSuccessCallback successCallback,
ErrorCallback errorCallback) {
if (requestInProgress) {
errorCallback.onError(
"A request for permissions is already running, please wait for it to finish before doing another request.");
if (activity == null) {
errorCallback.onError("Unable to detect current Android Activity.");
return;
}

if (activity == null) {
errorCallback.onError("Unable to detect current Android Activity.");
if (!setRequestInProgress(successCallback)) {
errorCallback.onError(REQUEST_IN_PROGRESS_ERROR);
return;
}

this.successCallback = successCallback;
final ArrayList<String> permissions = new ArrayList<String>();
permissions.add(Manifest.permission.POST_NOTIFICATIONS);
final String[] requestNotificationPermission = permissions.toArray(new String[0]);

if (!requestInProgress) {
ActivityCompat.requestPermissions(activity, requestNotificationPermission, permissionCode);
requestInProgress = true;
}
ActivityCompat.requestPermissions(activity, requestNotificationPermission, permissionCode);
}
}
Loading