You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2013/06/14 19:31:05 UTC
[36/83] [abbrv] [partial] start of lazy loading: axe all vendored-in
libs
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/67fa7ebb/lib/cordova-android/framework/src/org/apache/cordova/ContactManager.java
----------------------------------------------------------------------
diff --git a/lib/cordova-android/framework/src/org/apache/cordova/ContactManager.java b/lib/cordova-android/framework/src/org/apache/cordova/ContactManager.java
deleted file mode 100755
index 8ea64a6..0000000
--- a/lib/cordova-android/framework/src/org/apache/cordova/ContactManager.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- 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;
-
-import org.apache.cordova.api.CallbackContext;
-import org.apache.cordova.api.CordovaPlugin;
-import org.apache.cordova.api.PluginResult;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import android.util.Log;
-
-public class ContactManager extends CordovaPlugin {
-
- private ContactAccessor contactAccessor;
- private static final String LOG_TAG = "Contact Query";
-
- public static final int UNKNOWN_ERROR = 0;
- public static final int INVALID_ARGUMENT_ERROR = 1;
- public static final int TIMEOUT_ERROR = 2;
- public static final int PENDING_OPERATION_ERROR = 3;
- public static final int IO_ERROR = 4;
- public static final int NOT_SUPPORTED_ERROR = 5;
- public static final int PERMISSION_DENIED_ERROR = 20;
-
- /**
- * Constructor.
- */
- public ContactManager() {
- }
-
- /**
- * Executes the request and returns PluginResult.
- *
- * @param action The action to execute.
- * @param args JSONArray of arguments for the plugin.
- * @param callbackContext The callback context used when calling back into JavaScript.
- * @return True if the action was valid, false otherwise.
- */
- public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
- /**
- * Check to see if we are on an Android 1.X device. If we are return an error as we
- * do not support this as of Cordova 1.0.
- */
- if (android.os.Build.VERSION.RELEASE.startsWith("1.")) {
- callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, ContactManager.NOT_SUPPORTED_ERROR));
- return true;
- }
-
- /**
- * Only create the contactAccessor after we check the Android version or the program will crash
- * older phones.
- */
- if (this.contactAccessor == null) {
- this.contactAccessor = new ContactAccessorSdk5(this.webView, this.cordova);
- }
-
- if (action.equals("search")) {
- final JSONArray filter = args.getJSONArray(0);
- final JSONObject options = args.getJSONObject(1);
- this.cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- JSONArray res = contactAccessor.search(filter, options);
- callbackContext.success(res);
- }
- });
- }
- else if (action.equals("save")) {
- final JSONObject contact = args.getJSONObject(0);
- this.cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- JSONObject res = null;
- String id = contactAccessor.save(contact);
- if (id != null) {
- try {
- res = contactAccessor.getContactById(id);
- } catch (JSONException e) {
- Log.e(LOG_TAG, "JSON fail.", e);
- }
- }
- if (res != null) {
- callbackContext.success(res);
- } else {
- callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, UNKNOWN_ERROR));
- }
- }
- });
- }
- else if (action.equals("remove")) {
- final String contactId = args.getString(0);
- this.cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- if (contactAccessor.remove(contactId)) {
- callbackContext.success();
- } else {
- callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, UNKNOWN_ERROR));
- }
- }
- });
- }
- else {
- return false;
- }
- return true;
- }
-}
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/67fa7ebb/lib/cordova-android/framework/src/org/apache/cordova/CordovaActivity.java
----------------------------------------------------------------------
diff --git a/lib/cordova-android/framework/src/org/apache/cordova/CordovaActivity.java b/lib/cordova-android/framework/src/org/apache/cordova/CordovaActivity.java
deleted file mode 100755
index 6e3d99d..0000000
--- a/lib/cordova-android/framework/src/org/apache/cordova/CordovaActivity.java
+++ /dev/null
@@ -1,1158 +0,0 @@
-/*
- 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;
-
-import java.util.HashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.apache.cordova.api.CordovaInterface;
-import org.apache.cordova.api.CordovaPlugin;
-import org.apache.cordova.api.LOG;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import android.annotation.SuppressLint;
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.graphics.Color;
-import android.media.AudioManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.util.Log;
-import android.view.Display;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
-import android.widget.ImageView;
-import android.webkit.ValueCallback;
-import android.webkit.WebViewClient;
-import android.widget.LinearLayout;
-
-/**
- * This class is the main Android activity that represents the Cordova
- * application. It should be extended by the user to load the specific
- * html file that contains the application.
- *
- * As an example:
- *
- * package org.apache.cordova.examples;
- * import android.app.Activity;
- * import android.os.Bundle;
- * import org.apache.cordova.*;
- *
- * public class Examples extends DroidGap {
- * @Override
- * public void onCreate(Bundle savedInstanceState) {
- * super.onCreate(savedInstanceState);
- *
- * // Set properties for activity
- * super.setStringProperty("loadingDialog", "Title,Message"); // show loading dialog
- * super.setStringProperty("errorUrl", "file:///android_asset/www/error.html"); // if error loading file in super.loadUrl().
- *
- * // Initialize activity
- * super.init();
- *
- * // Clear cache if you want
- * super.appView.clearCache(true);
- *
- * // Load your application
- * super.setIntegerProperty("splashscreen", R.drawable.splash); // load splash.jpg image from the resource drawable directory
- * super.loadUrl("file:///android_asset/www/index.html", 3000); // show splash screen 3 sec before loading app
- * }
- * }
- *
- * Properties: The application can be configured using the following properties:
- *
- * // Display a native loading dialog when loading app. Format for value = "Title,Message".
- * // (String - default=null)
- * super.setStringProperty("loadingDialog", "Wait,Loading Demo...");
- *
- * // Display a native loading dialog when loading sub-pages. Format for value = "Title,Message".
- * // (String - default=null)
- * super.setStringProperty("loadingPageDialog", "Loading page...");
- *
- * // Load a splash screen image from the resource drawable directory.
- * // (Integer - default=0)
- * super.setIntegerProperty("splashscreen", R.drawable.splash);
- *
- * // Set the background color.
- * // (Integer - default=0 or BLACK)
- * super.setIntegerProperty("backgroundColor", Color.WHITE);
- *
- * // Time in msec to wait before triggering a timeout error when loading
- * // with super.loadUrl(). (Integer - default=20000)
- * super.setIntegerProperty("loadUrlTimeoutValue", 60000);
- *
- * // URL to load if there's an error loading specified URL with loadUrl().
- * // Should be a local URL starting with file://. (String - default=null)
- * super.setStringProperty("errorUrl", "file:///android_asset/www/error.html");
- *
- * // Enable app to keep running in background. (Boolean - default=true)
- * super.setBooleanProperty("keepRunning", false);
- *
- * Cordova.xml configuration:
- * Cordova uses a configuration file at res/xml/cordova.xml to specify the following settings.
- *
- * Approved list of URLs that can be loaded into DroidGap
- * <access origin="http://server regexp" subdomains="true" />
- * Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR)
- * <log level="DEBUG" />
- *
- * Cordova plugins:
- * Cordova uses a file at res/xml/plugins.xml to list all plugins that are installed.
- * Before using a new plugin, a new element must be added to the file.
- * name attribute is the service name passed to Cordova.exec() in JavaScript
- * value attribute is the Java class name to call.
- *
- * <plugins>
- * <plugin name="App" value="org.apache.cordova.App"/>
- * ...
- * </plugins>
- */
-public class CordovaActivity extends Activity implements CordovaInterface {
- public static String TAG = "DroidGap";
-
- // The webview for our app
- protected CordovaWebView appView;
- protected CordovaWebViewClient webViewClient;
-
- protected LinearLayout root;
- protected boolean cancelLoadUrl = false;
- protected ProgressDialog spinnerDialog = null;
- private final ExecutorService threadPool = Executors.newCachedThreadPool();
-
-
- // The initial URL for our app
- // ie http://server/path/index.html#abc?query
- //private String url = null;
-
- private static int ACTIVITY_STARTING = 0;
- private static int ACTIVITY_RUNNING = 1;
- private static int ACTIVITY_EXITING = 2;
- private int activityState = 0; // 0=starting, 1=running (after 1st resume), 2=shutting down
-
- // Plugin to call when activity result is received
- protected CordovaPlugin activityResultCallback = null;
- protected boolean activityResultKeepRunning;
-
- // Default background color for activity
- // (this is not the color for the webview, which is set in HTML)
- private int backgroundColor = Color.BLACK;
-
- /*
- * The variables below are used to cache some of the activity properties.
- */
-
- // Draw a splash screen using an image located in the drawable resource directory.
- // This is not the same as calling super.loadSplashscreen(url)
- protected int splashscreen = 0;
- protected int splashscreenTime = 3000;
-
- // LoadUrl timeout value in msec (default of 20 sec)
- protected int loadUrlTimeoutValue = 20000;
-
- // Keep app running when pause is received. (default = true)
- // If true, then the JavaScript and native code continue to run in the background
- // when another application (activity) is started.
- protected boolean keepRunning = true;
-
- private int lastRequestCode;
-
- private Object responseCode;
-
- private Intent lastIntent;
-
- private Object lastResponseCode;
-
- private String initCallbackClass;
-
- private Object LOG_TAG;
-
- /**
- * Sets the authentication token.
- *
- * @param authenticationToken
- * @param host
- * @param realm
- */
- public void setAuthenticationToken(AuthenticationToken authenticationToken, String host, String realm) {
- if (this.appView != null && this.appView.viewClient != null) {
- this.appView.viewClient.setAuthenticationToken(authenticationToken, host, realm);
- }
- }
-
- /**
- * Removes the authentication token.
- *
- * @param host
- * @param realm
- *
- * @return the authentication token or null if did not exist
- */
- public AuthenticationToken removeAuthenticationToken(String host, String realm) {
- if (this.appView != null && this.appView.viewClient != null) {
- return this.appView.viewClient.removeAuthenticationToken(host, realm);
- }
- return null;
- }
-
- /**
- * Gets the authentication token.
- *
- * In order it tries:
- * 1- host + realm
- * 2- host
- * 3- realm
- * 4- no host, no realm
- *
- * @param host
- * @param realm
- *
- * @return the authentication token
- */
- public AuthenticationToken getAuthenticationToken(String host, String realm) {
- if (this.appView != null && this.appView.viewClient != null) {
- return this.appView.viewClient.getAuthenticationToken(host, realm);
- }
- return null;
- }
-
- /**
- * Clear all authentication tokens.
- */
- public void clearAuthenticationTokens() {
- if (this.appView != null && this.appView.viewClient != null) {
- this.appView.viewClient.clearAuthenticationTokens();
- }
- }
-
- /**
- * Called when the activity is first created.
- *
- * @param savedInstanceState
- */
- @SuppressWarnings("deprecation")
- @Override
- public void onCreate(Bundle savedInstanceState) {
- Config.init(this);
- LOG.d(TAG, "DroidGap.onCreate()");
- super.onCreate(savedInstanceState);
-
- if(savedInstanceState != null)
- {
- initCallbackClass = savedInstanceState.getString("callbackClass");
- }
-
- if(!this.getBooleanProperty("showTitle", false))
- {
- getWindow().requestFeature(Window.FEATURE_NO_TITLE);
- }
-
- if(this.getBooleanProperty("setFullscreen", false))
- {
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- }
- else
- {
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
- }
- // This builds the view. We could probably get away with NOT having a LinearLayout, but I like having a bucket!
- Display display = getWindowManager().getDefaultDisplay();
- int width = display.getWidth();
- int height = display.getHeight();
-
- root = new LinearLayoutSoftKeyboardDetect(this, width, height);
- root.setOrientation(LinearLayout.VERTICAL);
- root.setBackgroundColor(this.backgroundColor);
- root.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT, 0.0F));
-
- // Setup the hardware volume controls to handle volume control
- setVolumeControlStream(AudioManager.STREAM_MUSIC);
- }
-
- /**
- * Get the Android activity.
- *
- * @return
- */
- public Activity getActivity() {
- return this;
- }
-
- /**
- * Create and initialize web container with default web view objects.
- */
- public void init() {
- CordovaWebView webView = new CordovaWebView(CordovaActivity.this);
- CordovaWebViewClient webViewClient;
- if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB)
- {
- webViewClient = new CordovaWebViewClient(this, webView);
- }
- else
- {
- webViewClient = new IceCreamCordovaWebViewClient(this, webView);
- }
- this.init(webView, webViewClient, new CordovaChromeClient(this, webView));
- }
-
- /**
- * Initialize web container with web view objects.
- *
- * @param webView
- * @param webViewClient
- * @param webChromeClient
- */
- @SuppressLint("NewApi")
- public void init(CordovaWebView webView, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient) {
- LOG.d(TAG, "DroidGap.init()");
-
- // Set up web container
- this.appView = webView;
- this.appView.setId(100);
-
- this.appView.setWebViewClient(webViewClient);
- this.appView.setWebChromeClient(webChromeClient);
- webViewClient.setWebView(this.appView);
- webChromeClient.setWebView(this.appView);
-
- this.appView.setLayoutParams(new LinearLayout.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT,
- 1.0F));
-
- if (this.getBooleanProperty("disallowOverscroll", false)) {
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
- this.appView.setOverScrollMode(CordovaWebView.OVER_SCROLL_NEVER);
- }
- }
-
- // Add web view but make it invisible while loading URL
- this.appView.setVisibility(View.INVISIBLE);
- this.root.addView(this.appView);
- setContentView(this.root);
-
- // Clear cancel flag
- this.cancelLoadUrl = false;
-
- }
-
- /**
- * Load the url into the webview.
- *
- * @param url
- */
- public void loadUrl(String url) {
-
- // Init web view if not already done
- if (this.appView == null) {
- this.init();
- }
-
- // Set backgroundColor
- this.backgroundColor = this.getIntegerProperty("backgroundColor", Color.BLACK);
- this.root.setBackgroundColor(this.backgroundColor);
-
- // If keepRunning
- this.keepRunning = this.getBooleanProperty("keepRunning", true);
-
- // Then load the spinner
- this.loadSpinner();
-
- this.appView.loadUrl(url);
- }
-
- /*
- * Load the spinner
- */
- void loadSpinner() {
-
- // If loadingDialog property, then show the App loading dialog for first page of app
- String loading = null;
- if ((this.appView == null) || !this.appView.canGoBack()) {
- loading = this.getStringProperty("loadingDialog", null);
- }
- else {
- loading = this.getStringProperty("loadingPageDialog", null);
- }
- if (loading != null) {
-
- String title = "";
- String message = "Loading Application...";
-
- if (loading.length() > 0) {
- int comma = loading.indexOf(',');
- if (comma > 0) {
- title = loading.substring(0, comma);
- message = loading.substring(comma + 1);
- }
- else {
- title = "";
- message = loading;
- }
- }
- this.spinnerStart(title, message);
- }
- }
-
- /**
- * Load the url into the webview after waiting for period of time.
- * This is used to display the splashscreen for certain amount of time.
- *
- * @param url
- * @param time The number of ms to wait before loading webview
- */
- public void loadUrl(final String url, int time) {
-
- // Init web view if not already done
- if (this.appView == null) {
- this.init();
- }
-
- this.splashscreenTime = time;
- this.splashscreen = this.getIntegerProperty("splashscreen", 0);
- this.showSplashScreen(this.splashscreenTime);
- this.appView.loadUrl(url, time);
- }
-
- /**
- * Cancel loadUrl before it has been loaded.
- */
- // TODO NO-OP
- @Deprecated
- public void cancelLoadUrl() {
- this.cancelLoadUrl = true;
- }
-
- /**
- * Clear the resource cache.
- */
- public void clearCache() {
- if (this.appView == null) {
- this.init();
- }
- this.appView.clearCache(true);
- }
-
- /**
- * Clear web history in this web view.
- */
- public void clearHistory() {
- this.appView.clearHistory();
- }
-
- /**
- * Go to previous page in history. (We manage our own history)
- *
- * @return true if we went back, false if we are already at top
- */
- public boolean backHistory() {
- if (this.appView != null) {
- return appView.backHistory();
- }
- return false;
- }
-
- @Override
- /**
- * Called by the system when the device configuration changes while your activity is running.
- *
- * @param Configuration newConfig
- */
- public void onConfigurationChanged(Configuration newConfig) {
- //don't reload the current page when the orientation is changed
- super.onConfigurationChanged(newConfig);
- }
-
- /**
- * Get boolean property for activity.
- *
- * @param name
- * @param defaultValue
- * @return
- */
- public boolean getBooleanProperty(String name, boolean defaultValue) {
- Bundle bundle = this.getIntent().getExtras();
- if (bundle == null) {
- return defaultValue;
- }
- Boolean p;
- try {
- p = (Boolean) bundle.get(name);
- } catch (ClassCastException e) {
- String s = bundle.get(name).toString();
- if ("true".equals(s)) {
- p = true;
- }
- else {
- p = false;
- }
- }
- if (p == null) {
- return defaultValue;
- }
- return p.booleanValue();
- }
-
- /**
- * Get int property for activity.
- *
- * @param name
- * @param defaultValue
- * @return
- */
- public int getIntegerProperty(String name, int defaultValue) {
- Bundle bundle = this.getIntent().getExtras();
- if (bundle == null) {
- return defaultValue;
- }
- Integer p;
- try {
- p = (Integer) bundle.get(name);
- } catch (ClassCastException e) {
- p = Integer.parseInt(bundle.get(name).toString());
- }
- if (p == null) {
- return defaultValue;
- }
- return p.intValue();
- }
-
- /**
- * Get string property for activity.
- *
- * @param name
- * @param defaultValue
- * @return
- */
- public String getStringProperty(String name, String defaultValue) {
- Bundle bundle = this.getIntent().getExtras();
- if (bundle == null) {
- return defaultValue;
- }
- String p = bundle.getString(name);
- if (p == null) {
- return defaultValue;
- }
- return p;
- }
-
- /**
- * Get double property for activity.
- *
- * @param name
- * @param defaultValue
- * @return
- */
- public double getDoubleProperty(String name, double defaultValue) {
- Bundle bundle = this.getIntent().getExtras();
- if (bundle == null) {
- return defaultValue;
- }
- Double p;
- try {
- p = (Double) bundle.get(name);
- } catch (ClassCastException e) {
- p = Double.parseDouble(bundle.get(name).toString());
- }
- if (p == null) {
- return defaultValue;
- }
- return p.doubleValue();
- }
-
- /**
- * Set boolean property on activity.
- *
- * @param name
- * @param value
- */
- public void setBooleanProperty(String name, boolean value) {
- Log.d(TAG, "Setting boolean properties in DroidGap will be deprecated in 3.0 on July 2013, please use config.xml");
- this.getIntent().putExtra(name, value);
- }
-
- /**
- * Set int property on activity.
- *
- * @param name
- * @param value
- */
- public void setIntegerProperty(String name, int value) {
- Log.d(TAG, "Setting integer properties in DroidGap will be deprecated in 3.1 on August 2013, please use config.xml");
- this.getIntent().putExtra(name, value);
- }
-
- /**
- * Set string property on activity.
- *
- * @param name
- * @param value
- */
- public void setStringProperty(String name, String value) {
- Log.d(TAG, "Setting string properties in DroidGap will be deprecated in 3.0 on July 2013, please use config.xml");
- this.getIntent().putExtra(name, value);
- }
-
- /**
- * Set double property on activity.
- *
- * @param name
- * @param value
- */
- public void setDoubleProperty(String name, double value) {
- Log.d(TAG, "Setting double properties in DroidGap will be deprecated in 3.0 on July 2013, please use config.xml");
- this.getIntent().putExtra(name, value);
- }
-
- @Override
- /**
- * Called when the system is about to start resuming a previous activity.
- */
- protected void onPause() {
- super.onPause();
-
- LOG.d(TAG, "Paused the application!");
-
- // Don't process pause if shutting down, since onDestroy() will be called
- if (this.activityState == ACTIVITY_EXITING) {
- return;
- }
-
- if (this.appView == null) {
- return;
- }
- else
- {
- this.appView.handlePause(this.keepRunning);
- }
-
- // hide the splash screen to avoid leaking a window
- this.removeSplashScreen();
- }
-
- @Override
- /**
- * Called when the activity receives a new intent
- **/
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- //Forward to plugins
- if (this.appView != null)
- this.appView.onNewIntent(intent);
- }
-
- @Override
- /**
- * Called when the activity will start interacting with the user.
- */
- protected void onResume() {
- super.onResume();
- //Reload the configuration
- Config.init(this);
-
- LOG.d(TAG, "Resuming the App");
-
-
- //Code to test CB-3064
- String errorUrl = this.getStringProperty("errorUrl", null);
- LOG.d(TAG, "CB-3064: The errorUrl is " + errorUrl);
-
- if (this.activityState == ACTIVITY_STARTING) {
- this.activityState = ACTIVITY_RUNNING;
- return;
- }
-
- if (this.appView == null) {
- return;
- }
-
- this.appView.handleResume(this.keepRunning, this.activityResultKeepRunning);
-
- // If app doesn't want to run in background
- if (!this.keepRunning || this.activityResultKeepRunning) {
-
- // Restore multitasking state
- if (this.activityResultKeepRunning) {
- this.keepRunning = this.activityResultKeepRunning;
- this.activityResultKeepRunning = false;
- }
- }
- }
-
- @Override
- /**
- * The final call you receive before your activity is destroyed.
- */
- public void onDestroy() {
- LOG.d(TAG, "onDestroy()");
- super.onDestroy();
-
- // hide the splash screen to avoid leaking a window
- this.removeSplashScreen();
-
- if (this.appView != null) {
- appView.handleDestroy();
- }
- else {
- this.activityState = ACTIVITY_EXITING;
- }
- }
-
- /**
- * Send a message to all plugins.
- *
- * @param id The message id
- * @param data The message data
- */
- public void postMessage(String id, Object data) {
- if (this.appView != null) {
- this.appView.postMessage(id, data);
- }
- }
-
- /**
- * @deprecated
- * Add services to res/xml/plugins.xml instead.
- *
- * Add a class that implements a service.
- *
- * @param serviceType
- * @param className
- */
- public void addService(String serviceType, String className) {
- if (this.appView != null && this.appView.pluginManager != null) {
- this.appView.pluginManager.addService(serviceType, className);
- }
- }
-
- /**
- * Send JavaScript statement back to JavaScript.
- * (This is a convenience method)
- *
- * @param message
- */
- public void sendJavascript(String statement) {
- if (this.appView != null) {
- this.appView.jsMessageQueue.addJavaScript(statement);
- }
- }
-
- /**
- * Show the spinner. Must be called from the UI thread.
- *
- * @param title Title of the dialog
- * @param message The message of the dialog
- */
- public void spinnerStart(final String title, final String message) {
- if (this.spinnerDialog != null) {
- this.spinnerDialog.dismiss();
- this.spinnerDialog = null;
- }
- final CordovaActivity me = this;
- this.spinnerDialog = ProgressDialog.show(CordovaActivity.this, title, message, true, true,
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- me.spinnerDialog = null;
- }
- });
- }
-
- /**
- * Stop spinner - Must be called from UI thread
- */
- public void spinnerStop() {
- if (this.spinnerDialog != null && this.spinnerDialog.isShowing()) {
- this.spinnerDialog.dismiss();
- this.spinnerDialog = null;
- }
- }
-
- /**
- * End this activity by calling finish for activity
- */
- public void endActivity() {
- this.activityState = ACTIVITY_EXITING;
- super.finish();
- }
-
-
- /**
- * Launch an activity for which you would like a result when it finished. When this activity exits,
- * your onActivityResult() method will be called.
- *
- * @param command The command object
- * @param intent The intent to start
- * @param requestCode The request code that is passed to callback to identify the activity
- */
- public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {
- this.activityResultCallback = command;
- this.activityResultKeepRunning = this.keepRunning;
-
- // If multitasking turned on, then disable it for activities that return results
- if (command != null) {
- this.keepRunning = false;
- }
-
- // Start activity
- super.startActivityForResult(intent, requestCode);
- }
-
- @Override
- /**
- * 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").
- */
- protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
- LOG.d(TAG, "Incoming Result");
- super.onActivityResult(requestCode, resultCode, intent);
- Log.d(TAG, "Request code = " + requestCode);
- ValueCallback<Uri> mUploadMessage = this.appView.getWebChromeClient().getValueCallback();
- if (requestCode == CordovaChromeClient.FILECHOOSER_RESULTCODE) {
- Log.d(TAG, "did we get here?");
- if (null == mUploadMessage)
- return;
- Uri result = intent == null || resultCode != Activity.RESULT_OK ? null : intent.getData();
- Log.d(TAG, "result = " + result);
-// Uri filepath = Uri.parse("file://" + FileUtils.getRealPathFromURI(result, this));
-// Log.d(TAG, "result = " + filepath);
- mUploadMessage.onReceiveValue(result);
- mUploadMessage = null;
- }
- CordovaPlugin callback = this.activityResultCallback;
- if(callback == null)
- {
- if(initCallbackClass != null)
- {
- this.activityResultCallback = appView.pluginManager.getPlugin(initCallbackClass);
- callback = activityResultCallback;
- LOG.d(TAG, "We have a callback to send this result to");
- callback.onActivityResult(requestCode, resultCode, intent);
- }
- }
- else
- {
- LOG.d(TAG, "We have a callback to send this result to");
- callback.onActivityResult(requestCode, resultCode, intent);
- }
- }
-
- public void setActivityResultCallback(CordovaPlugin plugin) {
- this.activityResultCallback = plugin;
- }
-
- /**
- * Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable).
- * The errorCode parameter corresponds to one of the ERROR_* constants.
- *
- * @param errorCode The error code corresponding to an ERROR_* value.
- * @param description A String describing the error.
- * @param failingUrl The url that failed to load.
- */
- public void onReceivedError(final int errorCode, final String description, final String failingUrl) {
- final CordovaActivity me = this;
-
- // If errorUrl specified, then load it
- final String errorUrl = me.getStringProperty("errorUrl", null);
- if ((errorUrl != null) && (errorUrl.startsWith("file://") || Config.isUrlWhiteListed(errorUrl)) && (!failingUrl.equals(errorUrl))) {
-
- // Load URL on UI thread
- me.runOnUiThread(new Runnable() {
- public void run() {
- // Stop "app loading" spinner if showing
- me.spinnerStop();
- me.appView.showWebPage(errorUrl, false, true, null);
- }
- });
- }
- // If not, then display error dialog
- else {
- final boolean exit = !(errorCode == WebViewClient.ERROR_HOST_LOOKUP);
- me.runOnUiThread(new Runnable() {
- public void run() {
- if (exit) {
- me.appView.setVisibility(View.GONE);
- me.displayError("Application Error", description + " (" + failingUrl + ")", "OK", exit);
- }
- }
- });
- }
- }
-
- /**
- * Display an error dialog and optionally exit application.
- *
- * @param title
- * @param message
- * @param button
- * @param exit
- */
- public void displayError(final String title, final String message, final String button, final boolean exit) {
- final CordovaActivity me = this;
- me.runOnUiThread(new Runnable() {
- public void run() {
- try {
- AlertDialog.Builder dlg = new AlertDialog.Builder(me);
- dlg.setMessage(message);
- dlg.setTitle(title);
- dlg.setCancelable(false);
- dlg.setPositiveButton(button,
- new AlertDialog.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- if (exit) {
- me.endActivity();
- }
- }
- });
- dlg.create();
- dlg.show();
- } catch (Exception e) {
- finish();
- }
- }
- });
- }
-
- /**
- * Determine if URL is in approved list of URLs to load.
- *
- * @param url
- * @return
- */
- public boolean isUrlWhiteListed(String url) {
- return Config.isUrlWhiteListed(url);
- }
-
- /*
- * Hook in DroidGap for menu plugins
- *
- */
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- this.postMessage("onCreateOptionsMenu", menu);
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- this.postMessage("onPrepareOptionsMenu", menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- this.postMessage("onOptionsItemSelected", item);
- return true;
- }
-
- /**
- * Get Activity context.
- *
- * @return
- */
- public Context getContext() {
- LOG.d(TAG, "This will be deprecated December 2012");
- return this;
- }
-
- /**
- * Load the specified URL in the Cordova webview or a new browser instance.
- *
- * NOTE: If openExternal is false, only URLs listed in whitelist can be loaded.
- *
- * @param url The url to load.
- * @param openExternal Load url in browser instead of Cordova webview.
- * @param clearHistory Clear the history stack, so new page becomes top of history
- * @param params DroidGap parameters for new app
- */
- public void showWebPage(String url, boolean openExternal, boolean clearHistory, HashMap<String, Object> params) {
- if (this.appView != null) {
- appView.showWebPage(url, openExternal, clearHistory, params);
- }
- }
-
- protected Dialog splashDialog;
-
- /**
- * Removes the Dialog that displays the splash screen
- */
- public void removeSplashScreen() {
- if (splashDialog != null && splashDialog.isShowing()) {
- splashDialog.dismiss();
- splashDialog = null;
- }
- }
-
- /**
- * Shows the splash screen over the full Activity
- */
- @SuppressWarnings("deprecation")
- protected void showSplashScreen(final int time) {
- final CordovaActivity that = this;
-
- Runnable runnable = new Runnable() {
- public void run() {
- // Get reference to display
- Display display = getWindowManager().getDefaultDisplay();
-
- // Create the layout for the dialog
- LinearLayout root = new LinearLayout(that.getActivity());
- root.setMinimumHeight(display.getHeight());
- root.setMinimumWidth(display.getWidth());
- root.setOrientation(LinearLayout.VERTICAL);
- root.setBackgroundColor(that.getIntegerProperty("backgroundColor", Color.BLACK));
- root.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.FILL_PARENT, 0.0F));
- root.setBackgroundResource(that.splashscreen);
-
- // Create and show the dialog
- splashDialog = new Dialog(that, android.R.style.Theme_Translucent_NoTitleBar);
- // check to see if the splash screen should be full screen
- if ((getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN)
- == WindowManager.LayoutParams.FLAG_FULLSCREEN) {
- splashDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- }
- splashDialog.setContentView(root);
- splashDialog.setCancelable(false);
- splashDialog.show();
-
- // Set Runnable to remove splash screen just in case
- final Handler handler = new Handler();
- handler.postDelayed(new Runnable() {
- public void run() {
- removeSplashScreen();
- }
- }, time);
- }
- };
- this.runOnUiThread(runnable);
- }
-
- @Override
- public boolean onKeyUp(int keyCode, KeyEvent event)
- {
- //Get whatever has focus!
- View childView = appView.getFocusedChild();
- if ((appView.isCustomViewShowing() || childView != null ) &&
- (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU)) {
- return appView.onKeyUp(keyCode, event);
- } else {
- return super.onKeyUp(keyCode, event);
- }
- }
-
- /*
- * Android 2.x needs to be able to check where the cursor is. Android 4.x does not
- *
- * (non-Javadoc)
- * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
- */
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event)
- {
- //Get whatever has focus!
- View childView = appView.getFocusedChild();
- //Determine if the focus is on the current view or not
- if (childView != null && (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU)) {
- return appView.onKeyDown(keyCode, event);
- }
- else
- return super.onKeyDown(keyCode, event);
- }
-
-
- /**
- * Called when a message is sent to plugin.
- *
- * @param id The message id
- * @param data The message data
- * @return Object or null
- */
- public Object onMessage(String id, Object data) {
- LOG.d(TAG, "onMessage(" + id + "," + data + ")");
- if ("splashscreen".equals(id)) {
- if ("hide".equals(data.toString())) {
- this.removeSplashScreen();
- }
- else {
- // If the splash dialog is showing don't try to show it again
- if (this.splashDialog == null || !this.splashDialog.isShowing()) {
- this.splashscreen = this.getIntegerProperty("splashscreen", 0);
- this.showSplashScreen(this.splashscreenTime);
- }
- }
- }
- else if ("spinner".equals(id)) {
- if ("stop".equals(data.toString())) {
- this.spinnerStop();
- this.appView.setVisibility(View.VISIBLE);
- }
- }
- else if ("onReceivedError".equals(id)) {
- JSONObject d = (JSONObject) data;
- try {
- this.onReceivedError(d.getInt("errorCode"), d.getString("description"), d.getString("url"));
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- else if ("exit".equals(id)) {
- this.endActivity();
- }
- return null;
- }
-
- public ExecutorService getThreadPool() {
- return threadPool;
- }
-
- protected void onSaveInstanceState(Bundle outState)
- {
- super.onSaveInstanceState(outState);
- if(this.activityResultCallback != null)
- {
- String cClass = this.activityResultCallback.getClass().getName();
- outState.putString("callbackClass", cClass);
- }
- }
-}
-
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/67fa7ebb/lib/cordova-android/framework/src/org/apache/cordova/CordovaArgs.java
----------------------------------------------------------------------
diff --git a/lib/cordova-android/framework/src/org/apache/cordova/CordovaArgs.java b/lib/cordova-android/framework/src/org/apache/cordova/CordovaArgs.java
deleted file mode 100644
index d40d26e..0000000
--- a/lib/cordova-android/framework/src/org/apache/cordova/CordovaArgs.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- 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;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import android.util.Base64;
-
-public class CordovaArgs {
- private JSONArray baseArgs;
-
- public CordovaArgs(JSONArray args) {
- this.baseArgs = args;
- }
-
-
- // Pass through the basics to the base args.
- public Object get(int index) throws JSONException {
- return baseArgs.get(index);
- }
-
- public boolean getBoolean(int index) throws JSONException {
- return baseArgs.getBoolean(index);
- }
-
- public double getDouble(int index) throws JSONException {
- return baseArgs.getDouble(index);
- }
-
- public int getInt(int index) throws JSONException {
- return baseArgs.getInt(index);
- }
-
- public JSONArray getJSONArray(int index) throws JSONException {
- return baseArgs.getJSONArray(index);
- }
-
- public JSONObject getJSONObject(int index) throws JSONException {
- return baseArgs.getJSONObject(index);
- }
-
- public long getLong(int index) throws JSONException {
- return baseArgs.getLong(index);
- }
-
- public String getString(int index) throws JSONException {
- return baseArgs.getString(index);
- }
-
-
- public Object opt(int index) {
- return baseArgs.opt(index);
- }
-
- public boolean optBoolean(int index) {
- return baseArgs.optBoolean(index);
- }
-
- public double optDouble(int index) {
- return baseArgs.optDouble(index);
- }
-
- public int optInt(int index) {
- return baseArgs.optInt(index);
- }
-
- public JSONArray optJSONArray(int index) {
- return baseArgs.optJSONArray(index);
- }
-
- public JSONObject optJSONObject(int index) {
- return baseArgs.optJSONObject(index);
- }
-
- public long optLong(int index) {
- return baseArgs.optLong(index);
- }
-
- public String optString(int index) {
- return baseArgs.optString(index);
- }
-
- public boolean isNull(int index) {
- return baseArgs.isNull(index);
- }
-
-
- // The interesting custom helpers.
- public byte[] getArrayBuffer(int index) throws JSONException {
- String encoded = baseArgs.getString(index);
- return Base64.decode(encoded, Base64.DEFAULT);
- }
-}
-
-
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/67fa7ebb/lib/cordova-android/framework/src/org/apache/cordova/CordovaChromeClient.java
----------------------------------------------------------------------
diff --git a/lib/cordova-android/framework/src/org/apache/cordova/CordovaChromeClient.java b/lib/cordova-android/framework/src/org/apache/cordova/CordovaChromeClient.java
deleted file mode 100755
index d9da6ba..0000000
--- a/lib/cordova-android/framework/src/org/apache/cordova/CordovaChromeClient.java
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- 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;
-
-import org.apache.cordova.api.CordovaInterface;
-import org.apache.cordova.api.LOG;
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import android.annotation.TargetApi;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.net.Uri;
-import android.view.Gravity;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.ViewGroup.LayoutParams;
-import android.webkit.ConsoleMessage;
-import android.webkit.JsPromptResult;
-import android.webkit.JsResult;
-import android.webkit.ValueCallback;
-import android.webkit.WebChromeClient;
-import android.webkit.WebStorage;
-import android.webkit.WebView;
-import android.webkit.GeolocationPermissions.Callback;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.RelativeLayout;
-
-/**
- * This class is the WebChromeClient that implements callbacks for our web view.
- */
-public class CordovaChromeClient extends WebChromeClient {
-
- public static final int FILECHOOSER_RESULTCODE = 5173;
- private static final String LOG_TAG = "CordovaChromeClient";
- private String TAG = "CordovaLog";
- private long MAX_QUOTA = 100 * 1024 * 1024;
- private CordovaInterface cordova;
- private CordovaWebView appView;
-
- // the video progress view
- private View mVideoProgressView;
-
- // File Chooser
- public ValueCallback<Uri> mUploadMessage;
-
- /**
- * Constructor.
- *
- * @param cordova
- */
- public CordovaChromeClient(CordovaInterface cordova) {
- this.cordova = cordova;
- }
-
- /**
- * Constructor.
- *
- * @param ctx
- * @param app
- */
- public CordovaChromeClient(CordovaInterface ctx, CordovaWebView app) {
- this.cordova = ctx;
- this.appView = app;
- }
-
- /**
- * Constructor.
- *
- * @param view
- */
- public void setWebView(CordovaWebView view) {
- this.appView = view;
- }
-
- /**
- * Tell the client to display a javascript alert dialog.
- *
- * @param view
- * @param url
- * @param message
- * @param result
- */
- @Override
- public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
- AlertDialog.Builder dlg = new AlertDialog.Builder(this.cordova.getActivity());
- dlg.setMessage(message);
- dlg.setTitle("Alert");
- //Don't let alerts break the back button
- dlg.setCancelable(true);
- dlg.setPositiveButton(android.R.string.ok,
- new AlertDialog.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.confirm();
- }
- });
- dlg.setOnCancelListener(
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- result.cancel();
- }
- });
- dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
- //DO NOTHING
- public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK)
- {
- result.confirm();
- return false;
- }
- else
- return true;
- }
- });
- dlg.create();
- dlg.show();
- return true;
- }
-
- /**
- * Tell the client to display a confirm dialog to the user.
- *
- * @param view
- * @param url
- * @param message
- * @param result
- */
- @Override
- public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
- AlertDialog.Builder dlg = new AlertDialog.Builder(this.cordova.getActivity());
- dlg.setMessage(message);
- dlg.setTitle("Confirm");
- dlg.setCancelable(true);
- dlg.setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.confirm();
- }
- });
- dlg.setNegativeButton(android.R.string.cancel,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.cancel();
- }
- });
- dlg.setOnCancelListener(
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- result.cancel();
- }
- });
- dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
- //DO NOTHING
- public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK)
- {
- result.cancel();
- return false;
- }
- else
- return true;
- }
- });
- dlg.create();
- dlg.show();
- return true;
- }
-
- /**
- * Tell the client to display a prompt dialog to the user.
- * If the client returns true, WebView will assume that the client will
- * handle the prompt dialog and call the appropriate JsPromptResult method.
- *
- * Since we are hacking prompts for our own purposes, we should not be using them for
- * this purpose, perhaps we should hack console.log to do this instead!
- *
- * @param view
- * @param url
- * @param message
- * @param defaultValue
- * @param result
- */
- @Override
- public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
-
- // Security check to make sure any requests are coming from the page initially
- // loaded in webview and not another loaded in an iframe.
- boolean reqOk = false;
- if (url.startsWith("file://") || Config.isUrlWhiteListed(url)) {
- reqOk = true;
- }
-
- // Calling PluginManager.exec() to call a native service using
- // prompt(this.stringify(args), "gap:"+this.stringify([service, action, callbackId, true]));
- if (reqOk && defaultValue != null && defaultValue.length() > 3 && defaultValue.substring(0, 4).equals("gap:")) {
- JSONArray array;
- try {
- array = new JSONArray(defaultValue.substring(4));
- String service = array.getString(0);
- String action = array.getString(1);
- String callbackId = array.getString(2);
- String r = this.appView.exposedJsApi.exec(service, action, callbackId, message);
- result.confirm(r == null ? "" : r);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
-
- // Sets the native->JS bridge mode.
- else if (reqOk && defaultValue != null && defaultValue.equals("gap_bridge_mode:")) {
- this.appView.exposedJsApi.setNativeToJsBridgeMode(Integer.parseInt(message));
- result.confirm("");
- }
-
- // Polling for JavaScript messages
- else if (reqOk && defaultValue != null && defaultValue.equals("gap_poll:")) {
- String r = this.appView.exposedJsApi.retrieveJsMessages();
- result.confirm(r == null ? "" : r);
- }
-
- // Do NO-OP so older code doesn't display dialog
- else if (defaultValue != null && defaultValue.equals("gap_init:")) {
- result.confirm("OK");
- }
-
- // Show dialog
- else {
- final JsPromptResult res = result;
- AlertDialog.Builder dlg = new AlertDialog.Builder(this.cordova.getActivity());
- dlg.setMessage(message);
- final EditText input = new EditText(this.cordova.getActivity());
- if (defaultValue != null) {
- input.setText(defaultValue);
- }
- dlg.setView(input);
- dlg.setCancelable(false);
- dlg.setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- String usertext = input.getText().toString();
- res.confirm(usertext);
- }
- });
- dlg.setNegativeButton(android.R.string.cancel,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- res.cancel();
- }
- });
- dlg.create();
- dlg.show();
- }
- return true;
- }
-
- /**
- * Handle database quota exceeded notification.
- *
- * @param url
- * @param databaseIdentifier
- * @param currentQuota
- * @param estimatedSize
- * @param totalUsedQuota
- * @param quotaUpdater
- */
- @Override
- public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize,
- long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
- {
- LOG.d(TAG, "DroidGap: onExceededDatabaseQuota estimatedSize: %d currentQuota: %d totalUsedQuota: %d", estimatedSize, currentQuota, totalUsedQuota);
-
- if (estimatedSize < MAX_QUOTA)
- {
- //increase for 1Mb
- long newQuota = estimatedSize;
- LOG.d(TAG, "calling quotaUpdater.updateQuota newQuota: %d", newQuota);
- quotaUpdater.updateQuota(newQuota);
- }
- else
- {
- // Set the quota to whatever it is and force an error
- // TODO: get docs on how to handle this properly
- quotaUpdater.updateQuota(currentQuota);
- }
- }
-
- // console.log in api level 7: http://developer.android.com/guide/developing/debug-tasks.html
- // Expect this to not compile in a future Android release!
- @SuppressWarnings("deprecation")
- @Override
- public void onConsoleMessage(String message, int lineNumber, String sourceID)
- {
- //This is only for Android 2.1
- if(android.os.Build.VERSION.SDK_INT == android.os.Build.VERSION_CODES.ECLAIR_MR1)
- {
- LOG.d(TAG, "%s: Line %d : %s", sourceID, lineNumber, message);
- super.onConsoleMessage(message, lineNumber, sourceID);
- }
- }
-
- @TargetApi(8)
- @Override
- public boolean onConsoleMessage(ConsoleMessage consoleMessage)
- {
- if (consoleMessage.message() != null)
- LOG.d(TAG, "%s: Line %d : %s" , consoleMessage.sourceId() , consoleMessage.lineNumber(), consoleMessage.message());
- return super.onConsoleMessage(consoleMessage);
- }
-
- @Override
- /**
- * Instructs the client to show a prompt to ask the user to set the Geolocation permission state for the specified origin.
- *
- * @param origin
- * @param callback
- */
- public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) {
- super.onGeolocationPermissionsShowPrompt(origin, callback);
- callback.invoke(origin, true, false);
- }
-
- // API level 7 is required for this, see if we could lower this using something else
- @Override
- public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
- this.appView.showCustomView(view, callback);
- }
-
- @Override
- public void onHideCustomView() {
- this.appView.hideCustomView();
- }
-
- @Override
- /**
- * Ask the host application for a custom progress view to show while
- * a <video> is loading.
- * @return View The progress view.
- */
- public View getVideoLoadingProgressView() {
-
- if (mVideoProgressView == null) {
- // Create a new Loading view programmatically.
-
- // create the linear layout
- LinearLayout layout = new LinearLayout(this.appView.getContext());
- layout.setOrientation(LinearLayout.VERTICAL);
- RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
- layout.setLayoutParams(layoutParams);
- // the proress bar
- ProgressBar bar = new ProgressBar(this.appView.getContext());
- LinearLayout.LayoutParams barLayoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- barLayoutParams.gravity = Gravity.CENTER;
- bar.setLayoutParams(barLayoutParams);
- layout.addView(bar);
-
- mVideoProgressView = layout;
- }
- return mVideoProgressView;
- }
-
- public void openFileChooser(ValueCallback<Uri> uploadMsg) {
- this.openFileChooser(uploadMsg, "*/*");
- }
-
- public void openFileChooser( ValueCallback<Uri> uploadMsg, String acceptType ) {
- this.openFileChooser(uploadMsg, acceptType, null);
- }
-
- public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
- {
- mUploadMessage = uploadMsg;
- Intent i = new Intent(Intent.ACTION_GET_CONTENT);
- i.addCategory(Intent.CATEGORY_OPENABLE);
- i.setType("*/*");
- this.cordova.getActivity().startActivityForResult(Intent.createChooser(i, "File Browser"),
- FILECHOOSER_RESULTCODE);
- }
-
- public ValueCallback<Uri> getValueCallback() {
- return this.mUploadMessage;
- }
-}
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/67fa7ebb/lib/cordova-android/framework/src/org/apache/cordova/CordovaLocationListener.java
----------------------------------------------------------------------
diff --git a/lib/cordova-android/framework/src/org/apache/cordova/CordovaLocationListener.java b/lib/cordova-android/framework/src/org/apache/cordova/CordovaLocationListener.java
deleted file mode 100644
index 01c828b..0000000
--- a/lib/cordova-android/framework/src/org/apache/cordova/CordovaLocationListener.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- 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;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import org.apache.cordova.api.CallbackContext;
-
-import android.location.Location;
-import android.location.LocationListener;
-import android.location.LocationManager;
-import android.os.Bundle;
-import android.util.Log;
-
-public class CordovaLocationListener implements LocationListener {
- public static int PERMISSION_DENIED = 1;
- public static int POSITION_UNAVAILABLE = 2;
- public static int TIMEOUT = 3;
-
- protected LocationManager locationManager;
- private GeoBroker owner;
- protected boolean running = false;
-
- public HashMap<String, CallbackContext> watches = new HashMap<String, CallbackContext>();
- private List<CallbackContext> callbacks = new ArrayList<CallbackContext>();
-
- private Timer timer = null;
-
- private String TAG = "[Cordova Location Listener]";
-
- public CordovaLocationListener(LocationManager manager, GeoBroker broker, String tag) {
- this.locationManager = manager;
- this.owner = broker;
- this.TAG = tag;
- }
-
- protected void fail(int code, String message) {
- this.cancelTimer();
- for (CallbackContext callbackContext: this.callbacks)
- {
- this.owner.fail(code, message, callbackContext, false);
- }
- if(this.owner.isGlobalListener(this) && this.watches.size() == 0)
- {
- Log.d(TAG, "Stopping global listener");
- this.stop();
- }
- this.callbacks.clear();
-
- Iterator<CallbackContext> it = this.watches.values().iterator();
- while (it.hasNext()) {
- this.owner.fail(code, message, it.next(), true);
- }
- }
-
- private void win(Location loc) {
- this.cancelTimer();
- for (CallbackContext callbackContext: this.callbacks)
- {
- this.owner.win(loc, callbackContext, false);
- }
- if(this.owner.isGlobalListener(this) && this.watches.size() == 0)
- {
- Log.d(TAG, "Stopping global listener");
- this.stop();
- }
- this.callbacks.clear();
-
- Iterator<CallbackContext> it = this.watches.values().iterator();
- while (it.hasNext()) {
- this.owner.win(loc, it.next(), true);
- }
- }
-
- /**
- * Location Listener Methods
- */
-
- /**
- * Called when the provider is disabled by the user.
- *
- * @param provider
- */
- public void onProviderDisabled(String provider) {
- Log.d(TAG, "Location provider '" + provider + "' disabled.");
- this.fail(POSITION_UNAVAILABLE, "GPS provider disabled.");
- }
-
- /**
- * Called when the provider is enabled by the user.
- *
- * @param provider
- */
- public void onProviderEnabled(String provider) {
- Log.d(TAG, "Location provider "+ provider + " has been enabled");
- }
-
- /**
- * Called when the provider status changes. This method is called when a
- * provider is unable to fetch a location or if the provider has recently
- * become available after a period of unavailability.
- *
- * @param provider
- * @param status
- * @param extras
- */
- public void onStatusChanged(String provider, int status, Bundle extras) {
- Log.d(TAG, "The status of the provider " + provider + " has changed");
- if (status == 0) {
- Log.d(TAG, provider + " is OUT OF SERVICE");
- this.fail(CordovaLocationListener.POSITION_UNAVAILABLE, "Provider " + provider + " is out of service.");
- }
- else if (status == 1) {
- Log.d(TAG, provider + " is TEMPORARILY_UNAVAILABLE");
- }
- else {
- Log.d(TAG, provider + " is AVAILABLE");
- }
- }
-
- /**
- * Called when the location has changed.
- *
- * @param location
- */
- public void onLocationChanged(Location location) {
- Log.d(TAG, "The location has been updated!");
- this.win(location);
- }
-
- // PUBLIC
-
- public int size() {
- return this.watches.size() + this.callbacks.size();
- }
-
- public void addWatch(String timerId, CallbackContext callbackContext) {
- this.watches.put(timerId, callbackContext);
- if (this.size() == 1) {
- this.start();
- }
- }
- public void addCallback(CallbackContext callbackContext, int timeout) {
- if(this.timer == null) {
- this.timer = new Timer();
- }
- this.timer.schedule(new LocationTimeoutTask(callbackContext, this), timeout);
- this.callbacks.add(callbackContext);
- if (this.size() == 1) {
- this.start();
- }
- }
- public void clearWatch(String timerId) {
- if (this.watches.containsKey(timerId)) {
- this.watches.remove(timerId);
- }
- if (this.size() == 0) {
- this.stop();
- }
- }
-
- /**
- * Destroy listener.
- */
- public void destroy() {
- this.stop();
- }
-
- // LOCAL
-
- /**
- * Start requesting location updates.
- *
- * @param interval
- */
- protected void start() {
- if (!this.running) {
- if (this.locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null) {
- this.running = true;
- this.locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 10, this);
- } else {
- this.fail(CordovaLocationListener.POSITION_UNAVAILABLE, "Network provider is not available.");
- }
- }
- }
-
- /**
- * Stop receiving location updates.
- */
- private void stop() {
- this.cancelTimer();
- if (this.running) {
- this.locationManager.removeUpdates(this);
- this.running = false;
- }
- }
-
- private void cancelTimer() {
- if(this.timer != null) {
- this.timer.cancel();
- this.timer.purge();
- this.timer = null;
- }
- }
-
- private class LocationTimeoutTask extends TimerTask {
-
- private CallbackContext callbackContext = null;
- private CordovaLocationListener listener = null;
-
- public LocationTimeoutTask(CallbackContext callbackContext, CordovaLocationListener listener) {
- this.callbackContext = callbackContext;
- this.listener = listener;
- }
-
- @Override
- public void run() {
- for (CallbackContext callbackContext: listener.callbacks) {
- if(this.callbackContext == callbackContext) {
- listener.callbacks.remove(callbackContext);
- break;
- }
- }
-
- if(listener.size() == 0) {
- listener.stop();
- }
- }
- }
-}