Exemplo n.º 1
0
        public void Recursively(IViewWrapper customView, List <DetectedError> detectedErrors, InspectorViewMode viewMode)
        {
            if (detectedErrors.Count >= AccessibilityService.MaxIssues)
            {
                return;
            }

            var errorType = DetectedErrorType.None;

            ContrastAnalysis contrastAnalisys = null;

            if (customView is ITextBoxWrapper textField)
            {
                var parentColor = textField.BackgroundColor;
                if (parentColor == null && textField.Superview != null)
                {
                    var result = BackColorSearch(textField.Superview);
                    if (result != null)
                    {
                        contrastAnalisys       = new ContrastAnalysis((NSColor)textField.TextColor.NativeObject, (NSColor)result.Color.NativeObject, (NSFont)textField.Font.NativeObject);
                        contrastAnalisys.View1 = customView;
                        contrastAnalisys.View2 = textField.Superview;
                        if (!contrastAnalisys.IsPassed)
                        {
                            errorType |= DetectedErrorType.Contrast;
                        }
                    }
                }
            }

            if (IsSelectableView(customView))
            {
                if (string.IsNullOrEmpty(customView.AccessibilityTitle))
                {
                    errorType |= DetectedErrorType.AccessibilityTitle;
                }
                //if (string.IsNullOrEmpty(customView.AccessibilityHelp))
                //{
                //    errorType |= DetectedErrorType.AccessibilityHelp;
                //}
                if (customView.AccessibilityParent == null)
                {
                    errorType |= DetectedErrorType.AccessibilityParent;
                }
            }

            if (errorType != DetectedErrorType.None)
            {
                var detectedError = new DetectedError()
                {
                    View = customView, ErrorType = errorType
                };
                if (contrastAnalisys != null)
                {
                    detectedError.Color1        = contrastAnalisys.Color1.ToHex();
                    detectedError.Color2        = contrastAnalisys.Color2.ToHex();
                    detectedError.ContrastRatio = (float)contrastAnalisys.Contrast;
                    detectedError.View2         = contrastAnalisys.View2;
                }

                detectedErrors.Add(detectedError);
            }

            if (customView.Subviews == null || customView.IsBlockedType())
            {
                return;
            }

            foreach (var item in customView.Subviews)
            {
                Recursively(item, detectedErrors, viewMode);
            }
        }