Skip to content

Commit 02df926

Browse files
committed
Evaluate lazily android specific global values
1 parent 667ddf1 commit 02df926

File tree

7 files changed

+56
-37
lines changed

7 files changed

+56
-37
lines changed

CrossPlatformModules.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,8 @@
10381038
</TypeScriptCompile>
10391039
<TypeScriptCompile Include="utils\debug.d.ts" />
10401040
<TypeScriptCompile Include="utils\debug.ts" />
1041+
<TypeScriptCompile Include="utils\lazy.d.ts" />
1042+
<TypeScriptCompile Include="utils\lazy.ts" />
10411043
<TypeScriptCompile Include="utils\module-merge.ts" />
10421044
<TypeScriptCompile Include="utils\utils.android.ts">
10431045
<DependentUpon>utils.d.ts</DependentUpon>

tsconfig.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,8 @@
703703
"ui/web-view/web-view.ios.ts",
704704
"utils/debug.d.ts",
705705
"utils/debug.ts",
706+
"utils/lazy.d.ts",
707+
"utils/lazy.ts",
706708
"utils/module-merge.ts",
707709
"utils/number-utils.ts",
708710
"utils/types.d.ts",

ui/animation/animation.android.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import trace = require("trace");
66
import types = require("utils/types");
77
import enums = require("ui/enums");
88
import styleModule = require("ui/styling/style");
9+
import lazy from "utils/lazy";
910

1011
global.moduleMerge(common, exports);
1112

@@ -359,28 +360,28 @@ export class Animation extends common.Animation implements definition.Animation
359360
}
360361
}
361362

