diff --git a/apps/tests/ui/segmented-bar/segmented-bar-tests-native.android.ts b/apps/tests/ui/segmented-bar/segmented-bar-tests-native.android.ts index e1b4ee2b9..5ea23d18c 100644 --- a/apps/tests/ui/segmented-bar/segmented-bar-tests-native.android.ts +++ b/apps/tests/ui/segmented-bar/segmented-bar-tests-native.android.ts @@ -15,4 +15,8 @@ export function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): } return isValid; +} + +export function setNativeSelectedIndex(bar: segmentedBarModule.SegmentedBar, index: number): void { + (bar.android).setCurrentTab(index); } \ No newline at end of file diff --git a/apps/tests/ui/segmented-bar/segmented-bar-tests-native.d.ts b/apps/tests/ui/segmented-bar/segmented-bar-tests-native.d.ts index ce4e435cf..1851541dc 100644 --- a/apps/tests/ui/segmented-bar/segmented-bar-tests-native.d.ts +++ b/apps/tests/ui/segmented-bar/segmented-bar-tests-native.d.ts @@ -2,5 +2,6 @@ import segmentedBarModule = require("ui/segmented-bar"); export declare function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): number; +export declare function setNativeSelectedIndex(bar: segmentedBarModule.SegmentedBar, index: number): void; export declare function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): boolean; diff --git a/apps/tests/ui/segmented-bar/segmented-bar-tests-native.ios.ts b/apps/tests/ui/segmented-bar/segmented-bar-tests-native.ios.ts index 39766a1b9..3bdc2c1aa 100644 --- a/apps/tests/ui/segmented-bar/segmented-bar-tests-native.ios.ts +++ b/apps/tests/ui/segmented-bar/segmented-bar-tests-native.ios.ts @@ -11,4 +11,9 @@ export function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): isValid = bar.color && attrs && attrs.valueForKey(NSForegroundColorAttributeName) === bar.color.ios; return isValid; +} + +export function setNativeSelectedIndex(bar: segmentedBarModule.SegmentedBar, index: number): void { + bar.ios.selectedSegmentIndex = index; + (bar.ios).sendActionsForControlEvents(UIControlEvents.UIControlEventValueChanged); } \ No newline at end of file diff --git a/apps/tests/ui/segmented-bar/segmented-bar-tests.ts b/apps/tests/ui/segmented-bar/segmented-bar-tests.ts index 473d390e5..9f12157c6 100644 --- a/apps/tests/ui/segmented-bar/segmented-bar-tests.ts +++ b/apps/tests/ui/segmented-bar/segmented-bar-tests.ts @@ -221,3 +221,32 @@ export var testSelectedIndexChangedIsReisedCorrectlyIfSelectedIndexIsSet = funct TKUnit.assertEqual(newIndex, 9); }); } + +export var testSelectedIndexChangedIsReisedCorrectlyIfSelectedIndexIsSetNative = function () { + var oldIndex; + var newIndex; + var segmentedBar = _createSegmentedBar(); + + segmentedBar.on(segmentedBarModule.SegmentedBar.selectedIndexChangedEvent, (args: segmentedBarModule.SelectedIndexChangedEventData) => { + oldIndex = args.oldIndex; + newIndex = args.newIndex; + }); + + segmentedBar.items = _createItems(10); + + helper.buildUIAndRunTest(segmentedBar, function (views: Array) { + var segmentedBar = views[0]; + + segmentedBarTestsNative.setNativeSelectedIndex(segmentedBar, 6); + TKUnit.assertEqual(oldIndex, 0); + TKUnit.assertEqual(newIndex, 6); + + segmentedBarTestsNative.setNativeSelectedIndex(segmentedBar, 3); + TKUnit.assertEqual(oldIndex, 6); + TKUnit.assertEqual(newIndex, 3); + + segmentedBarTestsNative.setNativeSelectedIndex(segmentedBar, 9); + TKUnit.assertEqual(oldIndex, 3); + TKUnit.assertEqual(newIndex, 9); + }); +} diff --git a/ui/segmented-bar/segmented-bar.android.ts b/ui/segmented-bar/segmented-bar.android.ts index d0512dc4b..d26084f4e 100644 --- a/ui/segmented-bar/segmented-bar.android.ts +++ b/ui/segmented-bar/segmented-bar.android.ts @@ -3,6 +3,7 @@ import common = require("ui/segmented-bar/segmented-bar-common"); import dependencyObservable = require("ui/core/dependency-observable"); import proxy = require("ui/core/proxy"); import types = require("utils/types"); +import observable = require("data/observable"); global.moduleMerge(common, exports); @@ -17,13 +18,11 @@ function onSelectedIndexPropertyChanged(data: dependencyObservable.PropertyChang if (types.isNumber(index)) { if (index >= 0 && index <= view.items.length - 1) { view.android.setCurrentTab(index); + view.notify({ eventName: SegmentedBar.selectedIndexChangedEvent, object: view, oldIndex: data.oldValue, newIndex: data.newValue }); } else { view.selectedIndex = undefined; throw new Error("selectedIndex should be between [0, items.length - 1]"); } - - var args = { eventName: SegmentedBar.selectedIndexChangedEvent, object: view, oldIndex: data.oldValue, newIndex: data.newValue }; - view.notify(args); } } (common.SegmentedBar.selectedIndexProperty.metadata).onSetNativeValue = onSelectedIndexPropertyChanged; @@ -146,12 +145,7 @@ export class SegmentedBar extends common.SegmentedBar { onTabChanged: function (id: string) { var bar = that.get(); if (bar) { - var oldIndex = bar.selectedIndex; - var newIndex = parseInt(id); - - if (oldIndex !== newIndex) { - bar._onPropertyChangedFromNative(SegmentedBar.selectedIndexProperty, newIndex); - } + bar.selectedIndex = parseInt(id); } } });