mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-15 06:15:43 +00:00
Bug 818341 - Encapsulate presentation in the presentation module. r=davidb
Making it ready for use outside of the EventManager.
This commit is contained in:
parent
09378bb145
commit
b7be18150c
@ -152,6 +152,9 @@ this.AccessFu = {
|
||||
case 'AccessFu:Present':
|
||||
try {
|
||||
for each (let presenter in aMessage.json) {
|
||||
if (!presenter)
|
||||
continue;
|
||||
|
||||
Output[presenter.type](presenter.details, aMessage.target);
|
||||
}
|
||||
} catch (x) {
|
||||
|
@ -8,7 +8,7 @@ var Cu = Components.utils;
|
||||
var Cr = Components.results;
|
||||
|
||||
Cu.import('resource://gre/modules/accessibility/Utils.jsm');
|
||||
Cu.import('resource://gre/modules/accessibility/Presenters.jsm');
|
||||
Cu.import('resource://gre/modules/accessibility/Presentation.jsm');
|
||||
Cu.import('resource://gre/modules/accessibility/TraversalRules.jsm');
|
||||
Cu.import('resource://gre/modules/Services.jsm');
|
||||
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
||||
@ -22,26 +22,15 @@ this.EventManager = {
|
||||
try {
|
||||
if (!this._started) {
|
||||
this.sendMsgFunc = aSendMsgFunc || function() {};
|
||||
this.presenters = [new VisualPresenter()];
|
||||
|
||||
if (Utils.MozBuildApp == 'b2g') {
|
||||
this.presenters.push(new SpeechPresenter());
|
||||
this.presenters.push(new HapticPresenter());
|
||||
} else if (Utils.MozBuildApp == 'mobile/android') {
|
||||
this.presenters.push(new AndroidPresenter());
|
||||
}
|
||||
|
||||
Logger.info('EventManager.start', Utils.MozBuildApp, [p.type for each(p in this.presenters)].join(', '));
|
||||
Logger.info('EventManager.start', Utils.MozBuildApp);
|
||||
|
||||
this._started = true;
|
||||
Services.obs.addObserver(this, 'accessible-event', false);
|
||||
}
|
||||
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.tabStateChanged(null, 'newtab');
|
||||
}
|
||||
);
|
||||
this.present(Presentation.tabStateChanged(null, 'newtab'));
|
||||
|
||||
} catch (x) {
|
||||
Logger.error('Failed to start EventManager');
|
||||
Logger.logException(x);
|
||||
@ -50,7 +39,6 @@ this.EventManager = {
|
||||
|
||||
stop: function stop() {
|
||||
Services.obs.removeObserver(this, 'accessible-event');
|
||||
this.presenters = [];
|
||||
this._started = false;
|
||||
},
|
||||
|
||||
@ -69,11 +57,7 @@ this.EventManager = {
|
||||
if (state & Ci.nsIAccessibleStates.STATE_CHECKABLE)
|
||||
return;
|
||||
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.actionInvoked(activatedAcc, 'click');
|
||||
}
|
||||
);
|
||||
this.present(Presentation.actionInvoked(activatedAcc, 'click'));
|
||||
break;
|
||||
}
|
||||
case 'scroll':
|
||||
@ -87,11 +71,7 @@ this.EventManager = {
|
||||
window = aEvent.target.defaultView;
|
||||
else if (aEvent.target instanceof Ci.nsIDOMElement)
|
||||
window = aEvent.target.ownerDocument.defaultView;
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.viewportChanged(window);
|
||||
}
|
||||
);
|
||||
this.present(Presentation.viewportChanged(window));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -131,18 +111,14 @@ this.EventManager = {
|
||||
break;
|
||||
let event = aEvent.
|
||||
QueryInterface(Ci.nsIAccessibleVirtualCursorChangeEvent);
|
||||
let presenterContext =
|
||||
new PresenterContext(position, event.oldAccessible);
|
||||
let reason = event.reason;
|
||||
|
||||
if (this.editState.editing)
|
||||
aEvent.accessibleDocument.takeFocus();
|
||||
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.pivotChanged(presenterContext, reason);
|
||||
}
|
||||
);
|
||||
Presentation.pivotChanged(position, event.oldAccessible, reason));
|
||||
|
||||
break;
|
||||
}
|
||||
case Ci.nsIAccessibleEvent.EVENT_STATE_CHANGE:
|
||||
@ -151,11 +127,9 @@ this.EventManager = {
|
||||
if (event.state == Ci.nsIAccessibleStates.STATE_CHECKED &&
|
||||
!(event.isExtraState())) {
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.actionInvoked(aEvent.accessible,
|
||||
event.isEnabled() ? 'check' : 'uncheck');
|
||||
}
|
||||
);
|
||||
Presentation.
|
||||
actionInvoked(aEvent.accessible,
|
||||
event.isEnabled() ? 'check' : 'uncheck'));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -187,11 +161,7 @@ this.EventManager = {
|
||||
break;
|
||||
|
||||
if (editState.editing != this.editState.editing)
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.editingModeChanged(editState.editing);
|
||||
}
|
||||
);
|
||||
this.present(Presentation.editingModeChanged(editState.editing));
|
||||
|
||||
if (editState.editing != this.editState.editing ||
|
||||
editState.multiline != this.editState.multiline ||
|
||||
@ -221,12 +191,9 @@ this.EventManager = {
|
||||
if (txtIface.characterCount)
|
||||
throw x;
|
||||
}
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.textChanged(isInserted, event.start, event.length,
|
||||
text, event.modifiedText);
|
||||
}
|
||||
);
|
||||
this.present(Presentation, textChanged(
|
||||
isInserted, event.start, event.length,
|
||||
text, event.modifiedText));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -245,26 +212,13 @@ this.EventManager = {
|
||||
}
|
||||
},
|
||||
|
||||
present: function present(aPresenterFunc) {
|
||||
try {
|
||||
this.sendMsgFunc(
|
||||
"AccessFu:Present",
|
||||
[aPresenterFunc(p) for each (p in this.presenters)].
|
||||
filter(function(d) {return !!d;}));
|
||||
} catch (x) {
|
||||
Logger.logException(x);
|
||||
}
|
||||
present: function present(aPresentationData) {
|
||||
this.sendMsgFunc("AccessFu:Present", aPresentationData);
|
||||
},
|
||||
|
||||
presentVirtualCursorPosition: function presentVirtualCursorPosition(aVirtualCursor) {
|
||||
let presenterContext =
|
||||
new PresenterContext(aVirtualCursor.position, null);
|
||||
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.pivotChanged(presenterContext, Ci.nsIAccessiblePivot.REASON_NONE);
|
||||
}
|
||||
);
|
||||
this.present(Presentation.pivotChanged(aVirtualCursor.position, null,
|
||||
Ci.nsIAccessiblePivot.REASON_NONE));
|
||||
},
|
||||
|
||||
onStateChange: function onStateChange(aWebProgress, aRequest, aStateFlags, aStatus) {
|
||||
@ -284,11 +238,7 @@ this.EventManager = {
|
||||
|
||||
if (tabstate) {
|
||||
let docAcc = Utils.AccRetrieval.getAccessibleFor(aWebProgress.DOMWindow.document);
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.tabStateChanged(docAcc, tabstate);
|
||||
}
|
||||
);
|
||||
this.present(Presentation.tabStateChanged(docAcc, tabstate));
|
||||
}
|
||||
},
|
||||
|
||||
@ -296,11 +246,7 @@ this.EventManager = {
|
||||
|
||||
onLocationChange: function onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
let docAcc = Utils.AccRetrieval.getAccessibleFor(aWebProgress.DOMWindow.document);
|
||||
this.present(
|
||||
function(p) {
|
||||
return p.tabStateChanged(docAcc, 'newdoc');
|
||||
}
|
||||
);
|
||||
this.present(Presentation.tabStateChanged(docAcc, 'newdoc'));
|
||||
},
|
||||
|
||||
onStatusChange: function onStatusChange() {},
|
||||
|
@ -16,7 +16,7 @@ ACCESSFU_FILES := \
|
||||
EventManager.jsm \
|
||||
jar.mn \
|
||||
Makefile.in \
|
||||
Presenters.jsm \
|
||||
Presentation.jsm \
|
||||
TouchAdapter.jsm \
|
||||
TraversalRules.jsm \
|
||||
Utils.jsm \
|
||||
|
@ -13,12 +13,7 @@ Cu.import('resource://gre/modules/accessibility/Utils.jsm');
|
||||
Cu.import('resource://gre/modules/accessibility/UtteranceGenerator.jsm');
|
||||
Cu.import('resource://gre/modules/Geometry.jsm');
|
||||
|
||||
this.EXPORTED_SYMBOLS = ['VisualPresenter',
|
||||
'AndroidPresenter',
|
||||
'DummyAndroidPresenter',
|
||||
'SpeechPresenter',
|
||||
'HapticPresenter',
|
||||
'PresenterContext'];
|
||||
this.EXPORTED_SYMBOLS = ['Presentation'];
|
||||
|
||||
/**
|
||||
* The interface for all presenter classes. A presenter could be, for example,
|
||||
@ -504,3 +499,56 @@ PresenterContext.prototype = {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.Presentation = {
|
||||
get presenters() {
|
||||
delete this.presenters;
|
||||
this.presenters = [new VisualPresenter()];
|
||||
|
||||
if (Utils.MozBuildApp == 'b2g') {
|
||||
this.presenters.push(new SpeechPresenter());
|
||||
this.presenters.push(new HapticPresenter());
|
||||
} else if (Utils.MozBuildApp == 'mobile/android') {
|
||||
this.presenters.push(new AndroidPresenter());
|
||||
}
|
||||
|
||||
return this.presenters;
|
||||
},
|
||||
|
||||
pivotChanged: function Presentation_pivotChanged(aPosition,
|
||||
aOldPosition,
|
||||
aReason) {
|
||||
let context = new PresenterContext(aPosition, aOldPosition);
|
||||
return [p.pivotChanged(context, aReason)
|
||||
for each (p in this.presenters)];
|
||||
},
|
||||
|
||||
actionInvoked: function Presentation_actionInvoked(aObject, aActionName) {
|
||||
return [p.actionInvoked(aObject, aActionName)
|
||||
for each (p in this.presenters)];
|
||||
},
|
||||
|
||||
textChanged: function Presentation_textChanged(aIsInserted, aStartOffset,
|
||||
aLength, aText,
|
||||
aModifiedText) {
|
||||
return [p.textChanged(aIsInserted, aStartOffset, aLength,
|
||||
aText, aModifiedText)
|
||||
for each (p in this.presenters)];
|
||||
},
|
||||
|
||||
tabStateChanged: function Presentation_tabStateChanged(aDocObj, aPageState) {
|
||||
return [p.tabStateChanged(aDocObj, aPageState)
|
||||
for each (p in this.presenters)];
|
||||
},
|
||||
|
||||
viewportChanged: function Presentation_viewportChanged(aWindow) {
|
||||
return [p.viewportChanged(aWindow)
|
||||
for each (p in this.presenters)];
|
||||
},
|
||||
|
||||
editingModeChanged: function Presentation_editingModeChanged(aIsEditing) {
|
||||
return [p.editingModeChanged(aIsEditing)
|
||||
for each (p in this.presenters)];
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue
Block a user