diff --git a/VERSION b/VERSION index 27f9cd32..6ed8c32e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.8.0 +1.9.0rc1 diff --git a/framework/src/org/apache/cordova/DroidGap.java b/framework/src/org/apache/cordova/DroidGap.java index cf55dde7..d4c142d3 100755 --- a/framework/src/org/apache/cordova/DroidGap.java +++ b/framework/src/org/apache/cordova/DroidGap.java @@ -256,10 +256,21 @@ public class DroidGap extends Activity implements CordovaInterface { LOG.d(TAG, "DroidGap.onCreate()"); super.onCreate(savedInstanceState); - getWindow().requestFeature(Window.FEATURE_NO_TITLE); - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); - + 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(); diff --git a/framework/src/org/apache/cordova/FileTransfer.java b/framework/src/org/apache/cordova/FileTransfer.java index 0f285ae1..4accd55c 100644 --- a/framework/src/org/apache/cordova/FileTransfer.java +++ b/framework/src/org/apache/cordova/FileTransfer.java @@ -219,9 +219,11 @@ public class FileTransfer extends Plugin { extraParams += LINE_START + BOUNDARY + LINE_END; extraParams += "Content-Disposition: form-data; name=\"" + fileKey + "\";" + " filename=\""; + byte[] extraBytes = extraParams.getBytes("UTF-8"); String midParams = "\"" + LINE_END + "Content-Type: " + mimeType + LINE_END + LINE_END; String tailParams = LINE_END + LINE_START + BOUNDARY + LINE_START + LINE_END; + byte[] fileNameBytes = fileName.getBytes("UTF-8"); // Should set this up as an option if (chunkedMode) { @@ -229,7 +231,7 @@ public class FileTransfer extends Plugin { } else { - int stringLength = extraParams.length() + midParams.length() + tailParams.length() + fileName.getBytes("UTF-8").length; + int stringLength = extraBytes.length + midParams.length() + tailParams.length() + fileNameBytes.length; Log.d(LOG_TAG, "String Length: " + stringLength); int fixedLength = (int) fileInputStream.getChannel().size() + stringLength; Log.d(LOG_TAG, "Content Length: " + fixedLength); @@ -238,9 +240,9 @@ public class FileTransfer extends Plugin { dos = new DataOutputStream( conn.getOutputStream() ); - dos.writeBytes(extraParams); - //We don't want to chagne encoding, we just want this to write for all Unicode. - dos.write(fileName.getBytes("UTF-8")); + //We don't want to change encoding, we just want this to write for all Unicode. + dos.write(extraBytes); + dos.write(fileNameBytes); dos.writeBytes(midParams); // create a buffer of maximum size diff --git a/test/src/org/apache/cordova/test/CordovaDriverAction.java b/test/src/org/apache/cordova/test/CordovaDriverAction.java new file mode 100644 index 00000000..11a11f62 --- /dev/null +++ b/test/src/org/apache/cordova/test/CordovaDriverAction.java @@ -0,0 +1,78 @@ +/* + 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.test; + +import org.apache.cordova.api.CordovaInterface; +import org.apache.cordova.api.IPlugin; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + + +public class CordovaDriverAction extends Activity implements CordovaInterface { + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public void bindBackButton(boolean arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void cancelLoadUrl() { + // TODO Auto-generated method stub + + } + + @Override + public Activity getActivity() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isBackButtonBound() { + // TODO Auto-generated method stub + return false; + } + + @Override + public Object onMessage(String arg0, Object arg1) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setActivityResultCallback(IPlugin arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void startActivityForResult(IPlugin arg0, Intent arg1, int arg2) { + // TODO Auto-generated method stub + + } +} diff --git a/test/src/org/apache/cordova/test/CordovaViewFactory.java b/test/src/org/apache/cordova/test/CordovaViewFactory.java new file mode 100644 index 00000000..99686f24 --- /dev/null +++ b/test/src/org/apache/cordova/test/CordovaViewFactory.java @@ -0,0 +1,37 @@ +/* + 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.test; + +import org.openqa.selenium.android.library.ViewAdapter; +import org.openqa.selenium.android.library.ViewFactory; + +import org.apache.cordova.CordovaWebView; + +import android.app.Activity; +import android.webkit.WebView; + +public class CordovaViewFactory implements ViewFactory { + + public ViewAdapter createNewView(Activity arg0) { + // TODO Auto-generated method stub + return new ViewAdapter("org.apache.cordova.CordovaWebView", new CordovaWebView(arg0)); + } + +} diff --git a/test/src/org/apache/cordova/test/LoadTimeoutTest.java b/test/src/org/apache/cordova/test/LoadTimeoutTest.java deleted file mode 100644 index 1978f7ed..00000000 --- a/test/src/org/apache/cordova/test/LoadTimeoutTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.apache.cordova.test; - -import org.apache.cordova.CordovaWebView; - -import android.test.ActivityInstrumentationTestCase2; -import android.widget.FrameLayout; -import android.widget.LinearLayout; - -public class LoadTimeoutTest extends ActivityInstrumentationTestCase2 { - private loading testActivity; - private FrameLayout containerView; - private LinearLayout innerContainer; - private CordovaWebView testView; - private long TIMEOUT = 1000; - -public LoadTimeoutTest() - { - super("org.apache.cordova.test",loading.class); - } - - protected void setUp() throws Exception { - super.setUp(); - testActivity = this.getActivity(); - containerView = (FrameLayout) testActivity.findViewById(android.R.id.content); - innerContainer = (LinearLayout) containerView.getChildAt(0); - testView = (CordovaWebView) innerContainer.getChildAt(0); - } - - public void testPreconditions(){ - assertNotNull(innerContainer); - assertNotNull(testView); - } - - public void testUrl() - { - sleep(); - String good_url = "http://www.google.com"; - String url = testView.getUrl(); - assertNotNull(url); - assertFalse(url.equals(good_url)); - } - - private void sleep() { - try { - Thread.sleep(TIMEOUT ); - } catch (InterruptedException e) { - fail("Unexpected Timeout"); - } - } -} diff --git a/test/src/org/apache/cordova/test/UserWebViewTest.java b/test/src/org/apache/cordova/test/UserWebViewTest.java index a3f82d86..84c09303 100644 --- a/test/src/org/apache/cordova/test/UserWebViewTest.java +++ b/test/src/org/apache/cordova/test/UserWebViewTest.java @@ -1,6 +1,12 @@ package org.apache.cordova.test; +import org.apache.cordova.CordovaWebView; +import org.apache.cordova.CordovaWebViewClient; +import org.apache.cordova.CordovaChromeClient; + import android.test.ActivityInstrumentationTestCase2; +import android.widget.FrameLayout; +import android.widget.LinearLayout; public class UserWebViewTest extends ActivityInstrumentationTestCase2 { @@ -8,4 +14,41 @@ public class UserWebViewTest extends ActivityInstrumentationTestCase2 { + + private static final long TIMEOUT = 5000; + private CordovaDriverAction testActivity; + private CordovaWebView testView; + private CordovaViewFactory viewFactory; + private CordovaChromeClient appCode; + private CordovaWebViewClient viewHandler; + private AndroidWebDriver testDriver; + private ViewClientWrapper viewClientWrapper; + private ChromeClientWrapper chromeClientWrapper; + + public WebDriverTest() { + super("com.phonegap.test.activities",CordovaDriverAction.class); + } + + protected void setUp() throws Exception{ + super.setUp(); + + testActivity = this.getActivity(); + viewFactory = new CordovaViewFactory(); + appCode = new CordovaChromeClient(testActivity); + viewHandler = new CordovaWebViewClient(testActivity); + viewClientWrapper = new ViewClientWrapper("org.apache.cordova.CordovaWebViewClient", viewHandler); + chromeClientWrapper = new ChromeClientWrapper("org.apache.cordova.CordovaChromeClient", appCode); + testDriver = new AndroidWebDriver(testActivity, viewFactory, viewClientWrapper, chromeClientWrapper); + testView = (CordovaWebView) testDriver.getWebView(); + viewHandler.setWebView(testView); + appCode.setWebView(testView); + } + + public void testPreconditions(){ + assertNotNull(testView); + } + + public void testWebLoad() { + testDriver.get("file:///android_asset/www/index.html"); + sleep(); + String url = testView.getUrl(); + //Check the sanity! + boolean result = url.equals("file:///android_asset/www/index.html"); + assertTrue(result); + WebElement platformSpan = testDriver.findElement(By.id("platform")); + String text = platformSpan.getText(); + assertTrue(text.equals("Android")); + } + + + private void sleep() { + try { + Thread.sleep(TIMEOUT); + } catch (InterruptedException e) { + fail("Unexpected Timeout"); + } + } +} diff --git a/test/src/org/apache/cordova/test/WhitelistTest.java b/test/src/org/apache/cordova/test/WhitelistTest.java deleted file mode 100644 index f3477c46..00000000 --- a/test/src/org/apache/cordova/test/WhitelistTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.apache.cordova.test; - -import android.test.ActivityInstrumentationTestCase2; - -public class WhitelistTest extends ActivityInstrumentationTestCase2 { - - public WhitelistTest() - { - super(whitelist.class); - } - -} diff --git a/test/src/org/apache/cordova/test/userwebview.java b/test/src/org/apache/cordova/test/userwebview.java index 405b474d..665689f0 100755 --- a/test/src/org/apache/cordova/test/userwebview.java +++ b/test/src/org/apache/cordova/test/userwebview.java @@ -26,9 +26,15 @@ import org.apache.cordova.*; import org.apache.cordova.api.LOG; public class userwebview extends DroidGap { + + public TestViewClient testViewClient; + public TestChromeClient testChromeClient; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + testViewClient = new TestViewClient(this); + testChromeClient = new TestChromeClient(this); super.init(new CordovaWebView(this), new TestViewClient(this), new TestChromeClient(this)); super.loadUrl("file:///android_asset/www/userwebview/index.html"); }