From 07e2102c5dc7ecb399dfa690be5b499708565ace Mon Sep 17 00:00:00 2001 From: Hristo Hristov Date: Fri, 9 Dec 2016 02:03:04 +0200 Subject: [PATCH] restore properties deleted with merge --- .../editable-text-base-common.ts | 3 ++ .../editable-text-base.android.ts | 13 +++++- .../ui/list-view/list-view-common.ts | 24 ++++++----- .../ui/list-view/list-view.android.ts | 3 +- .../ui/list-view/list-view.ios.ts | 29 +++++++------ .../ui/segmented-bar/segmented-bar-common.ts | 26 ++++++----- .../ui/segmented-bar/segmented-bar.android.ts | 25 ++++------- .../ui/segmented-bar/segmented-bar.ios.ts | 42 ++++++------------ tns-core-modules/ui/slider/slider-common.ts | 43 ++++++++----------- tns-core-modules/ui/slider/slider.d.ts | 6 +-- tns-core-modules/ui/styling/style.d.ts | 7 +++ tns-core-modules/ui/styling/style.ts | 3 +- .../ui/tab-view/tab-view-common.ts | 25 +++++++---- tns-core-modules/ui/tab-view/tab-view.ios.ts | 3 -- .../ui/text-base/text-base.android.ts | 17 +++++--- .../ui/text-field/text-field.ios.ts | 4 +- 16 files changed, 137 insertions(+), 136 deletions(-) diff --git a/tns-core-modules/ui/editable-text-base/editable-text-base-common.ts b/tns-core-modules/ui/editable-text-base/editable-text-base-common.ts index 272b0483b..8ce32f226 100644 --- a/tns-core-modules/ui/editable-text-base/editable-text-base-common.ts +++ b/tns-core-modules/ui/editable-text-base/editable-text-base-common.ts @@ -16,6 +16,9 @@ export abstract class EditableTextBase extends TextBase implements EditableTextB public abstract dismissSoftInput(); } +// TODO: Why not name it - hintColor property?? +// TODO: Or rename hintProperty to 'placeholder' and make it CSSProperty?? +// https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-placeholder export const placeholderColorProperty = new CssProperty({ name: "placeholderColor", cssName: "placeholder-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }); placeholderColorProperty.register(Style); diff --git a/tns-core-modules/ui/editable-text-base/editable-text-base.android.ts b/tns-core-modules/ui/editable-text-base/editable-text-base.android.ts index bdd52c4fc..426a3f4bd 100644 --- a/tns-core-modules/ui/editable-text-base/editable-text-base.android.ts +++ b/tns-core-modules/ui/editable-text-base/editable-text-base.android.ts @@ -2,7 +2,7 @@ EditableTextBase as EditableTextBaseCommon, keyboardTypeProperty, returnKeyTypeProperty, editableProperty, updateTextTriggerProperty, autocapitalizationTypeProperty, autocorrectProperty, hintProperty, - textProperty + textProperty, placeholderColorProperty } from "./editable-text-base-common"; import { ad } from "utils/utils"; @@ -418,4 +418,15 @@ export abstract class EditableTextBase extends EditableTextBaseCommon { set [hintProperty.native](value: string) { this.nativeView.setHint(value + ''); } + + get [placeholderColorProperty.native](): android.content.res.ColorStateList { + return this.nativeView.getHintTextColors(); + } + set [placeholderColorProperty.native](value: Color | android.content.res.ColorStateList) { + if (value instanceof Color) { + this.nativeView.setHintTextColor(value.android); + } else { + this.nativeView.setHintTextColor(value); + } + } } \ No newline at end of file diff --git a/tns-core-modules/ui/list-view/list-view-common.ts b/tns-core-modules/ui/list-view/list-view-common.ts index 036a00c00..918a9dcc1 100644 --- a/tns-core-modules/ui/list-view/list-view-common.ts +++ b/tns-core-modules/ui/list-view/list-view-common.ts @@ -1,5 +1,5 @@ import { ListView as ListViewDefinition, ItemsSource } from "ui/list-view"; -import { Bindable, EventData, Observable, View, Template, KeyedTemplate, Length, layout, Property, Color, lengthComparer } from "ui/core/view"; +import { CoercibleProperty, CssProperty, Style, Bindable, EventData, Observable, View, Template, KeyedTemplate, Length, layout, Property, Color, lengthComparer } from "ui/core/view"; import { parse, parseMultipleTemplates } from "ui/builder"; import { Label } from "ui/label"; import { ObservableArray, ChangedData } from "data/observable-array"; @@ -47,7 +47,7 @@ export abstract class ListViewBase extends View implements ListViewDefinition { } public _itemTemplatesInternal = new Array(this._defaultTemplate); - public _effectiveRowHeight: number; + public _effectiveRowHeight: number = -1; public rowHeight: Length; public separatorColor: Color; public items: any[] | ItemsSource; @@ -129,7 +129,7 @@ export abstract class ListViewBase extends View implements ListViewDefinition { } protected updateEffectiveRowHeight(): void { - this._effectiveRowHeight = getLengthEffectiveValue(this.rowHeight); + rowHeightProperty.coerce(this); } } @@ -175,20 +175,22 @@ export const itemTemplatesProperty = new Property({ name: "separatorColor", equalityComparer: Color.equals, valueConverter: (value) => new Color(value) }); -separatorColor.register(ListViewBase); - +const defaultRowHeight: Length = { value: -1, unit: "px" }; /** * Represents the observable property backing the rowHeight property of each ListView instance. */ -export const rowHeightProperty = new Property({ - name: "rowHeight", defaultValue: { value: -1, unit: "px" }, equalityComparer: lengthComparer, +export const rowHeightProperty = new CoercibleProperty({ + name: "rowHeight", defaultValue: defaultRowHeight, equalityComparer: lengthComparer, + coerceValue: (target, value) => { + // We coerce to default value if we don't have display density. + return target._nativeView ? value : defaultRowHeight; + }, valueChanged: (target, oldValue, newValue) => { target._effectiveRowHeight = getLengthEffectiveValue(newValue); target._onRowHeightPropertyChanged(oldValue, newValue); }, valueConverter: Length.parse }); rowHeightProperty.register(ListViewBase); + +export const separatorColorProperty = new CssProperty({ name: "separatorColor", cssName: "separator-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }); +separatorColorProperty.register(Style); \ No newline at end of file diff --git a/tns-core-modules/ui/list-view/list-view.android.ts b/tns-core-modules/ui/list-view/list-view.android.ts index 5a920d30a..1ee685a1e 100644 --- a/tns-core-modules/ui/list-view/list-view.android.ts +++ b/tns-core-modules/ui/list-view/list-view.android.ts @@ -34,12 +34,11 @@ export class ListView extends ListViewBase { private _itemClickListener: android.widget.AdapterView.OnItemClickListener; public _realizedItems = new Map(); public _realizedTemplates = new Map>(); - public _effectiveRowHeight: number; public _createUI() { - this.updateEffectiveRowHeight(); this._android = new android.widget.ListView(this._context); this._android.setDescendantFocusability(android.view.ViewGroup.FOCUS_AFTER_DESCENDANTS); + this.updateEffectiveRowHeight(); // Fixes issue with black random black items when scrolling this._android.setCacheColorHint(android.graphics.Color.TRANSPARENT); diff --git a/tns-core-modules/ui/list-view/list-view.ios.ts b/tns-core-modules/ui/list-view/list-view.ios.ts index 3259c6102..6af09f89c 100644 --- a/tns-core-modules/ui/list-view/list-view.ios.ts +++ b/tns-core-modules/ui/list-view/list-view.ios.ts @@ -71,7 +71,7 @@ class DataSource extends NSObject implements UITableViewDataSource { // Arrange cell views. We do it here instead of _layoutCell because _layoutCell is called // from 'tableViewHeightForRowAtIndexPath' method too (in iOS 7.1) and we don't want to arrange the fake cell. let width = layout.getMeasureSpecSize(owner.widthMeasureSpec); - let rowHeight = owner._nativeView.rowHeight; + let rowHeight = owner._effectiveRowHeight; let cellHeight = rowHeight > 0 ? rowHeight : owner.getHeight(indexPath.row); View.layoutChild(owner, cellView, 0, 0, width, cellHeight); } @@ -91,22 +91,22 @@ class UITableViewDelegateImpl extends NSObject implements UITableViewDelegate { private _measureCellMap: Map; public static initWithOwner(owner: WeakRef): UITableViewDelegateImpl { - let delegate = UITableViewDelegateImpl.new(); + const delegate = UITableViewDelegateImpl.new(); delegate._owner = owner; delegate._measureCellMap = new Map(); return delegate; } public tableViewWillDisplayCellForRowAtIndexPath(tableView: UITableView, cell: UITableViewCell, indexPath: NSIndexPath) { - let owner = this._owner.get(); + const owner = this._owner.get(); if (owner && (indexPath.row === owner.items.length - 1)) { owner.notify({ eventName: LOADMOREITEMS, object: owner }); } } public tableViewWillSelectRowAtIndexPath(tableView: UITableView, indexPath: NSIndexPath): NSIndexPath { - let cell = tableView.cellForRowAtIndexPath(indexPath); - let owner = this._owner.get(); + const cell = tableView.cellForRowAtIndexPath(indexPath); + const owner = this._owner.get(); if (owner) { notifyForItemAtIndex(owner, cell, cell.view, ITEMTAP, indexPath); } @@ -120,19 +120,19 @@ class UITableViewDelegateImpl extends NSObject implements UITableViewDelegate { } public tableViewHeightForRowAtIndexPath(tableView: UITableView, indexPath: NSIndexPath): number { - let owner = this._owner.get(); + const owner = this._owner.get(); if (!owner) { return DEFAULT_HEIGHT; } - let height = undefined; + let height: number; if (ios.MajorVersion >= 8) { height = owner.getHeight(indexPath.row); } if (ios.MajorVersion < 8 || height === undefined) { // in iOS 7.1 (or iOS8+ after call to scrollToRowAtIndexPath:atScrollPosition:animated:) this method is called before tableViewCellForRowAtIndexPath so we need fake cell to measure its content. - let template = owner._getItemTemplate(indexPath.row); + const template = owner._getItemTemplate(indexPath.row); let cell = this._measureCellMap.get(template.key); if (!cell) { cell = (tableView.dequeueReusableCellWithIdentifier(template.key)) || ListViewCell.new(); @@ -184,7 +184,7 @@ class UITableViewRowHeightDelegateImpl extends NSObject implements UITableViewDe } export class ListView extends ListViewBase { - private _ios: UITableView; + public _ios: UITableView; private _dataSource; private _delegate; private _heights: Array; @@ -266,8 +266,8 @@ export class ListView extends ListViewBase { } public _onRowHeightPropertyChanged(oldValue: Length, newValue: Length) { - let value = this._effectiveRowHeight; - let nativeView = this._ios; + const value = this._effectiveRowHeight; + const nativeView = this._ios; if (value < 0) { nativeView.rowHeight = UITableViewAutomaticDimension; nativeView.estimatedRowHeight = DEFAULT_HEIGHT; @@ -304,9 +304,10 @@ export class ListView extends ListViewBase { private _layoutCell(cellView: View, indexPath: NSIndexPath): number { if (cellView) { - let rowHeight = this._effectiveRowHeight; - let measuredSize = View.measureChild(this, cellView, this.widthMeasureSpec, rowHeight >= 0 ? rowHeight : infinity); - let height = measuredSize.measuredHeight; + const rowHeight = this._effectiveRowHeight; + const heightMeasureSpec: number = rowHeight >= 0 ? layout.makeMeasureSpec(rowHeight, layout.EXACTLY) : infinity; + const measuredSize = View.measureChild(this, cellView, this.widthMeasureSpec, heightMeasureSpec); + const height = measuredSize.measuredHeight; this.setHeight(indexPath.row, height); return height; } diff --git a/tns-core-modules/ui/segmented-bar/segmented-bar-common.ts b/tns-core-modules/ui/segmented-bar/segmented-bar-common.ts index 917805ea7..aefba7d7b 100644 --- a/tns-core-modules/ui/segmented-bar/segmented-bar-common.ts +++ b/tns-core-modules/ui/segmented-bar/segmented-bar-common.ts @@ -1,7 +1,7 @@ import { SegmentedBar as SegmentedBarDefinition, SegmentedBarItem as SegmentedBarItemDefinition, SelectedIndexChangedEventData } from "ui/segmented-bar"; import { ViewBase, View, AddChildFromBuilder, AddArrayFromBuilder, - Property, CoercibleProperty, EventData, Color + Property, CoercibleProperty, CssProperty, EventData, Color, Style } from "ui/core/view"; export * from "ui/core/view"; @@ -49,17 +49,6 @@ export abstract class SegmentedBarBase extends View implements SegmentedBarDefin } } - // public _onBindingContextChanged(oldValue: any, newValue: any) { - // super._onBindingContextChanged(oldValue, newValue); - // if (this.items && this.items.length > 0) { - // var i = 0; - // var length = this.items.length; - // for (; i < length; i++) { - // this.items[i].bindingContext = newValue; - // } - // } - // } - public onItemsChanged(oldItems: SegmentedBarItemDefinition[], newItems: SegmentedBarItemDefinition[]): void { if (oldItems) { for (let i = 0, count = oldItems.length; i < count; i++) { @@ -73,6 +62,15 @@ export abstract class SegmentedBarBase extends View implements SegmentedBarDefin } } } + + // TODO: Make _addView to keep its children so this method is not needed! + public _eachChildView(callback: (child: ViewBase) => boolean): void { + let items = this.items; + if (items) { + items.forEach((item, i) => { + callback(item); + }); + } } /** @@ -101,8 +99,8 @@ selectedIndexProperty.register(SegmentedBarBase); /** * Gets or sets the selected background color property of the SegmentedBar. */ -export const selectedBackgroundColorProperty = new Property({ name: "selectedBackgroundColor", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }) -selectedBackgroundColorProperty.register(SegmentedBarBase); +export const selectedBackgroundColorProperty = new CssProperty({ name: "selectedBackgroundColor", cssName: "selected-background-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }) +selectedBackgroundColorProperty.register(Style); /** * Gets or sets the items dependency property of the SegmentedBar. diff --git a/tns-core-modules/ui/segmented-bar/segmented-bar.android.ts b/tns-core-modules/ui/segmented-bar/segmented-bar.android.ts index 10f3b4f6f..6fb648e5d 100644 --- a/tns-core-modules/ui/segmented-bar/segmented-bar.android.ts +++ b/tns-core-modules/ui/segmented-bar/segmented-bar.android.ts @@ -9,12 +9,6 @@ const R_ID_TABS = 0x01020013; const R_ID_TABCONTENT = 0x01020011; const R_ATTR_STATE_SELECTED = 0x010100a1; -// TODO: Make SegmentedBarItem inherit from ViewBase and use ._addView. -// TODO: Move colorProperty.native get/set from SegmentedBar to SegmentedBarItem. -// TODO: Fix selectedIndex coerce implementation. -// TODO: Use addView instead of _parent property. This way -// bindingContext and style propagation will work out fo the box. - let apiLevel: number; // TODO: Move this into widgets. let SegmentedBarColorDrawableClass; @@ -75,7 +69,9 @@ export class SegmentedBarItem extends SegmentedBarItemBase { let tv = this._nativeView; if (tv) { - tv.setText(this.title || ""); + let title = this.title; + title = (title === null || title === undefined) ? "" : title; + tv.setText(title); this.titleDirty = false; } else { this.titleDirty = true; @@ -188,10 +184,7 @@ export class SegmentedBar extends SegmentedBarBase { let weakRef = new WeakRef(this); this._android = new TabHostClass(this._context, null); - // We don't have native tabs here. - // if (typeof this.selectedIndex === "number" && this._android.getCurrentTab() !== this.selectedIndex) { - // this._android.setCurrentTab(this.selectedIndex); - // } + this.listener = this.listener || new TabChangeListener(weakRef); this.tabContentFactory = this.tabContentFactory || new TabContentFactory(weakRef); @@ -215,7 +208,7 @@ export class SegmentedBar extends SegmentedBarBase { return this._android; } - public insertTab(tabItem: SegmentedBarItem, index: number): void { + private insertTab(tabItem: SegmentedBarItem, index: number): void { const tab = this.android.newTabSpec(index + ""); tab.setIndicator(tabItem.title); tab.setContent(this.tabContentFactory); @@ -224,7 +217,7 @@ export class SegmentedBar extends SegmentedBarBase { tabHost.addTab(tab); // TODO: Why do we need to call this for every added tab? - this.resetNativeListener(); + // this.resetNativeListener(); } private resetNativeListener() { @@ -247,10 +240,8 @@ export class SegmentedBar extends SegmentedBarBase { const newItems = value; let tabHost = this._android; - if (newItems && newItems.length) { - for (let i = 0; i < newItems.length; i++) { - this.insertTab(newItems[i], i); - } + if (newItems) { + newItems.forEach((item, i,arr) => this.insertTab(item, i)); if (this.selectedIndex < 0) { this.selectedIndex = tabHost.getCurrentTab(); diff --git a/tns-core-modules/ui/segmented-bar/segmented-bar.ios.ts b/tns-core-modules/ui/segmented-bar/segmented-bar.ios.ts index 33b80b306..59b579380 100644 --- a/tns-core-modules/ui/segmented-bar/segmented-bar.ios.ts +++ b/tns-core-modules/ui/segmented-bar/segmented-bar.ios.ts @@ -11,7 +11,9 @@ export class SegmentedBarItem extends SegmentedBarItemBase { public _update() { if (this._parent) { let tabIndex = this._parent.items.indexOf(this); - this._parent.ios.setTitleForSegmentAtIndex(this.title || "", tabIndex); + let title = this.title; + title = (title === null || title === undefined) ? "" : title; + this._parent.ios.setTitleForSegmentAtIndex(title, tabIndex); } } } @@ -32,50 +34,34 @@ export class SegmentedBar extends SegmentedBarBase { return this._ios; } - public insertTab(tabItem: SegmentedBarItem, index: number): void { - tabItem._parent = this; - this.ios.insertSegmentWithTitleAtIndexAnimated(tabItem.title, index, false); + private insertTab(tabItem: SegmentedBarItem, index: number): void { + } get [selectedIndexProperty.native](): number { return -1; } set [selectedIndexProperty.native](value: number) { - let items = this.items; - if (!items) { - return; - } - - if (value >= 0 && value <= (items.length - 1)) { - this._ios.selectedSegmentIndex = value; - this.notify({ eventName: SegmentedBar.selectedIndexChangedEvent, object: this, oldIndex: this.previousSelectedIndex, newIndex: value }); - } + this._ios.selectedSegmentIndex = value; } - private previousItems: SegmentedBarItem[]; get [itemsProperty.native](): SegmentedBarItem[] { return null; } set [itemsProperty.native](value: SegmentedBarItem[]) { - const oldItems = this.previousItems; - if (oldItems) { - for (let i = 0, length = oldItems.length; i < length; i++) { - oldItems[i]._parent = null; - } - } - - let segmentedControl = this._ios; + const segmentedControl = this._ios; segmentedControl.removeAllSegments(); const newItems = value; - this._adjustSelectedIndex(newItems); if (newItems && newItems.length) { - for (let i = 0; i < newItems.length; i++) { - this.insertTab(newItems[i], i); - } + newItems.forEach((item, index, arr) => { + let title = item.title; + title = (title === null || title === undefined) ? "" : title; + segmentedControl.insertSegmentWithTitleAtIndexAnimated(title, index, false); + }) - if (segmentedControl.selectedSegmentIndex !== this.selectedIndex) { - segmentedControl.selectedSegmentIndex = this.selectedIndex; + if (this.selectedIndex < 0) { + this.selectedIndex = segmentedControl.selectedSegmentIndex; } } } diff --git a/tns-core-modules/ui/slider/slider-common.ts b/tns-core-modules/ui/slider/slider-common.ts index d7d5b46c0..eb04f0dd9 100644 --- a/tns-core-modules/ui/slider/slider-common.ts +++ b/tns-core-modules/ui/slider/slider-common.ts @@ -1,5 +1,5 @@ import { Slider as SliderDefinition } from "ui/slider"; -import { View, Property } from "ui/core/view"; +import { View, Property, CoercibleProperty, isIOS } from "ui/core/view"; export * from "ui/core/view"; @@ -13,13 +13,12 @@ export class SliderBase extends View implements SliderDefinition { /** * Represents the observable property backing the value property of each Slider instance. */ -export const valueProperty = new Property({ - name: "value", defaultValue: 0, valueChanged: (target, oldValue, newValue) => { - newValue = Math.max(newValue, this.minValue); - newValue = Math.min(newValue, this.maxValue); - - target.value = newValue; - } +export const valueProperty = new CoercibleProperty({ + name: "value", defaultValue: 0, coerceValue: (target, value) => { + value = Math.max(value, this.minValue); + value = Math.min(value, this.maxValue); + return value; + }, valueConverter: (v) => isIOS ? parseFloat(v) : parseInt(v) }); valueProperty.register(SliderBase); @@ -28,29 +27,25 @@ valueProperty.register(SliderBase); */ export const minValueProperty = new Property({ name: "minValue", defaultValue: 0, valueChanged: (target, oldValue, newValue) => { - if (newValue > target.maxValue) { - target.maxValue = newValue; - } - - if (newValue > target.value) { - target.value = newValue; - } - } + maxValueProperty.coerce(target); + valueProperty.coerce(target); + }, valueConverter: (v) => isIOS ? parseFloat(v) : parseInt(v) }); minValueProperty.register(SliderBase); /** * Represents the observable property backing the maxValue property of each Slider instance. */ -export const maxValueProperty = new Property({ - name: "maxValue", defaultValue: 100, valueChanged: (target, oldValue, newValue) => { - if (newValue < target.minValue) { - target.minValue = newValue; +export const maxValueProperty = new CoercibleProperty({ + name: "maxValue", defaultValue: 100, coerceValue: (target, value) => { + let minValue = target.minValue; + if (value < minValue) { + value = minValue; } - if (newValue < target.value) { - target.value = newValue; - } - } + return value; + }, + valueChanged: (target, oldValue, newValue) => valueProperty.coerce(target), + valueConverter: (v) => isIOS ? parseFloat(v) : parseInt(v) }); maxValueProperty.register(SliderBase); \ No newline at end of file diff --git a/tns-core-modules/ui/slider/slider.d.ts b/tns-core-modules/ui/slider/slider.d.ts index dc16c8ff2..ba5e9c0d9 100644 --- a/tns-core-modules/ui/slider/slider.d.ts +++ b/tns-core-modules/ui/slider/slider.d.ts @@ -2,7 +2,7 @@ * Contains the Slider class, which represents a standard slider component. */ declare module "ui/slider" { - import { View, Property } from "ui/core/view"; + import { View, CoercibleProperty } from "ui/core/view"; /** * Represents a slider component. @@ -42,10 +42,10 @@ declare module "ui/slider" { /** * Represents the observable property backing the minValue property of each Slider instance. */ - export const minValueProperty: Property; + export const minValueProperty: CoercibleProperty; /** * Represents the observable property backing the maxValue property of each Slider instance. */ - export const maxValueProperty: Property; + export const maxValueProperty: CoercibleProperty; } \ No newline at end of file diff --git a/tns-core-modules/ui/styling/style.d.ts b/tns-core-modules/ui/styling/style.d.ts index c9a9af0e2..8599039c5 100644 --- a/tns-core-modules/ui/styling/style.d.ts +++ b/tns-core-modules/ui/styling/style.d.ts @@ -113,9 +113,16 @@ declare module "ui/styling/style" { public selectedTabTextColor: Color; public androidSelectedTabHighlightColor: Color; + // ListView-specific props + public separatorColor: Color; + //SegmentedBar-specific props public selectedBackgroundColor: Color; + // Page-specific props + public statusBarStyle: string; + public androidStatusBarBackground: Color; + constructor(ownerView: ViewBase); public view: ViewBase; diff --git a/tns-core-modules/ui/styling/style.ts b/tns-core-modules/ui/styling/style.ts index b638b9acc..9027386f9 100644 --- a/tns-core-modules/ui/styling/style.ts +++ b/tns-core-modules/ui/styling/style.ts @@ -1,6 +1,5 @@ import { Style as StyleDefinition } from "ui/styling/style"; -import { Length, PercentLength, Color, Background, Font, ViewBase } from "ui/core/view"; -import { Observable } from "data/observable"; +import { Length, PercentLength, Color, Background, Font, ViewBase, Observable } from "ui/core/view"; export class Style extends Observable implements StyleDefinition { constructor(public view: ViewBase) { diff --git a/tns-core-modules/ui/tab-view/tab-view-common.ts b/tns-core-modules/ui/tab-view/tab-view-common.ts index caf6c78ca..504c3a9e9 100644 --- a/tns-core-modules/ui/tab-view/tab-view-common.ts +++ b/tns-core-modules/ui/tab-view/tab-view-common.ts @@ -1,7 +1,10 @@ import { TabView as TabViewDefinition, TabViewItem as TabViewItemDefinition } from "ui/tab-view"; -import { View, Bindable, Property, CoercibleProperty, EventData, Color, isIOS, AddArrayFromBuilder } from "ui/core/view"; +import { + View, Style, Bindable, Property, CssProperty, CoercibleProperty, + EventData, Color, isIOS, AddArrayFromBuilder +} from "ui/core/view"; -export * from "ui/core/view"; +export * from "ui/core/view"; export const traceCategory = "TabView"; @@ -154,11 +157,11 @@ export const itemsProperty = new Property({ itemsProperty.register(TabViewBase); export const selectedIndexProperty = new CoercibleProperty({ - name: "selectedIndex", defaultValue: -1, affectsLayout: isIOS, + name: "selectedIndex", defaultValue: -1, affectsLayout: isIOS, valueChanged: (target, oldValue, newValue) => { let args = { eventName: TabViewBase.selectedIndexChangedEvent, object: this, oldIndex: oldValue, newIndex: newValue }; target.notify(args); - }, + }, coerceValue: (target, value) => { let items = target.items; if (items) { @@ -176,8 +179,14 @@ export const selectedIndexProperty = new CoercibleProperty( }); selectedIndexProperty.register(TabViewBase); -export const selectedColorProperty = new Property({ name: "selectedColor", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }); -selectedColorProperty.register(TabViewBase); +export const tabTextColorProperty = new CssProperty({ name: "tabTextColor", cssName: "tab-text-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }); +tabTextColorProperty.register(Style); -export const tabsBackgroundColorProperty = new Property({ name: "tabsBackgroundColor", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }); -tabsBackgroundColorProperty.register(TabViewBase); +export const tabBackgroundColorProperty = new CssProperty({ name: "tabBackgroundColor", cssName: "tab-background-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }); +tabBackgroundColorProperty.register(Style); + +export const selectedTabTextColorProperty = new CssProperty({ name: "selectedTabTextColor", cssName: "selected-tab-text-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }); +selectedTabTextColorProperty.register(Style); + +export const androidSelectedTabHighlightColorProperty = new CssProperty({ name: "androidSelectedTabHighlightColor", cssName: "android-selected-tab-highlight-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }); +androidSelectedTabHighlightColorProperty.register(Style); \ No newline at end of file diff --git a/tns-core-modules/ui/tab-view/tab-view.ios.ts b/tns-core-modules/ui/tab-view/tab-view.ios.ts index ed28dbdb5..1ac4df0fd 100644 --- a/tns-core-modules/ui/tab-view/tab-view.ios.ts +++ b/tns-core-modules/ui/tab-view/tab-view.ios.ts @@ -423,9 +423,6 @@ export class TabView extends TabViewBase { if (value > -1) { this._ios.selectedIndex = value; } - - // We will need to measure and arrange what became this._selectedView - this.requestLayout(); } get [itemsProperty.native](): TabViewItemBase[] { diff --git a/tns-core-modules/ui/text-base/text-base.android.ts b/tns-core-modules/ui/text-base/text-base.android.ts index d5b606110..920845fe4 100644 --- a/tns-core-modules/ui/text-base/text-base.android.ts +++ b/tns-core-modules/ui/text-base/text-base.android.ts @@ -1,6 +1,7 @@ import { TextBaseCommon, textProperty, formattedTextProperty, textAlignmentProperty, textDecorationProperty, - textTransformProperty, letterSpacingProperty, colorProperty, fontInternalProperty, whiteSpaceProperty, Font, Color, FormattedString + textTransformProperty, letterSpacingProperty, colorProperty, fontInternalProperty, whiteSpaceProperty, + Font, Color, FormattedString } from "./text-base-common"; export * from "./text-base-common"; @@ -94,13 +95,15 @@ export class TextBase extends TextBaseCommon { this._setFormattedTextPropertyToNative(value); } - get [colorProperty.native](): number { - // .getTextColors().getDefaultColor(); - return this.nativeView.getCurrentTextColor(); + get [colorProperty.native](): android.content.res.ColorStateList { + return this.nativeView.getTextColors(); } - set [colorProperty.native](value: number | Color) { - let color = value instanceof Color ? value.android : value; - this.nativeView.setTextColor(color); + set [colorProperty.native](value: Color | android.content.res.ColorStateList) { + if (value instanceof Color) { + this.nativeView.setTextColor(value.android); + } else { + this.nativeView.setTextColor(value); + } } get [fontInternalProperty.native](): { typeface: android.graphics.Typeface, fontSize: number } { diff --git a/tns-core-modules/ui/text-field/text-field.ios.ts b/tns-core-modules/ui/text-field/text-field.ios.ts index cbf559c43..899cc487c 100644 --- a/tns-core-modules/ui/text-field/text-field.ios.ts +++ b/tns-core-modules/ui/text-field/text-field.ios.ts @@ -130,12 +130,12 @@ export class TextField extends TextFieldBase { this._delegate = UITextFieldDelegateImpl.initWithOwner(weakRef); } - public onLoaded() { + protected onLoaded() { super.onLoaded(); this._ios.delegate = this._delegate; } - public onUnloaded() { + protected onUnloaded() { this._ios.delegate = null; super.onUnloaded(); }