Talkback问题汇总
Talkback问题汇总
- 导航页面
- 界面与读屏内容不一致
- 移除引导页面
导航页面
界面与读屏内容不一致
- 现象:界面显示在page2,tts输出内容为page1+page2,返回上一页现象雷同
- 修改
- talkback-master\compositor\src\main\res\raw\compositor.json
"TYPE_VIEW_FOCUSED": {//modify>>>//"ttsOutput": "%event_description","ttsOutput": "","ttsAddToHistory": true,// From FallbackFormatter// TODO: Delete porting comments."earcon": {"if": "$event.sourceIsNull","then": "@raw/focus_actionable"},"haptic": {"if": "$event.sourceIsNull","then": "@array/view_focused_or_selected_pattern"}
},
由于json是全局配置文件,修改有风险,继而java中做判断条件修改
- talkback-master\compositor\src\main\java\com\google\android\accessibility\compositor\Compositor.java
private void handleEvent(int event,@Nullable EventId eventId,ParseTree.VariableDelegate delegate,HandleEventOptions options) {...// custom for training >>>CharSequence ttsOutput ="";if (eventObject!= null) {Log.i(TAG, "handleEvent: " + eventObject.toString());}if (eventObject!= null&& eventObject.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED&& "com.android.talkback".equals(eventObject.getPackageName())){ttsOutput ="";}else {ttsOutput = mParseTree.parseEventToString(event, OUTPUT_TTS_OUTPUT, delegate);}CharSequence ttsOutput = mParseTree.parseEventToString(event, OUTPUT_TTS_OUTPUT, delegate);Log.i(TAG, "handleEvent: ttsOutput="+ttsOutput);...}
- talkback-master\talkback\src\main\java\com\google\android\accessibility\talkback\eventprocessor\ProcessorScreen.java
此处修改可以避免title重复读
@Override
protected boolean allowAnnounce(AccessibilityEvent event) {// If the user performs a cursor control(copy, paste, start selection mode, etc) in the// talkback context menu and lands back to the edit text, a TYPE_WINDOWS_CHANGED and a// TYPE_WINDOW_STATE_CHANGED events will be fired. We should skip these two events to// avoid announcing the window title.boolean allowAnnounce = true;if (event.getEventType() == AccessibilityEvent.TYPE_WINDOWS_CHANGED&& EventState.getInstance().checkAndClearRecentFlag(EventState.EVENT_SKIP_WINDOWS_CHANGED_PROCESSING_AFTER_CURSOR_CONTROL)) {allowAnnounce = false;}if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED&& EventState.getInstance().checkAndClearRecentFlag(EventState.EVENT_SKIP_WINDOW_STATE_CHANGED_PROCESSING_AFTER_CURSOR_CONTROL)) {allowAnnounce = false;}Log.i(TAG, "allowAnnounce: "+allowAnnounce);//modify>>>>>if (WindowUtils.rootChildMatchesResId(service, TrainingActivity.ROOT_RES_ID)){Log.i(TAG, "allowAnnounce: is TrainingActivity>>>");allowAnnounce = false;}return allowAnnounce;
}
- talkback-master\talkback\src\main\java\com\google\android\accessibility\talkback\training\TrainingFragment.java
修改后辅助功能的焦点框会直接选中界面外布局而非内部子布局
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {final View view = inflater.inflate(R.layout.training_fragment_name, container, false);pageLayout = view.findViewById(R.id.training_page);@Nullable PageId pageId = (PageId) getArguments().get(EXTRA_PAGE);if (pageId == null) {LogUtils.e(TAG, "Cannot create view because no page ID.");return view;}page = PageConfig.getPage(pageId);if (page == null) {LogUtils.e(TAG, "Cannot create view because unknown PageId. [%s]", pageId.name());return view;}addView(inflater, container);//modify>>>>>//pageLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_AUTO);pageLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);if (FeatureSupport.isWatch(getContext())) {// Support rotary input.view.requestFocus();}return view;}
- talkback-master\talkback\src\main\java\com\google\android\accessibility\talkback\utils\DiagnosticOverlayControllerImpl.java
以上修改后在返回上一页时会出现辅助功能的焦点框丢失,继而添加以下修改
/*** Receives and appends Feedback object to log controller. Feedback objects are filtered for swipe* gestures.*/public void appendLog(Feedback feedback) {Feedback.@Nullable Part failover =(feedback.failovers() == null || feedback.failovers().size() < 1? null: feedback.failovers().get(0));if (failover == null) {return;}// Filter for FOCUS and FOCUS DIRECTION actions,// which mark beg/end of swipe gesture + associated focusif (failover.focus() == null&& failover.focusDirection() == null&& failover.scroll() == null) {return;}/** Check to make sure eventID isn't null before checking for gestures */if (!this.enabled|| feedback.eventId() == null|| highlightOverlay == null|| diagnosticOverlay == null) {return;}/*** Clear/recycle traversed/unfocused nodes when window changes/scrolls to new screen because* usually {@link FocusProcessorForLogicalNavigation} tells when clear/recycle, but with new* screen change/scroll, we must call {@link* DiagnosticOverlayControllerImpl#clearAndRecycleCollectionNodes} from here*/if (feedback.eventId().getEventSubtype() == AccessibilityEvent.TYPE_WINDOWS_CHANGED|| feedback.eventId().getEventSubtype() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED|| failover.scroll() != null) {Log.i(TAG, "appendLog: >>>>>>>>>>>>>>>>>>>>>>");//modify>>>>>需要添加判断条件//clearAndRecycleCollectionNodes(/* recycleFocusedNode= */ false);//highlightOverlay.clearHighlight();}
移除引导页面
找到对应的显示界面数组后跟踪,修改:
talkback-master\talkback\src\main\java\com\google\android\accessibility\talkback\TalkBackService.java
@Override
protected void onServiceConnected() {LogUtils.v(TAG, "System bound to service.");...//modify>>>>if (false && !FeatureSupport.isTv(getApplicationContext())&& !FeatureSupport.isWatch(getApplicationContext())) {OnboardingInitiator.showOnboarding91IfNecessary(this);}...
}
Talkback问题汇总相关推荐
- android 获取点击屏幕视图,Android如何在显示RelativeLayout时获取talkBack读...
我有一个活动,它使用以下代码为整个活动的视图添加自定义视图 activity.getWindow().getDecorView()).addView(newView) 为了显示教练标记/使用标记的屏幕 ...
- 最常见NLP任务练手项目汇总
分词 Word Segmentation chqiwang/convseg ,基于CNN做中文分词,提供数据和代码. 词预测 Word Prediction Kyubyong/word_predict ...
- 用python下载文件的若干种方法汇总
压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...
- 命名实体识别训练集汇总(一直更新)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/leitouguan8655/artic ...
- LeetCode简单题之汇总区间
题目 给定一个 无重复元素 的 有序 整数数组 nums . 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 .也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范 ...
- 2021年全网最详细大数据常见端口汇总❤️【建议收藏】❤️
目录 大数据常见端口汇总 一.Hadoop 二.Zookeeper 三.Hbase 四.Hive 五.Spark 六.Kafka 七.Flink 八.Flume 九.Redis 十.CDH 十一.HU ...
- 2021年大数据环境命令(一):常用命令汇总
2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 汇总Hadoop Hi ...
- 经纬度绘图_【知识科普】地形图图例汇总,测绘人识图绘图必备(含dwg版下载)...
地形图(topographic map)指的是地表起伏形态和地理位置.形状在水平面上的投影图.具体来讲,将地面上的地物和地貌按水平投影的方法(沿铅垂线方向投影到水平面上),并按一定的比例尺缩绘到图纸上 ...
- Pandas 基础 (4)—— 汇总和计算描述统计
Pandas 对象拥有一组常用的数学和统计方法,他们大部分都属于约简和汇总统计,用于从 Series 中提取单个值(如 sum/mean),或者从 DataFrame 的行或列中提取一个 Series ...
最新文章
- Android Dialog 关闭的时候标题栏闪烁一下的处理方法
- Linux下DB2数据库安装教程
- 十六款值得关注的NoSQL与NewSQL数据库--转载
- 产品经理不得不知的APP数据分析及报表设计基础
- js下拉 selenium_selenium的下拉选择框
- 不同用户同时并发测压_教你 7 招,迅速提高服务器并发能力!
- gRPC的平滑关闭和在Kubernetes上的服务摘流方案总结
- java编码转换报错_Java中BeanUtils的日期转换 代码报错 怎么解决
- 一步一步学VBScript(4)之WSH对象三
- C++面试题:内存的分配方式有几种?
- 【渝粤教育】广东开放大学 环境与资源保护法 形成性考核 (56)
- java重载静态方法_java – 使用静态和非静态方法重载的方法
- 创建应答文件——无人值守安装XP/2003
- 【数据分享】全国POI数据分享(持续更新中)
- ecshop模板构建说明
- Mybatis查询之list作为参数查询
- 合同在项目管理中的优势
- 基于ffmpeg的音频转换器-rtp承载的amr转换为pcm音频流
- 南开介教授好嘛是“段子手”
- 5G NTN进展简述