UNPKG

tns-core-modules

Version:

Telerik NativeScript Core Modules

257 lines (256 loc) • 10.8 kB
var appModule = require("./application-common"); var frame = require("ui/frame"); var observable = require("data/observable"); global.moduleMerge(appModule, exports); var typedExports = exports; var NativeScriptApplication = (function (_super) { __extends(NativeScriptApplication, _super); function NativeScriptApplication() { _super.call(this); return global.__native(this); } NativeScriptApplication.prototype.onCreate = function () { androidApp.init(this); setupOrientationListener(androidApp); }; NativeScriptApplication.prototype.onLowMemory = function () { gc(); java.lang.System.gc(); _super.prototype.onLowMemory.call(this); typedExports.notify({ eventName: typedExports.lowMemoryEvent, object: this, android: this }); }; NativeScriptApplication.prototype.onTrimMemory = function (level) { gc(); java.lang.System.gc(); _super.prototype.onTrimMemory.call(this, level); }; NativeScriptApplication = __decorate([ JavaProxy("com.tns.NativeScriptApplication") ], NativeScriptApplication); return NativeScriptApplication; }(android.app.Application)); function initEvents() { var lifecycleCallbacks = new android.app.Application.ActivityLifecycleCallbacks({ onActivityCreated: function (activity, bundle) { if (!androidApp.startActivity) { androidApp.startActivity = activity; androidApp.notify({ eventName: "activityCreated", object: androidApp, activity: activity, bundle: bundle }); if (androidApp.onActivityCreated) { androidApp.onActivityCreated(activity, bundle); } } androidApp.currentContext = activity; }, onActivityDestroyed: function (activity) { if (activity === androidApp.foregroundActivity) { androidApp.foregroundActivity = undefined; } if (activity === androidApp.currentContext) { androidApp.currentContext = undefined; } if (activity === androidApp.startActivity) { if (typedExports.onExit) { typedExports.onExit(); } typedExports.notify({ eventName: typedExports.exitEvent, object: androidApp, android: activity }); androidApp.startActivity = undefined; } androidApp.notify({ eventName: "activityDestroyed", object: androidApp, activity: activity }); if (androidApp.onActivityDestroyed) { androidApp.onActivityDestroyed(activity); } gc(); }, onActivityPaused: function (activity) { androidApp.paused = true; if (activity === androidApp.foregroundActivity) { if (typedExports.onSuspend) { typedExports.onSuspend(); } typedExports.notify({ eventName: typedExports.suspendEvent, object: androidApp, android: activity }); } androidApp.notify({ eventName: "activityPaused", object: androidApp, activity: activity }); if (androidApp.onActivityPaused) { androidApp.onActivityPaused(activity); } }, onActivityResumed: function (activity) { androidApp.paused = false; if (activity === androidApp.foregroundActivity) { if (typedExports.onResume) { typedExports.onResume(); } typedExports.notify({ eventName: typedExports.resumeEvent, object: androidApp, android: activity }); } androidApp.notify({ eventName: "activityResumed", object: androidApp, activity: activity }); if (androidApp.onActivityResumed) { androidApp.onActivityResumed(activity); } }, onActivitySaveInstanceState: function (activity, bundle) { androidApp.notify({ eventName: "saveActivityState", object: androidApp, activity: activity, bundle: bundle }); if (androidApp.onSaveActivityState) { androidApp.onSaveActivityState(activity, bundle); } }, onActivityStarted: function (activity) { androidApp.foregroundActivity = activity; androidApp.notify({ eventName: "activityStarted", object: androidApp, activity: activity }); if (androidApp.onActivityStarted) { androidApp.onActivityStarted(activity); } }, onActivityStopped: function (activity) { androidApp.notify({ eventName: "activityStopped", object: androidApp, activity: activity }); if (androidApp.onActivityStopped) { androidApp.onActivityStopped(activity); } } }); return lifecycleCallbacks; } var AndroidApplication = (function (_super) { __extends(AndroidApplication, _super); function AndroidApplication() { _super.apply(this, arguments); this._registeredReceivers = {}; this._pendingReceiverRegistrations = new Array(); } AndroidApplication.prototype.init = function (nativeApp) { this.nativeApp = nativeApp; this.packageName = nativeApp.getPackageName(); this.context = nativeApp.getApplicationContext(); this._eventsToken = initEvents(); this.nativeApp.registerActivityLifecycleCallbacks(this._eventsToken); this._registerPendingReceivers(); }; AndroidApplication.prototype._registerPendingReceivers = function () { if (this._pendingReceiverRegistrations) { var i = 0; var length = this._pendingReceiverRegistrations.length; for (; i < length; i++) { var registerFunc = this._pendingReceiverRegistrations[i]; registerFunc(this.context); } this._pendingReceiverRegistrations = new Array(); } }; AndroidApplication.prototype.registerBroadcastReceiver = function (intentFilter, onReceiveCallback) { ensureBroadCastReceiverClass(); var that = this; var registerFunc = function (context) { var receiver = new BroadcastReceiverClass(onReceiveCallback); context.registerReceiver(receiver, new android.content.IntentFilter(intentFilter)); that._registeredReceivers[intentFilter] = receiver; }; if (this.context) { registerFunc(this.context); } else { this._pendingReceiverRegistrations.push(registerFunc); } }; AndroidApplication.prototype.unregisterBroadcastReceiver = function (intentFilter) { var receiver = this._registeredReceivers[intentFilter]; if (receiver) { this.context.unregisterReceiver(receiver); this._registeredReceivers[intentFilter] = undefined; delete this._registeredReceivers[intentFilter]; } }; AndroidApplication.activityCreatedEvent = "activityCreated"; AndroidApplication.activityDestroyedEvent = "activityDestroyed"; AndroidApplication.activityStartedEvent = "activityStarted"; AndroidApplication.activityPausedEvent = "activityPaused"; AndroidApplication.activityResumedEvent = "activityResumed"; AndroidApplication.activityStoppedEvent = "activityStopped"; AndroidApplication.saveActivityStateEvent = "saveActivityState"; AndroidApplication.activityResultEvent = "activityResult"; AndroidApplication.activityBackPressedEvent = "activityBackPressed"; return AndroidApplication; }(observable.Observable)); exports.AndroidApplication = AndroidApplication; var androidApp = new AndroidApplication(); typedExports.android = androidApp; var BroadcastReceiverClass; function ensureBroadCastReceiverClass() { if (BroadcastReceiverClass) { return; } var BroadcastReceiver = (function (_super) { __extends(BroadcastReceiver, _super); function BroadcastReceiver(onReceiveCallback) { _super.call(this); this._onReceiveCallback = onReceiveCallback; return global.__native(this); } BroadcastReceiver.prototype.onReceive = function (context, intent) { if (this._onReceiveCallback) { this._onReceiveCallback(context, intent); } }; return BroadcastReceiver; }(android.content.BroadcastReceiver)); BroadcastReceiverClass = BroadcastReceiver; } var started = false; function start(entry) { if (started) { throw new Error("Application is already started."); } started = true; if (entry) { typedExports.mainEntry = entry; } loadCss(); } exports.start = start; var currentOrientation; function setupOrientationListener(androidApp) { androidApp.registerBroadcastReceiver(android.content.Intent.ACTION_CONFIGURATION_CHANGED, onConfigurationChanged); currentOrientation = androidApp.context.getResources().getConfiguration().orientation; } function onConfigurationChanged(context, intent) { var orientation = context.getResources().getConfiguration().orientation; if (currentOrientation !== orientation) { currentOrientation = orientation; var enums = require("ui/enums"); var newValue; switch (orientation) { case android.content.res.Configuration.ORIENTATION_LANDSCAPE: newValue = enums.DeviceOrientation.landscape; break; case android.content.res.Configuration.ORIENTATION_PORTRAIT: newValue = enums.DeviceOrientation.portrait; break; default: newValue = enums.DeviceOrientation.unknown; break; } typedExports.notify({ eventName: typedExports.orientationChangedEvent, android: context, newValue: newValue, object: typedExports.android, }); } } function loadCss() { typedExports.cssSelectorsCache = typedExports.loadCss(typedExports.cssFile); } global.__onLiveSync = function () { if (typedExports.android && typedExports.android.paused) { return; } var fileResolver = require("file-system/file-name-resolver"); fileResolver.clearCache(); loadCss(); frame.reloadPage(); }; global.__onUncaughtError = function (error) { var types = require("utils/types"); if (types.isFunction(typedExports.onUncaughtError)) { typedExports.onUncaughtError(error); } typedExports.notify({ eventName: typedExports.uncaughtErrorEvent, object: appModule.android, android: error }); };