Enable recycling of nativeView 2 (#4467)

* enable recycling of nativeView

* backgroundInternal is reset if setting new value leads to background.isEmpty() == true.

* android background.getDefault always return copy of the background. Now all controls that mutate the background can be reset to initial state (e.g. Button & ActionBar)
passing resources to copied background so it respect density.
fix properties initNativeView

* reset padding when backgroundInternal is reset.

* Fix text reset
Fix padding reset

* fix tsc errors

* fix ugly text rendering.

* Add unit tests for recycling native views
Fix several issues that came from the above tests
Fix maxLength property missing a converter callback
Remove old files

* Remove old files

* Revert backgroundInternal setter

* change the order of tests so that appium can work again

* Remove suggestion on every TextView & TextField init (strangely it is enabled after view is recycled....)

* Fix function to get parent layout if specified

* Button stateListAnimator restored when button is recycled
zIndex defaultValue is now undefined instead of NaN

* revert zIndex.setNative to always clear stateListAnimator because it was breaking one UI test (setting value=0 was returning the previous stateListAnimator)

* fix search-bar backgound-color recycling

* Fix alignments setters

* Fix imageView recycling
Fix button recycling
Fix edit-text recycling
resetNativeView is called only if recycleNativeView flag is true

* Fix incorrect merge

* Fix text-view & text-field textTransform

* Fix EditText text reset

* Fix runtime crash on ARM emulator API 21

* Fix text-base minHeight. maxHeight reset
Fix reset of isUserInteractionEnabled
This commit is contained in:
Alexander Vakrilov
2017-06-29 18:01:22 +03:00
committed by GitHub
parent b1432679e6
commit 23757e5dfc
97 changed files with 1405 additions and 578 deletions

View File

@@ -21,6 +21,12 @@ export class TabViewTest extends testModule.UITest<tabViewModule.TabView> {
return tabView;
}
public test_recycling() {
const setters = new Map<string, Array<any>>();
setters.set('items', this._createItems(3));
helper.nativeView_recycling_test(() => new tabViewModule.TabView(), null, null, setters);
}
_createItems(count: number): Array<tabViewModule.TabViewItem> {
var items = new Array<tabViewModule.TabViewItem>();
for (var i = 0; i < count; i++) {
@@ -292,9 +298,9 @@ export class TabViewTest extends testModule.UITest<tabViewModule.TabView> {
// return `${font.typeface} ${font.size}`;
// }
// }
let assertFontsAreEqual = (actual: any, expected: any, message?: string) => {
if (this.testView.ios){
if (this.testView.ios) {
TKUnit.assertEqual(actual, expected, message);
}
else {
@@ -315,17 +321,17 @@ export class TabViewTest extends testModule.UITest<tabViewModule.TabView> {
this.testView.style.font = "20 Pacifico";
nativeFont = tabViewTestsNative.getNativeFont(this.testView);
//console.log(`>>>>>>>>>>>>> nativeFont: ${fontToString(nativeFont)}`);
//console.log(`>>>>>>>>>>>>> CREATE 3 ITEMS`);
this.testView.items = this._createItems(2);
assertFontsAreEqual(tabViewTestsNative.getNativeFont(this.testView), nativeFont, "Font must be 20 Pacifico after rebinding items.");
//console.log(`>>>>>>>>>>>>> nativeFont: ${fontToString(nativeFont)}`);
//console.log(`>>>>>>>>>>>>> MONOSPACE;`);
this.testView.style.font = "bold 12 monospace";
nativeFont = tabViewTestsNative.getNativeFont(this.testView);
//console.log(`>>>>>>>>>>>>> nativeFont: ${fontToString(nativeFont)}`);
//console.log(`>>>>>>>>>>>>> CREATE 3 ITEMS`);
this.testView.items = this._createItems(3);
assertFontsAreEqual(tabViewTestsNative.getNativeFont(this.testView), nativeFont, "Font must be bold 12 monospace after rebinding items.");