You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by sg...@apache.org on 2015/11/06 14:59:42 UTC
[2/2] cordova-windows git commit: CB-8481 Backbutton support for
Windows 10 Mobile.
CB-8481 Backbutton support for Windows 10 Mobile.
Project: http://git-wip-us.apache.org/repos/asf/cordova-windows/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-windows/commit/02a1ded1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-windows/tree/02a1ded1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-windows/diff/02a1ded1
Branch: refs/heads/master
Commit: 02a1ded1edb70d38f9259f8ab4543887514a19f8
Parents: 8a51ba9
Author: sgrebnov <v-...@microsoft.com>
Authored: Fri Nov 6 15:40:09 2015 +0300
Committer: sgrebnov <v-...@microsoft.com>
Committed: Fri Nov 6 16:59:35 2015 +0300
----------------------------------------------------------------------
cordova-js-src/platform.js | 94 +++++++++++++++++++++++------------------
1 file changed, 52 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/02a1ded1/cordova-js-src/platform.js
----------------------------------------------------------------------
diff --git a/cordova-js-src/platform.js b/cordova-js-src/platform.js
index 62e011c..002017f 100644
--- a/cordova-js-src/platform.js
+++ b/cordova-js-src/platform.js
@@ -38,24 +38,6 @@ module.exports = {
channel.onActivated = cordova.addDocumentEventHandler('activated');
}
channel.onNativeReady.fire();
-
- // Only load this code if we're running on Win10 in a non-emulated app frame, otherwise crash \o/
- if (parseInt(window.clientInformation.userAgent.match(/Windows NT ([0-9.]+)/)[1]) >= 10) {
- var sysnavman = Windows.UI.Core.SystemNavigationManager.getForCurrentView();
- // Inject a listener for the backbutton on the document.
- var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
- backButtonChannel.onHasSubscribersChange = function() {
- // If we just attached the first handler or detached the last handler,
- // let native know we need to override the back button.
- sysnavman.appViewBackButtonVisibility = (this.numHandlers == 1);
- };
-
- var backRequestedHandler = function backRequestedHandler() {
- cordova.fireDocumentEvent('backbutton',null,true);
- return true;
- };
- sysnavman.addEventListener("backrequested", backRequestedHandler, false);
- }
var onWinJSReady = function () {
var app = WinJS.Application;
@@ -77,33 +59,12 @@ module.exports = {
cordova.fireDocumentEvent('activated', platform.activationContext, true);
};
- // preserve reference to original backclick implementation
- var defaultBackButtonHandler = app.onbackclick;
- // create document event handler for backbutton
- var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
-
- // inject new back button handler
- app.onbackclick = function (e) {
- // check if listeners are registered, if yes use custom backbutton event
- // NOTE: backbutton handlers have to throw an exception in order to exit the app
- if (backButtonChannel.numHandlers >= 1) {
- try {
- cordova.fireDocumentEvent('backbutton', e, true);
- return true;
- }
- catch (e) {
- return false;
- }
- }
- // if not listeners are active, use default implementation (backwards compatibility)
- else {
- return defaultBackButtonHandler.apply(app, arguments);
- }
- };
-
app.addEventListener("checkpoint", checkpointHandler);
app.addEventListener("activated", activationHandler, false);
Windows.UI.WebUI.WebUIApplication.addEventListener("resuming", resumingHandler, false);
+
+ injectBackButtonHandler();
+
app.start();
};
@@ -131,3 +92,52 @@ module.exports = {
}
}
};
+
+function injectBackButtonHandler() {
+
+ var app = WinJS.Application;
+
+ // create document event handler for backbutton
+ var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
+
+ // preserve reference to original backclick implementation
+ // `false` as a result will trigger system default behaviour
+ var defaultBackButtonHandler = app.onbackclick || function () { return false; };
+
+ var backRequestedHandler = function backRequestedHandler(evt) {
+ // check if listeners are registered, if yes use custom backbutton event
+ // NOTE: On Windows Phone 8.1 backbutton handlers have to throw an exception in order to exit the app
+ if (backButtonChannel.numHandlers >= 1) {
+ try {
+ cordova.fireDocumentEvent('backbutton', evt, true);
+ evt.handled = true; // Windows Mobile requires handled to be set as well;
+ return true;
+ }
+ catch (e) {
+ return false;
+ }
+ }
+ // if not listeners are active, use default implementation (backwards compatibility)
+ else {
+ return defaultBackButtonHandler.apply(app, arguments);
+ }
+ };
+
+ // Only load this code if we're running on Win10 in a non-emulated app frame, otherwise crash \o/
+ if (navigator.appVersion.indexOf('MSAppHost/3.0') !== -1) { // Windows 10 UWP (PC/Tablet/Phone)
+ var navigationManager = Windows.UI.Core.SystemNavigationManager.getForCurrentView();
+ // Inject a listener for the backbutton on the document.
+ backButtonChannel.onHasSubscribersChange = function () {
+ // If we just attached the first handler or detached the last handler,
+ // let native know we need to override the back button.
+ navigationManager.appViewBackButtonVisibility = (this.numHandlers > 0) ?
+ Windows.UI.Core.AppViewBackButtonVisibility.visible :
+ Windows.UI.Core.AppViewBackButtonVisibility.collapsed;
+ };
+
+ navigationManager.addEventListener("backrequested", backRequestedHandler, false);
+ } else { // Windows 8.1 Phone
+ // inject new back button handler
+ app.onbackclick = backRequestedHandler;
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org