diff --git a/apps/action-bar-demo/pages/action-items-text.xml b/apps/action-bar-demo/pages/action-items-text.xml
index 00722c1e8..40d8b5705 100644
--- a/apps/action-bar-demo/pages/action-items-text.xml
+++ b/apps/action-bar-demo/pages/action-items-text.xml
@@ -2,9 +2,9 @@
-
-
-
+
+
+
diff --git a/apps/action-bar-demo/pages/data-binding.xml b/apps/action-bar-demo/pages/data-binding.xml
index 558e4e9d6..8e77e2b3d 100644
--- a/apps/action-bar-demo/pages/data-binding.xml
+++ b/apps/action-bar-demo/pages/data-binding.xml
@@ -3,8 +3,8 @@
-
-
+
+
diff --git a/apps/action-bar-demo/pages/navigation-button.ts b/apps/action-bar-demo/pages/navigation-button.ts
index f49a680d4..b0a0fadf8 100644
--- a/apps/action-bar-demo/pages/navigation-button.ts
+++ b/apps/action-bar-demo/pages/navigation-button.ts
@@ -28,17 +28,19 @@ var j = 0;
export function visibilityTap(args: observable.EventData) {
var page = view.getAncestor(args.object, "Page")
- if (j % 3 === 0) {
- page.actionBar.androidIconVisibility = "always";
+ if (page.actionBar.android) {
+ if (j % 3 === 0) {
+ page.actionBar.android.iconVisibility = "always";
+ }
+ else if (j % 3 === 1) {
+ page.actionBar.android.iconVisibility = "never";
+ }
+ else if (j % 3 === 2) {
+ page.actionBar.android.iconVisibility = "auto";
+ }
+ j++;
+ console.log("Visibility changed to: " + page.actionBar.android.iconVisibility);
}
- else if (j % 3 === 1) {
- page.actionBar.androidIconVisibility = "never";
- }
- else if (j % 3 === 2) {
- page.actionBar.androidIconVisibility = "auto";
- }
- j++;
- console.log("Visibility changed to: " + page.actionBar.androidIconVisibility);
}
export function navTap(args: observable.EventData) {
diff --git a/apps/action-bar-demo/pages/page-title-icon.ts b/apps/action-bar-demo/pages/page-title-icon.ts
index ba77f0153..df808c206 100644
--- a/apps/action-bar-demo/pages/page-title-icon.ts
+++ b/apps/action-bar-demo/pages/page-title-icon.ts
@@ -5,16 +5,18 @@ import view = require("ui/core/view");
var i = 0;
export function buttonTap(args: observable.EventData) {
var page = view.getAncestor(args.object, "Page")
-
page.actionBar.title = "Title changed " + i++;
- if (i % 3 === 0) {
- page.actionBar.icon = "res://ic_test";
- }
- else if (i % 3 === 1) {
- page.actionBar.icon = "~/test-icon.png";
- }
- else if (i % 3 === 2) {
- page.actionBar.icon = undefined;
+
+ if (page.actionBar.android) {
+ if (i % 3 === 0) {
+ page.actionBar.android.icon = "res://ic_test";
+ }
+ else if (i % 3 === 1) {
+ page.actionBar.android.icon = "~/test-icon.png";
+ }
+ else if (i % 3 === 2) {
+ page.actionBar.android.icon = undefined;
+ }
}
}
@@ -22,15 +24,17 @@ var j = 0;
export function visibilityTap(args: observable.EventData) {
var page = view.getAncestor(args.object, "Page")
- if (j % 3 === 0) {
- page.actionBar.androidIconVisibility = "always";
+ if (page.actionBar.android) {
+ if (j % 3 === 0) {
+ page.actionBar.android.iconVisibility = "always";
+ }
+ else if (j % 3 === 1) {
+ page.actionBar.android.iconVisibility = "never";
+ }
+ else if (j % 3 === 2) {
+ page.actionBar.android.iconVisibility = "auto";
+ }
+ j++;
+ console.log("Visibility changed to: " + page.actionBar.android.iconVisibility);
}
- else if (j % 3 === 1) {
- page.actionBar.androidIconVisibility = "never";
- }
- else if (j % 3 === 2) {
- page.actionBar.androidIconVisibility = "auto";
- }
- j++;
- console.log("Visibility changed to: " + page.actionBar.androidIconVisibility);
}
diff --git a/apps/tests/pages/page17.ts b/apps/tests/pages/page17.ts
index 45aa3756c..52a4bd061 100644
--- a/apps/tests/pages/page17.ts
+++ b/apps/tests/pages/page17.ts
@@ -23,14 +23,17 @@ export function optionTap(args) {
var i = 0;
export function buttonTap(args: observable.EventData) {
currentPage.actionBar.title = "hi " + i++;
- if (i % 3 === 0) {
- currentPage.actionBar.icon = "res://ic_test";
- }
- else if (i % 3 === 1) {
- currentPage.actionBar.icon = "~/test-icon.png";
- }
- else if (i % 3 === 2) {
- currentPage.actionBar.icon = undefined;
+
+ if (currentPage.actionBar.android) {
+ if (i % 3 === 0) {
+ currentPage.actionBar.android.icon = "res://ic_test";
+ }
+ else if (i % 3 === 1) {
+ currentPage.actionBar.android.icon = "~/test-icon.png";
+ }
+ else if (i % 3 === 2) {
+ currentPage.actionBar.android.icon = undefined;
+ }
}
}
diff --git a/ui/action-bar/action-bar-common.ts b/ui/action-bar/action-bar-common.ts
index 4011830b4..8433762f5 100644
--- a/ui/action-bar/action-bar-common.ts
+++ b/ui/action-bar/action-bar-common.ts
@@ -19,16 +19,9 @@ function onTitlePropertyChanged(data: dependencyObservable.PropertyChangeData) {
actionBar._onTitlePropertyChanged();
}
-function onIconPropertyChanged(data: dependencyObservable.PropertyChangeData) {
- var actionBar = data.object;
- actionBar._onIconPropertyChanged();
-}
-
export class ActionBar extends view.View implements dts.ActionBar {
public static titleProperty = new dependencyObservable.Property("title", "ActionBar", new proxy.PropertyMetadata(undefined, dependencyObservable.PropertyMetadataSettings.None, onTitlePropertyChanged));
- public static iconProperty = new dependencyObservable.Property("icon", "ActionBar", new proxy.PropertyMetadata(undefined, dependencyObservable.PropertyMetadataSettings.None, onIconPropertyChanged));
- public static androidIconVisibilityProperty = new dependencyObservable.Property("androidIconVisibility", "ActionBar", new proxy.PropertyMetadata("auto", dependencyObservable.PropertyMetadataSettings.None, onIconPropertyChanged));
-
+
private _actionItems: ActionItems;
private _navigationButton: NavigationButton;
private _page: pages.Page;
@@ -41,20 +34,6 @@ export class ActionBar extends view.View implements dts.ActionBar {
this._setValue(ActionBar.titleProperty, value);
}
- get icon(): string {
- return this._getValue(ActionBar.iconProperty);
- }
- set icon(value: string) {
- this._setValue(ActionBar.iconProperty, value);
- }
-
- get androidIconVisibility(): string {
- return this._getValue(ActionBar.androidIconVisibilityProperty);
- }
- set androidIconVisibility(value: string) {
- this._setValue(ActionBar.androidIconVisibilityProperty, value);
- }
-
get navigationButton(): NavigationButton {
return this._navigationButton;
}
@@ -117,6 +96,10 @@ export class ActionBar extends view.View implements dts.ActionBar {
}, this._page);
}
+ get android(): dts.AndroidActionBarSettings {
+ return undefined;
+ }
+
get _childrenCount(): number {
return this.titleView ? 1 : 0;
}
@@ -136,10 +119,6 @@ export class ActionBar extends view.View implements dts.ActionBar {
//
}
- public _onIconPropertyChanged() {
- //
- }
-
public _updateAndroidActionBar(menu: android.view.IMenu) {
//
}
@@ -181,7 +160,7 @@ export class ActionBar extends view.View implements dts.ActionBar {
public shouldShow(): boolean {
if (this.title ||
- this.icon ||
+ (this.android && this.android.icon) ||
this.navigationButton ||
this.actionItems.getItems().length > 0) {
@@ -193,14 +172,14 @@ export class ActionBar extends view.View implements dts.ActionBar {
}
export class ActionItems implements dts.ActionItems {
- private _items: Array = new Array();
+ private _items: Array = new Array();
private _actionBar: ActionBar;
constructor(actionBar: ActionBar) {
this._actionBar = actionBar;
}
- public addItem(item: ActionItem): void {
+ public addItem(item: dts.ActionItem): void {
if (!item) {
throw new Error("Cannot add empty item");
}
@@ -210,7 +189,7 @@ export class ActionItems implements dts.ActionItems {
this.invalidate();
}
- public removeItem(item: ActionItem): void {
+ public removeItem(item: dts.ActionItem): void {
if (!item) {
throw new Error("Cannot remove empty item");
}
@@ -225,11 +204,11 @@ export class ActionItems implements dts.ActionItems {
this.invalidate();
}
- public getItems(): Array {
+ public getItems(): Array {
return this._items.slice();
}
- public getItemAt(index: number): ActionItem {
+ public getItemAt(index: number): dts.ActionItem {
if (index < 0 || index >= this._items.length) {
return undefined;
}
@@ -237,7 +216,7 @@ export class ActionItems implements dts.ActionItems {
return this._items[index];
}
- public setItems(items: Array) {
+ public setItems(items: Array) {
// Remove all existing items
while (this._items.length > 0) {
this.removeItem(this._items[this._items.length - 1]);
@@ -268,7 +247,7 @@ export class ActionItemBase extends bindable.Bindable implements dts.ActionItemB
"icon", "ActionItemBase", new dependencyObservable.PropertyMetadata(null, null, ActionItemBase.onItemChanged));
private static onItemChanged(data: dependencyObservable.PropertyChangeData) {
- var menuItem = data.object;
+ var menuItem = data.object;
if (menuItem.actionBar) {
menuItem.actionBar.updateActionBar();
}
@@ -302,27 +281,7 @@ export class ActionItemBase extends bindable.Bindable implements dts.ActionItemB
}
public _raiseTap() {
- this._emit(ActionItem.tapEvent);
- }
-
-}
-
-export class ActionItem extends ActionItemBase {
- private _androidPosition: string = enums.AndroidActionItemPosition.actionBar;
- private _iosPosition: string = enums.IOSActionItemPosition.right;
-
- get androidPosition(): string {
- return this._androidPosition;
- }
- set androidPosition(value: string) {
- this._androidPosition = value;
- }
-
- get iosPosition(): string {
- return this._iosPosition;
- }
- set iosPosition(value: string) {
- this._iosPosition = value;
+ this._emit(ActionItemBase.tapEvent);
}
}
diff --git a/ui/action-bar/action-bar.android.ts b/ui/action-bar/action-bar.android.ts
index efcd2f8ca..07bfb73f0 100644
--- a/ui/action-bar/action-bar.android.ts
+++ b/ui/action-bar/action-bar.android.ts
@@ -6,6 +6,7 @@ import utils = require("utils/utils");
import imageSource = require("image-source");
import enums = require("ui/enums");
import application = require("application");
+import dts = require("ui/action-bar");
var ACTION_ITEM_ID_OFFSET = 1000;
var API_LVL = android.os.Build.VERSION.SDK_INT;
@@ -13,14 +14,71 @@ var API_LVL = android.os.Build.VERSION.SDK_INT;
declare var exports;
require("utils/module-merge").merge(common, exports);
+export class ActionItem extends common.ActionItemBase implements dts.ActionItem {
+ private _androidPosition: dts.AndroidActionItemSettings = { position: enums.AndroidActionItemPosition.actionBar };
+
+ public get android(): dts.AndroidActionItemSettings {
+ return this._androidPosition;
+ }
+ public set android(value: dts.AndroidActionItemSettings) {
+ throw new Error("ActionItem.android is read-only");
+ }
+
+ // Not used in Android
+ public ios: dts.IOSActionItemSettings;
+}
+
+export class AndroidActionBarSettings implements dts.AndroidActionBarSettings {
+ private _actionBar: ActionBar;
+ private _icon: string;
+ private _iconVisibility: string = enums.AndroidActionBarIconVisibility.auto;
+
+ public get icon(): string {
+ return this._icon;
+ }
+ public set icon(value: string) {
+ if (value !== this._icon) {
+ this._icon = value;
+ this._actionBar._onIconPropertyChanged();
+ }
+ }
+
+ public get iconVisibility(): string {
+ return this._iconVisibility;
+ }
+ public set iconVisibility(value: string) {
+ if (value !== this._iconVisibility) {
+ this._iconVisibility = value;
+ this._actionBar._onIconPropertyChanged();
+ }
+ }
+
+ constructor(actionBar: ActionBar) {
+ this._actionBar = actionBar;
+ }
+}
+
export class ActionBar extends common.ActionBar {
private _appResources: android.content.res.Resources;
+ private _android: AndroidActionBarSettings;
+
+ get android(): AndroidActionBarSettings {
+ return this._android;
+ }
+
+ set android(value: AndroidActionBarSettings) {
+ throw new Error("ActionBar.android is read-only");
+ }
+
+ get _nativeView() {
+ return undefined;
+ }
constructor() {
super();
this._appResources = application.android.context.getResources();
- this.actionItems
+ this._android = new AndroidActionBarSettings(this);
}
public updateActionBar() {
@@ -39,7 +97,6 @@ export class ActionBar extends common.ActionBar {
if (this.navigationButton && itemId === (android).R.id.home) {
this.navigationButton._raiseTap();
return true;
-
}
return false;
@@ -80,7 +137,7 @@ export class ActionBar extends common.ActionBar {
}
public _updateIcon(actionBar: android.app.ActionBar) {
- var icon = this.icon;
+ var icon = this.android.icon;
if (types.isDefined(icon)) {
var drawableOrId = getDrawableOrResourceId(icon, this._appResources);
if (drawableOrId) {
@@ -92,12 +149,7 @@ export class ActionBar extends common.ActionBar {
actionBar.setIcon(defaultIcon);
}
- var iconVisibility: boolean;
- if (this.androidIconVisibility === enums.AndroidActionBarIconVisibility.always) {
- iconVisibility = true;
- }
-
- var visibility = getIconVisibility(this.androidIconVisibility);
+ var visibility = getIconVisibility(this.android.iconVisibility);
actionBar.setDisplayShowHomeEnabled(visibility);
}
@@ -211,8 +263,8 @@ function getDrawableOrResourceId(icon: string, resources: android.content.res.Re
return undefined;
}
-function getShowAsAction(menuItem: common.ActionItem): number {
- switch (menuItem.androidPosition) {
+function getShowAsAction(menuItem: dts.ActionItem): number {
+ switch (menuItem.android.position) {
case enums.AndroidActionItemPosition.actionBarIfRoom:
return android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM;
diff --git a/ui/action-bar/action-bar.d.ts b/ui/action-bar/action-bar.d.ts
index 0bfc68d40..53d73e676 100644
--- a/ui/action-bar/action-bar.d.ts
+++ b/ui/action-bar/action-bar.d.ts
@@ -7,13 +7,13 @@
export class ActionBar extends view.View implements view.AddArrayFromBuilder, view.AddChildFromBuilder {
title: string;
- icon: string;
- androidIconVisibility: string;
navigationButton: NavigationButton;
actionItems: ActionItems;
titleView: view.View;
+ android: AndroidActionBarSettings;
+
page: pages.Page;
shouldShow(): boolean
@@ -55,6 +55,7 @@
text: string;
icon: string;
+ actionBar: ActionBar;
/**
* A basic method signature to hook an event listener (shortcut alias to the addEventListener method).
@@ -75,10 +76,23 @@
}
export class ActionItem extends ActionItemBase {
- androidPosition: string;
- iosPosition: string;
+ ios: IOSActionItemSettings;
+ android: AndroidActionItemSettings;
+ }
+
+ export interface AndroidActionItemSettings {
+ position: string;
+ }
+
+ export interface IOSActionItemSettings {
+ position: string;
}
+ export interface AndroidActionBarSettings {
+ icon: string;
+ iconVisibility: string;
+ }
+
export class NavigationButton extends ActionItemBase {
}
diff --git a/ui/action-bar/action-bar.ios.ts b/ui/action-bar/action-bar.ios.ts
index 44dce1de3..694613d06 100644
--- a/ui/action-bar/action-bar.ios.ts
+++ b/ui/action-bar/action-bar.ios.ts
@@ -1,5 +1,5 @@
import common = require("ui/action-bar/action-bar-common");
-import definition = require("ui/action-bar");
+import dts = require("ui/action-bar");
import imageSource = require("image-source");
import frameModule = require("ui/frame");
import enums = require("ui/enums");
@@ -9,6 +9,19 @@ import utils = require("utils/utils");
declare var exports;
require("utils/module-merge").merge(common, exports);
+export class ActionItem extends common.ActionItemBase implements dts.ActionItem {
+ private _ios: dts.IOSActionItemSettings = { position: enums.IOSActionItemPosition.left };
+ public get ios(): dts.IOSActionItemSettings {
+ return this._ios;
+ }
+ public set ios(value: dts.IOSActionItemSettings) {
+ throw new Error("ActionItem.android is read-only");
+ }
+
+ // Not used in IOS
+ public android: dts.AndroidActionItemSettings;
+}
+
export class ActionBar extends common.ActionBar {
public updateActionBar() {
// Page should be attached to frame to update the action bar.
@@ -75,7 +88,7 @@ export class ActionBar extends common.ActionBar {
for (var i = 0; i < items.length; i++) {
var barButtonItem = this.createBarButtonItem(items[i]);
- if (items[i].iosPosition === enums.IOSActionItemPosition.left) {
+ if (items[i].ios.position === enums.IOSActionItemPosition.left) {
leftBarItems.push(barButtonItem);
}
else {
@@ -96,7 +109,7 @@ export class ActionBar extends common.ActionBar {
navigationItem.setRightBarButtonItemsAnimated(rightArray, true);
}
- private createBarButtonItem(item: common.ActionItemBase): UIBarButtonItem {
+ private createBarButtonItem(item: dts.ActionItem): UIBarButtonItem {
var tapHandler = TapBarItemHandlerImpl.new().initWithOwner(item);
// associate handler with menuItem or it will get collected by JSC.
(item).handler = tapHandler;
@@ -144,7 +157,7 @@ export class ActionBar extends common.ActionBar {
protected get navigationBarHeight(): number {
var navController = frameModule.topmost().ios.controller;
- if(!navController){
+ if (!navController) {
return 0;
}
var navigationBar = navController.navigationBar;
@@ -157,9 +170,9 @@ class TapBarItemHandlerImpl extends NSObject {
return super.new();
}
- private _owner: definition.ActionItemBase;
+ private _owner: dts.ActionItemBase;
- public initWithOwner(owner: definition.ActionItemBase): TapBarItemHandlerImpl {
+ public initWithOwner(owner: dts.ActionItemBase): TapBarItemHandlerImpl {
this._owner = owner;
return this;
}