getter in ListViewStyler for separatorColor

This commit is contained in:
zh-m
2017-01-05 11:29:39 +02:00
parent ee4b790728
commit 6e07d0e61d
2 changed files with 86 additions and 41 deletions

View File

@@ -9,6 +9,7 @@ import { Label } from "ui/label";
import helper = require("../helper");
import { Page } from "ui/page";
import { View, KeyedTemplate } from "ui/core/view";
import { separatorColorProperty } from "ui/styling/style";
// >> article-require-listview-module
import listViewModule = require("ui/list-view");
@@ -698,6 +699,35 @@ export class ListViewTest extends testModule.UITest<listViewModule.ListView> {
TKUnit.assert(weakRef.get(), weakRef.get() + " died prematurely!");
}
public test_separatorColor_setInCSS_is_respected() {
let listView = this.testView;
let items = ["John", "Joshua", "Gregory"];
listView.items = items;
helper.buildUIAndRunTest(listView, function (views) {
let page = views[1];
page.css = "ListView { separator-color: #FF0000; }";
TKUnit.assertEqual(listView.style.separatorColor.hex, "#FF0000", "separatorColor property");
});
}
public test_separatorColor_reset() {
let listView = this.testView;
let items = ["John", "Joshua", "Gregory"];
listView.items = items;
helper.buildUIAndRunTest(listView, function (views) {
let defaultsSeparatorColor = listView.style.separatorColor;
listView.style._setValue(separatorColorProperty, "#FF0000");
TKUnit.assertEqual(listView.style.separatorColor.hex, "#FF0000", "set separatorColor property");
listView.style._resetValue(separatorColorProperty);
TKUnit.assertEqual(listView.style.separatorColor, defaultsSeparatorColor, "reset separatorColor property");
});
}
private assertNoMemoryLeak(weakRef: WeakRef<listViewModule.ListView>) {
this.tearDown();
TKUnit.waitUntilReady(() => {
@@ -864,18 +894,18 @@ export class ListViewTest extends testModule.UITest<listViewModule.ListView> {
TKUnit.wait(0.05);
// Forward
for(let i = 0, length = listView.items.length; i < length; i++){
for (let i = 0, length = listView.items.length; i < length; i++) {
listView.scrollToIndex(i);
TKUnit.wait(0.05);
}
// Back
for(let i = listView.items.length - 1; i >= 0; i--){
for (let i = listView.items.length - 1; i >= 0; i--) {
listView.scrollToIndex(i);
TKUnit.wait(0.05);
}
if (listView.android){
if (listView.android) {
//(<any>listView)._dumpRealizedTemplates();
let realizedItems = <Map<android.view.View, View>>(<any>listView)._realizedItems;
TKUnit.assertTrue(realizedItems.size <= 6, 'Realized items must be 6 or less');

View File

@@ -5,7 +5,7 @@ import stackLayout = require("ui/layouts/stack-layout");
import proxy = require("ui/core/proxy");
import dependencyObservable = require("ui/core/dependency-observable");
import definition = require("ui/list-view");
import {ProxyViewContainer} from "ui/proxy-view-container";
import { ProxyViewContainer } from "ui/proxy-view-container";
import * as layoutBase from "ui/layouts/layout-base";
import * as colorModule from "color";
import { separatorColorProperty, registerHandler, Styler, StylePropertyChangedHandler } from "ui/styling/style";
@@ -120,7 +120,7 @@ export class ListView extends common.ListView {
});
}
public _dumpRealizedTemplates(){
public _dumpRealizedTemplates() {
console.log(`Realized Templates:`);
this._realizedTemplates.forEach((value, index, map) => {
console.log(`\t${index}:`);
@@ -149,11 +149,11 @@ export class ListView extends common.ListView {
public _onItemTemplatesPropertyChanged(data: dependencyObservable.PropertyChangeData) {
this._itemTemplatesInternal = new Array<viewModule.KeyedTemplate>(this._defaultTemplate);
if (data.newValue){
if (data.newValue) {
this._itemTemplatesInternal = this._itemTemplatesInternal.concat(data.newValue);
}
if (this.android){
if (this.android) {
ensureListViewAdapterClass();
this.android.setAdapter(new ListViewAdapterClass(this));
}
@@ -224,9 +224,9 @@ function ensureListViewAdapterClass() {
// Recycle an existing view or create a new one if needed.
let template = this._listView._getItemTemplate(index);
let view: viewModule.View;
if (convertView){
if (convertView) {
view = this._listView._realizedTemplates.get(template.key).get(convertView);
if (!view){
if (!view) {
throw new Error(`There is no entry with key '${convertView}' in the realized views cache for template with key'${template.key}'.`);
}
}
@@ -273,7 +273,7 @@ function ensureListViewAdapterClass() {
// Cache the view for recycling
let realizedItemsForTemplateKey = this._listView._realizedTemplates.get(template.key);
if (!realizedItemsForTemplateKey){
if (!realizedItemsForTemplateKey) {
realizedItemsForTemplateKey = new Map<android.view.View, viewModule.View>();
this._listView._realizedTemplates.set(template.key, realizedItemsForTemplateKey);
}
@@ -290,22 +290,37 @@ function ensureListViewAdapterClass() {
export class ListViewStyler implements Styler {
// separator-color
private static getSeparatorColorProperty(view: viewModule.View): any {
let listView = <android.widget.ListView>view._nativeView;
return listView.getDivider();
}
private static setSeparatorColorProperty(view: viewModule.View, newValue: any) {
let listView = <android.widget.ListView>view._nativeView;
listView.setDivider(new android.graphics.drawable.ColorDrawable(newValue));
if (newValue instanceof android.graphics.drawable.Drawable) {
listView.setDivider(newValue);
} else {
listView.setDivider(new android.graphics.drawable.ColorDrawable(newValue));
}
listView.setDividerHeight(1);
}
private static resetSeparatorColorProperty(view: viewModule.View, nativeValue: any) {
let listView = <android.widget.ListView>view._nativeView;
listView.setDivider(new android.graphics.drawable.ColorDrawable(nativeValue));
listView.setDividerHeight(1);
if (nativeValue instanceof android.graphics.drawable.Drawable) {
listView.setDivider(nativeValue);
} else {
listView.setDivider(new android.graphics.drawable.ColorDrawable(nativeValue));
}
}
public static registerHandlers() {
registerHandler(separatorColorProperty, new StylePropertyChangedHandler(
ListViewStyler.setSeparatorColorProperty,
ListViewStyler.resetSeparatorColorProperty), "ListView");
ListViewStyler.resetSeparatorColorProperty,
ListViewStyler.getSeparatorColorProperty), "ListView");
}
}