Commit Graph

275 Commits

Author SHA1 Message Date
Martin Yankov
7e891a91f9 fix-next: restrict to safe area when transform (#6405) 2018-10-15 10:17:56 +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
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
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
ca0043701b refactor: remove obsolete ViewHelper.setBackground method (#6240) 2018-09-05 17:35:59 +03:00
Manol Donev
6da1b33b50 refactor: update getSupportFragmentManager cast (#6155) 2018-08-07 13:45:48 +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
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
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
Gheric Speiginer
357c8ecf15 fix(core/properties): Fix typings for nativeValueChange (#5791)
* Fix typings for nativeValueChange

* Update properties.d.ts

Changed parameter name of nativeValueChange from “target” to “owner”
Fixed white space to match coding style

* Update properties.d.ts

Fixed white space
2018-06-19 14:20:55 +03:00
Alexander Djenkov
e59d1567a5 fix(ios-dialogs): unable to show dialog from modal view without a page (#5881)
* fix(ios-dialogs): unable to show dialog from modal view

* tests(modal-navigation): add test that opens dialog inside modal view
2018-05-29 18:06:02 +03:00
Alexander Djenkov
f9d66de79c fix(styling-gradient): change imports in definition files (#5852) 2018-05-23 09:57:24 +03:00
Alexander Djenkov
0fc1547a19 feat(view): introduce LayoutChanged event on every View component (#5825)
* feat(view): introduce LayoutChanged event

* test(view): add LayoutChanged event tests

* chore(view-android): attach to onLayoutChange only if listener attached

* feat(view-android): override on/off in order to attach and detach from OnLayoutChangeListener
2018-05-21 17:22:40 +03:00
Manol Donev
1365f13594 fix(modal): innerView.closeModal(...) not passing back context (#5833) 2018-05-18 16:50:27 +03:00
Manol Donev
2fc1d8a8d4 chore(tsc): enable noUnusedLocals compiler option for tns-core-modules (#5755) 2018-05-10 16:12:59 +03:00
Alexander Djenkov
9d21a743c4 Revert 5772 revert 5534 css gradients (#5779)
* Revert "Revert "Css gradients" (#5772)"

This reverts commit 7edf56197a.

* chore(): fix LinearGradient circular dependency
2018-05-10 10:44:35 +03:00
Alexander Djenkov
7edf56197a Revert "Css gradients" (#5772)
This reverts commit 5a83a1c858.
2018-05-03 18:17:07 +03:00
vultix
5a83a1c858 Css gradients (#5534)
* feat(ios): Added support for css gradients.

* feat(android): Added support for css gradients.

* fix: Fixed gradient borders on ios

* fix(gradient): added backgroundGradient to View and Style.

* fix(ios-gradients): fixed ios gradients covering view content.

* test(gradient): Added ui app tests for background gradients.

* test(gradient): Added a test ensuring background gradient property is applied to style.

* style(gradient): Fixed tslint errors.

* fix(gradient): Removed the background-gradient property and added the gradient to background-image.

* style: fixed a consecutive blank line tslint error.

* fix(tests): fixed the bug that was causing tests to fail.

* chore(linear-gradient): fix equality comparer

* test(gradient): add linear gradients test app

* chore(tslint): update with latest tslint rules
2018-05-03 13:24:41 +03:00
Manol Donev
03cfc0cee3 chore(tslint): update tslint rules and fix errors (#5747)
* chore(tslint): fix tslint config & errors
* chore(tslint): enable double quotes, whitespace, and arrow-return-shorthand rules and fix errors
2018-04-26 18:36:32 +03:00
Manol Donev
a767c8efd4 chore(modal): update dts for showModal(...) args (#5734) 2018-04-26 00:20:10 +03:00
Manol Donev
451589dbd6 fix(modal): exception when calling ViewBase.showModal(...) (#5737) 2018-04-26 00:19:44 +03:00
Alexander Vakrilov
49ea10b81e fix(layout): IOS Layout not invalidated with custom root (#5724)
* fix(layout): Buuple up layout trough viewControllers

* test: Layout invalidates correctly with different root view

* chore: tslint
2018-04-23 15:47:27 +03:00
Alexander Djenkov
31ee774a6b fix-next(ios-modal): fix empty modal screen when using common layout as root (#5618) 2018-04-05 09:44:03 +03:00
Alexander Djenkov
70f01123df feat(frame): handle back navigation when common layout is used as a root element (#5608)
* test(e2e): update modal navigation app

Add layout as root.
Add show modal layout.

* chore(frame): move frame stack modifiers in a separate frame-stack module

* feat(frame): handle back navigation when using common layout as root element
2018-04-02 22:27:44 +03:00
Martin Yankov
8a1958e82e chore(view): expose onBackPressed in d.ts (#5607) 2018-04-02 15:49:31 +03:00
Manol Donev
81a2cbd0fe refactor(ios): clean up iOS8 or lower specific checks in codebase (#5581) 2018-03-26 13:37:21 +03:00
Martin Yankov
cf8dcfa40c feat(view): expose method for android back override (#5537)
Expose method on View class onBackPressed(). Third party controls
like RadSideDrawer can use this method to override the default Android
back button handling. By default the app closes.
2018-03-14 18:15:05 +02:00
Panayot Cankov
1cbb1e8d0d feat(webpack): mark the CSS type for stylable views explicitly (#5257)
We want webpack's uglification to mangle function and class names
but that's what the current implementation of the CSS in {N} relys on
to get the CSS type for each view when targeted by CSS type selectors.

The implementation is changed a little so now the CSS type can be set
directly on the prototype of each View class or for TS, through decorator.

BREAKING CHANGES:


Extending classes requires marking the derived class with @CSSType
The root classes are not marked with CSSType and classes derived from ViewBase and View
will continue to work as expected. More concrete view classes (Button, Label, etc.) are
marked with @CSSType now and store their cssType on the prototype suppressing the previous
implementation that looked up the class function name. So clien classes that derive from one of
our @CSSType decorated classes will now have to be marked with @CSSType.
2018-03-12 16:34:25 +02:00
Alexander Djenkov
0138873ee3 feat(modal): introduce stretched param to showModal method (#5496)
* fix-next(ios-modal-view): force stretch alignment

* feat(modal): introduce stretched param to showModal method

* test(modal-view): add modal view stretched test
2018-03-07 18:17:52 +02:00
Manol Donev
92148833d3 fix-next(tabview): fix tab title layout in modal root tabview Fixes #5392 (#5435)
BREAKING CHANGE: [Android] NativeScript no longer overwrites the horizontal/vertical alignment on the user-defined root visual element when opening it in modal dialog window (i.e. not fullscreen).

If your application logic relied on the previous behavior you need to manually set `horizontalAlignment="center"` and `verticalAlignment="middle"` on the root visual element you are showing modally.
2018-03-02 13:27:21 +02:00
Manol Donev
2704915384 fix(frame): add generic frame cleanup logic after modal dialog close (#5479) 2018-03-01 10:37:26 +02:00
Manol Donev
4898c33a04 fix-next(modal) fix crash when closing modal dialog with root tabview inside (#5446) 2018-02-23 16:46:49 +02:00
Martin Yankov
4ce45666a5 test: add reset root view tests (#5437) 2018-02-21 11:38:37 +02:00
Alexander Djenkov
b8e0beccdd fix(ios-layouts): switch contentInsetAdjustmentBehavior on ScrollView (#5411)
* fix(layouts): switch contentInsetAdjustmentBehavior on ScrollView

* chore(ui-tests-app): add test for ScrollView as a root Page element
2018-02-15 09:27:16 +02:00
Manol Donev
2edef3de3b fix(frame): root tabview with modal frame when suspend/resume app (#5408) 2018-02-12 16:09:51 +02:00
Manol Donev
85dc75e09a fix-next: navigation events' workflow in modal dialog scenarios (#5341) 2018-02-06 19:18:28 +02:00
Alexander Vakrilov
923d48b23a fix: layoutParent crash with ProxyViewContainer (#5315) 2018-01-24 18:27:00 +02:00
Alexander Vakrilov
b492996647 fix(layouts): Set automaticallyAdjustsScrollViewInsets (#5311) 2018-01-23 17:53:31 +02:00
Hristo Hristov
016c64fe04 showModal & closeModal can be called on any View
fix livesync implementation to be compatible with 3.4 and to replace mainEntry for 4.0 when root is not Frame
some refactoring of page.ios in order to allow showing multiple modal dialogs
2018-01-18 13:34:25 +02:00
Hristo Hristov
9dd3e1a807 Fix crash with nested frames navigation when aactivity is recreated. We now check if frame native view is atached to window before running navigation.
Livesync now recreates the main page instead of calling frame.navigate
2018-01-15 18:07:20 +02:00
Hristo Hristov
ef86addd6d Fix Page to be styleScope if frame is not 2018-01-12 10:23:54 +02:00