зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1501496 - Don't send accessible GeckoBundle in sendEvent, class names is enough. r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D9689 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
8e91e2c50c
Коммит
72450b73d0
|
@ -118,7 +118,7 @@ AccessibleWrap::HandleAccEvent(AccEvent* aEvent)
|
|||
AccStateChangeEvent* event = downcast_accEvent(aEvent);
|
||||
auto state = event->GetState();
|
||||
if (state & states::CHECKED) {
|
||||
sessionAcc->SendClickedEvent(accessible);
|
||||
sessionAcc->SendClickedEvent(accessible, event->IsStateEnabled());
|
||||
}
|
||||
|
||||
if (state & states::SELECTED) {
|
||||
|
@ -373,7 +373,7 @@ AccessibleWrap::WrapperRangeInfo(double* aCurVal, double* aMinVal,
|
|||
}
|
||||
|
||||
mozilla::java::GeckoBundle::LocalRef
|
||||
AccessibleWrap::ToBundle(bool aMinimal)
|
||||
AccessibleWrap::ToBundle()
|
||||
{
|
||||
if (!IsProxy() && IsDefunct()) {
|
||||
return nullptr;
|
||||
|
@ -406,11 +406,6 @@ AccessibleWrap::ToBundle(bool aMinimal)
|
|||
}
|
||||
GECKOBUNDLE_PUT(nodeInfo, "text", jni::StringParam(text));
|
||||
|
||||
if (aMinimal) {
|
||||
GECKOBUNDLE_FINISH(nodeInfo);
|
||||
return nodeInfo;
|
||||
}
|
||||
|
||||
nsAutoString geckoRole;
|
||||
nsAutoString roleDescription;
|
||||
if (VirtualViewID() != kNoID) {
|
||||
|
|
|
@ -31,7 +31,7 @@ public:
|
|||
|
||||
virtual bool GetSelectionBounds(int32_t* aStartOffset, int32_t* aEndOffset);
|
||||
|
||||
mozilla::java::GeckoBundle::LocalRef ToBundle(bool aMinimal = false);
|
||||
mozilla::java::GeckoBundle::LocalRef ToBundle();
|
||||
|
||||
int32_t AndroidClass()
|
||||
{
|
||||
|
|
|
@ -85,7 +85,7 @@ a11y::ProxyStateChangeEvent(ProxyAccessible* aTarget,
|
|||
}
|
||||
|
||||
if (aState & states::CHECKED) {
|
||||
sessionAcc->SendClickedEvent(WrapperFor(aTarget));
|
||||
sessionAcc->SendClickedEvent(WrapperFor(aTarget), aEnabled);
|
||||
}
|
||||
|
||||
if (aState & states::SELECTED) {
|
||||
|
|
|
@ -151,7 +151,7 @@ SessionAccessibility::SendAccessibilityFocusedEvent(AccessibleWrap* aAccessible)
|
|||
{
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_VIEW_ACCESSIBILITY_FOCUSED,
|
||||
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
|
||||
aAccessible->ScrollTo(nsIAccessibleScrollType::SCROLL_TYPE_ANYWHERE);
|
||||
}
|
||||
|
||||
|
@ -160,7 +160,7 @@ SessionAccessibility::SendHoverEnterEvent(AccessibleWrap* aAccessible)
|
|||
{
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_VIEW_HOVER_ENTER,
|
||||
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -174,7 +174,7 @@ SessionAccessibility::SendFocusEvent(AccessibleWrap* aAccessible)
|
|||
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_VIEW_FOCUSED,
|
||||
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -199,8 +199,8 @@ SessionAccessibility::SendScrollingEvent(AccessibleWrap* aAccessible,
|
|||
GECKOBUNDLE_FINISH(eventInfo);
|
||||
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_VIEW_SCROLLED, virtualViewId, eventInfo,
|
||||
aAccessible->ToBundle(true));
|
||||
java::sdk::AccessibilityEvent::TYPE_VIEW_SCROLLED, virtualViewId,
|
||||
aAccessible->AndroidClass(), eventInfo);
|
||||
|
||||
SendWindowContentChangedEvent(aAccessible);
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ SessionAccessibility::SendWindowContentChangedEvent(AccessibleWrap* aAccessible)
|
|||
{
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_WINDOW_CONTENT_CHANGED,
|
||||
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -224,7 +224,7 @@ SessionAccessibility::SendWindowStateChangedEvent(AccessibleWrap* aAccessible)
|
|||
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_WINDOW_STATE_CHANGED,
|
||||
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -245,7 +245,7 @@ SessionAccessibility::SendTextSelectionChangedEvent(AccessibleWrap* aAccessible,
|
|||
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_VIEW_TEXT_SELECTION_CHANGED,
|
||||
aAccessible->VirtualViewID(), eventInfo, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), eventInfo);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -279,7 +279,7 @@ SessionAccessibility::SendTextChangedEvent(AccessibleWrap* aAccessible,
|
|||
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_VIEW_TEXT_CHANGED,
|
||||
aAccessible->VirtualViewID(), eventInfo, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), eventInfo);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -299,15 +299,20 @@ SessionAccessibility::SendTextTraversedEvent(AccessibleWrap* aAccessible,
|
|||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::
|
||||
TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
|
||||
aAccessible->VirtualViewID(), eventInfo, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), eventInfo);
|
||||
}
|
||||
|
||||
void
|
||||
SessionAccessibility::SendClickedEvent(AccessibleWrap* aAccessible)
|
||||
SessionAccessibility::SendClickedEvent(AccessibleWrap* aAccessible, bool aChecked)
|
||||
{
|
||||
GECKOBUNDLE_START(eventInfo);
|
||||
// Boolean::FALSE/TRUE gets clobbered by a macro, so ugh.
|
||||
GECKOBUNDLE_PUT(eventInfo, "checked", java::sdk::Integer::ValueOf(aChecked ? 1 : 0));
|
||||
GECKOBUNDLE_FINISH(eventInfo);
|
||||
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_VIEW_CLICKED,
|
||||
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), eventInfo);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -315,5 +320,5 @@ SessionAccessibility::SendSelectedEvent(AccessibleWrap* aAccessible)
|
|||
{
|
||||
mSessionAccessibility->SendEvent(
|
||||
java::sdk::AccessibilityEvent::TYPE_VIEW_SELECTED,
|
||||
aAccessible->VirtualViewID(), nullptr, aAccessible->ToBundle(true));
|
||||
aAccessible->VirtualViewID(), aAccessible->AndroidClass(), nullptr);
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@ public:
|
|||
bool aIsInsert,
|
||||
bool aFromUser);
|
||||
void SendSelectedEvent(AccessibleWrap* aAccessible);
|
||||
void SendClickedEvent(AccessibleWrap* aAccessible);
|
||||
void SendClickedEvent(AccessibleWrap* aAccessible, bool aChecked);
|
||||
void SendWindowContentChangedEvent(AccessibleWrap* aAccessible);
|
||||
void SendWindowStateChangedEvent(AccessibleWrap* aAccessible);
|
||||
|
||||
|
|
|
@ -129,14 +129,14 @@ public class SessionAccessibility {
|
|||
switch (action) {
|
||||
case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS:
|
||||
if (virtualViewId == View.NO_ID) {
|
||||
sendEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED, View.NO_ID, null, null);
|
||||
sendEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED, View.NO_ID, CLASSNAME_WEBVIEW, null);
|
||||
} else {
|
||||
final GeckoBundle nodeInfo = nativeProvider.getNodeInfo(virtualViewId);
|
||||
final int flags = nodeInfo != null ? nodeInfo.getInt("flags") : 0;
|
||||
if ((flags & FLAG_FOCUSED) != 0) {
|
||||
mSession.getEventDispatcher().dispatch("GeckoView:AccessibilityCursorToFocused", null);
|
||||
} else {
|
||||
sendEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED, virtualViewId, null, nodeInfo);
|
||||
sendEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED, virtualViewId, nodeInfo.getInt("className"), null);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -145,7 +145,7 @@ public class SessionAccessibility {
|
|||
GeckoBundle nodeInfo = nativeProvider.getNodeInfo(virtualViewId);
|
||||
final int flags = nodeInfo != null ? nodeInfo.getInt("flags") : 0;
|
||||
if ((flags & (FLAG_SELECTABLE | FLAG_CHECKABLE)) == 0) {
|
||||
sendEvent(AccessibilityEvent.TYPE_VIEW_CLICKED, virtualViewId, null, nodeInfo);
|
||||
sendEvent(AccessibilityEvent.TYPE_VIEW_CLICKED, virtualViewId, nodeInfo.getInt("className"), null);
|
||||
}
|
||||
return true;
|
||||
case AccessibilityNodeInfo.ACTION_LONG_CLICK:
|
||||
|
@ -569,7 +569,7 @@ public class SessionAccessibility {
|
|||
return true;
|
||||
}
|
||||
|
||||
/* package */ void sendEvent(final int eventType, final int sourceId, final GeckoBundle eventData, final GeckoBundle sourceInfo) {
|
||||
/* package */ void sendEvent(final int eventType, final int sourceId, final int className, final GeckoBundle eventData) {
|
||||
ThreadUtils.assertOnUiThread();
|
||||
if (mView == null) {
|
||||
return;
|
||||
|
@ -588,15 +588,9 @@ public class SessionAccessibility {
|
|||
final AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
|
||||
event.setPackageName(GeckoAppShell.getApplicationContext().getPackageName());
|
||||
event.setSource(mView, sourceId);
|
||||
event.setClassName(getClassName(className));
|
||||
event.setEnabled(true);
|
||||
|
||||
if (sourceInfo != null) {
|
||||
final int flags = sourceInfo.getInt("flags");
|
||||
event.setClassName(getClassName(sourceInfo.getInt("className")));
|
||||
event.setChecked((flags & FLAG_CHECKED) != 0);
|
||||
event.getText().add(sourceInfo.getString("text", ""));
|
||||
}
|
||||
|
||||
if (eventData != null) {
|
||||
if (eventData.containsKey("text")) {
|
||||
event.getText().add(eventData.getString("text"));
|
||||
|
@ -613,6 +607,7 @@ public class SessionAccessibility {
|
|||
event.setScrollY(eventData.getInt("scrollY", -1));
|
||||
event.setMaxScrollX(eventData.getInt("maxScrollX", -1));
|
||||
event.setMaxScrollY(eventData.getInt("maxScrollY", -1));
|
||||
event.setChecked(eventData.getInt("checked") != 0);
|
||||
}
|
||||
|
||||
((ViewParent) mView).requestSendAccessibilityEvent(mView, event);
|
||||
|
@ -637,11 +632,11 @@ public class SessionAccessibility {
|
|||
public native void setText(int id, String text);
|
||||
|
||||
@WrapForJNI(calledFrom = "gecko", stubName = "SendEvent")
|
||||
private void sendEventNative(final int eventType, final int sourceId, final GeckoBundle eventData, final GeckoBundle sourceInfo) {
|
||||
private void sendEventNative(final int eventType, final int sourceId, final int className, final GeckoBundle eventData) {
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
sendEvent(eventType, sourceId, eventData, sourceInfo);
|
||||
sendEvent(eventType, sourceId, className, eventData);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче