Commit Graph

866 Commits

Author SHA1 Message Date
Martin Yankov
dfa208a54d fix-next: apply ios safe area before transform (#6443) 2018-10-23 13:38:02 +03:00
Rakesh Girase
a3f149325f 5620 GridLayout addChild to set row and column (#6411) 2018-10-19 15:20:41 +03:00
Manol Donev
c8c0be7684 refactor: restore animators api usage (#6403) 2018-10-16 15:37:57 +03:00
Martin Yankov
7e891a91f9 fix-next: restrict to safe area when transform (#6405) 2018-10-15 10:17:56 +03:00
Alexander Vakrilov
56a1b120af fix: Don't crash on missing resources in tab-view and action-bar (#6388) 2018-10-11 21:31:19 +03:00
Manol Donev
5b77017d37 refactor(android): root fragment manager usage (#6399) 2018-10-11 19:02:41 +03:00
Manol Donev
307172003d fix: nested fragments interact thru child fragment manager (#6293) 2018-10-11 17:44:30 +03:00
Martin Yankov
04233b65c1 fix-next: ios 10 safe area backwards compat (#6364)
* fix-next: ios 10 safe area backwards compat

* refactor: update a comment

* fix-next: ios 10 page on layout fix

* fix-next: handle ios 11 flat action bar
2018-10-09 10:16:31 +03:00
Alexander Vakrilov
e3d5f0d409 fix(tab-view): Title and icon positioning (#6362)
* fix(tab-view): Title and icon positioning

* refactor: review FB addressed
2018-10-08 11:23:34 +03:00
Martin Hettiger
ae6a661ecd feat: implement capitalization type option for prompt dialogs (#6325)
* feat: implement capitalization type option for prompt dialogs

Allow setting auto capitalization to "none", "all", "sentences" and "words".
This feature works on both Android and iOS.

* feat: add capitalization type examples to test page for dialogs
2018-10-05 17:15:54 +03:00
Morten Sjøgren
1232d1edfd feat(tslib): add tslib helpers to global (#6351)
* feat(tslib): add tslib helpers to global

* Adds tslib as a dependency to tns-core-modules
* Replaces globals/decorators with globals/tslib
* Adds support for async/await, rest and spread operators.

* refactor: rename tslib to ts-helpers to avoid confusion with npm package
2018-10-05 17:12:45 +03:00
Manol Donev
436a318de5 fix(android): second livesync (#6330) 2018-10-04 15:57:11 +03:00
Manol Donev
0bf6dc2e93 fix(android): nested frames on app suspend/resume (#6339) 2018-10-04 14:31:57 +03:00
Martin Yankov
2e3c0a812a fix-next: apply repeater onLayout initial values (#6344) 2018-10-04 13:45:51 +03:00
Vasil Chimev
0f067a03ca fix-next(flexbox): flex end for justify content (#6337)
* fix-next(flexbox): flex end for justify content

* refactor: add lessOrCloseEnough assert method
2018-10-03 16:39:39 +03:00
Vasil Chimev
982acdc168 feat(iOS): Safe Area Support (#6230) 2018-09-28 18:21:50 +03:00
Martin Guillon
46705ee332 refactor(core-modules): implement createNativeView and initNativeView for all components
refactor(core-modules): implement createNativeView and initNativeView for all components
2018-09-26 13:59:12 +03:00
Alexander Vakrilov
71107533bb refactor: guard livesync for cases the app is not yet started (#6276) 2018-09-20 09:47:53 +03:00
Manol Donev
262568314b feat: add ability to pass touch event thru parent view (#6204)
* feat: enhance hit-testing support
* refactor(android): update passthroughParent logic as per reqs
* refactor: move isPassthroughParentEnabled to LayoutBase
* Update view-common.ts
* refactor: touchListener logic
* refactor: renames
* added ui test page
2018-09-18 18:59:40 +03:00
Manol Donev
6c9fa16f6e fix(android): parallel navigations should not be triggered (#6275) 2018-09-18 11:25:31 +03:00
Alexander Vakrilov
1db1e81174 docs: document eachChild callback function (#6253) 2018-09-17 22:34:26 +03:00
Alexander Vakrilov
12fade7155 fix: Page and Frame isLoaded undefined checks (#6255)
* fix(view): isLoaded handling

closes https://github.com/NativeScript/NativeScript/issues/6179

* refactor: Error handling code in onCreateView
2018-09-17 15:37:29 +03:00
Alexander Vakrilov
8575c60b13 fix(modals): application activityBackPressed event not fired for modals (#6261) 2018-09-17 15:37:16 +03:00
Martin Guillon
8a5f73055e fix(gestures)propagate touch to parent so that gestures can work (#6171)
* propagate gesture touch to parent so that gestures can work

* test: swipe passtrough test
2018-09-17 10:11:50 +03:00
Manol Donev
cca548d31a refactor: AndroidFrame.hasOwnActivity cleanup (#6241) 2018-09-10 11:25:08 +03:00
Manol Donev
ca0043701b refactor: remove obsolete ViewHelper.setBackground method (#6240) 2018-09-05 17:35:59 +03:00
Manol Donev
43f0fd0ffc refactor: remove ununsed Layout class (#6228) 2018-08-31 15:00:16 +03:00
Manol Donev
a1c570c702 fix(ios): nowrap label measure in horizontal stack layout (#6186) 2018-08-17 18:24:06 +03:00
Manol Donev
a8d016c6d7 fix(ios): listview scrollToIndex crash with async data (#6182) 2018-08-17 17:09:48 +03:00
Manol Donev
0f2192d4d7 refactor: clean up unused sdkVersion lazy eval (#6194) 2018-08-17 17:04:44 +03:00
Manol Donev
22cb539c9d fix(android-next): force frame fragment disposal on unload (#6189) 2018-08-17 11:31:44 +03:00
Alexander Vakrilov
ec24c5a96f fix(list-view): Layout list-view items on request (#6159)
* test: list items relayout example

* fix(list-view): Layout list-view items on request

* refactor(tests): refactor list-view tests imports
2018-08-09 18:19:56 +03:00
Manol Donev
6da1b33b50 refactor: update getSupportFragmentManager cast (#6155) 2018-08-07 13:45:48 +03:00
Manol Donev
cc19b400b9 fix(android): suppress reflection for default animations (#6141)
Fixes `Error: java.lang.CloneNotSupportedException: Class android.support.v4.app.FragmentManagerImpl$AnimationOrAnimator doesn't implement Cloneable` in specific projects.

Related to #5785
Related to #6129 

BREAKING CHANGE


Before:
Default fragment enter animation was Android version specific

After:
Default fragment enter animation is now fade animation for all Android versions

You can customise the transition per navigation entry or globally via the [navigation transitions API](
https://docs.nativescript.org/core-concepts/navigation#navigation-transitions)
2018-08-02 16:01:52 +03:00
Martin Guillon
7ebac7c353 fix(iOS-gestures) touch delegate does not call base class touch methods (#6113)
* fix ios Touch gestures super methods not being called on nativeView

* use “this.view”
2018-08-02 11:52:35 +03:00
Nathanael Anderson
85b8c018a5 feat(styling): Added 2 functions to control applicationAdditionalSelectors (#6124)
* Added getAdditionalSelectors function so that nativescript-theme can be functional again in NS 4.x

* Change to a better more extensible additional css system.

* removed redunant function on the name.

* Fix lint issues

* Adding mergeSelectors to the remove function

* Added test of new add/remove css functions.

* fix: revert testRunner.ts changes that disabled all tests except style

* refactor: fix typo

* chore: fix typo and change test to no not affect global styles
2018-08-02 11:51:07 +03:00
Manol Donev
cf034dd04d feat(android): migrate to support library apis (#6129)
Switch Activity / Fragment / FragmentManager implementation from native framework to support library APIs

BREAKING CHANGE:


NativeScript core framework now extends support library APIs versus native framework classes as per Google's latest guidelines:
- NativeScript activities now extend `android.support.v7.app.AppCompatActivity` (vs android.app.Activity)
- NativeScript fragments now extend `android.support.v4.app.Fragment` (vs android.app.Fragment)
- NativeScript now works internally with `android.support.v4.app.FragmentManager` (vs android.app.FragmentManager) 

The implications of these changes should be mostly transparent to the developer except for the fact that the support library Fragment / FragmentManager work with Animation APIs versus Animator APIs.

For Android API Levels lower than 28 the new Fragment API uses a different fragment enter animation by default. You can customise the transition per navigation entry or globally via the [navigation transitions API](https://docs.nativescript.org/core-concepts/navigation#navigation-transitions)
Before:
Default fragment enter animation was fade animation

After:
Default fragment enter animation for API levels lower than 28 is now a fast "push fade" animation; default fragment enter animation for API levels equal to or greater than 28 remains fade animation

Before:
AndroidFragmentCallbacks interface exposed the following `onCreateAnimator(...)` method
``` ts
export interface AndroidFragmentCallbacks {
    onCreateAnimator(fragment: any, transit: number, enter: boolean, nextAnim: number, superFunc: Function): any;
    // ...
}
```

After:
AndroidFragmentCallbacks interface now exposes the following `onCreateAnimation(...)` method instead (and `onCreateAnimator(...)` is now removed)
``` ts
export interface AndroidFragmentCallbacks {
    onCreateAnimation(fragment: any, transit: number, enter: boolean, nextAnim: number, superFunc: Function): any;
    // ...
}
```

Before:
Transition class exposed the following abstract `createAndroidAnimator(...)` method
``` ts
export class Transition {
    public createAndroidAnimator(transitionType: string): any;
    // ...
}
```

After:
Transition class now exposes the following abstract `createAndroidAnimation(...)` method instead (and `createAndroidAnimation(...) is now removed)
``` ts
export class Transition {
    public createAndroidAnimation(transitionType: string): any;
    // ...
}
```

To migrate the code of your custom transitions follow the example below:

Before:
``` ts
import * as transition from "tns-core-modules/ui/transition";

export class CustomTransition extends transition.Transition {
    constructor(duration: number, curve: any) {
        super(duration, curve);
    }

    public createAndroidAnimator(transitionType: string): android.animation.Animator {
        var scaleValues = Array.create("float", 2);
        switch (transitionType) {
            case transition.AndroidTransitionType.enter:
            case transition.AndroidTransitionType.popEnter:
                scaleValues[0] = 0;
                scaleValues[1] = 1;
                break;
            case transition.AndroidTransitionType.exit:
            case transition.AndroidTransitionType.popExit:
                scaleValues[0] = 1;
                scaleValues[1] = 0;
                break;
        }
        var objectAnimators = Array.create(android.animation.Animator, 2);
        objectAnimators[0] = android.animation.ObjectAnimator.ofFloat(null, "scaleX", scaleValues);
        objectAnimators[1] = android.animation.ObjectAnimator.ofFloat(null, "scaleY", scaleValues);
        var animatorSet = new android.animation.AnimatorSet();
        animatorSet.playTogether(objectAnimators);

        var duration = this.getDuration();
        if (duration !== undefined) {
            animatorSet.setDuration(duration);
        }
        animatorSet.setInterpolator(this.getCurve());

        return animatorSet;
    }
}
```

After:
``` ts
import * as transition from "tns-core-modules/ui/transition";

export class CustomTransition extends transition.Transition {
    constructor(duration: number, curve: any) {
        super(duration, curve);
    }

    public createAndroidAnimation(transitionType: string): android.view.animation.Animation {
        const scaleValues = [];

        switch (transitionType) {
            case transition.AndroidTransitionType.enter:
            case transition.AndroidTransitionType.popEnter:
                scaleValues[0] = 0;
                scaleValues[1] = 1;
                break;
            case transition.AndroidTransitionType.exit:
            case transition.AndroidTransitionType.popExit:
                scaleValues[0] = 1;
                scaleValues[1] = 0;
                break;
        }
            
        const animationSet = new android.view.animation.AnimationSet(false);
        const duration = this.getDuration();
        if (duration !== undefined) {
            animationSet.setDuration(duration);
        }

        animationSet.setInterpolator(this.getCurve());
        animationSet.addAnimation(
            new android.view.animation.ScaleAnimation(
                scaleValues[0], 
                scaleValues[1], 
                scaleValues[0], 
                scaleValues[1]
            ));

        return animationSet;
    }
}
```
2018-07-31 18:48:34 +03:00
Nick Iliev
88f7ed84d2 fix: iOS TimePicker minuteInterval property (#6116) 2018-07-27 16:19:12 +03:00
Sebastian Witalec
9e2e8ec3a1 feat(list-picker): add textField, valueField and selectedValue properties (#6033)
* Added textField, valueField and selectedValue properties

textField and valueField - should be used with arrays of JSON objects
textField - tells the listview which property should be used to display each item
valueField - tells the listview, which property should be used to update the selectedValue
selectedValue - is the property that will contain the selectedValue, if valueField is specified, then it will contain the value from that field, otherwise it will contain the whole selected item

* Example showing textField, valueField and selectedValue in action

* Update import paths
2018-07-23 17:06:01 +03:00
Manol Donev
feaf1408a4 chore(android): update AndroidP sdk version check (#6093) 2018-07-23 13:57:14 +03:00
Vasil Chimev
6ce1d22d9a feat(CSS): import of relative paths (#6023)
* feat(CSS): import of relative paths

* refactor: address comments
2018-07-21 05:54:32 +03:00
Shiva Prasad
1fac718a58 feat(UI): Added animated scroll to index for ListView (#6077)
* feat(UI): Added animated scroll to index for ListView

* Update list-view.d.ts
2018-07-19 16:40:59 +03:00
Stanimira Vlaeva
8813e9bc57 fix: require devtools-elements.js with the extension mentioned explicitly (#6079)
This is a workaround for the issue with `@ngtools/webpack@6.1.0-rc.2`, described here: https://github.com/NativeScript/nativescript-dev-webpack/issues/607#issuecomment-405209925
2018-07-18 11:38:22 +01:00
Vasil Trifonov
39acaa8e11 Fixing onReceiveError for API level >= 23 (#6056)
* Fixing onReceiveError for API level >= 23

* using @ts-ignore as "super as any" is not a valid statement
2018-07-13 09:50:32 +03:00
Dick Smith
324fdcebcd fix(action-bar): #5743 navController may be null (#6029)
* fix(action-bar): #5743 navController may be null

From my own Crashlytics:
`stderr: file:///app/vendor.js:1:860568: JS ERROR TypeError: null is not an object (evaluating 'a.viewControllers')`
```
file:///app/vendor.js:1:860489
var l,p=a.viewControllers.indexOfObject(n);if(p>0&&p<a.viewControllers.count&&(t=a.viewControllers[p-1]),t)
```
which corresponds to:
2fc1d8a8d4/tns-core-modules/ui/action-bar/action-bar.ios.ts (L132)

further up `navController` is checked for truthiness:
2fc1d8a8d4/tns-core-modules/ui/action-bar/action-bar.ios.ts (L119)

So applying same logic.

* Adjusted per request
2018-07-10 13:22:30 +03:00
Vasil Trifonov
398c9b3f33 feat(typings): Adding Android typings for API levels from 17 to 27 (#5890)
Adding android typings for API levels from 17 to 27

BREAKING CHANGES:
There is no longer added `I` prefix in the names of the interfaces. For example `android.view.IMenuItem` is now `android.view.MenuItem`. This matches the original name of the interface in the android framework.
2018-07-05 18:36:23 +03:00
Martin Yankov
bcadcbe7b5 fix(animations): avoid steady mem consumption rise (#6004) 2018-07-04 13:44:01 +03:00
Alexander Djenkov
0082dfbdb0 fix(dialogs-ios): dialogs not showing in single page apps (non Frame based apps) (#6000) 2018-07-03 10:23:51 +03:00
Alexander Vakrilov
b5b8d51b0d fix(modal): parent page invalid hierarchy handling [extended] (#5966)
* fix(modal): parent page invalid hierarchy handling

* refactor(modals): Refactor safe guard in show/hide modal
2018-06-20 16:10:03 +03:00
Alexander Vakrilov
4b5754a6d4 fix(ios): safeAreaLayoutGuide fallback for iOS 10 cases (#5960) 2018-06-20 07:28:06 +03:00