Esempio n. 1
0
        private void AttachAcceptCommand(IFrameworkElement control)
        {
            var b = control.FindName("AcceptButton") as Button;

            if (b != null && b.Command == null)
            {
                var wr = WeakReferencePool.RentWeakReference(this, this);
                b.Command = new DelegateCommand(() => (wr.Target as TimePickerFlyout)?.Accept());
            }
        }
Esempio n. 2
0
        public void When_WeakReferenceProvider_Collected()
        {
            var o1 = new Object();

            void test1()
            {
                var mr1 = WeakReferencePool.RentWeakReference(this, o1);

                WeakReferencePool.ReturnWeakReference(this, mr1);
            }

            test1();

            Assert.AreEqual(2, WeakReferencePool.PooledReferences);

            void test2()
            {
                var mr2 = WeakReferencePool.RentWeakReference(this, o1);

                WeakReferencePool.ReturnWeakReference(this, mr2);
            }

            test2();

            Assert.AreEqual(2, WeakReferencePool.PooledReferences);

            (WeakReference refref, WeakReference ownerRef, WeakReference targetRef) CreateUnreferenced()
            {
                var o2  = new Object();
                var mr2 = WeakReferencePool.RentWeakReference(o1, o2);

                return(new WeakReference(mr2), new WeakReference(mr2.GetUnsafeOwnerHandle()), new WeakReference(mr2.GetUnsafeTargetHandle()));
            }

            var r = CreateUnreferenced();

            Assert.IsNotNull(r.ownerRef.Target);
            Assert.IsNotNull(r.targetRef.Target);
            Assert.IsNotNull(r.refref.Target);

            Assert.AreEqual(0, WeakReferencePool.PooledReferences);

            GCCondition(5, () => r.refref.Target == null);

            Assert.IsNull(r.refref.Target);

            GCCondition(5, () => r.ownerRef.Target == null && r.targetRef.Target == null);

            Assert.IsNull(r.ownerRef.Target);
            Assert.IsNull(r.targetRef.Target);

            Assert.AreEqual(0, WeakReferencePool.PooledReferences);
        }
Esempio n. 3
0
        public FrameworkTemplate(object?owner, FrameworkTemplateBuilder?factory)
        {
            InitializeBinder();

            _viewFactory = factory;
            _ownerRef    = WeakReferencePool.RentWeakReference(this, owner);

            // Compute the hash for this template once, it will be used a lot
            // in the ControlPool's internal dictionary.
            _hashCode = (factory?.Target?.GetHashCode() ?? 0) ^ (factory?.Method.GetHashCode() ?? 0);

            _xamlScope = ResourceResolver.CurrentScope;
        }
Esempio n. 4
0
        public void When_WeakReferenceProvider_Reused()
        {
            var o1 = new Object();

            var mr1 = WeakReferencePool.RentWeakReference(this, o1);

            WeakReferencePool.ReturnWeakReference(this, mr1);

            var target = new MyProvider();

            Assert.AreEqual(target, target.WeakReference.Target);

            var mr2 = WeakReferencePool.RentWeakReference(target, o1);

            WeakReferencePool.ReturnWeakReference(target, mr2);

            Assert.AreEqual(target, target.WeakReference.Target);
        }
        private void SetValueFull(object?value, DependencyPropertyValuePrecedences precedence)
        {
            var valueIsUnsetValue = value is UnsetValue;

            var stackAlias = Stack;

            if (HasWeakStorage)
            {
                if (stackAlias[(int)precedence] is ManagedWeakReference mwr)
                {
                    WeakReferencePool.ReturnWeakReference(this, mwr);
                }

                stackAlias[(int)precedence] = Validate(value);
            }
            else
            {
                stackAlias[(int)precedence] = ValidateNoWrap(value);
            }

            // After setting the value, we need to update the current highest precedence if needed
            // If a higher value precedence was set, then this is the new highest
            if (!valueIsUnsetValue && precedence < _highestPrecedence)
            {
                _highestPrecedence = precedence;
                return;
            }

            // If we were unsetting the current highest precedence value, we need to find the next highest
            if (valueIsUnsetValue && precedence == _highestPrecedence)
            {
                // Start from current precedence and find next highest
                for (int i = (int)precedence; i < (int)DependencyPropertyValuePrecedences.DefaultValue; i++)
                {
                    if (stackAlias[i] != DependencyProperty.UnsetValue)
                    {
                        _highestPrecedence = (DependencyPropertyValuePrecedences)i;
                        return;
                    }
                }

                _highestPrecedence = DependencyPropertyValuePrecedences.DefaultValue;
            }
        }
