private string GetUserAgent()
        {
            var dict       = NSBundle.MainBundle.InfoDictionary;
            var appName    = dict["CFBundleDisplayName"]?.ToString();
            var appVersion = dict["CFBundleShortVersionString"]?.ToString();

            var osName    = UIDevice.CurrentDevice.SystemName;
            var osVersion = UIDevice.CurrentDevice.SystemVersion;

            var networkHandler        = "CFNetwork";
            var networkHandlerVersion = NSBundle.FromIdentifier("com.apple.CFNetwork")?.InfoDictionary["CFBundleShortVersionString"]?.ToString();

            var darwinName    = "Darwin";
            var darwinVersion = GetSysPropertyInfo("kern.osrelease");
            var deviceModel   = GetSysPropertyInfo("hw.machine");

            // <AppName/<version> <iDevice platform><Apple model identifier>  iOS/<OS version> CFNetwork/<version> Darwin/<version>
            var ua = $"{appName}/{appVersion} {deviceModel} {osName}/{osVersion} {networkHandler}/{networkHandlerVersion} {darwinName}/{darwinVersion}";

            return(ua);
        }
Esempio n. 2
0
        /// <summary>
        /// Used by datasource when registering all cells to the collection view. If user
        /// did not register custom cells, this method registers default cells
        /// </summary>
        /// <param name="collectionView">Collection view.</param>
        /// <param name="registrator">Registrator.</param>
        /// <param name="cameraMode">Camera mode.</param>
        public static void Apply(this UICollectionView collectionView, CellRegistrator registrator,
                                 CameraMode cameraMode)
        {
            //register action items considering type
            //if user did not register any nib or cell, use default action cell
            if (registrator.HasUserRegisteredActionCell == false)
            {
                registrator.RegisterCellClassForActionItems(typeof(ActionCell));
                var identifier = registrator.CellIdentifier(int.MaxValue);

                if (identifier == null)
                {
                    throw new ImagePickerException("Image Picker: unable to register default action item cell");
                }

                collectionView.RegisterNibForCell(
                    UINib.FromName(nameof(ActionCell), NSBundle.FromIdentifier(nameof(ActionCell))),
                    identifier);
            }
            else
            {
                collectionView.Register(registrator.ActionItemNibsData?.Values);
                collectionView.Register(registrator.ActionItemClassesData?.Values);
            }

            if (registrator.CameraItemNib == null && registrator.CameraItemClass == null)
            {
                switch (cameraMode)
                {
                case CameraMode.Photo:
                case CameraMode.PhotoAndLivePhoto:
                    collectionView.RegisterNibForCell(
                        UINib.FromName(nameof(LivePhotoCameraCell),
                                       NSBundle.FromIdentifier(nameof(LivePhotoCameraCell))),
                        CellRegistrator.CellIdentifierForCameraItem);
                    break;

                case CameraMode.PhotoAndVideo:
                    collectionView.RegisterNibForCell(
                        UINib.FromName(nameof(VideoCameraCell), NSBundle.FromIdentifier(nameof(VideoCameraCell))),
                        CellRegistrator.CellIdentifierForCameraItem);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(cameraMode), cameraMode, null);
                }
            }
            else if (registrator.CameraItemNib != null && registrator.CameraItemClass == null)
            {
                collectionView.RegisterNibForCell(registrator.CameraItemNib, CellRegistrator.CellIdentifierForCameraItem);
            }
            else
            {
                collectionView.RegisterClassForCell(registrator.CameraItemClass.GetType(),
                                                    CellRegistrator.CellIdentifierForCameraItem);
            }

            //register asset items considering type
            collectionView.Register(registrator.AssetItemNibsData?.Values);
            collectionView.Register(registrator.AssetItemClassesData?.Values);

            if (registrator.AssetItemNib == null && registrator.AssetItemClass == null)
            {
                //if user did not register all required classes/nibs - register default cells
                collectionView.RegisterClassForCell(typeof(VideoAssetCell), registrator.CellIdentifierForAssetItems);
                //fatalError("there is not registered cell class nor nib for asset items, please user appropriate register methods on `CellRegistrator`")
            }
            else if (registrator.AssetItemNib != null && registrator.AssetItemClass == null)
            {
                collectionView.RegisterNibForCell(registrator.AssetItemNib, registrator.CellIdentifierForAssetItems);
            }
            else
            {
                collectionView.RegisterClassForCell(registrator.AssetItemClass.GetType(),
                                                    registrator.CellIdentifierForAssetItems);
            }
        }