зеркало из https://github.com/mozilla/gecko-dev.git
Bug 752935 - Decouple Android a11y checking, prepare for ICS on-the-fly a11y toggle events. r=davidb, r=kats
This commit is contained in:
Родитель
06cdf685b9
Коммит
75e9772da6
|
@ -48,8 +48,7 @@ var AccessFu = {
|
|||
} catch (x) {
|
||||
}
|
||||
|
||||
if (this.amINeeded(accessPref))
|
||||
this.enable();
|
||||
this.processPreferences(accessPref);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -57,6 +56,10 @@ var AccessFu = {
|
|||
* with arrow keys.
|
||||
*/
|
||||
enable: function enable() {
|
||||
if (this._enabled)
|
||||
return;
|
||||
this._enabled = true;
|
||||
|
||||
dump('AccessFu enable');
|
||||
this.addPresenter(new VisualPresenter());
|
||||
|
||||
|
@ -77,6 +80,10 @@ var AccessFu = {
|
|||
* Disable AccessFu and return to default interaction mode.
|
||||
*/
|
||||
disable: function disable() {
|
||||
if (!this._enabled)
|
||||
return;
|
||||
this._enabled = false;
|
||||
|
||||
dump('AccessFu disable');
|
||||
|
||||
this.presenters.forEach(function(p) { p.detach(); });
|
||||
|
@ -91,26 +98,29 @@ var AccessFu = {
|
|||
this.chromeWin.removeEventListener('TabOpen', this, true);
|
||||
},
|
||||
|
||||
amINeeded: function(aPref) {
|
||||
switch (aPref) {
|
||||
case ACCESSFU_ENABLE:
|
||||
return true;
|
||||
case ACCESSFU_AUTO:
|
||||
if (Services.appinfo.OS == 'Android') {
|
||||
let msg = Cc['@mozilla.org/android/bridge;1'].
|
||||
getService(Ci.nsIAndroidBridge).handleGeckoMessage(
|
||||
JSON.stringify(
|
||||
{ gecko: {
|
||||
type: 'Accessibility:IsEnabled',
|
||||
eventType: 1,
|
||||
text: []
|
||||
}
|
||||
}));
|
||||
return JSON.parse(msg).enabled;
|
||||
processPreferences: function processPreferences(aPref) {
|
||||
if (Services.appinfo.OS == 'Android') {
|
||||
if (aPref == ACCESSFU_AUTO) {
|
||||
if (!this._observingSystemSettings) {
|
||||
Services.obs.addObserver(this, 'Accessibility:Settings', false);
|
||||
this._observingSystemSettings = true;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
Cc['@mozilla.org/android/bridge;1'].
|
||||
getService(Ci.nsIAndroidBridge).handleGeckoMessage(
|
||||
JSON.stringify({ gecko: { type: 'Accessibility:Ready' } }));
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._observingSystemSettings) {
|
||||
Services.obs.removeObserver(this, 'Accessibility:Settings');
|
||||
this._observingSystemSettings = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (aPref == ACCESSFU_ENABLE)
|
||||
this.enable();
|
||||
else
|
||||
this.disable();
|
||||
},
|
||||
|
||||
addPresenter: function addPresenter(presenter) {
|
||||
|
@ -159,13 +169,15 @@ var AccessFu = {
|
|||
|
||||
observe: function observe(aSubject, aTopic, aData) {
|
||||
switch (aTopic) {
|
||||
case 'Accessibility:Settings':
|
||||
if (JSON.parse(aData).enabled)
|
||||
this.enable();
|
||||
else
|
||||
this.disable();
|
||||
break;
|
||||
case 'nsPref:changed':
|
||||
if (aData == 'accessfu') {
|
||||
if (this.amINeeded(this.prefsBranch.getIntPref('accessfu')))
|
||||
this.enable();
|
||||
else
|
||||
this.disable();
|
||||
}
|
||||
if (aData == 'accessfu')
|
||||
this.processPreferences(this.prefsBranch.getIntPref('accessfu'));
|
||||
break;
|
||||
case 'accessible-event':
|
||||
let event;
|
||||
|
@ -392,7 +404,13 @@ var AccessFu = {
|
|||
},
|
||||
|
||||
// A hash of documents that don't yet have an accessible tree.
|
||||
_pendingDocuments: {}
|
||||
_pendingDocuments: {},
|
||||
|
||||
// So we don't enable/disable twice
|
||||
_enabled: false,
|
||||
|
||||
// Observing accessibility settings
|
||||
_observingSystemSettings: false
|
||||
};
|
||||
|
||||
function getAccessible(aNode) {
|
||||
|
|
|
@ -1063,6 +1063,23 @@ abstract public class GeckoApp
|
|||
accessibilityManager.sendAccessibilityEvent(accEvent);
|
||||
}
|
||||
});
|
||||
} else if (event.equals("Accessibility:Ready")) {
|
||||
mMainHandler.post(new Runnable() {
|
||||
public void run() {
|
||||
JSONObject ret = new JSONObject();
|
||||
AccessibilityManager accessibilityManager =
|
||||
(AccessibilityManager) mAppContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
|
||||
try {
|
||||
ret.put("enabled", accessibilityManager.isEnabled());
|
||||
// XXX: A placeholder for future explore by touch support.
|
||||
ret.put("exploreByTouch", false);
|
||||
} catch (Exception ex) {
|
||||
Log.e(LOGTAG, "Error building JSON arguments for Accessibility:Ready:", ex);
|
||||
}
|
||||
GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("Accessibility:Settings",
|
||||
ret.toString()));
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(LOGTAG, "Exception handling message \"" + event + "\":", e);
|
||||
|
@ -1695,6 +1712,7 @@ abstract public class GeckoApp
|
|||
GeckoAppShell.registerGeckoEventListener("Session:StatePurged", GeckoApp.mAppContext);
|
||||
GeckoAppShell.registerGeckoEventListener("Bookmark:Insert", GeckoApp.mAppContext);
|
||||
GeckoAppShell.registerGeckoEventListener("Accessibility:Event", GeckoApp.mAppContext);
|
||||
GeckoAppShell.registerGeckoEventListener("Accessibility:Ready", GeckoApp.mAppContext);
|
||||
|
||||
if (SmsManager.getInstance() != null) {
|
||||
SmsManager.getInstance().start();
|
||||
|
@ -2039,6 +2057,8 @@ abstract public class GeckoApp
|
|||
GeckoAppShell.unregisterGeckoEventListener("Tab:HasTouchListener", GeckoApp.mAppContext);
|
||||
GeckoAppShell.unregisterGeckoEventListener("Session:StatePurged", GeckoApp.mAppContext);
|
||||
GeckoAppShell.unregisterGeckoEventListener("Bookmark:Insert", GeckoApp.mAppContext);
|
||||
GeckoAppShell.unregisterGeckoEventListener("Accessibility:Event", GeckoApp.mAppContext);
|
||||
GeckoAppShell.unregisterGeckoEventListener("Accessibility:Ready", GeckoApp.mAppContext);
|
||||
|
||||
if (mFavicons != null)
|
||||
mFavicons.close();
|
||||
|
|
|
@ -73,7 +73,6 @@ import android.webkit.MimeTypeMap;
|
|||
import android.media.MediaScannerConnection;
|
||||
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
|
||||
import android.provider.Settings;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.opengl.GLES20;
|
||||
|
||||
import android.util.*;
|
||||
|
@ -1844,16 +1843,6 @@ public class GeckoAppShell
|
|||
return promptServiceResult;
|
||||
}
|
||||
|
||||
if (type.equals("Accessibility:IsEnabled")) {
|
||||
JSONObject ret = new JSONObject();
|
||||
AccessibilityManager accessibilityManager =
|
||||
(AccessibilityManager) GeckoApp.mAppContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
|
||||
try {
|
||||
ret.put("enabled", accessibilityManager.isEnabled());
|
||||
} catch (Exception ex) { }
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
CopyOnWriteArrayList<GeckoEventListener> listeners;
|
||||
synchronized (mEventListeners) {
|
||||
listeners = mEventListeners.get(type);
|
||||
|
|
Загрузка…
Ссылка в новой задаче