mirror of
https://github.com/apache/cordova-android.git
synced 2026-04-04 00:02:03 +08:00
Starting to move the history into the CordovaWebView, and getting the WebDriver working again
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user