triniwiz / nativescript-pager

Apache License 2.0
90 stars 48 forks source link

Migration to AndroidX (NativeScript 6) #124

Closed NickIliev closed 5 years ago

NickIliev commented 5 years ago

With the upcoming NativeScript 6, some of the plugin code should be migrated to use the Android X namespaces (instead of support).

The native files should also be migrated (the NativeScript runtime will automatically jetify them but sill it is a good practice to align the code).

Here are the changes made on my side to make the plugin work with NativeScript 6. Note that I've applied the changes to the transpired JavaScript file as the plugin was already installed in node_modules. Howver the changes are not backward compatible with NativeScript 5.x so I guess a possible approach would be to have if/else check for the namespaces in the TypeScript/JavaScript code.

pager.android.d.ts

import { Property, View } from 'tns-core-modules/ui/core/view';
import { PagerBase, Transformer } from './pager.common';
export { Transformer } from './pager.common';
export declare class Pager extends PagerBase {
    nativeViewProtected: androidx.viewpager.widget.ViewPager;
    _androidViewId: number;
    private _disableAnimation;
    pagesCount: number;
    widthMeasureSpec: number;
    heightMeasureSpec: number;
    perPage: number;
    private _transformer;
    itemTemplateUpdated(oldData: any, newData: any): void;
    _pagerAdapter: PagerStateAdapter;
    private _views;
    private _pageListener;
    _viewMap: Map<string, View>;
    _realizedItems: Map<any, View>;
    _realizedTemplates: Map<string, Map<any, View>>;
    private lastEvent;
    constructor();
    views: Array<any>;
    readonly android: androidx.viewpager.widget.ViewPager;
    createNativeView(): any;
    onLayoutChange(args: any): void;
    initNativeView(): void;
    disposeNativeView(): void;
    disableAnimation: boolean;
    readonly pagerAdapter: PagerStateAdapter;
    readonly _childrenCount: number;
    transformer: Transformer;
    onLoaded(): void;
    scrollToIndexAnimated(index: number, animate: boolean): void;
    refresh(): void;
    updatePagesCount(value: number): void;
    updateNativeIndex(oldIndex: number, newIndex: number): void;
    updateNativeItems(oldItems: Array<View>, newItems: Array<View>): void;
    onUnloaded(): void;
    eachChildView(callback: (child: View) => boolean): void;
    updateAdapter(): void;
    _selectedIndexUpdatedFromNative(newIndex: number): void;
    _addChildFromBuilder(name: string, value: any): void;
    readonly horizontalOffset: number;
    readonly verticalOffset: number;
}
export declare const pagesCountProperty: Property<Pager, number>;
declare let PagerStateAdapter: PagerStateAdapter;
interface PagerStateAdapter extends com.lambergar.verticalviewpager.PagerAdapter {
    new (): PagerStateAdapter;
    mFragmentManager: androidx.fragment.app.FragmentManager;
    owner: WeakRef<Pager>;
}

