diff --git a/framework/assets/js/app.js b/framework/assets/js/app.js index be3c2268..a8c81238 100755 --- a/framework/assets/js/app.js +++ b/framework/assets/js/app.js @@ -59,6 +59,14 @@ App.prototype.clearHistory = function() { PhoneGap.exec(null, null, "App", "clearHistory", []); }; +/** + * Go to previous page displayed. + * This is the same as pressing the backbutton on Android device. + */ +App.prototype.backHistory = function() { + PhoneGap.exec(null, null, "App", "backHistory", []); +}; + /** * Override the default behavior of the Android back button. * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. @@ -91,6 +99,8 @@ App.prototype.addWhiteListEntry = function(origin, subdomains) { PhoneGap.addConstructor(function() { navigator.app = new App(); + navigator.app.origHistoryBack = window.history.back; + window.history.back = navigator.app.backHistory; }); }()); } diff --git a/framework/src/com/phonegap/App.java b/framework/src/com/phonegap/App.java index 812eb97d..28b0b6fe 100755 --- a/framework/src/com/phonegap/App.java +++ b/framework/src/com/phonegap/App.java @@ -44,6 +44,9 @@ public class App extends Plugin { } else if (action.equals("clearHistory")) { this.clearHistory(); + } + else if (action.equals("backHistory")) { + this.backHistory(); } else if (action.equals("overrideBackbutton")) { this.overrideBackbutton(args.getBoolean(0)); @@ -144,9 +147,19 @@ public class App extends Plugin { /** * Clear web history in this web view. + * This does not have any effect since each page has its own activity. */ public void clearHistory() { ((DroidGap)this.ctx).clearHistory(); + // TODO: Kill previous activities? + } + + /** + * Go to previous page displayed. + * This is the same as pressing the backbutton on Android device. + */ + public void backHistory() { + ((DroidGap)this.ctx).endActivity(); } /** @@ -174,7 +187,7 @@ public class App extends Plugin { */ public void exitApp() { ((DroidGap)this.ctx).setResult(Activity.RESULT_OK); - ((DroidGap)this.ctx).onDestroy(); + ((DroidGap)this.ctx).endActivity(); } /** diff --git a/framework/src/com/phonegap/DroidGap.java b/framework/src/com/phonegap/DroidGap.java index f27fcd14..f64ab7cf 100755 --- a/framework/src/com/phonegap/DroidGap.java +++ b/framework/src/com/phonegap/DroidGap.java @@ -716,13 +716,6 @@ public class DroidGap extends PhonegapActivity { if (this.appView != null) { - // Make invisible - DroidGap.this.runOnUiThread(new Runnable() { - public void run() { - DroidGap.this.setVisible(false); - } - }); - // Make sure pause event is sent if onPause hasn't been called before onDestroy this.appView.loadUrl("javascript:try{PhoneGap.onPause.fire();}catch(e){};"); @@ -816,7 +809,7 @@ public class DroidGap extends PhonegapActivity { // Finish current activity if (clearPrev) { - this.finish(); + this.endActivity(); } } @@ -1300,6 +1293,13 @@ public class DroidGap extends PhonegapActivity { } } + /** + * End this activity by simulating backbutton keypress + */ + public void endActivity() { + super.onKeyDown(KeyEvent.KEYCODE_BACK, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); + } + /** * Called when a key is pressed. * @@ -1408,7 +1408,7 @@ public class DroidGap extends PhonegapActivity { // If terminating app, then shut down this activity too if (resultCode == Activity.RESULT_OK) { this.setResult(Activity.RESULT_OK); - this.onDestroy(); + this.endActivity(); } return; }