From 45450456a14ea8abeaed91568079c7cdb3c08646 Mon Sep 17 00:00:00 2001 From: vakrilov Date: Tue, 5 May 2015 16:02:43 +0300 Subject: [PATCH] Loaded/Unloaded fix --- CrossPlatformModules.csproj | 4 ++- apps/tests/pages/page18.ts | 21 ++---------- apps/tests/ui/page/page-tests.ios.ts | 4 +-- apps/tests/ui/tab-view/tab-view-tests.ts | 25 +++++++-------- .../xml-declaration/xml-declaration-tests.ts | 3 +- ui/page/page.ios.ts | 32 +++++++++++++++++++ ui/tab-view/tab-view.android.ts | 1 + ui/tab-view/tab-view.ios.ts | 6 ---- 8 files changed, 54 insertions(+), 42 deletions(-) diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj index f68a991c1..20dee7b20 100644 --- a/CrossPlatformModules.csproj +++ b/CrossPlatformModules.csproj @@ -131,6 +131,7 @@ page17.xml + @@ -591,6 +592,7 @@ + @@ -1562,7 +1564,7 @@ False - + \ No newline at end of file diff --git a/apps/tests/pages/page18.ts b/apps/tests/pages/page18.ts index 549255706..b47fa5771 100644 --- a/apps/tests/pages/page18.ts +++ b/apps/tests/pages/page18.ts @@ -1,25 +1,11 @@ -import observable = require("data/observable"); -import pages = require("ui/page"); +import pages = require("ui/page"); import frame = require("ui/frame"); +import observable = require("data/observable"); + import trace = require("trace"); trace.setCategories("gestures"); trace.enable(); - - -// Event handler for Page "loaded" event attached in main-page.xml -export function pageLoaded(args: observable.EventData) { - //// Get the event sender - //var page = args.object; - - //var textItem = new pages.MenuItem(); - //textItem.text = "from loaded"; - //textItem.on("tap", () => { - // console.log("item added in page.loaded tapped!!!"); - //}); - //page.optionsMenu.addItem(textItem); -} - export function itemTap(args) { console.log("----- Item tapped: " + args.view.tag); @@ -28,7 +14,6 @@ export function itemTap(args) { }); } - export function itemLoaded(args: observable.EventData) { console.log("----- Item loaded: " + (args.object).tag); } diff --git a/apps/tests/ui/page/page-tests.ios.ts b/apps/tests/ui/page/page-tests.ios.ts index 795900dfb..ed5f2c04e 100644 --- a/apps/tests/ui/page/page-tests.ios.ts +++ b/apps/tests/ui/page/page-tests.ios.ts @@ -33,13 +33,13 @@ export function test_NavBar_isVisible_when_MenuItems_areSet() { var navBarIsVisible = false; var handler = function (data) { - page.off(view.View.loadedEvent, handler); + page.off(PageModule.Page.navigatedToEvent, handler); navBarIsVisible = (page.frame.ios).showNavigationBar; } var pageFactory = function (): PageModule.Page { page = new PageModule.Page(); - page.on(view.View.loadedEvent, handler); + page.on(PageModule.Page.navigatedToEvent, handler); var mi = new PageModule.MenuItem(); mi.text = "B"; diff --git a/apps/tests/ui/tab-view/tab-view-tests.ts b/apps/tests/ui/tab-view/tab-view-tests.ts index 3de712bdb..9ffb81486 100644 --- a/apps/tests/ui/tab-view/tab-view-tests.ts +++ b/apps/tests/ui/tab-view/tab-view-tests.ts @@ -409,7 +409,7 @@ export function testBindingIsRefreshedWhenTabViewItemIsUnselectedAndThenSelected } export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() { - var topFrame = frameModule.topmost(); + var i: number; var itemCount = 3; var loadedItems = [0, 0, 0]; var unloadedItems = [0, 0, 0]; @@ -420,25 +420,24 @@ export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() { function createLoadedFor(itemIndex: number) { return function () { - console.log("loaded item: " + itemIndex) loadedItems[itemIndex] = loadedItems[itemIndex] + 1; } } function createUnloadedFor(itemIndex: number) { return function () { - console.log("unloaded item: " + itemIndex) unloadedItems[itemIndex] = unloadedItems[itemIndex] + 1; } } - for (var i = 0; i < itemCount; i++) { - items[i].view.on("loaded", createLoadedFor(i)); - items[i].view.on("unloaded", createUnloadedFor(i)); - } - helper.buildUIAndRunTest(tabView, function () { try { + // Attach to loaded/unloaded events + for (i = 0; i < itemCount; i++) { + items[i].view.on("loaded", createLoadedFor(i)); + items[i].view.on("unloaded", createUnloadedFor(i)); + } + var detailsPageFactory = function (): pageModule.Page { var detailsPage = new pageModule.Page(); detailsPage.content = new labelModule.Label(); @@ -451,16 +450,16 @@ export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() { // Go back to the test page. helper.goBack(); } - - console.log("loaded items: " + loadedItems.join(", ")); - console.log("unloadedItems items: " + unloadedItems.join(", ")); - + + //console.log("loaded items: " + loadedItems.join(", ")); + //console.log("unloadedItems items: " + unloadedItems.join(", ")); + // Check that at least the first item is loaded and unloaded TKUnit.assertEqual(loadedItems[0], 1, "loaded count for 1st item"); TKUnit.assertEqual(unloadedItems[0], 1, "unloaded count for 1st item"); // Check that loaded/unloaded coutns are equal for all tabs - for (var i = 0; i < itemCount; i++) { + for (i = 0; i < itemCount; i++) { TKUnit.assert(loadedItems[i] === unloadedItems[i], "Loaded and unloaded calls are not equal for item " + i + " loaded: " + loadedItems[i] + " unloaded: " + unloadedItems[i]); } diff --git a/apps/tests/xml-declaration/xml-declaration-tests.ts b/apps/tests/xml-declaration/xml-declaration-tests.ts index adbc64ebc..82d3afc00 100644 --- a/apps/tests/xml-declaration/xml-declaration-tests.ts +++ b/apps/tests/xml-declaration/xml-declaration-tests.ts @@ -66,8 +66,7 @@ export var test_parse_ShouldFindEventHandlersInExports = function () { loaded = true; } }); - - page.onLoaded(); + page._emit("loaded"); TKUnit.assert(loaded, "Parse should find event handlers in exports."); }; diff --git a/ui/page/page.ios.ts b/ui/page/page.ios.ts index a6a48304a..98ca8011f 100644 --- a/ui/page/page.ios.ts +++ b/ui/page/page.ios.ts @@ -28,10 +28,28 @@ class UIViewControllerImpl extends UIViewController { trace.write(this._owner + " viewDidLayoutSubviews, isLoaded = " + this._owner.isLoaded, trace.categories.ViewHierarchy); this._owner._updateLayout(); } + + public viewWillAppear() { + trace.write(this._owner + " viewWillAppear", trace.categories.Navigation); + + this._owner._enableLoadedEvents = true; + this._owner.onLoaded(); + this._owner._enableLoadedEvents = false; + } + + public viewDidDisappear() { + trace.write(this._owner + " viewDidDisappear", trace.categories.Navigation); + + this._owner._enableLoadedEvents = true; + this._owner.onUnloaded(); + this._owner._enableLoadedEvents = false; + } + } export class Page extends pageCommon.Page { private _ios: UIViewController; + public _enableLoadedEvents: boolean; constructor(options?: definition.Options) { super(options); @@ -44,6 +62,20 @@ export class Page extends pageCommon.Page { this._addNativeView(newView); } + public onLoaded() { + // loaded/unloaded events are handeled in page viewWillAppear/viewDidDisappear + if (this._enableLoadedEvents) { + super.onLoaded(); + } + } + + public onUnloaded() { + // loaded/unloaded events are handeled in page viewWillAppear/viewDidDisappear + if (this._enableLoadedEvents) { + super.onUnloaded(); + } + } + private _addNativeView(view: viewModule.View) { if (view) { trace.write("Native: Adding " + view + " to " + this, trace.categories.ViewHierarchy); diff --git a/ui/tab-view/tab-view.android.ts b/ui/tab-view/tab-view.android.ts index 0d37598c7..7a6375a55 100644 --- a/ui/tab-view/tab-view.android.ts +++ b/ui/tab-view/tab-view.android.ts @@ -281,6 +281,7 @@ export class TabView extends common.TabView { public onUnloaded() { trace.write("TabView.onUnloaded();", common.traceCategory); this._removeTabsIfNeeded(); + this._unsetAdapter(); super.onUnloaded(); } diff --git a/ui/tab-view/tab-view.ios.ts b/ui/tab-view/tab-view.ios.ts index 360ece8e0..b4dcb5a2a 100644 --- a/ui/tab-view/tab-view.ios.ts +++ b/ui/tab-view/tab-view.ios.ts @@ -24,12 +24,6 @@ class UITabBarControllerImpl extends UITabBarController { return this; } - public viewDidAppear(animated: boolean): void { - trace.write("TabView.UITabBarControllerClass.viewDidAppear();", trace.categories.Debug); - super.viewDidAppear(animated); - this._owner.onLoaded(); - } - public viewDidLayoutSubviews(): void { trace.write("TabView.UITabBarControllerClass.viewDidLayoutSubviews();", trace.categories.Debug); super.viewDidLayoutSubviews();