Esempio n. 6
0
        private IDisposable AttachFlyoutCommand(string targetButtonName, Action <DatePickerFlyout> action)
        {
            if (_presenter.FindName(targetButtonName) is Button button)
            {
                if (button.Command == null)
                {
                    var self = WeakReferencePool.RentSelfWeakReference(this);
                    button.Command = new DelegateCommand(() => (self.Target as DatePickerFlyout)?.Apply(action));

                    return(Disposable.Create(() =>
                    {
                        button.Command = null;
                        self.Dispose();
                    }));
                }
            }

            return(Disposable.Empty);
        }
Esempio n. 7
0
        private void UpdateTextBoxView()
        {
            if (_textBoxView == null && _contentElement != null)
            {
                _textBoxView = _contentElement.GetChildren().FirstOrDefault() as TextBoxView;

                if (_textBoxView == null)
                {
                    _textBoxView = new TextBoxView(this);

                    _contentElement.Content = _textBoxView;
                    _textBoxView.SetTextNative(Text);

                    _editableFactory = _editableFactory ?? new Factory(WeakReferencePool.RentSelfWeakReference(this));
                    _textBoxView.SetEditableFactory(_editableFactory);
                }

                SetupTextBoxView();
            }
        }
Esempio n. 8
0
        public void When_Not_Owned_Returned()
        {
            var target1 = new object();
            var target2 = new object();

            var mr1 = WeakReferencePool.RentWeakReference(target1, target1);

            var wr = mr1.GetUnsafeTargetHandle();

            Assert.AreEqual(target1, mr1.GetUnsafeTargetHandle().Target);
            Assert.AreEqual(target1, mr1.Owner);

            WeakReferencePool.ReturnWeakReference(this, mr1);

            var mr2 = WeakReferencePool.RentWeakReference(this, target2);

            Assert.AreEqual(target2, mr2.GetUnsafeTargetHandle().Target);
            Assert.AreEqual(this, mr2.Owner);
            Assert.AreNotSame(wr, mr2.GetUnsafeTargetHandle());
        }
Esempio n. 9
0
        public TextBoxView(TextBox owner)
            : base(ContextHelper.Current)
        {
            _ownerRef = WeakReferencePool.RentWeakReference(this, owner);
            InitializeBinder();

            base.SetSingleLine(true);

            //This Background color is set to remove the native android underline on the EditText.
            this.SetBackgroundColor(Colors.Transparent);
            //Remove default native padding.
            this.SetPadding(0, 0, 0, 0);

            _isInitialized = true;

            // This ensures the TextBoxView gets resized as Text changes
            LayoutParameters = new Android.Views.ViewGroup.LayoutParams(
                Android.Views.ViewGroup.LayoutParams.WrapContent,
                Android.Views.ViewGroup.LayoutParams.WrapContent
                );
        }
Esempio n. 10
0
 private object Wrap(object value)
 => _hasWeakStorage && value != null && value != DependencyProperty.UnsetValue
                 ? WeakReferencePool.RentWeakReference(this, value)
                 : value;
Esempio n. 11
0
 public MyProvider()
 {
     WeakReference = WeakReferencePool.RentSelfWeakReference(this);
 }
Esempio n. 12
0
 public void Cleanup()
 {
     WeakReferencePool.ClearCache();
 }
Esempio n. 13
0
 public void Initialize()
 {
     WeakReferencePool.ClearCache();
 }
Esempio n. 14
0
 public void RegisterName(string name, object scopedElement)
 {
     _names.Add(name, WeakReferencePool.RentWeakReference(this, scopedElement));
 }
Esempio n. 15
0
        public static void ReturnWeakReferenceToPool(WeakReference wr)
        {
#if ENABLE_OBJ_POOL
            WeakReferencePool.ReturnToPool(wr);
#endif
        }
Esempio n. 16
0
 public WeakResourceInitializer(object owner, ResourceInitializerWithOwner initializer)
 {
     _owner      = WeakReferencePool.RentWeakReference(this, owner);
     Initializer = () => initializer(_owner?.Target);
 }