mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-19 07:02:51 +08:00
Starting to move the history into the CordovaWebView, and getting the WebDriver working again
This commit is contained in:
parent
483bb53d9c
commit
99b3693f40
@ -161,7 +161,7 @@ public class App extends Plugin {
|
||||
* Clear page history for the app.
|
||||
*/
|
||||
public void clearHistory() {
|
||||
((DroidGap)this.ctx).clearHistory();
|
||||
webView.clearHistory();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -169,7 +169,7 @@ public class App extends Plugin {
|
||||
* This is the same as pressing the backbutton on Android device.
|
||||
*/
|
||||
public void backHistory() {
|
||||
((DroidGap)this.ctx).backHistory();
|
||||
webView.backHistory();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -64,7 +64,10 @@ public class CordovaChromeClient extends WebChromeClient {
|
||||
appView = app;
|
||||
}
|
||||
|
||||
|
||||
public void setWebView(CordovaWebView view)
|
||||
{
|
||||
appView = view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tell the client to display a javascript alert dialog.
|
||||
|
@ -270,6 +270,11 @@ public class CordovaWebView extends WebView {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* We override loadUrl so that we can track the back history
|
||||
* @see android.webkit.WebView#loadUrl(java.lang.String)
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void loadUrl(String url)
|
||||
{
|
||||
@ -283,25 +288,53 @@ public class CordovaWebView extends WebView {
|
||||
else {
|
||||
this.baseUrl = this.url + "/";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Create callback server and plugin manager
|
||||
if (callbackServer == null) {
|
||||
callbackServer = new CallbackServer();
|
||||
callbackServer.init(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);
|
||||
}
|
||||
else {
|
||||
callbackServer.reinit(url);
|
||||
}
|
||||
pluginManager.init();
|
||||
|
||||
this.urls.push(url);
|
||||
}
|
||||
|
||||
|
||||
super.loadUrl(url);
|
||||
}
|
||||
|
||||
|
||||
public void loadUrl(final String url, final int time)
|
||||
{
|
||||
// If not first page of app, then load immediately
|
||||
if (this.urls.size() > 0) {
|
||||
this.loadUrl(url);
|
||||
}
|
||||
|
||||
if (!url.startsWith("javascript:")) {
|
||||
LOG.d(TAG, "DroidGap.loadUrl(%s, %d)", url, time);
|
||||
}
|
||||
|
||||
final CordovaWebView me = this;
|
||||
Runnable runnable = new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
synchronized(this) {
|
||||
this.wait(time);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//I'm pretty sure this has to be on the UI thread
|
||||
me.loadUrl(url);
|
||||
}
|
||||
};
|
||||
Thread thread = new Thread(runnable);
|
||||
thread.start();
|
||||
}
|
||||
|
||||
public void sendJavascript(String statement) {
|
||||
callbackServer.sendJavascript(statement);
|
||||
@ -330,4 +363,29 @@ public class CordovaWebView extends WebView {
|
||||
public void pushUrl(String url) {
|
||||
urls.push(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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() {
|
||||
|
||||
// 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)
|
||||
if (this.canGoBack()) {
|
||||
this.goBack();
|
||||
return true;
|
||||
}
|
||||
|
||||
// If our managed history has prev url
|
||||
if (this.urls.size() > 1) {
|
||||
this.urls.pop(); // Pop current url
|
||||
String url = this.urls.pop(); // Pop prev url that we want to load, since it will be added back by loadUrl()
|
||||
loadUrl(url);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -61,6 +61,11 @@ public class CordovaWebViewClient extends WebViewClient {
|
||||
appView = view;
|
||||
}
|
||||
|
||||
public void setWebView(CordovaWebView view)
|
||||
{
|
||||
appView = view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Give the host application a chance to take over the control when a new url
|
||||
* is about to be loaded in the current WebView.
|
||||
|
@ -531,30 +531,7 @@ public class DroidGap extends Activity implements CordovaInterface {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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() {
|
||||
|
||||
// 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)
|
||||
if (this.appView.canGoBack()) {
|
||||
this.appView.goBack();
|
||||
return true;
|
||||
}
|
||||
|
||||
// If our managed history has prev url
|
||||
if (this.urls.size() > 1) {
|
||||
this.urls.pop(); // Pop current url
|
||||
String url = this.urls.pop(); // Pop prev url that we want to load, since it will be added back by loadUrl()
|
||||
this.loadUrl(url);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
/**
|
||||
@ -1208,4 +1185,8 @@ public class DroidGap extends Activity implements CordovaInterface {
|
||||
return this.bound;
|
||||
}
|
||||
|
||||
public boolean backHistory() {
|
||||
return appView.backHistory();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ public class PhoneGapSplash extends Activity {
|
||||
setContentView(R.layout.main);
|
||||
|
||||
phoneGap = (CordovaWebView) findViewById(R.id.phoneGapView);
|
||||
//phoneGap.loadUrl("file:///android_asset/index.html", 5000);
|
||||
phoneGap.loadUrl("file:///android_asset/index.html", 5000);
|
||||
}
|
||||
|
||||
public void onDestroy()
|
||||
|
@ -34,6 +34,8 @@ public class WebDriverTest extends ActivityInstrumentationTestCase2<CordovaDrive
|
||||
viewHandler = new CordovaWebViewClient(testActivity);
|
||||
testDriver = new AndroidWebDriver(testActivity, viewFactory, viewHandler, appCode);
|
||||
testView = (CordovaWebView) testDriver.getWebView();
|
||||
viewHandler.setWebView(testView);
|
||||
appCode.setWebView(testView);
|
||||
}
|
||||
|
||||
public void testPreconditions(){
|
||||
|
Loading…
Reference in New Issue
Block a user