362-
let easeIn = new android.view.animation.AccelerateInterpolator(1);
363-
let easeOut = new android.view.animation.DecelerateInterpolator(1);
364-
let easeInOut = new android.view.animation.AccelerateDecelerateInterpolator();
365-
let linear = new android.view.animation.LinearInterpolator();
366-
let bounce = new android.view.animation.BounceInterpolator();
363+
let easeIn = lazy(() => new android.view.animation.AccelerateInterpolator(1));
364+
let easeOut = lazy(() => new android.view.animation.DecelerateInterpolator(1));
365+
let easeInOut = lazy(() => new android.view.animation.AccelerateDecelerateInterpolator());
366+
let linear = lazy(() => new android.view.animation.LinearInterpolator());
367+
let bounce = lazy(() => new android.view.animation.BounceInterpolator());
367368
export function _resolveAnimationCurve(curve: any): any {
368369
switch (curve) {
369370
case enums.AnimationCurve.easeIn:
370371
trace.write("Animation curve resolved to android.view.animation.AccelerateInterpolator(1).", trace.categories.Animation);
371-
return easeIn;
372+
return easeIn();
372373
case enums.AnimationCurve.easeOut:
373374
trace.write("Animation curve resolved to android.view.animation.DecelerateInterpolator(1).", trace.categories.Animation);
374-
return easeOut;
375+
return easeOut();
375376
case enums.AnimationCurve.easeInOut:
376377
trace.write("Animation curve resolved to android.view.animation.AccelerateDecelerateInterpolator().", trace.categories.Animation);
377-
return easeInOut;
378+
return easeInOut();
378379
case enums.AnimationCurve.linear:
379380
trace.write("Animation curve resolved to android.view.animation.LinearInterpolator().", trace.categories.Animation);
380-
return linear;
381+
return linear();
381382
case enums.AnimationCurve.spring:
382383
trace.write("Animation curve resolved to android.view.animation.BounceInterpolator().", trace.categories.Animation);
383-
return bounce;
384+
return bounce();
384385
case enums.AnimationCurve.ease:
385386
return (<any>android).support.v4.view.animation.PathInterpolatorCompat.create(0.25, 0.1, 0.25, 1.0);
386387
default:

ui/transition/slide-transition.android.ts

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import transition = require("ui/transition");
22
import platform = require("platform");
3+
import lazy from "utils/lazy";
34

4-
var screenWidth = platform.screen.mainScreen.widthPixels;
5-
var screenHeight = platform.screen.mainScreen.heightPixels;
5+
var screenWidth = lazy(() => platform.screen.mainScreen.widthPixels);
6+
var screenHeight = lazy(() => platform.screen.mainScreen.heightPixels);
67

78
export class SlideTransition extends transition.Transition {
89
private _direction: string;
@@ -18,80 +19,80 @@ export class SlideTransition extends transition.Transition {
1819
case "left":
1920
switch (transitionType) {
2021
case transition.AndroidTransitionType.enter:
21-
translationValues[0] = screenWidth;
22+
translationValues[0] = screenWidth();
2223
translationValues[1] = 0;
2324
break;
2425
case transition.AndroidTransitionType.exit:
2526
translationValues[0] = 0;
26-
translationValues[1] = -screenWidth;
27+
translationValues[1] = -screenWidth();
2728
break;
2829
case transition.AndroidTransitionType.popEnter:
29-
translationValues[0] = -screenWidth;
30+
translationValues[0] = -screenWidth();
3031
translationValues[1] = 0;
3132
break;
3233
case transition.AndroidTransitionType.popExit:
3334
translationValues[0] = 0;
34-
translationValues[1] = screenWidth;
35+
translationValues[1] = screenWidth();
3536
break;
3637
}
3738
break;
3839
case "right":
3940
switch (transitionType) {
4041
case transition.AndroidTransitionType.enter:
41-
translationValues[0] = -screenWidth;
42+
translationValues[0] = -screenWidth();
4243
translationValues[1] = 0;
4344
break;
4445
case transition.AndroidTransitionType.exit:
4546
translationValues[0] = 0;
46-
translationValues[1] = screenWidth;
47+
translationValues[1] = screenWidth();
4748
break;
4849
case transition.AndroidTransitionType.popEnter:
49-
translationValues[0] = screenWidth;
50+
translationValues[0] = screenWidth();
5051
translationValues[1] = 0;
5152
break;
5253
case transition.AndroidTransitionType.popExit:
5354
translationValues[0] = 0;
54-
translationValues[1] = -screenWidth;
55+
translationValues[1] = -screenWidth();
5556
break;
5657
}
5758
break;
5859
case "top":
5960
switch (transitionType) {
6061
case transition.AndroidTransitionType.enter:
61-
translationValues[0] = screenHeight;
62+
translationValues[0] = screenHeight();
6263
translationValues[1] = 0;
6364
break;
6465
case transition.AndroidTransitionType.exit:
6566
translationValues[0] = 0;
66-
translationValues[1] = -screenHeight;
67+
translationValues[1] = -screenHeight();
6768
break;
6869
case transition.AndroidTransitionType.popEnter:
69-
translationValues[0] = -screenHeight;
70+
translationValues[0] = -screenHeight();
7071
translationValues[1] = 0;
7172
break;
7273
case transition.AndroidTransitionType.popExit:
7374
translationValues[0] = 0;
74-
translationValues[1] = screenHeight;
75+
translationValues[1] = screenHeight();
7576
break;
7677
}
7778
break;
7879
case "bottom":
7980
switch (transitionType) {
8081
case transition.AndroidTransitionType.enter:
81-
translationValues[0] = -screenHeight;
82+
translationValues[0] = -screenHeight();
8283
translationValues[1] = 0;
8384
break;
8485
case transition.AndroidTransitionType.exit:
8586
translationValues[0] = 0;
86-
translationValues[1] = screenHeight;
87+
translationValues[1] = screenHeight();
8788
break;
8889
case transition.AndroidTransitionType.popEnter:
89-
translationValues[0] = screenHeight;
90+
translationValues[0] = screenHeight();
9091
translationValues[1] = 0;
9192
break;
9293
case transition.AndroidTransitionType.popExit:
9394
translationValues[0] = 0;
94-
translationValues[1] = -screenHeight;
95+
translationValues[1] = -screenHeight();
9596
break;
9697
}
9798
break;

ui/transition/transition.android.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import pageModule = require("ui/page");
55
import * as animationModule from "ui/animation";
66
import types = require("utils/types");
77
import trace = require("trace");
8+
import lazy from "utils/lazy";
89

9-
var _sdkVersion = parseInt(platform.device.sdkVersion);
10-
var _defaultInterpolator = new android.view.animation.AccelerateDecelerateInterpolator();
10+
var _sdkVersion = lazy(() => parseInt(platform.device.sdkVersion));
11+
var _defaultInterpolator = lazy(() => new android.view.animation.AccelerateDecelerateInterpolator());
1112

1213
interface CompleteOptions {
1314
isBack: boolean;
@@ -40,7 +41,7 @@ export function _clearBackwardTransitions(fragment: any): void {
4041
expandedFragment.enterPopExitTransition = undefined;
4142
}
4243

43-
if (_sdkVersion >= 21) {
44+
if (_sdkVersion() >= 21) {
4445
var enterTransition = (<any>fragment).getEnterTransition();
4546
if (enterTransition) {
4647
trace.write(`Cleared Enter ${enterTransition.getClass().getSimpleName()} transition for ${fragment.getTag()}`, trace.categories.Transition);
@@ -61,7 +62,7 @@ export function _clearForwardTransitions(fragment: any): void {
6162
expandedFragment.exitPopEnterTransition = undefined;
6263
}
6364

64-
if (_sdkVersion >= 21) {
65+
if (_sdkVersion() >= 21) {
6566
var exitTransition = (<any>fragment).getExitTransition();
6667
if (exitTransition) {
6768
trace.write(`Cleared Exit ${exitTransition.getClass().getSimpleName()} transition for ${fragment.getTag()}`, trace.categories.Transition);
@@ -81,7 +82,7 @@ export function _setAndroidFragmentTransitions(navigationTransition: frameModule
8182
name = navigationTransition.name.toLowerCase();
8283
}
8384

84-
var useLollipopTransition = name && (name.indexOf("slide") === 0 || name === "fade" || name === "explode") && _sdkVersion >= 21;
85+
var useLollipopTransition = name && (name.indexOf("slide") === 0 || name === "fade" || name === "explode") && _sdkVersion() >= 21;
8586
if (useLollipopTransition) {
8687
// setEnterTransition: Enter
8788
// setExitTransition: Exit
@@ -229,7 +230,7 @@ function _setUpNativeTransition(navigationTransition: frameModule.NavigationTran
229230
nativeTransition.setInterpolator(interpolator);
230231
}
231232
else {
232-
nativeTransition.setInterpolator(_defaultInterpolator);
233+
nativeTransition.setInterpolator(_defaultInterpolator());
233234
}
234235
}
235236

@@ -241,7 +242,7 @@ export function _onFragmentShown(fragment: any, isBack: boolean): void {
241242
trace.write(`${fragment.getTag() } has been shown when going ${isBack ? "back" : "forward"}, but there is ${transitionType} ${relevantTransition}. Will complete page addition when transition ends.`, trace.categories.Transition);
242243
expandedFragment.completePageAdditionWhenTransitionEnds = { isBack: isBack };
243244
}
244-
else if (_sdkVersion >= 21) {
245+
else if (_sdkVersion() >= 21) {
245246
var nativeTransition = isBack ? (<any>fragment).getReenterTransition() : (<any>fragment).getEnterTransition();
246247
if (nativeTransition) {
247248
trace.write(`${fragment.getTag() } has been shown when going ${isBack ? "back" : "forward"}, but there is ${transitionType} ${nativeTransition.getClass().getSimpleName()} transition. Will complete page addition when transition ends.`, trace.categories.Transition);
@@ -262,7 +263,7 @@ export function _onFragmentHidden(fragment: any, isBack: boolean, destroyed: boo
262263
trace.write(`${fragment.getTag()} has been hidden when going ${isBack ? "back" : "forward"}, but there is ${transitionType} ${relevantTransition}. Will complete page removal when transition ends.`, trace.categories.Transition);
263264
expandedFragment.completePageRemovalWhenTransitionEnds = { isBack: isBack };
264265
}
265-
else if (_sdkVersion >= 21) {
266+
else if (_sdkVersion() >= 21) {
266267
var nativeTransition = isBack ? (<any>fragment).getReturnTransition() : (<any>fragment).getExitTransition();
267268
if (nativeTransition) {
268269
trace.write(`${fragment.getTag()} has been hidden when going ${isBack ? "back" : "forward"}, but there is ${transitionType} ${nativeTransition.getClass().getSimpleName()} transition. Will complete page removal when transition ends.`, trace.categories.Transition);
@@ -422,7 +423,7 @@ export class Transition implements definition.Transition {
422423
this._interpolator = animation._resolveAnimationCurve(curve);
423424
}
424425
else {
425-
this._interpolator = _defaultInterpolator;
426+
this._interpolator = _defaultInterpolator();
426427
}
427428
this._id = transitionId++;
428429
}

utils/lazy.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
declare module "utils/lazy" {
2+
/**
3+
* A function that evaluates the action only once.
4+
* @param action The action to be evaluated to get the result.
5+
* Returns the evaluated result.
6+
*/
7+
export default function lazy<T>(action: () => T): () => T;
8+
}

utils/lazy.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export default function lazy<T>(action: () => T): () => T {
2+
let _value: T;
3+
return () => _value || (_value = action());
4+
}

0 commit comments

Comments
 (0)