From 31ba1d6238db137beb73779232c7b4151d0e87b5 Mon Sep 17 00:00:00 2001 From: Martin Guillon Date: Thu, 17 Dec 2020 15:11:22 +0100 Subject: [PATCH 1/2] fix(android): refactor to make less calls to native --- packages/core/ui/core/view/index.android.ts | 41 ++++++++++++--------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/core/ui/core/view/index.android.ts b/packages/core/ui/core/view/index.android.ts index 0a3e50b7be..10aa27af1a 100644 --- a/packages/core/ui/core/view/index.android.ts +++ b/packages/core/ui/core/view/index.android.ts @@ -63,6 +63,9 @@ const statePressed = 16842919; // android.R.attr.state_pressed const stateEnabled = 16842910; // android.R.attr.state_enabled const styleAnimationDialog = 16973826; // android.R.style.Animation_Dialog +const VERTICAL_GRAVITY_MASK = 112; // android.view.Gravity.VERTICAL_GRAVITY_MASK +const HORIZONTAL_GRAVITY_MASK = 7; // android.view.Gravity.HORIZONTAL_GRAVITY_MASK + const sdkVersion = lazy(() => parseInt(Device.sdkVersion)); const modalMap = new Map(); @@ -860,30 +863,32 @@ export class View extends ViewCommon { [horizontalAlignmentProperty.setNative](value: HorizontalAlignment) { const nativeView = this.nativeViewProtected; const lp: any = nativeView.getLayoutParams() || new org.nativescript.widgets.CommonLayoutParams(); + const gravity = lp.gravity; + const weight = lp.weight; // Set only if params gravity exists. if (lp.gravity !== undefined) { switch (value) { case 'left': - lp.gravity = android.view.Gravity.LEFT | (lp.gravity & android.view.Gravity.VERTICAL_GRAVITY_MASK); - if (lp.weight < 0) { + lp.gravity = 3 | (gravity & VERTICAL_GRAVITY_MASK); // android.view.Gravity.LEFT + if (weight < 0) { lp.weight = -2; } break; case 'center': - lp.gravity = android.view.Gravity.CENTER_HORIZONTAL | (lp.gravity & android.view.Gravity.VERTICAL_GRAVITY_MASK); - if (lp.weight < 0) { + lp.gravity = 1 | (gravity & VERTICAL_GRAVITY_MASK); // android.view.Gravity.CENTER_HORIZONTAL + if (weight < 0) { lp.weight = -2; } break; case 'right': - lp.gravity = android.view.Gravity.RIGHT | (lp.gravity & android.view.Gravity.VERTICAL_GRAVITY_MASK); - if (lp.weight < 0) { + lp.gravity = 5 | (gravity & VERTICAL_GRAVITY_MASK); // android.view.Gravity.RIGHT + if (weight < 0) { lp.weight = -2; } break; case 'stretch': - lp.gravity = android.view.Gravity.FILL_HORIZONTAL | (lp.gravity & android.view.Gravity.VERTICAL_GRAVITY_MASK); - if (lp.weight < 0) { + lp.gravity = 7 | (gravity & VERTICAL_GRAVITY_MASK); // android.view.Gravity.FILL_HORIZONTAL + if (weight < 0) { lp.weight = -1; } break; @@ -898,30 +903,32 @@ export class View extends ViewCommon { [verticalAlignmentProperty.setNative](value: VerticalAlignment) { const nativeView = this.nativeViewProtected; const lp: any = nativeView.getLayoutParams() || new org.nativescript.widgets.CommonLayoutParams(); + const gravity = lp.gravity; + const height = lp.height; // Set only if params gravity exists. - if (lp.gravity !== undefined) { + if (gravity !== undefined) { switch (value) { case 'top': - lp.gravity = android.view.Gravity.TOP | (lp.gravity & android.view.Gravity.HORIZONTAL_GRAVITY_MASK); - if (lp.height < 0) { + lp.gravity = 48 | (gravity & HORIZONTAL_GRAVITY_MASK); // android.view.Gravity.TOP + if (height < 0) { lp.height = -2; } break; case 'middle': - lp.gravity = android.view.Gravity.CENTER_VERTICAL | (lp.gravity & android.view.Gravity.HORIZONTAL_GRAVITY_MASK); - if (lp.height < 0) { + lp.gravity = 16 | (gravity & HORIZONTAL_GRAVITY_MASK); // android.view.Gravity.CENTER_VERTICAL + if (height < 0) { lp.height = -2; } break; case 'bottom': - lp.gravity = android.view.Gravity.BOTTOM | (lp.gravity & android.view.Gravity.HORIZONTAL_GRAVITY_MASK); - if (lp.height < 0) { + lp.gravity = 80 | (gravity & HORIZONTAL_GRAVITY_MASK); // android.view.Gravity.BOTTOM + if (height < 0) { lp.height = -2; } break; case 'stretch': - lp.gravity = android.view.Gravity.FILL_VERTICAL | (lp.gravity & android.view.Gravity.HORIZONTAL_GRAVITY_MASK); - if (lp.height < 0) { + lp.gravity = 112 | (gravity & HORIZONTAL_GRAVITY_MASK); // android.view.Gravity.FILL_VERTICAL + if (height < 0) { lp.height = -1; } break; From f76a998f4c17d831a0d5fd055eb4815c0fbddac4 Mon Sep 17 00:00:00 2001 From: Martin Guillon Date: Wed, 30 Dec 2020 20:54:55 +0100 Subject: [PATCH 2/2] refactor per comments --- packages/core/ui/core/view/index.android.ts | 26 ++++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/packages/core/ui/core/view/index.android.ts b/packages/core/ui/core/view/index.android.ts index 10aa27af1a..2176732b9e 100644 --- a/packages/core/ui/core/view/index.android.ts +++ b/packages/core/ui/core/view/index.android.ts @@ -65,6 +65,14 @@ const styleAnimationDialog = 16973826; // android.R.style.Animation_Dialog const VERTICAL_GRAVITY_MASK = 112; // android.view.Gravity.VERTICAL_GRAVITY_MASK const HORIZONTAL_GRAVITY_MASK = 7; // android.view.Gravity.HORIZONTAL_GRAVITY_MASK +const GRAVITY_LEFT = 3; // android.view.Gravity.LEFT +const GRAVITY_RIGHT = 5; // android.view.Gravity.RIGHT +const GRAVITY_TOP = 48; // android.view.Gravity.TOP +const GRAVITY_BOTTOM = 80; // android.view.Gravity.BOTTOM +const GRAVITY_CENTER_HORIZONTAL = 1; // android.view.Gravity.CENTER_HORIZONTAL +const GRAVITY_FILL_HORIZONTAL = 7; // android.view.Gravity.FILL_HORIZONTAL +const GRAVITY_CENTER_VERTICAL = 16; // android.view.Gravity.CENTER_VERTICAL +const GRAVITY_FILL_VERTICAL = 112; // android.view.Gravity.FILL_VERTICAL const sdkVersion = lazy(() => parseInt(Device.sdkVersion)); @@ -866,28 +874,28 @@ export class View extends ViewCommon { const gravity = lp.gravity; const weight = lp.weight; // Set only if params gravity exists. - if (lp.gravity !== undefined) { + if (gravity !== undefined) { switch (value) { case 'left': - lp.gravity = 3 | (gravity & VERTICAL_GRAVITY_MASK); // android.view.Gravity.LEFT + lp.gravity = GRAVITY_LEFT | (gravity & VERTICAL_GRAVITY_MASK); if (weight < 0) { lp.weight = -2; } break; case 'center': - lp.gravity = 1 | (gravity & VERTICAL_GRAVITY_MASK); // android.view.Gravity.CENTER_HORIZONTAL + lp.gravity = GRAVITY_CENTER_HORIZONTAL | (gravity & VERTICAL_GRAVITY_MASK); if (weight < 0) { lp.weight = -2; } break; case 'right': - lp.gravity = 5 | (gravity & VERTICAL_GRAVITY_MASK); // android.view.Gravity.RIGHT + lp.gravity = GRAVITY_RIGHT | (gravity & VERTICAL_GRAVITY_MASK); if (weight < 0) { lp.weight = -2; } break; case 'stretch': - lp.gravity = 7 | (gravity & VERTICAL_GRAVITY_MASK); // android.view.Gravity.FILL_HORIZONTAL + lp.gravity = GRAVITY_FILL_HORIZONTAL | (gravity & VERTICAL_GRAVITY_MASK); if (weight < 0) { lp.weight = -1; } @@ -909,25 +917,25 @@ export class View extends ViewCommon { if (gravity !== undefined) { switch (value) { case 'top': - lp.gravity = 48 | (gravity & HORIZONTAL_GRAVITY_MASK); // android.view.Gravity.TOP + lp.gravity = GRAVITY_TOP | (gravity & HORIZONTAL_GRAVITY_MASK); if (height < 0) { lp.height = -2; } break; case 'middle': - lp.gravity = 16 | (gravity & HORIZONTAL_GRAVITY_MASK); // android.view.Gravity.CENTER_VERTICAL + lp.gravity = GRAVITY_CENTER_VERTICAL | (gravity & HORIZONTAL_GRAVITY_MASK); if (height < 0) { lp.height = -2; } break; case 'bottom': - lp.gravity = 80 | (gravity & HORIZONTAL_GRAVITY_MASK); // android.view.Gravity.BOTTOM + lp.gravity = GRAVITY_BOTTOM | (gravity & HORIZONTAL_GRAVITY_MASK); if (height < 0) { lp.height = -2; } break; case 'stretch': - lp.gravity = 112 | (gravity & HORIZONTAL_GRAVITY_MASK); // android.view.Gravity.FILL_VERTICAL + lp.gravity = GRAVITY_FILL_VERTICAL | (gravity & HORIZONTAL_GRAVITY_MASK); if (height < 0) { lp.height = -1; }