项目职责:
根据交互和视觉优化部分页面,优化搜索页/可编辑对话框软键盘弹出收起逻辑,优化文件刷新与监听时机(重命名后刷新,返回页面时刷新,不监听CREATE与ATTRIB),优化文件打开逻辑(如能解码缩略图直接调用相册)。
调整布局并添加滚动条和按压效果,增加列表折叠展开功能,对最近页数据重新分组以合并同一日期的同一应用文件。
优化文件搜索:从媒体库中搜索,处理媒体文件的移动删除,继续搜索,添加最近搜索和分类或应用下搜索。添加数据埋点。
使用公共控件,适配多语言、深色主题、横竖屏、虚拟导航栏、折叠、分屏、OTG设备。
修改bug,包括原生文件管理bug,整理冗余代码,修复无响应(搜索界面不做排序,快捷访问无响应×2,进入编辑状态再滑到最底部后再点击快捷访问)。
清理加速中手机存储的容量显示优化为快速对应类型,获取并展示系统和应用大小两项数据及调整布局。
技术要点:
OTG设备拔出后,刷新并退出OTG目录。接收浏览U盘的Intent。USB页面单独作为一个类。只监听U盘路径。
重写重命名、压缩和新建文件夹对话框数据保存和恢复逻辑。配置更改时恢复标题和界面、浮窗位置、对话框的提示文字和按钮状态、选择状态和选择项、搜索推荐项、搜索状态等,使用ViewModel。
向下移动并增加数据实现列表展开,删除并向上移动实现列表折叠。更改刷新后的折叠状态恢复逻辑。
优化最近页数据更新:查询类型大小由单独模块处理,避免对最近页频繁更新。
性能优化:过度绘制。自定义省略号TextView,自定义条形图、环形图及动画展示。
搜索流程解析
文件管理的搜索功能主要位于搜索页,即SearchActivity
。搜索页主要分为搜索框RySearchView
和搜索结果列表,本章节具体阐述从搜索框输入文字到将搜索结果返回的整个过程。
- 搜索框
RySearchView
会交由搜索工具类SearchViewManager
来统一管理,由工具类统一管理是为了处理输入异常或输入频繁等情况。
public void install(RySearchView searchView, boolean isFullBarSearch) {
mSearchView = searchView;
mSearchView.setOnQueryTextListener(this);
...
}
在install
方法中,会对RySearchView
设置输入框输入的监听,即setOnQueryTextListener(OnQueryTextListener listener)
方法。SearchViewManager
实现了RySearchView.OnQueryTextListener
接口,当往搜索框输入字符时,接口的onQueryTextChange(String newText)
方法就会被回调。在onQueryTextChange
方法中,重复请求会直接返回,其他请求会先取消队列中的搜索请求,再新建一个搜索任务,通过发送SEARCH_MESSAGE
消息,将任务放进消息队列。任务会将实际工作转入主线程,最终将字符通过mListener.onSearchChanged(mCurrentSearch)
方法给回搜索页。
@Override
public void onQueryTextChange(String newText) {
if (newText.equals(mCurrentSearch)) {
return;
}
Message message = Message.obtain(mHandler, SEARCH_MESSAGE);
message.obj = newText;
mHandler.removeMessages(SEARCH_MESSAGE);
mHandler.sendMessageDelayed(message,300);
}
public void initHandler(){
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == SEARCH_MESSAGE