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 {