下面列出了android.view.View#AccessibilityDelegate ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void cleanup() {
for (final Map.Entry<View, TrackingAccessibilityDelegate> entry :
mWatching.entrySet()) {
final View v = entry.getKey();
final TrackingAccessibilityDelegate toCleanup = entry.getValue();
final View.AccessibilityDelegate currentViewDelegate = getOldDelegate(v);
if (currentViewDelegate == toCleanup) {
v.setAccessibilityDelegate(toCleanup.getRealDelegate());
} else if (currentViewDelegate instanceof TrackingAccessibilityDelegate) {
final TrackingAccessibilityDelegate newChain =
(TrackingAccessibilityDelegate) currentViewDelegate;
newChain.removeFromDelegateChain(toCleanup);
} else {
// Assume we've been replaced, zeroed out, or for some other reason we're
// already gone.
// (This isn't too weird, for example, it's expected when views get recycled)
}
}
mWatching.clear();
}
@Override
public void accumulate(View found) {
final View.AccessibilityDelegate realDelegate = getOldDelegate(found);
if (realDelegate instanceof TrackingAccessibilityDelegate) {
final TrackingAccessibilityDelegate currentTracker =
(TrackingAccessibilityDelegate) realDelegate;
if (currentTracker.willFireEvent(UIHelper.textPropertyFromView(found),
getEventName())) {
return; // Don't double track
}
}
// We aren't already in the tracking call chain of the view
final TrackingAccessibilityDelegate newDelegate =
new TrackingAccessibilityDelegate(realDelegate);
found.setAccessibilityDelegate(newDelegate);
mWatching.put(found, newDelegate);
}
@Override
public void setAccessibilityDelegate(View.AccessibilityDelegate accessibilityDelegate) {
super.setAccessibilityDelegate(accessibilityDelegate);
// We cannot compare against mComponentAccessibilityDelegate directly, since it is not the
// delegate that we receive here. Instead, we'll set this to true at the point that we set that
// delegate explicitly.
mIsComponentAccessibilityDelegateSet = false;
}
public TrackingAccessibilityDelegate(View.AccessibilityDelegate realDelegate) {
mRealDelegate = realDelegate;
}
public View.AccessibilityDelegate getRealDelegate() {
return mRealDelegate;
}
public static Void accessibilityDelegate(View.AccessibilityDelegate arg) {
return BaseDSL.attr("accessibilityDelegate", arg);
}