mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-19 07:02:51 +08:00
Make CordovaWebview resilient to init() not being called (for backwards-compatibility)
This can happen when apps are not utilizing CordovaActivity and instead creating their own CordovaWebView.
This commit is contained in:
parent
0c12aa163e
commit
2f24e42dc1
@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
package org.apache.cordova;
|
package org.apache.cordova;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@ -87,4 +89,16 @@ public class Config {
|
|||||||
public static Whitelist getWhitelist() {
|
public static Whitelist getWhitelist() {
|
||||||
return parser.getWhitelist();
|
return parser.getWhitelist();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<PluginEntry> getPluginEntries() {
|
||||||
|
return parser.getPluginEntries();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CordovaPreferences getPreferences() {
|
||||||
|
return parser.getPreferences();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isInitialized() {
|
||||||
|
return parser != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -158,6 +158,19 @@ public class CordovaWebView extends WebView {
|
|||||||
exposeJsInterface();
|
exposeJsInterface();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
private void initIfNecessary() {
|
||||||
|
if (pluginManager == null) {
|
||||||
|
Log.w(TAG, "CordovaWebView.init() was not called. This will soon be required.");
|
||||||
|
// Before the refactor to a two-phase init, the Context needed to implement CordovaInterface.
|
||||||
|
CordovaInterface cdv = (CordovaInterface)getContext();
|
||||||
|
if (!Config.isInitialized()) {
|
||||||
|
Config.init(cdv.getActivity());
|
||||||
|
}
|
||||||
|
init(cdv, makeWebViewClient(cdv), makeWebChromeClient(cdv), Config.getPluginEntries(), Config.getWhitelist(), Config.getPreferences());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("SetJavaScriptEnabled")
|
@SuppressLint("SetJavaScriptEnabled")
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private void initWebViewSettings() {
|
private void initWebViewSettings() {
|
||||||
@ -357,6 +370,8 @@ public class CordovaWebView extends WebView {
|
|||||||
public void loadUrlIntoView(final String url, boolean recreatePlugins) {
|
public void loadUrlIntoView(final String url, boolean recreatePlugins) {
|
||||||
LOG.d(TAG, ">>> loadUrl(" + url + ")");
|
LOG.d(TAG, ">>> loadUrl(" + url + ")");
|
||||||
|
|
||||||
|
initIfNecessary();
|
||||||
|
|
||||||
if (recreatePlugins) {
|
if (recreatePlugins) {
|
||||||
this.loadedUrl = url;
|
this.loadedUrl = url;
|
||||||
this.pluginManager.init();
|
this.pluginManager.init();
|
||||||
@ -515,13 +530,10 @@ public class CordovaWebView extends WebView {
|
|||||||
* @return true if we went back, false if we are already at top
|
* @return true if we went back, false if we are already at top
|
||||||
*/
|
*/
|
||||||
public boolean backHistory() {
|
public boolean backHistory() {
|
||||||
|
|
||||||
// Check webview first to see if there is a history
|
// Check webview first to see if there is a history
|
||||||
// This is needed to support curPage#diffLink, since they are added to appView's history, but not our history url array (JQMobile behavior)
|
// This is needed to support curPage#diffLink, since they are added to appView's history, but not our history url array (JQMobile behavior)
|
||||||
if (super.canGoBack()) {
|
if (super.canGoBack()) {
|
||||||
printBackForwardList();
|
|
||||||
super.goBack();
|
super.goBack();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
|
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||||
|
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||||
|
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
<classpathentry kind="src" path="gen"/>
|
<classpathentry kind="src" path="gen"/>
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
<classpathentry kind="output" path="bin/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
@ -75,7 +75,7 @@ public class BackButtonMultiPageTest extends ActivityInstrumentationTestCase2<ba
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
String url = testView.getUrl();
|
String url = testView.getUrl();
|
||||||
assertTrue(url.endsWith("sample2.html"));
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", url);
|
||||||
testView.sendJavascript("window.location = 'sample3.html';"); }
|
testView.sendJavascript("window.location = 'sample3.html';"); }
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -84,8 +84,10 @@ public class BackButtonMultiPageTest extends ActivityInstrumentationTestCase2<ba
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
String url = testView.getUrl();
|
String url = testView.getUrl();
|
||||||
assertTrue(url.endsWith("sample3.html"));
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample3.html", url);
|
||||||
testView.backHistory();
|
testView.printBackForwardList();
|
||||||
|
assertTrue(testView.backHistory());
|
||||||
|
testView.printBackForwardList();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sleep();
|
sleep();
|
||||||
@ -93,8 +95,8 @@ public class BackButtonMultiPageTest extends ActivityInstrumentationTestCase2<ba
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
String url = testView.getUrl();
|
String url = testView.getUrl();
|
||||||
assertTrue(url.endsWith("sample2.html"));
|
assertEquals("file:///android_asset/www/backbuttonmultipage/sample2.html", url);
|
||||||
testView.backHistory();
|
assertTrue(testView.backHistory());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sleep();
|
sleep();
|
||||||
@ -102,7 +104,7 @@ public class BackButtonMultiPageTest extends ActivityInstrumentationTestCase2<ba
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
String url = testView.getUrl();
|
String url = testView.getUrl();
|
||||||
assertTrue(url.endsWith("index.html"));
|
assertEquals("file:///android_asset/www/backbuttonmultipage/index.html", url);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ public class ErrorUrlTest extends ActivityInstrumentationTestCase2<errorurl> {
|
|||||||
String good_url = "file:///android_asset/www/htmlnotfound/error.html";
|
String good_url = "file:///android_asset/www/htmlnotfound/error.html";
|
||||||
String url = testView.getUrl();
|
String url = testView.getUrl();
|
||||||
assertNotNull(url);
|
assertNotNull(url);
|
||||||
assertTrue(url.equals(good_url));
|
assertEquals(good_url, url);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user