diff --git a/Tests/TKUnit.ts b/Tests/TKUnit.ts
index 5ffb553b9..980ab18ab 100644
--- a/Tests/TKUnit.ts
+++ b/Tests/TKUnit.ts
@@ -114,8 +114,14 @@ export var waitUntilReady = function (isReady: () => boolean, timeoutSec?: numbe
}
};
-var doModalAndroid = function (quitLoop: () => boolean, timeoutSec: number) {
- if (!quitLoop) {
+// Setup for the Android modal loop implementation
+// TODO: If these platform-specific implementations continue to grow, think of per-platform separation (TKUnit.android)
+var nextMethod;
+var targetField;
+var prepared;
+
+var prepareModal = function () {
+ if (prepared) {
return;
}
@@ -143,6 +149,16 @@ var doModalAndroid = function (quitLoop: () => boolean, timeoutSec: number) {
}
}
+ prepared = true;
+}
+
+var doModalAndroid = function (quitLoop: () => boolean, timeoutSec: number) {
+ if (!quitLoop) {
+ return;
+ }
+
+ prepareModal();
+
var queue = android.os.Looper.myQueue();
var quit = false;
diff --git a/Tests/application-tests-common.ts b/Tests/application-tests-common.ts
index 3615381e7..cc7cef874 100644
--- a/Tests/application-tests-common.ts
+++ b/Tests/application-tests-common.ts
@@ -1,4 +1,35 @@
-import app = require("application/application");
+//
+// # Application
+// The Application module provides abstraction over the platform-specific Application implementations.
+// It is the main BCL module and is required for other BCL modules to work properly.
+// The default bootstrap.js implementation for each platform loads and initializes this module.
+// ``` JavaScript
+import app = require("application/application");
+// ```
+// The pre-required `app` module is used throughout the following code snippets.
+//
+
+//
+// ### Initialization
+// ``` JavaScript
+//// The native app instance depends on the target platform
+var nativeAppInstance;
+app.init(nativeAppInstance);
+// ```
+//
+
+//
+// ### Checking the target platform
+// Use the following code in case you need to check somewhere in your code the platform you are running against:
+// ``` JavaScript
+if (app.android) {
+ //// we are running on Android device
+} else if (app.ios) {
+ //// we are running on iOS device
+}
+// ```
+//
+
import TKUnit = require("Tests/TKUnit");
export var testInitDefined = function () {
diff --git a/Tests/application-tests.android.ts b/Tests/application-tests.android.ts
index 19783ee09..8fe92785f 100644
--- a/Tests/application-tests.android.ts
+++ b/Tests/application-tests.android.ts
@@ -6,11 +6,31 @@ import commonTests = require("Tests/application-tests-common");
declare var exports;
require("utils/module-merge").merge(commonTests, exports);
+//
+// ### Using the Android-specific implementation
+// ``` JavaScript
+// Accessing the Android-specific object instance (will be undefined if running on iOS)
+var androidApp = app.android;
+// ```
+// Using the Android Application context
+// ``` JavaScript
+var context = app.android.context;
+//// get the Files (Documents) folder (directory)
+var dir = context.getFilesDir();
+// ```
+// Tracking the current Activity
+// ``` JavaScript
+if (androidApp.currentActivity === androidApp.startActivity) {
+ //// We are currently in the main (start) activity of the application
+}
+// ```
+//
+
export var testAndroidApplicationInitialized = function () {
TKUnit.assert(app.android, "Android application not initialized.");
TKUnit.assert(app.android.context, "Android context not initialized.");
TKUnit.assert(app.android.currentActivity, "Android currentActivity not initialized.");
- TKUnit.assert(app.android.startActivity, "Android mainActivity not initialized.");
+ TKUnit.assert(app.android.startActivity, "Android startActivity not initialized.");
TKUnit.assert(app.android.nativeApp, "Android nativeApp not initialized.");
TKUnit.assert(app.android.packageName, "Android packageName not initialized.");
}
\ No newline at end of file
diff --git a/application/application.android.ts b/application/application.android.ts
index ce9181a8c..0a2e56f87 100644
--- a/application/application.android.ts
+++ b/application/application.android.ts
@@ -85,10 +85,17 @@ var initEvents = function () {
return lifecycleCallbacks;
}
+var initialized;
export var init = function (nativeApp: android.app.Application) {
+ if (initialized) {
+ return;
+ }
+
var app = new AndroidApplication(nativeApp);
exports.android = app;
app.init();
+
+ initialized = true;
}
class AndroidApplication {
diff --git a/application/application.ios.ts b/application/application.ios.ts
index 86e45fafb..9003f2afa 100644
--- a/application/application.ios.ts
+++ b/application/application.ios.ts
@@ -26,11 +26,17 @@ import appModule = require("application/application-common");
declare var exports;
require("utils/module-merge").merge(appModule, exports);
-// TODO: Declarations
+var initialized;
export var init = function (nativeApp: any) {
+ if (initialized) {
+ return;
+ }
+
var app = new iOSApplication(nativeApp);
exports.ios = app;
app.init();
+
+ initialized = true;
}
class iOSApplication {