Return-Path: X-Original-To: apmail-incubator-callback-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-callback-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3D3469D10 for ; Fri, 13 Apr 2012 20:00:53 +0000 (UTC) Received: (qmail 95031 invoked by uid 500); 13 Apr 2012 20:00:53 -0000 Delivered-To: apmail-incubator-callback-commits-archive@incubator.apache.org Received: (qmail 94943 invoked by uid 500); 13 Apr 2012 20:00:53 -0000 Mailing-List: contact callback-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: callback-dev@incubator.apache.org Delivered-To: mailing list callback-commits@incubator.apache.org Received: (qmail 94849 invoked by uid 99); 13 Apr 2012 20:00:53 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 13 Apr 2012 20:00:53 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id CB03BCE63; Fri, 13 Apr 2012 20:00:52 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: bowserj@apache.org To: callback-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [5/5] android commit: Updated tweaks to get up and running Message-Id: <20120413200052.CB03BCE63@tyr.zones.apache.org> Date: Fri, 13 Apr 2012 20:00:52 +0000 (UTC) Updated tweaks to get up and running Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/commit/f2526bbc Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/tree/f2526bbc Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/diff/f2526bbc Branch: refs/heads/CordovaWebView Commit: f2526bbc78394f2b3c350b10a7a3e67de7b2d464 Parents: 1794f2e Author: Joe Bowser Authored: Thu Apr 12 14:18:06 2012 -0700 Committer: Joe Bowser Committed: Thu Apr 12 14:18:06 2012 -0700 ---------------------------------------------------------------------- .../org/apache/cordova/CordovaChromeClient.java | 17 +++-- .../src/org/apache/cordova/CordovaWebView.java | 45 ++++++++++++++- .../org/apache/cordova/CordovaWebViewClient.java | 37 ++++++------ framework/src/org/apache/cordova/DroidGap.java | 47 +------------- .../org/apache/cordova/api/CordovaInterface.java | 17 +++++- .../org/apache/cordova/test/ActivityPlugin.java | 2 +- 6 files changed, 94 insertions(+), 71 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/f2526bbc/framework/src/org/apache/cordova/CordovaChromeClient.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/CordovaChromeClient.java b/framework/src/org/apache/cordova/CordovaChromeClient.java index c3c7e21..f5cebb9 100755 --- a/framework/src/org/apache/cordova/CordovaChromeClient.java +++ b/framework/src/org/apache/cordova/CordovaChromeClient.java @@ -22,6 +22,7 @@ import org.json.JSONArray; import org.json.JSONException; +import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; @@ -44,7 +45,7 @@ public class CordovaChromeClient extends WebChromeClient { private String TAG = "CordovaLog"; private long MAX_QUOTA = 100 * 1024 * 1024; - private DroidGap ctx; + private Activity ctx; private CordovaWebView appView; /** @@ -53,16 +54,18 @@ public class CordovaChromeClient extends WebChromeClient { * @param ctx */ public CordovaChromeClient(Context ctx) { - this.ctx = (DroidGap) ctx; - appView = this.ctx.appView; + this.ctx = (Activity) ctx; + //appView = this.ctx.appView; } public CordovaChromeClient(Context ctx, CordovaWebView app) { - this.ctx = (DroidGap) ctx; + this.ctx = (Activity) ctx; appView = app; } + + /** * Tell the client to display a javascript alert dialog. * @@ -176,7 +179,7 @@ public class CordovaChromeClient extends WebChromeClient { // 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://") || url.indexOf(this.ctx.baseUrl) == 0 || ctx.isUrlWhiteListed(url)) { + if (url.startsWith("file://") || url.indexOf(appView.baseUrl) == 0 || appView.isUrlWhiteListed(url)) { reqOk = true; } @@ -224,8 +227,8 @@ public class CordovaChromeClient extends WebChromeClient { // Cordova JS has initialized, so show webview // (This solves white flash seen when rendering HTML) else if (reqOk && defaultValue != null && defaultValue.equals("gap_init:")) { - ctx.appView.setVisibility(View.VISIBLE); - ctx.spinnerStop(); + appView.setVisibility(View.VISIBLE); + //ctx.spinnerStop(); result.confirm("OK"); } http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/f2526bbc/framework/src/org/apache/cordova/CordovaWebView.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/CordovaWebView.java b/framework/src/org/apache/cordova/CordovaWebView.java index 4519262..055fed7 100644 --- a/framework/src/org/apache/cordova/CordovaWebView.java +++ b/framework/src/org/apache/cordova/CordovaWebView.java @@ -42,7 +42,7 @@ public class CordovaWebView extends WebView { //This is for the polyfil history private String url; - private String baseUrl; + String baseUrl; private Stack urls = new Stack(); protected int loadUrlTimeout; @@ -274,9 +274,32 @@ public class CordovaWebView extends WebView { public void loadUrl(String url) { if (!url.startsWith("javascript:")) { + this.url = url; + if (this.baseUrl == null) { + int i = url.lastIndexOf('/'); + if (i > 0) { + this.baseUrl = url.substring(0, i+1); + } + else { + this.baseUrl = this.url + "/"; + } + } + + + // Create callback server and plugin manager + if (callbackServer == null) { + callbackServer = new CallbackServer(); + callbackServer.init(url); + } + else { + callbackServer.reinit(url); + } + pluginManager.init(); + this.urls.push(url); } + super.loadUrl(url); } @@ -287,4 +310,24 @@ public class CordovaWebView extends WebView { public void postMessage(String id, String data) { pluginManager.postMessage(id, data); } + + /** + * Returns the top url on the stack without removing it from + * the stack. + */ + public String peekAtUrlStack() { + if (urls.size() > 0) { + return urls.peek(); + } + return ""; + } + + /** + * Add a url to the stack + * + * @param url + */ + public void pushUrl(String url) { + urls.push(url); + } } http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/f2526bbc/framework/src/org/apache/cordova/CordovaWebViewClient.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/CordovaWebViewClient.java b/framework/src/org/apache/cordova/CordovaWebViewClient.java index 943003b..20dbcbc 100755 --- a/framework/src/org/apache/cordova/CordovaWebViewClient.java +++ b/framework/src/org/apache/cordova/CordovaWebViewClient.java @@ -20,6 +20,7 @@ package org.apache.cordova; import org.apache.cordova.api.LOG; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -41,7 +42,7 @@ import android.webkit.WebViewClient; public class CordovaWebViewClient extends WebViewClient { private static final String TAG = "Cordova"; - DroidGap ctx; + Activity ctx; CordovaWebView appView; private boolean doClearHistory = false; @@ -50,14 +51,13 @@ public class CordovaWebViewClient extends WebViewClient { * * @param ctx */ - public CordovaWebViewClient(DroidGap ctx) { + public CordovaWebViewClient(Activity ctx) { this.ctx = ctx; - appView = ctx.appView; } public CordovaWebViewClient(Context ctx, CordovaWebView view) { - this.ctx = (DroidGap) ctx; + this.ctx = (Activity) ctx; appView = view; } @@ -146,8 +146,8 @@ public class CordovaWebViewClient extends WebViewClient { // If our app or file:, then load into a new Cordova webview container by starting a new instance of our activity. // Our app continues to run. When BACK is pressed, our app is redisplayed. - if (url.startsWith("file://") || url.indexOf(this.ctx.baseUrl) == 0 || ctx.isUrlWhiteListed(url)) { - this.ctx.loadUrl(url); + if (url.startsWith("file://") || url.indexOf(appView.baseUrl) == 0 || appView.isUrlWhiteListed(url)) { + appView.loadUrl(url); } // If not our application, let default viewer handle @@ -221,26 +221,26 @@ public class CordovaWebViewClient extends WebViewClient { } // Clear timeout flag - this.ctx.loadUrlTimeout++; + appView.loadUrlTimeout++; // Try firing the onNativeReady event in JS. If it fails because the JS is // not loaded yet then just set a flag so that the onNativeReady can be fired // from the JS side when the JS gets to that code. if (!url.equals("about:blank")) { - ctx.appView.loadUrl("javascript:try{ cordova.require('cordova/channel').onNativeReady.fire();}catch(e){_nativeReady = true;}"); - this.ctx.postMessage("onNativeReady", null); + appView.loadUrl("javascript:try{ cordova.require('cordova/channel').onNativeReady.fire();}catch(e){_nativeReady = true;}"); + appView.postMessage("onNativeReady", null); } // Make app visible after 2 sec in case there was a JS error and Cordova JS never initialized correctly - if (ctx.appView.getVisibility() == View.INVISIBLE) { + if (appView.getVisibility() == View.INVISIBLE) { Thread t = new Thread(new Runnable() { public void run() { try { Thread.sleep(2000); ctx.runOnUiThread(new Runnable() { public void run() { - ctx.appView.setVisibility(View.VISIBLE); - ctx.spinnerStop(); + appView.setVisibility(View.VISIBLE); + //ctx.spinnerStop(); } }); } catch (InterruptedException e) { @@ -256,7 +256,8 @@ public class CordovaWebViewClient extends WebViewClient { if (appView.callbackServer != null) { appView.callbackServer.destroy(); } - this.ctx.endActivity(); + //this.ctx.endActivity(); + this.ctx.finish(); } } @@ -274,13 +275,13 @@ public class CordovaWebViewClient extends WebViewClient { LOG.d(TAG, "DroidGap: GapViewClient.onReceivedError: Error code=%s Description=%s URL=%s", errorCode, description, failingUrl); // Clear timeout flag - this.ctx.loadUrlTimeout++; + //this.ctx.loadUrlTimeout++; // Stop "app loading" spinner if showing - this.ctx.spinnerStop(); + //this.ctx.spinnerStop(); // Handle error - this.ctx.onReceivedError(errorCode, description, failingUrl); + //this.ctx.onReceivedError(errorCode, description, failingUrl); } public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { @@ -310,8 +311,8 @@ public class CordovaWebViewClient extends WebViewClient { * If you do a document.location.href the url does not get pushed on the stack * so we do a check here to see if the url should be pushed. */ - if (!this.ctx.peekAtUrlStack().equals(url)) { - this.ctx.pushUrl(url); + if (!appView.peekAtUrlStack().equals(url)) { + appView.pushUrl(url); } } } http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/f2526bbc/framework/src/org/apache/cordova/DroidGap.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/DroidGap.java b/framework/src/org/apache/cordova/DroidGap.java index e6474bd..2bb1cdd 100755 --- a/framework/src/org/apache/cordova/DroidGap.java +++ b/framework/src/org/apache/cordova/DroidGap.java @@ -346,16 +346,6 @@ public class DroidGap extends Activity implements CordovaInterface { LOG.d(TAG, "DroidGap.loadUrl(%s)", url); } - this.url = url; - if (this.baseUrl == null) { - int i = url.lastIndexOf('/'); - if (i > 0) { - this.baseUrl = url.substring(0, i+1); - } - else { - this.baseUrl = this.url + "/"; - } - } if (!url.startsWith("javascript:")) { LOG.d(TAG, "DroidGap: url=%s baseUrl=%s", url, baseUrl); } @@ -370,24 +360,12 @@ public class DroidGap extends Activity implements CordovaInterface { me.init(); } - // Handle activity parameters + // Handle activity parameters (TODO: Somehow abstract this) me.handleActivityParameters(); - // Track URLs loaded instead of using appView history - me.urls.push(url); - me.appView.clearHistory(); - - // Create callback server and plugin manager - if (appView.callbackServer == null) { - appView.callbackServer = new CallbackServer(); - appView.callbackServer.init(url); - } - else { - appView.callbackServer.reinit(url); - } - appView.pluginManager.init(); - // If loadingDialog property, then show the App loading dialog for first page of app + // (This doesn't seem to actually do anything here) + /* String loading = null; if (me.urls.size() == 1) { loading = me.getStringProperty("loadingDialog", null); @@ -413,6 +391,7 @@ public class DroidGap extends Activity implements CordovaInterface { } me.spinnerStart(title, message); } + */ // Create a timeout timer for loadUrl final int currentLoadUrlTimeout = me.loadUrlTimeout; @@ -1184,25 +1163,7 @@ public class DroidGap extends Activity implements CordovaInterface { * URL stack manipulators */ - /** - * Returns the top url on the stack without removing it from - * the stack. - */ - public String peekAtUrlStack() { - if (urls.size() > 0) { - return urls.peek(); - } - return ""; - } - /** - * Add a url to the stack - * - * @param url - */ - public void pushUrl(String url) { - urls.push(url); - } /* * Hook in DroidGap for menu plugins http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/f2526bbc/framework/src/org/apache/cordova/api/CordovaInterface.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/api/CordovaInterface.java b/framework/src/org/apache/cordova/api/CordovaInterface.java index 5af9fa8..b25e972 100755 --- a/framework/src/org/apache/cordova/api/CordovaInterface.java +++ b/framework/src/org/apache/cordova/api/CordovaInterface.java @@ -32,6 +32,8 @@ import android.content.res.Resources; import android.database.Cursor; import android.hardware.SensorManager; import android.net.Uri; +import android.view.Menu; +import android.view.MenuItem; /** @@ -64,13 +66,26 @@ public interface CordovaInterface { */ public abstract void bindBackButton(boolean override); - /** * A hook required to check if the Back Button is bound * @return */ public abstract boolean isBackButtonBound(); + /* + * Hook in DroidGap for menu plugins + * (This is in the Android SDK, do we need this on the Interface?) + */ + + public abstract boolean onCreateOptionsMenu(Menu menu); + + public abstract boolean onPrepareOptionsMenu(Menu menu); + + public abstract boolean onOptionsItemSelected(MenuItem item); + + + + /** * @deprecated * Add services to res/xml/plugins.xml instead. http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/f2526bbc/test/src/org/apache/cordova/test/ActivityPlugin.java ---------------------------------------------------------------------- diff --git a/test/src/org/apache/cordova/test/ActivityPlugin.java b/test/src/org/apache/cordova/test/ActivityPlugin.java index 9c26047..019d2ec 100755 --- a/test/src/org/apache/cordova/test/ActivityPlugin.java +++ b/test/src/org/apache/cordova/test/ActivityPlugin.java @@ -69,7 +69,7 @@ public class ActivityPlugin extends Plugin { public void startActivity(String className) { try { - Intent intent = new Intent().setClass(this.ctx.getContext(), Class.forName(className)); + Intent intent = new Intent().setClass(this.ctx, Class.forName(className)); LOG.d(TAG, "Starting activity %s", className); this.ctx.startActivity(intent); } catch (ClassNotFoundException e) {