/* | |
Licensed to the Apache Software Foundation (ASF) under one | |
or more contributor license agreements. See the NOTICE file | |
distributed with this work for additional information | |
regarding copyright ownership. The ASF licenses this file | |
to you under the Apache License, Version 2.0 (the | |
"License"); you may not use this file except in compliance | |
with the License. You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, | |
software distributed under the License is distributed on an | |
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
KIND, either express or implied. See the License for the | |
specific language governing permissions and limitations | |
under the License. | |
*/ | |
package org.apache.cordova.file; | |
import android.util.SparseArray; | |
import org.apache.cordova.CallbackContext; | |
/** | |
* Holds pending runtime permission requests | |
*/ | |
class PendingRequests { | |
private int currentReqId = 0; | |
private SparseArray<Request> requests = new SparseArray<Request>(); | |
/** | |
* Creates a request and adds it to the array of pending requests. Each created request gets a | |
* unique result code for use with requestPermission() | |
* @param rawArgs The raw arguments passed to the plugin | |
* @param action The action this request corresponds to (get file, etc.) | |
* @param callbackContext The CallbackContext for this plugin call | |
* @return The request code that can be used to retrieve the Request object | |
*/ | |
public synchronized int createRequest(String rawArgs, int action, CallbackContext callbackContext) { | |
Request req = new Request(rawArgs, action, callbackContext); | |
requests.put(req.requestCode, req); | |
return req.requestCode; | |
} | |
/** | |
* Gets the request corresponding to this request code and removes it from the pending requests | |
* @param requestCode The request code for the desired request | |
* @return The request corresponding to the given request code or null if such a | |
* request is not found | |
*/ | |
public synchronized Request getAndRemove(int requestCode) { | |
Request result = requests.get(requestCode); | |
requests.remove(requestCode); | |
return result; | |
} | |
/** | |
* Holds the options and CallbackContext for a call made to the plugin. | |
*/ | |
public class Request { | |
// Unique int used to identify this request in any Android permission callback | |
private int requestCode; | |
// Action to be performed after permission request result | |
private int action; | |
// Raw arguments passed to plugin | |
private String rawArgs; | |
// The callback context for this plugin request | |
private CallbackContext callbackContext; | |
private Request(String rawArgs, int action, CallbackContext callbackContext) { | |
this.rawArgs = rawArgs; | |
this.action = action; | |
this.callbackContext = callbackContext; | |
this.requestCode = currentReqId ++; | |
} | |
public int getAction() { | |
return this.action; | |
} | |
public String getRawArgs() { | |
return rawArgs; | |
} | |
public CallbackContext getCallbackContext() { | |
return callbackContext; | |
} | |
} | |
} |