| /* |
| 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.api; |
| |
| import org.apache.cordova.CordovaArgs; |
| import org.apache.cordova.CordovaWebView; |
| import org.json.JSONArray; |
| import org.json.JSONException; |
| |
| import android.annotation.TargetApi; |
| import android.content.Intent; |
| import android.os.Build; |
| import android.util.Log; |
| import android.webkit.WebResourceResponse; |
| |
| /** |
| * Plugins must extend this class and override one of the execute methods. |
| */ |
| public class CordovaPlugin { |
| public String id; |
| public CordovaWebView webView; // WebView object |
| public CordovaInterface cordova; |
| |
| /** |
| * @param cordova The context of the main Activity. |
| * @param webView The associated CordovaWebView. |
| */ |
| public void initialize(CordovaInterface cordova, CordovaWebView webView) { |
| assert this.cordova == null; |
| this.cordova = cordova; |
| this.webView = webView; |
| } |
| |
| /** |
| * Executes the request. |
| * |
| * This method is called from the WebView thread. To do a non-trivial amount of work, use: |
| * cordova.getThreadPool().execute(runnable); |
| * |
| * To run on the UI thread, use: |
| * cordova.getActivity().runOnUiThread(runnable); |
| * |
| * @param action The action to execute. |
| * @param rawArgs The exec() arguments in JSON form. |
| * @param callbackContext The callback context used when calling back into JavaScript. |
| * @return Whether the action was valid. |
| */ |
| public boolean execute(String action, String rawArgs, CallbackContext callbackContext) throws JSONException { |
| JSONArray args = new JSONArray(rawArgs); |
| return execute(action, args, callbackContext); |
| } |
| |
| /** |
| * Executes the request. |
| * |
| * This method is called from the WebView thread. To do a non-trivial amount of work, use: |
| * cordova.getThreadPool().execute(runnable); |
| * |
| * To run on the UI thread, use: |
| * cordova.getActivity().runOnUiThread(runnable); |
| * |
| * @param action The action to execute. |
| * @param args The exec() arguments. |
| * @param callbackContext The callback context used when calling back into JavaScript. |
| * @return Whether the action was valid. |
| */ |
| public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { |
| CordovaArgs cordovaArgs = new CordovaArgs(args); |
| return execute(action, cordovaArgs, callbackContext); |
| } |
| |
| /** |
| * Executes the request. |
| * |
| * This method is called from the WebView thread. To do a non-trivial amount of work, use: |
| * cordova.getThreadPool().execute(runnable); |
| * |
| * To run on the UI thread, use: |
| * cordova.getActivity().runOnUiThread(runnable); |
| * |
| * @param action The action to execute. |
| * @param args The exec() arguments, wrapped with some Cordova helpers. |
| * @param callbackContext The callback context used when calling back into JavaScript. |
| * @return Whether the action was valid. |
| */ |
| public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException { |
| return false; |
| } |
| |
| /** |
| * Called when the system is about to start resuming a previous activity. |
| * |
| * @param multitasking Flag indicating if multitasking is turned on for app |
| */ |
| public void onPause(boolean multitasking) { |
| } |
| |
| /** |
| * Called when the activity will start interacting with the user. |
| * |
| * @param multitasking Flag indicating if multitasking is turned on for app |
| */ |
| public void onResume(boolean multitasking) { |
| } |
| |
| /** |
| * Called when the activity receives a new intent. |
| */ |
| public void onNewIntent(Intent intent) { |
| } |
| |
| /** |
| * The final call you receive before your activity is destroyed. |
| */ |
| public void onDestroy() { |
| } |
| |
| /** |
| * Called when a message is sent to plugin. |
| * |
| * @param id The message id |
| * @param data The message data |
| * @return Object to stop propagation or null |
| */ |
| public Object onMessage(String id, Object data) { |
| return null; |
| } |
| |
| /** |
| * Called when an activity you launched exits, giving you the requestCode you started it with, |
| * the resultCode it returned, and any additional data from it. |
| * |
| * @param requestCode The request code originally supplied to startActivityForResult(), |
| * allowing you to identify who this result came from. |
| * @param resultCode The integer result code returned by the child activity through its setResult(). |
| * @param data An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). |
| */ |
| public void onActivityResult(int requestCode, int resultCode, Intent intent) { |
| } |
| |
| /** |
| * By specifying a <url-filter> in config.xml you can map a URL (using startsWith atm) to this method. |
| * |
| * @param url The URL that is trying to be loaded in the Cordova webview. |
| * @return Return true to prevent the URL from loading. Default is false. |
| */ |
| public boolean onOverrideUrlLoading(String url) { |
| return false; |
| } |
| |
| /** |
| * By specifying a <url-filter> in config.xml you can map a URL prefix to this method. It applies to all resources loaded in the WebView, not just top-level navigation. |
| * |
| * @param url The URL of the resource to be loaded. |
| * @return Return a WebResourceResponse for the resource, or null to let the WebView handle it normally. |
| */ |
| @TargetApi(Build.VERSION_CODES.HONEYCOMB) |
| public WebResourceResponse shouldInterceptRequest(String url) { |
| return null; |
| } |
| |
| /** |
| * All plugins can now choose if they want to modify any uri requests. This includes all webview requests, opening of files, content uri's etc. |
| * This mechanism allows several plugins to modify the same request |
| * @param requestSource The source of the incoming request |
| * |
| * @param dataResource The resource to be loaded. |
| * @param dataResourceContext Context associated with the resource load |
| * @return Return a new DataResource if the plugin wants to assist in loading the request or null if it doesn't. |
| */ |
| @TargetApi(Build.VERSION_CODES.HONEYCOMB) |
| public DataResource handleDataResourceRequest(DataResource dataResource, DataResourceContext dataResourceContext) { |
| return null; |
| } |
| |
| /** |
| * Called when the WebView does a top-level navigation or refreshes. |
| * |
| * Plugins should stop any long-running processes and clean up internal state. |
| * |
| * Does nothing by default. |
| */ |
| public void onReset() { |
| } |
| } |