#ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_ANDROID_H_
#define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_ANDROID_H_
#include <stddef.h>
#include <stdint.h>
#include <optional>
#include <string>
#include <vector>
#include "base/android/scoped_java_ref.h"
#include "content/common/content_export.h"
#include "ui/accessibility/accessibility_features.h"
#include "ui/accessibility/ax_node.h"
#include "ui/accessibility/platform/ax_platform_node.h"
#include "ui/accessibility/platform/browser_accessibility.h"
namespace content {
struct AXStyleData;
class CONTENT_EXPORT BrowserAccessibilityAndroid
: public ui::BrowserAccessibility {
public:
static BrowserAccessibilityAndroid* GetFromUniqueId(int32_t unique_id);
static void ResetLeafCache();
BrowserAccessibilityAndroid(const BrowserAccessibilityAndroid&) = delete;
BrowserAccessibilityAndroid& operator=(const BrowserAccessibilityAndroid&) =
delete;
~BrowserAccessibilityAndroid() override;
using BrowserAccessibility::GetUniqueId;
bool CanFireEvents() const override;
void OnDataChanged() override;
void OnLocationChanged() override;
std::u16string GetLocalizedStringForImageAnnotationStatus(
ax::mojom::ImageAnnotationStatus status) const override;
bool IsAndroidTextView() const;
bool IsCheckable() const;
bool IsChecked() const;
bool IsClickable() const override;
bool IsCollapsed() const;
bool IsCollection() const;
bool IsCollectionItem() const;
bool IsContentInvalid() const;
bool IsDisabledDescendant() const;
bool IsEnabled() const;
bool IsEditable() const;
bool IsExpanded() const;
bool IsFocusable() const override;
bool IsFormDescendant() const;
bool IsHeading() const;
bool IsHierarchical() const;
bool IsMultiLine() const;
bool IsMultiselectable() const;
bool IsRangeControlWithoutAriaValueText() const;
bool IsReportingCheckable() const;
bool IsRequired() const;
bool IsScrollable() const;
bool IsSeekControl() const;
bool IsSelected() const;
bool IsSlider() const;
bool IsSubscript() const;
bool IsSuperscript() const;
bool IsTableHeader() const;
bool IsVisibleToUser() const;
bool ShouldUsePaneTitle() const;
bool IsInterestingOnAndroid() const;
BrowserAccessibilityAndroid* GetHeadingLinkOrLinkHeading() const;
const BrowserAccessibilityAndroid* GetSoleInterestingNodeFromSubtree() const;
bool AreInlineTextBoxesLoaded() const;
int ClickableScore() const;
int ExpandedState() const;
bool CanOpenPopup() const;
bool HasAriaCurrent() const;
bool HasNonEmptyValue() const;
bool HasCharacterLocations() const;
bool HasImage() const;
bool HasLayoutBasedActions() const;
const char* GetClassName() const;
bool IsChildOfLeaf() const override;
bool IsLeaf() const override;
bool IsLeafConsideringChildren() const;
std::u16string GetBrailleLabel() const;
std::u16string GetBrailleRoleDescription() const;
std::u16string GetTextContentUTF16() const override;
std::u16string GetValueForControl() const override;
int GetTextContentLengthUTF16() const override;
std::u16string GetAccessibleNameUTF16() const;
typedef base::RepeatingCallback<bool(const std::u16string& partial)>
EarlyExitPredicate;
std::u16string GetSubstringTextContentUTF16(
std::optional<size_t> min_length,
AXStyleData* style_data = nullptr) const;
static EarlyExitPredicate NonEmptyPredicate();
static EarlyExitPredicate LengthAtLeast(size_t length);
std::u16string GetHint() const;
std::u16string GetTooltipText() const;
std::string GetRoleString() const;
std::u16string GetPaneTitle() const;
std::u16string GetContentInvalidErrorMessage() const;
std::u16string GetStateDescription() const;
std::u16string GetContainerTitle() const;
std::u16string GetContentDescription() const;
std::u16string GetSupplementalDescription() const;
std::u16string GetMultiselectableStateDescription() const;
std::u16string GetToggleStateDescription() const;
std::u16string GetCheckboxStateDescription() const;
std::u16string GetAriaCurrentStateDescription() const;
std::u16string GetRadioButtonStateDescription() const;
std::u16string GetComboboxExpandedText() const;
std::u16string GetComboboxExpandedTextFallback() const;
std::u16string GetRoleDescription() const;
std::string GetCSSDisplay() const;
float GetTextSize() const;
int GetTextStyle() const;
int GetTextPosition() const;
int GetTextColor() const;
int GetTextBackgroundColor() const;
std::string GetFontFamily() const;
int GetItemIndex() const;
int GetItemCount() const;
int GetSelectedItemCount() const;
int GetSelectionMode() const;
bool CanScrollForward() const;
bool CanScrollBackward() const;
bool CanScrollUp() const;
bool CanScrollDown() const;
bool CanScrollLeft() const;
bool CanScrollRight() const;
int GetScrollX() const;
int GetScrollY() const;
int GetMinScrollX() const;
int GetMinScrollY() const;
int GetMaxScrollX() const;
int GetMaxScrollY() const;
bool Scroll(int direction, bool is_page_scroll) const;
int GetChecked() const;
int GetTextChangeFromIndex() const;
int GetTextChangeAddedCount() const;
int GetTextChangeRemovedCount() const;
std::u16string GetTextChangeBeforeText() const;
int GetSelectionStart() const;
int GetSelectionEnd() const;
int GetEditableTextLength() const;
int AndroidInputType() const;
int AndroidLiveRegionType() const;
int AndroidRangeType() const;
int RowCount() const;
int ColumnCount() const;
int RowIndex() const;
int RowSpan() const;
int ColumnIndex() const;
int ColumnSpan() const;
float RangeMin() const;
float RangeMax() const;
float RangeCurrentValue() const;
void GetGranularityBoundaries(int granularity,
std::vector<int32_t>* starts,
std::vector<int32_t>* ends,
int offset);
enum class AndroidNameTo {
kUnset = 0,
kContainerTitle,
kContentDescription,
kLabeledBy,
kSupplementalDescription,
kText,
};
void GetLineBoundaries(std::vector<int32_t>* line_starts,
std::vector<int32_t>* line_ends,
int offset);
void GetWordBoundaries(std::vector<int32_t>* word_starts,
std::vector<int32_t>* word_ends,
int offset);
std::u16string GetTargetUrl() const;
void GetSuggestions(std::vector<int>* suggestion_starts,
std::vector<int>* suggestion_ends) const;
std::u16string GenerateAccessibilityNodeInfoString() const;
int GetPaintOrder() const;
const std::vector<int> GetLabelledByAndroidIds() const;
protected:
BrowserAccessibilityAndroid(ui::BrowserAccessibilityManager* manager,
ui::AXNode* node);
std::u16string GetLocalizedString(int message_id) const override;
friend class BrowserAccessibility;
private:
static size_t CommonPrefixLength(const std::u16string& a,
const std::u16string& b);
static size_t CommonSuffixLength(const std::u16string& a,
const std::u16string& b);
static size_t CommonEndLengths(const std::u16string& a,
const std::u16string& b);
BrowserAccessibility* PlatformGetLowestPlatformAncestor() const override;
bool HasOnlyTextChildren() const;
bool HasOnlyTextAndImageChildren() const;
bool HasListMarkerChild() const;
bool ShouldExposeValueAsName(const std::u16string& value) const;
int CountChildrenWithRole(ax::mojom::Role role) const;
void AppendTextToString(std::u16string extra_text,
std::u16string* string) const;
bool HasSelectActionVerb() const;
bool HasSelectActionVerbChildren() const;
void AccumulateSubstringTextContentUTF16(std::u16string* accumulated_text,
std::optional<size_t> min_length,
AXStyleData* style_data) const;
bool ShouldExposeEditableValue() const;
AndroidNameTo ComputeAndroidNameTo() const;
std::u16string old_value_;
std::u16string new_value_;
mutable std::optional<AndroidNameTo> name_to_cache_;
};
}
#endif