pager.android.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var view_1 = require("tns-core-modules/ui/core/view");
var common = require("./pager.common");
var pager_common_1 = require("./pager.common");
global.moduleMerge(common, exports);
function notifyForItemAtIndex(owner, nativeView, view, eventName, index) {
    var args = {
        eventName: eventName,
        object: owner,
        index: index,
        view: view,
        ios: undefined,
        android: nativeView
    };
    owner.notify(args);
    return args;
}
var pager_common_2 = require("./pager.common");
exports.Transformer = pager_common_2.Transformer;
var Pager = (function (_super) {
    __extends(Pager, _super);
    function Pager() {
        var _this = _super.call(this) || this;
        _this._transformer = pager_common_1.Transformer.NONE;
        _this._realizedItems = new Map();
        _this._realizedTemplates = new Map();
        _this.lastEvent = 0;
        pagers.set(_this._domId, new WeakRef(_this));
        _this._childrenViews = new Map();
        return _this;
    }
    Pager.prototype.itemTemplateUpdated = function (oldData, newData) {
    };
    Object.defineProperty(Pager.prototype, "views", {
        get: function () {
            return this._views;
        },
        set: function (value) {
            this._views = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Pager.prototype, "android", {
        get: function () {
            return this.nativeViewProtected;
        },
        enumerable: true,
        configurable: true
    });
    Pager.prototype.createNativeView = function () {
        var that = new WeakRef(this);
        var view;
        this._viewMap = new Map();
        if (this.orientation === 'vertical') {
            initTNSVerticalViewPager();
            view = new TNSVerticalViewPager(this._context);
        }
        else {
            initTNSViewPager();
            view = new TNSViewPager(this._context);
        }
        view.owner = that;
        this._pageListener = new androidx.viewpager.widget.ViewPager.OnPageChangeListener({
            onPageSelected: function (position) {
                var owner = that.get();
                if (owner) {
                    owner.selectedIndex = position;
                    owner.notify({
                        eventName: Pager.swipeEvent,
                        object: owner
                    });
                }
            },
            onPageScrolled: function (position, positionOffset, positionOffsetPixels) {
                var owner = that.get();
                if (owner) {
                    owner.notify({
                        eventName: Pager.scrollEvent,
                        object: owner,
                        selectedIndex: position,
                        scrollX: owner.horizontalOffset,
                        scrollY: owner.verticalOffset
                    });
                }
            },
            onPageScrollStateChanged: function (state) {
                var owner = that.get();
                if (owner) {
                    if (owner.lastEvent === 0 && state === 1) {
                        owner.notify({
                            eventName: Pager.swipeStartEvent,
                            object: owner
                        });
                        owner.lastEvent = 1;
                    }
                    else if (owner.lastEvent === 1 && state === 1) {
                        owner.notify({
                            eventName: Pager.swipeOverEvent,
                            object: owner
                        });
                        owner.lastEvent = 1;
                    }
                    else if (owner.lastEvent === 1 && state === 2) {
                        owner.notify({
                            eventName: Pager.swipeEndEvent,
                            object: owner
                        });
                        owner.lastEvent = 2;
                    }
                    else {
                        owner.lastEvent = 0;
                    }
                }
            }
        });
        initPagerStateAdapter();
        this._pagerAdapter = new PagerStateAdapter();
        this._pagerAdapter.mFragmentManager = this._getFragmentManager();
        this._pagerAdapter.owner = new WeakRef(this);
        if (this.pagesCount > 0) {
            view.setOffscreenPageLimit(this.pagesCount);
        }
        else {
            view.setOffscreenPageLimit(3);
        }
        return view;
    };
    Pager.prototype.onLayoutChange = function (args) {
        var spacing = this.convertToSize(args.object.spacing);
        var peaking = this.convertToSize(args.object.peaking);
        if (spacing > 0 && peaking > 0) {
            this.nativeViewProtected.setClipToPadding(false);
            this.nativeViewProtected.setPadding(peaking, 0, peaking, 0);
            this.nativeViewProtected.setPageMargin(spacing / 2);
        }
    };
    Pager.prototype[pager_common_1.spacingProperty.setNative] = function (value) {
        var size = this.convertToSize(value);
        if (size > 0) {
            this.nativeViewProtected.setClipToPadding(false);
            this.nativeViewProtected.setClipChildren(false);
            this.nativeViewProtected.setPageMargin(size / 2);
        }
    };
    Pager.prototype[pager_common_1.peakingProperty.setNative] = function (value) {
        var size = this.convertToSize(value);
        if (size > 0) {
            this.nativeViewProtected.setClipToPadding(false);
            this.nativeViewProtected.setClipChildren(false);
            this.nativeViewProtected.setPadding(size, 0, size, 0);
        }
    };
    Pager.prototype.initNativeView = function () {
        _super.prototype.initNativeView.call(this);
        this.on(view_1.View.layoutChangedEvent, this.onLayoutChange, this);
        this.nativeViewProtected.setOnPageChangeListener(this._pageListener);
        this.nativeViewProtected.setAdapter(this._pagerAdapter);
        if (this._androidViewId < 0) {
            this._androidViewId = android.view.View.generateViewId();
        }
        if (this.pagesCount > 0) {
            this.nativeViewProtected.setOffscreenPageLimit(this.pagesCount);
        }
        this.nativeView.setId(this._androidViewId);
        if (this._transformer === 'scale') {
            initZoomOutPageTransformer();
            var transformer = new ZoomOutPageTransformer();
            transformer.owner = new WeakRef(this);
            this.nativeViewProtected.setPageTransformer(true, transformer);
        }
    };
    Pager.prototype.disposeNativeView = function () {
        this.off(view_1.View.layoutChangedEvent, this.onLayoutChange, this);
        this._viewMap.clear();
        this._pageListener = null;
        this._pagerAdapter = null;
        _super.prototype.disposeNativeView.call(this);
    };
    Object.defineProperty(Pager.prototype, "disableAnimation", {
        get: function () {
            return this._disableAnimation;
        },
        set: function (value) {
            this._disableAnimation = value;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Pager.prototype, "pagerAdapter", {
        get: function () {
            return this._pagerAdapter;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Pager.prototype, "_childrenCount", {
        get: function () {
            return this.items ? this.items.length : this._childrenViews ? this._childrenViews.size : 0;
        },
        enumerable: true,
        configurable: true
    });
    Pager.prototype[pager_common_1.itemsProperty.getDefault] = function () {
        return null;
    };
    Pager.prototype[pager_common_1.itemsProperty.setNative] = function (value) {
        if (value) {
            pager_common_1.selectedIndexProperty.coerce(this);
            this.refresh();
        }
    };
    Object.defineProperty(Pager.prototype, "transformer", {
        get: function () {
            return this._transformer;
        },
        set: function (value) {
            if (this.nativeViewProtected) {
                if (value === 'scale') {
                    initZoomOutPageTransformer();
                    var transformer = new ZoomOutPageTransformer();
                    transformer.owner = new WeakRef(this);
                    this.nativeViewProtected.setPageTransformer(true, transformer);
                }
            }
            this._transformer = value;
        },
        enumerable: true,
        configurable: true
    });
    Pager.prototype.onLoaded = function () {
        var _this = this;
        _super.prototype.onLoaded.call(this);
        if (!this.items && this._childrenCount > 0) {
            pager_common_1.selectedIndexProperty.coerce(this);
            setTimeout(function () {
                _this.nativeViewProtected.setCurrentItem(_this.selectedIndex, false);
            }, 0);
        }
    };
    Pager.prototype[pager_common_1.selectedIndexProperty.setNative] = function (value) {
        if (this.nativeViewProtected) {
            this.nativeViewProtected.setCurrentItem(value, !this.disableAnimation);
        }
    };
    Pager.prototype.scrollToIndexAnimated = function (index, animate) {
        if (this.nativeViewProtected) {
            this.nativeViewProtected.setCurrentItem(index, animate);
        }
    };
    Pager.prototype.refresh = function () {
        if (this.nativeViewProtected && this._pagerAdapter) {
            this.nativeViewProtected.getAdapter().notifyDataSetChanged();
        }
    };
    Pager.prototype.updatePagesCount = function (value) {
        if (this.nativeViewProtected) {
            this._pagerAdapter.notifyDataSetChanged();
            this.nativeViewProtected.setOffscreenPageLimit(value);
        }
    };
    Pager.prototype.updateNativeIndex = function (oldIndex, newIndex) { };
    Pager.prototype.updateNativeItems = function (oldItems, newItems) {
        this.refresh();
    };
    Pager.prototype.onUnloaded = function () {
        _super.prototype.onUnloaded.call(this);
    };
    Pager.prototype.eachChildView = function (callback) {
        if (this._viewMap && this._viewMap.size > 0) {
            this._viewMap.forEach(function (view, key) {
                callback(view);
            });
        }
    };
    Pager.prototype.updateAdapter = function () {
        this._pagerAdapter.notifyDataSetChanged();
    };
    Pager.prototype._selectedIndexUpdatedFromNative = function (newIndex) { };
    Pager.prototype[pager_common_1.itemTemplatesProperty.getDefault] = function () {
        return null;
    };
    Pager.prototype[pager_common_1.itemTemplatesProperty.setNative] = function (value) {
        this._itemTemplatesInternal = new Array(this._defaultTemplate);
        if (value) {
            this._itemTemplatesInternal = this._itemTemplatesInternal.concat(value);
        }
        this._pagerAdapter = new PagerStateAdapter();
        this._pagerAdapter.mFragmentManager = this._getFragmentManager();
        this._pagerAdapter.owner = new WeakRef(this);
        this.nativeViewProtected.setAdapter(this._pagerAdapter);
        this.refresh();
    };
    Pager.prototype._addChildFromBuilder = function (name, value) {
        if (value instanceof pager_common_1.PagerItem) {
            this._childrenViews.set(this._childrenCount, value);
            this.refresh();
        }
    };
    Object.defineProperty(Pager.prototype, "horizontalOffset", {
        get: function () {
            var nativeView = this.nativeViewProtected;
            if (!nativeView) {
                return 0;
            }
            return nativeView.getScrollX() / view_1.layout.getDisplayDensity();
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Pager.prototype, "verticalOffset", {
        get: function () {
            var nativeView = this.nativeViewProtected;
            if (!nativeView) {
                return 0;
            }
            return nativeView.getScrollY() / view_1.layout.getDisplayDensity();
        },
        enumerable: true,
        configurable: true
    });
    return Pager;
}(pager_common_1.PagerBase));
exports.Pager = Pager;
exports.pagesCountProperty = new view_1.Property({
    name: 'pagesCount',
    defaultValue: 0,
    valueChanged: function (pager, oldValue, newValue) {
        pager.updatePagesCount(pager.pagesCount);
    }
});
exports.pagesCountProperty.register(Pager);
var pagers = new Map();
var getPagerById = function (id) {
    return pagers.get(id);
};
var ɵ0 = getPagerById;
exports.ɵ0 = ɵ0;
var POSITION_UNCHANGED = -1;
var POSITION_NONE = -2;
var PagerFragment;
function initPagerFragment() {
    if (PagerFragment) {
        return;
    }
    var PagerFragmentImpl = (function (_super) {
        __extends(PagerFragmentImpl, _super);
        function PagerFragmentImpl() {
            var _this = _super.call(this) || this;
            _this.position = -1;
            return global.__native(_this);
        }
        PagerFragmentImpl.newInstance = function (pagerId, position) {
            var fragment = new PagerFragment();
            fragment.position = position;
            fragment.owner = getPagerById(pagerId);
            var args = new android.os.Bundle();
            args.putInt('position', position);
            args.putInt('pagerId', pagerId);
            fragment.setArguments(args);
            return fragment;
        };
        PagerFragmentImpl.prototype.onCreateView = function (inflater, collection, bundle) {
            if (!this.owner || this.position === -1) {
                return null;
            }
            var owner = this.owner.get();
            if (owner && owner._childrenCount > 0 && !owner.items) {
                var view_2 = owner._childrenViews.get(this.position);
                if (view_2) {
                    if (!view_2.parent) {
                        owner._addView(view_2);
                    }
                }
                this.view = view_2;
                if (view_2.nativeView && !view_2.nativeView.getParent()) {
                    owner.nativeViewProtected.addView(view_2.nativeView);
                }
                return view_2.nativeView;
            }
            if (owner.items && this.position === owner.items.length - owner.loadMoreCount) {
                owner.notify({ eventName: pager_common_1.LOADMOREITEMS, object: owner });
            }
            var template = owner._getItemTemplate(this.position);
            if (!owner.cache && owner._viewMap.has(this.position + "-" + template.key)) {
                var cachedView = owner._viewMap.get(this.position + "-" + template.key);
                this.view = cachedView;
                return cachedView ? cachedView.nativeView : null;
            }
            var view = template.createView();
            var _args = notifyForItemAtIndex(owner, view ? view.nativeView : null, view, pager_common_1.ITEMLOADING, this.position);
            view = _args.view || owner._getDefaultItemContent(this.position);
            if (view) {
                owner._prepareItem(view, this.position);
                if (!view.parent) {
                    owner._addView(view);
                }
                owner._viewMap.set(this.position + "-" + template.key, view);
            }
            this.view = view;
            if (view.nativeView && !view.nativeView.getParent()) {
                owner.nativeViewProtected.addView(view.nativeView);
            }
            view.nativeView.setId(this.position);
            return view.nativeView;
        };
        PagerFragmentImpl.prototype.onDestroyView = function () {
            _super.prototype.onDestroyView.call(this);
        };
        return PagerFragmentImpl;
    }(androidx.fragment.app.Fragment));
    PagerFragment = PagerFragmentImpl;
}
var PagerStateAdapter;
function initPagerStateAdapter() {
    if (PagerStateAdapter) {
        return;
    }
    initPagerFragment();
    var PagerStateAdapterImpl = (function (_super) {
        __extends(PagerStateAdapterImpl, _super);
        function PagerStateAdapterImpl() {
            var _this = _super.call(this) || this;
            _this.mFragments = new android.util.LongSparseArray();
            _this.mSavedStates = new android.util.LongSparseArray();
            return global.__native(_this);
        }
        PagerStateAdapterImpl.prototype.startUpdate = function (container) {
            if (container.getId() === android.view.View.NO_ID) {
                throw new Error('ViewPager with adapter ' + this + ' requires a view id');
            }
        };
        PagerStateAdapterImpl.prototype.registerDataSetObserver = function (param0) {
            _super.prototype.registerDataSetObserver.call(this, param0);
        };
        PagerStateAdapterImpl.prototype.getPageWidth = function (position) {
            var owner = this.owner ? this.owner.get() : null;
            if (owner && owner.orientation === 'horizontal') {
                return float(1.0 / owner.perPage);
            }
            return float(1.0);
        };
        PagerStateAdapterImpl.prototype.getPageHeight = function (position) {
            var owner = this.owner ? this.owner.get() : null;
            if (owner && owner.orientation === 'vertical') {
                return float(1.0 / owner.perPage);
            }
            return float(1.0);
        };
        PagerStateAdapterImpl.prototype.unregisterDataSetObserver = function (param0) {
            _super.prototype.unregisterDataSetObserver.call(this, param0);
        };
        PagerStateAdapterImpl.prototype.instantiateItem = function (container, position) {
            var tag = this.getItemId(position);
            var fragment = this.mFragments.get(tag);
            if (fragment != null) {
                return fragment;
            }
            var owner = this.owner ? this.owner.get() : null;
            if (owner) {
                if (owner.items && position === owner.items.length - 1) {
                    owner.notify({ eventName: pager_common_1.LOADMOREITEMS, object: owner });
                }
            }
            if (this.mCurTransaction == null) {
                this.mCurTransaction = this.mFragmentManager.beginTransaction();
                this.mCurTransaction.setReorderingAllowed(true);
            }
            fragment = this.getItem(position);
            var savedState = this.mSavedStates.get(tag);
            if (savedState != null) {
                fragment.setInitialSavedState(savedState);
            }
            fragment.setMenuVisibility(false);
            fragment.setUserVisibleHint(false);
            this.mFragments.put(tag, fragment);
            this.mCurTransaction.add(container.getId(), fragment, 'f' + tag);
            var cachedView = this.getViewByPosition(position);
            if (owner && cachedView) {
                owner._prepareItem(cachedView, position);
            }
            if (cachedView && cachedView.nativeView && !cachedView.nativeView.getParent() && container) {
                container.addView(cachedView.nativeView);
            }
            return fragment;
        };
        PagerStateAdapterImpl.prototype.destroyItem = function (container, position, object) {
            var fragment = object;
            var currentPosition = this.getItemPosition(fragment);
            var index = this.mFragments.indexOfValue(fragment);
            var fragmentKey = -1;
            if (index !== -1) {
                fragmentKey = this.mFragments.keyAt(index);
                this.mFragments.removeAt(index);
            }
            if (fragment.isAdded() && currentPosition !== androidx.viewpager.widget.PagerAdapter.POSITION_NONE) {
                this.mSavedStates.put(fragmentKey, this.mFragmentManager.saveFragmentInstanceState(fragment));
            }
            else {
                this.mSavedStates.remove(fragmentKey);
            }
            if (this.mCurTransaction == null) {
                this.mCurTransaction = this.mFragmentManager.beginTransaction();
            }
            var cachedView = this.getViewByPosition(position);
            if (cachedView && cachedView.nativeView && cachedView.nativeView.getParent() && container) {
                container.removeView(cachedView.nativeView);
            }
            var owner = this.owner.get();
            if (owner && cachedView) {
                var template = owner._getItemTemplate(position);
                owner._viewMap.delete(position + "-" + template.key);
            }
            this.mCurTransaction.remove(fragment);
        };
        PagerStateAdapterImpl.prototype.setPrimaryItem = function (container, position, object) {
            var fragment = object;
            if (fragment !== this.mCurrentPrimaryItem) {
                if (this.mCurrentPrimaryItem != null) {
                    this.mCurrentPrimaryItem.setMenuVisibility(false);
                    this.mCurrentPrimaryItem.setUserVisibleHint(false);
                }
                if (fragment != null) {
                    fragment.setMenuVisibility(true);
                    fragment.setUserVisibleHint(true);
                }
                this.mCurrentPrimaryItem = fragment;
                var cachedView = this.getViewByPosition(position);
                if (cachedView && cachedView.nativeView && !cachedView.nativeView.getParent() && container) {
                    container.addView(cachedView.nativeView);
                }
            }
        };
        PagerStateAdapterImpl.prototype.getViewByPosition = function (position) {
            var cachedView = null;
            var owner = this.owner.get();
            if (owner && owner._childrenCount > 0 && !owner.items) {
                return owner._childrenViews.get(position);
            }
            var template = owner._getItemTemplate(position);
            if (owner._viewMap.has(position + "-" + template.key)) {
                cachedView = owner._viewMap.get(position + "-" + template.key);
            }
            return cachedView;
        };
        PagerStateAdapterImpl.prototype.finishUpdate = function (container) {
            if (this.mCurTransaction != null) {
                this.mCurTransaction.commitNowAllowingStateLoss();
                this.mCurTransaction = null;
            }
        };
        PagerStateAdapterImpl.prototype.getCount = function () {
            var owner = this.owner ? this.owner.get() : null;
            if (!owner)
                return 0;
            return owner.items ? owner.items.length : owner._childrenCount;
        };
        PagerStateAdapterImpl.prototype.getItem = function (position) {
            if (!this.owner) {
                return null;
            }
            var owner = this.owner.get();
            return PagerFragment.newInstance(owner._domId, position);
        };
        PagerStateAdapterImpl.prototype.saveState = function () {
            var state = null;
            if (this.mSavedStates.size() > 0) {
                state = new android.os.Bundle();
                var stateIds = Array.create('long', this.mSavedStates.size());
                for (var i = 0; i < this.mSavedStates.size(); i++) {
                    var entry = this.mSavedStates.valueAt(i);
                    stateIds[i] = this.mSavedStates.keyAt(i);
                    state.putParcelable(java.lang.Long.toString(stateIds[i]), entry);
                }
                state.putLongArray('states', stateIds);
            }
            for (var i = 0; i < this.mFragments.size(); i++) {
                var f = this.mFragments.valueAt(i);
                if (f != null && f.isAdded()) {
                    if (state == null) {
                        state = new android.os.Bundle();
                    }
                    var key = 'f' + this.mFragments.keyAt(i);
                    this.mFragmentManager.putFragment(state, key, f);
                }
            }
            return state;
        };
        PagerStateAdapterImpl.prototype.restoreState = function (state, loader) {
            if (state != null) {
                var bundle = state;
                bundle.setClassLoader(loader);
                var fss = bundle.getLongArray('states');
                this.mSavedStates.clear();
                this.mFragments.clear();
                if (fss != null) {
                    var size = fss.length;
                    for (var i = 0; i < size; i++) {
                        var fs = fss[i];
                        this.mSavedStates.put(fs, bundle.getParcelable(java.lang.Long.toString(fs)));
                    }
                }
                var keys = bundle.keySet();
                var keysArray = keys.toArray();
                var keysSize = keys.size();
                for (var i = 0; i < keysSize; i++) {
                    var key = keysArray[i];
                    if (key.startsWith('f')) {
                        var f = this.mFragmentManager.getFragment(bundle, key);
                        if (f != null) {
                            f.setMenuVisibility(false);
                            this.mFragments.put(java.lang.Long.parseLong(key.substring(1)), f);
                        }
                        else {
                            console.log('FragmentPagerAdapter', "Bad fragment at key " + key);
                        }
                    }
                }
            }
        };
        PagerStateAdapterImpl.prototype.getItemId = function (position) {
            return position;
        };
        PagerStateAdapterImpl.prototype.isViewFromObject = function (view, object) {
            return object.getView() === view;
        };
        PagerStateAdapterImpl.prototype.getItemPosition = function (object) {
            var count = this.mFragments.size();
            var fragment = object;
            var position = POSITION_NONE;
            for (var i = 0; i < count; i++) {
                var item = this.getItem(i);
                if (item && item.equals(fragment)) {
                    position = i;
                    break;
                }
            }
            return position;
        };
        return PagerStateAdapterImpl;
    }(com.lambergar.verticalviewpager.PagerAdapter));
    PagerStateAdapter = PagerStateAdapterImpl;
}
var TNSViewPager;
function initTNSViewPager() {
    if (TNSViewPager) {
        return;
    }
    var TNSViewPagerImpl = (function (_super) {
        __extends(TNSViewPagerImpl, _super);
        function TNSViewPagerImpl(context) {
            var _this = _super.call(this, context) || this;
            return global.__native(_this);
        }
        TNSViewPagerImpl.prototype.onInterceptTouchEvent = function (ev) {
            var owner = this.owner.get();
            if (!!owner.disableSwipe)
                return false;
            if (this.isSwipeAllowed(owner, ev)) {
                return _super.prototype.onInterceptTouchEvent.call(this, ev);
            }
            return false;
        };
        TNSViewPagerImpl.prototype.onTouchEvent = function (ev) {
            var owner = this.owner.get();
            if (!!owner.disableSwipe)
                return false;
            if (this.isSwipeAllowed(owner, ev)) {
                return _super.prototype.onTouchEvent.call(this, ev);
            }
            return false;
        };
        TNSViewPagerImpl.prototype.isSwipeAllowed = function (owner, ev) {
            var action = ev.getAction();
            if (action === android.view.MotionEvent.ACTION_DOWN) {
                this.lastEventX = ev.getX();
                return true;
            }
            if (action === android.view.MotionEvent.ACTION_MOVE) {
                var dx = ev.getX() - this.lastEventX;
                return dx > 0 ? owner.canGoLeft : owner.canGoRight;
            }
            return true;
        };
        return TNSViewPagerImpl;
    }(androidx.viewpager.widget.ViewPager));
    TNSViewPager = TNSViewPagerImpl;
}
var TNSVerticalViewPager;
function initTNSVerticalViewPager() {
    if (TNSVerticalViewPager) {
        return;
    }
    var TNSVerticalViewPagerImpl = (function (_super) {
        __extends(TNSVerticalViewPagerImpl, _super);
        function TNSVerticalViewPagerImpl(context) {
            var _this = _super.call(this, context) || this;
            return global.__native(_this);
        }
        TNSVerticalViewPagerImpl.prototype.onInterceptTouchEvent = function (ev) {
            var owner = this.owner.get();
            if (!!owner.disableSwipe)
                return false;
            if (this.isSwipeAllowed(owner, ev)) {
                return _super.prototype.onInterceptTouchEvent.call(this, ev);
            }
            return false;
        };
        TNSVerticalViewPagerImpl.prototype.onTouchEvent = function (ev) {
            var owner = this.owner.get();
            if (!!owner.disableSwipe)
                return false;
            if (this.isSwipeAllowed(owner, ev)) {
                return _super.prototype.onTouchEvent.call(this, ev);
            }
            return false;
        };
        TNSVerticalViewPagerImpl.prototype.isSwipeAllowed = function (owner, ev) {
            var action = ev.getAction();
            if (action === android.view.MotionEvent.ACTION_DOWN) {
                this.lastEventX = ev.getX();
                return true;
            }
            if (action === android.view.MotionEvent.ACTION_MOVE) {
                var dx = ev.getX() - this.lastEventX;
                return dx > 0 ? owner.canGoLeft : owner.canGoRight;
            }
            return true;
        };
        return TNSVerticalViewPagerImpl;
    }(com.lambergar.verticalviewpager.VerticalViewPager));
    TNSVerticalViewPager = TNSVerticalViewPagerImpl;
}
var ZoomOutPageTransformer;
function initZoomOutPageTransformer() {
    if (ZoomOutPageTransformer) {
        return;
    }
    var ZoomOutPageTransformerImpl = (function (_super) {
        __extends(ZoomOutPageTransformerImpl, _super);
        function ZoomOutPageTransformerImpl() {
            var _this = _super.call(this) || this;
            return global.__native(_this);
        }
        ZoomOutPageTransformerImpl.prototype.transformPage = function (view, position) {
            var MIN_SCALE = 0.75;
            var owner = this.owner ? this.owner.get() : null;
            if (!owner)
                return;
            if (position <= -0.1 || position >= 1) {
                var scale = Math.max(MIN_SCALE, 1 - Math.abs(position));
                view.setScaleX(scale);
                view.setScaleY(scale);
            }
            else {
                view.setScaleX(1);
                view.setScaleY(1);
            }
        };
        return ZoomOutPageTransformerImpl;
    }(androidx.viewpager.widget.ViewPager.PageTransformer));
    ZoomOutPageTransformer = ZoomOutPageTransformerImpl;
}
//# sourceMappingURL=pager.android.js.map
tahir-jamil commented 5 years ago

Hi @NickIliev @triniwiz Pager is not working on Android for tns-android: v6, even after trying the fix above by Nickelliev. Whole application is not workable.

Please see my package.json below:

{
  "name": "tu-shared-app",
  "nativescript": {
    "id": "org.nativescript.tusharedapp",
    "tns-ios": {
      "version": "5.3.1"
    },
    "tns-android": {
      "version": "6.0.0-2019-06-05-002854-01"
    }
  },
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "dev": "lite-server",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "android": "tns run android --bundle",
    "ios": "tns run ios --bundle"
  },
  "private": true,
  "dependencies": {
    "@agm/core": "^1.0.0-beta.5",
    "@angular/animations": "~7.2.0",
    "@angular/cdk": "^7.2.0",
    "@angular/common": "~7.2.0",
    "@angular/compiler": "~7.2.0",
    "@angular/core": "~7.2.0",
    "@angular/flex-layout": "^7.0.0-beta.22",
    "@angular/forms": "~7.2.0",
    "@angular/http": "~7.2.0",
    "@angular/material": "^7.2.0",
    "@angular/platform-browser": "~7.2.0",
    "@angular/platform-browser-dynamic": "~7.2.0",
    "@angular/router": "~7.2.0",
    "@netbasal/ngx-content-loader": "^2.1.3",
    "@ng-bootstrap/ng-bootstrap": "^4.0.1",
    "@ng-select/ng-select": "^2.15.0",
    "@ngx-loading-bar/core": "^4.2.0",
    "@ngx-loading-bar/http": "^4.2.0",
    "@ngx-loading-bar/http-client": "^4.2.0",
    "@ngx-loading-bar/router": "^4.2.0",
    "@rxweb/reactive-form-validators": "^1.9.1",
    "@types/color": "^3.0.0",
    "ag-grid-angular": "^19.1.2",
    "ag-grid-community": "^19.1.4",
    "angular2-promise-buttons": "^3.0.1",
    "bootstrap": "4.2.1",
    "color": "^3.1.0",
    "core-js": "^2.5.4",
    "google-libphonenumber": "^3.2.2",
    "html2canvas": "^1.0.0-rc.1",
    "intl-tel-input": "^14.0.10",
    "js-data": "file:js-data.tar.gz",
    "js-data-http": "file:js-data-http.tar.gz",
    "jspdf": "^1.5.3",
    "lodash.filter": "^4.6.0",
    "lodash.get": "^4.4.2",
    "lodash.remove": "^4.7.0",
    "lodash.uniqby": "^4.7.0",
    "nativescript": "^5.4.2",
    "nativescript-angular": "^8.0.1",
    "nativescript-checkbox": "^3.0.3",
    "nativescript-email": "^1.5.4",
    "nativescript-feedback": "^1.3.9",
    "nativescript-fresco": "^5.3.0",
    "nativescript-geolocation": "^5.1.0",
    "nativescript-google-maps-sdk": "^2.7.0",
    "nativescript-google-places-autocomplete": "^1.0.3",
    "nativescript-localstorage": "^2.0.0",
    "nativescript-lottie": "^3.0.3",
    "nativescript-modal-datetimepicker": "^1.2.0",
    "nativescript-ng-ripple": "^2.0.1",
    "nativescript-ng-shadow": "^2.1.0",
    "nativescript-pager": "^9.5.4",
    "nativescript-performance-monitor": "^1.0.0",
    "nativescript-phone": "^1.4.0",
    "nativescript-platform-css": "^1.6.8",
    "nativescript-scaledfonts": "file:nativescript-scaledfonts",
    "nativescript-telephony": "^1.0.4",
    "nativescript-theme-core": "^1.0.6",
    "nativescript-ui-chart": "^4.0.2",
    "nativescript-ui-dataform": "^4.0.1",
    "nativescript-ui-gauge": "^4.0.0",
    "nativescript-ui-listview": "^6.4.0",
    "ng-click-outside": "^4.0.0",
    "ng-connection-service": "^1.0.4",
    "ngx-bootstrap": "^3.2.0",
    "ngx-intl-tel-input": "^2.0.7",
    "ngx-perfect-scrollbar": "^7.1.0",
    "reflect-metadata": "~0.1.8",
    "rxjs": "^6.3.3",
    "tns-core-modules": "5.4.0-androidx-2019-03-22-160602-06",
    "toastr": "^2.1.4",
    "zone.js": "^0.8.4"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.8.0",
    "@angular/cli": "^7.0.0",
    "@angular/compiler-cli": "~7.0.0",
    "@nativescript/schematics": "~0.3.0",
    "@types/googlemaps": "^3.30.16",
    "@types/jasmine": "2.8.11",
    "@types/jasminewd2": "~2.0.3",
    "@types/lodash": "^4.14.119",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.2.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.0",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "lite-server": "^2.4.0",
    "nativescript-dev-sass": "~1.6.0",
    "nativescript-dev-typescript": "^0.9.0",
    "nativescript-dev-webpack": "^0.22.0",
    "protractor": "~5.3.0",
    "tns-platform-declarations": "^5.1.1",
    "ts-node": "~5.0.1",
    "tslint": "~5.9.1",
    "typescript": "~3.1.1"
  }
}
NickIliev commented 5 years ago

@tahir-jamil you have some incompatible dependency versions. Install CLI version next (npm i -g nativescript@next) and then run tns migrate. I believe this is not the right place to comment on ANdridX migration path so please if you need further information use the NativeScript repositories

Use the next version only for testing purposes as it contains the AndroidX breaking change and some of the plugins are not migrated to use AndroidX. SO that said I see a number of plugins in your application which are using the support library so you must wait for each plugin to release compatible AndroidX version (which will happen around and after the official release)

tahir-jamil commented 5 years ago

Well its not good for me as i have my first release this month should i downgrade my nativescript version ?

fpaaske commented 5 years ago

Related ticket/PR #129

romandrahan commented 5 years ago

Any progress on that? Can't get the plugin working with NativeScript 6.

triniwiz commented 5 years ago

Fell free to upgrade to v10.0.0