Fabric: Proper parsing of Accessibility Props

Summary: Previsouly, we basically didn't support Accessibility at all.

Reviewed By: mdvacca

Differential Revision: D10250635

fbshipit-source-id: d33eed8f56374f57310654653f41c312cb5942e6
This commit is contained in:
Valentin Shergin 2018-10-09 16:25:15 -07:00 committed by Facebook Github Bot
parent 8f51243957
commit 04fbdd347b
5 changed files with 147 additions and 47 deletions

View File

@ -7,14 +7,48 @@
#include "AccessibilityProps.h"
#include "accessibilityValuesConversions.h"
#include <fabric/components/view/accessibilityPropsConversions.h>
#include <fabric/components/view/propsConversions.h>
#include <fabric/core/propsConversions.h>
namespace facebook {
namespace react {
AccessibilityProps::AccessibilityProps(
const AccessibilityProps &sourceProps,
const RawProps &rawProps) {}
const RawProps &rawProps)
: accessible(convertRawProp(
rawProps,
"accessible",
sourceProps.accessible)),
accessibilityTraits(convertRawProp(
rawProps,
"accessibilityTraits",
sourceProps.accessibilityTraits)),
accessibilityLabel(convertRawProp(
rawProps,
"accessibilityLabel",
sourceProps.accessibilityLabel)),
accessibilityHint(convertRawProp(
rawProps,
"accessibilityHint",
sourceProps.accessibilityHint)),
accessibilityActions(convertRawProp(
rawProps,
"accessibilityActions",
sourceProps.accessibilityActions)),
accessibilityViewIsModal(convertRawProp(
rawProps,
"accessibilityViewIsModal",
sourceProps.accessibilityViewIsModal)),
accessibilityElementsHidden(convertRawProp(
rawProps,
"accessibilityElementsHidden",
sourceProps.accessibilityElementsHidden)),
accessibilityIgnoresInvertColors(convertRawProp(
rawProps,
"accessibilityIgnoresInvertColors",
sourceProps.accessibilityIgnoresInvertColors)) {}
} // namespace react
} // namespace facebook

View File

@ -29,11 +29,14 @@ class AccessibilityProps : public virtual DebugStringConvertible {
#pragma mark - Props
const bool accessible{false};
const std::vector<std::string> accessibilityActions{};
const std::string accessibilityLabel{""};
const AccessibilityTraits accessibilityTraits{AccessibilityTraits::None};
const std::string accessibilityLabel{""};
const std::string accessibilityHint{""};
const std::vector<std::string> accessibilityActions{};
const bool accessibilityViewIsModal{false};
const bool accessibilityElementsHidden{false};
const bool accessibilityIgnoresInvertColors{false};
const std::string testId{""};
};
} // namespace react

View File

@ -0,0 +1,106 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <fabric/components/view/AccessibilityPrimitives.h>
#include <folly/dynamic.h>
namespace facebook {
namespace react {
inline void fromString(const std::string &string, AccessibilityTraits &result) {
if (string == "none") {
result = AccessibilityTraits::None;
return;
}
if (string == "button") {
result = AccessibilityTraits::Button;
return;
}
if (string == "link") {
result = AccessibilityTraits::Link;
return;
}
if (string == "image") {
result = AccessibilityTraits::Image;
return;
}
if (string == "selected") {
result = AccessibilityTraits::Selected;
return;
}
if (string == "plays") {
result = AccessibilityTraits::PlaysSound;
return;
}
if (string == "keyboardkey") {
result = AccessibilityTraits::KeyboardKey;
return;
}
if (string == "text") {
result = AccessibilityTraits::StaticText;
return;
}
if (string == "disabled") {
result = AccessibilityTraits::NotEnabled;
return;
}
if (string == "frequentUpdates") {
result = AccessibilityTraits::UpdatesFrequently;
return;
}
if (string == "search") {
result = AccessibilityTraits::SearchField;
return;
}
if (string == "startsMedia") {
result = AccessibilityTraits::StartsMediaSession;
return;
}
if (string == "adjustable") {
result = AccessibilityTraits::Adjustable;
return;
}
if (string == "allowsDirectInteraction") {
result = AccessibilityTraits::DirectInteraction;
return;
}
if (string == "pageTurn") {
result = AccessibilityTraits::CausesPageTurn;
return;
}
if (string == "header") {
result = AccessibilityTraits::Header;
return;
}
abort();
}
inline void fromDynamic(
const folly::dynamic &value,
AccessibilityTraits &result) {
if (value.isString()) {
fromString(value.asString(), result);
return;
}
if (value.isArray()) {
result = {};
for (auto &item : value) {
auto string = item.asString();
AccessibilityTraits itemAccessibilityTraits;
fromString(value.asString(), itemAccessibilityTraits);
result = result | itemAccessibilityTraits;
}
}
abort();
}
} // namespace react
} // namespace facebook

View File

@ -1,24 +0,0 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include "accessibilityValuesConversions.h"
#include <folly/Conv.h>
namespace facebook {
namespace react {
AccessibilityTraits accessibilityTraitsFromDynamic(
const folly::dynamic &value) {
assert(value.isString());
// FIXME: Not clear yet.
abort();
}
} // namespace react
} // namespace facebook

View File

@ -1,19 +0,0 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <fabric/components/view/AccessibilityPrimitives.h>
#include <folly/dynamic.h>
namespace facebook {
namespace react {
AccessibilityTraits accessibilityTraitsFromDynamic(const folly::dynamic &value);
} // namespace react
} // namespace facebook